diff --git a/providers/google/google.go b/providers/google/google.go index 34995bc11958838354f13c03daa2ea8b783afd53..947a8f63e782a0157a47f036687085dcb5c6c577 100644 --- a/providers/google/google.go +++ b/providers/google/google.go @@ -25,16 +25,20 @@ type provider struct { options options } +// ToolCallIDFunc defines a function that generates a tool call ID. +type ToolCallIDFunc = func() string + type options struct { - apiKey string - name string - baseURL string - headers map[string]string - client *http.Client - backend genai.Backend - project string - location string - skipAuth bool + apiKey string + name string + baseURL string + headers map[string]string + client *http.Client + backend genai.Backend + project string + location string + skipAuth bool + generateID ToolCallIDFunc } // Option defines a function that configures Google provider options. @@ -44,6 +48,9 @@ type Option = func(*options) func New(opts ...Option) (fantasy.Provider, error) { options := options{ headers: map[string]string{}, + generateID: func() string { + return uuid.NewString() + }, } for _, o := range opts { o(&options) @@ -114,6 +121,14 @@ func WithHTTPClient(client *http.Client) Option { } } +// WithToolCallIDFunc sets the function that generates a tool call ID. +// WithToolCallIDFunc sets the function that generates a tool call ID. +func WithToolCallIDFunc(f ToolCallIDFunc) Option { + return func(o *options) { + o.generateID = f + } +} + func (*provider) Name() string { return Name } @@ -350,6 +365,9 @@ func toGooglePrompt(prompt fantasy.Prompt) (*genai.Content, []*genai.Content, [] } case fantasy.MessageRoleAssistant: var parts []*genai.Part + // INFO: (kujtim) this is kind of a hacky way to include thinking for google + // weirdly thinking needs to be included in a function call + var signature []byte for _, part := range msg.Content { switch part.GetType() { case fantasy.ContentTypeText: @@ -377,7 +395,27 @@ func toGooglePrompt(prompt fantasy.Prompt) (*genai.Content, []*genai.Content, [] Name: toolCall.ToolName, Args: result, }, + ThoughtSignature: signature, }) + // reset + signature = nil + case fantasy.ContentTypeReasoning: + reasoning, ok := fantasy.AsMessagePart[fantasy.ReasoningPart](part) + if !ok { + continue + } + metadata, ok := reasoning.ProviderOptions[Name] + if !ok { + continue + } + reasoningMetadata, ok := metadata.(*ReasoningMetadata) + if !ok { + continue + } + if !ok || reasoningMetadata.Signature == "" { + continue + } + signature = []byte(reasoningMetadata.Signature) } } if len(parts) > 0 { @@ -476,7 +514,7 @@ func (g *languageModel) Generate(ctx context.Context, call fantasy.Call) (*fanta return nil, err } - return mapResponse(response, warnings) + return g.mapResponse(response, warnings) } // Model implements fantasy.LanguageModel. @@ -523,7 +561,7 @@ func (g *languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy. var blockCounter int var currentTextBlockID string var currentReasoningBlockID string - var usage fantasy.Usage + var usage *fantasy.Usage var lastFinishReason fantasy.FinishReason for resp, err := range chat.SendMessageStream(ctx, depointerSlice(lastMessage.Parts)...) { @@ -579,9 +617,15 @@ func (g *languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy. // End any active reasoning block before starting text if isActiveReasoning { isActiveReasoning = false + metadata := &ReasoningMetadata{ + Signature: string(part.ThoughtSignature), + } if !yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeReasoningEnd, ID: currentReasoningBlockID, + ProviderMetadata: fantasy.ProviderMetadata{ + Name: metadata, + }, }) { return } @@ -623,15 +667,22 @@ func (g *languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy. } if isActiveReasoning { isActiveReasoning = false + + metadata := &ReasoningMetadata{ + Signature: string(part.ThoughtSignature), + } if !yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeReasoningEnd, ID: currentReasoningBlockID, + ProviderMetadata: fantasy.ProviderMetadata{ + Name: metadata, + }, }) { return } } - toolCallID := cmp.Or(part.FunctionCall.ID, part.FunctionCall.Name, uuid.NewString()) + toolCallID := cmp.Or(part.FunctionCall.ID, g.providerOptions.generateID()) args, err := json.Marshal(part.FunctionCall.Args) if err != nil { @@ -686,7 +737,15 @@ func (g *languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy. } if resp.UsageMetadata != nil { - usage = mapUsage(resp.UsageMetadata) + currentUsage := mapUsage(resp.UsageMetadata) + // if first usage chunk + if usage == nil { + usage = ¤tUsage + } else { + usage.OutputTokens += currentUsage.OutputTokens + usage.ReasoningTokens += currentUsage.ReasoningTokens + usage.CacheReadTokens += currentUsage.CacheReadTokens + } } if len(resp.Candidates) > 0 && resp.Candidates[0].FinishReason != "" { @@ -721,7 +780,7 @@ func (g *languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy. yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeFinish, - Usage: usage, + Usage: *usage, FinishReason: finishReason, }) }, nil @@ -873,7 +932,7 @@ func mapJSONTypeToGoogle(jsonType string) genai.Type { } } -func mapResponse(response *genai.GenerateContentResponse, warnings []fantasy.CallWarning) (*fantasy.Response, error) { +func (g languageModel) mapResponse(response *genai.GenerateContentResponse, warnings []fantasy.CallWarning) (*fantasy.Response, error) { if len(response.Candidates) == 0 || response.Candidates[0].Content == nil { return nil, errors.New("no response from model") } @@ -889,7 +948,10 @@ func mapResponse(response *genai.GenerateContentResponse, warnings []fantasy.Cal switch { case part.Text != "": if part.Thought { - content = append(content, fantasy.ReasoningContent{Text: part.Text}) + metadata := &ReasoningMetadata{ + Signature: string(part.ThoughtSignature), + } + content = append(content, fantasy.ReasoningContent{Text: part.Text, ProviderMetadata: fantasy.ProviderMetadata{Name: metadata}}) } else { content = append(content, fantasy.TextContent{Text: part.Text}) } @@ -898,7 +960,7 @@ func mapResponse(response *genai.GenerateContentResponse, warnings []fantasy.Cal if err != nil { return nil, err } - toolCallID := cmp.Or(part.FunctionCall.ID, part.FunctionCall.Name, uuid.NewString()) + toolCallID := cmp.Or(part.FunctionCall.ID, g.providerOptions.generateID()) content = append(content, fantasy.ToolCallContent{ ToolCallID: toolCallID, ToolName: part.FunctionCall.Name, @@ -951,11 +1013,11 @@ func mapFinishReason(reason genai.FinishReason) fantasy.FinishReason { func mapUsage(usage *genai.GenerateContentResponseUsageMetadata) fantasy.Usage { return fantasy.Usage{ - InputTokens: int64(usage.ToolUsePromptTokenCount), + InputTokens: int64(usage.PromptTokenCount), OutputTokens: int64(usage.CandidatesTokenCount), TotalTokens: int64(usage.TotalTokenCount), ReasoningTokens: int64(usage.ThoughtsTokenCount), - CacheCreationTokens: int64(usage.CachedContentTokenCount), - CacheReadTokens: 0, + CacheCreationTokens: 0, + CacheReadTokens: int64(usage.CachedContentTokenCount), } } diff --git a/providers/google/provider_options.go b/providers/google/provider_options.go index 4c645eeff255abec27cfe7d3a3aa128472fc81e7..c86ecffa998abd29d781fe763d85df25815a8afa 100644 --- a/providers/google/provider_options.go +++ b/providers/google/provider_options.go @@ -9,6 +9,14 @@ type ThinkingConfig struct { IncludeThoughts *bool `json:"include_thoughts"` } +// ReasoningMetadata represents reasoning metadata for the Google provider. +type ReasoningMetadata struct { + Signature string `json:"signature"` +} + +// Options implements the ProviderOptionsData interface for ReasoningMetadata. +func (m *ReasoningMetadata) Options() {} + // SafetySetting represents safety settings for the Google provider. type SafetySetting struct { // 'HARM_CATEGORY_UNSPECIFIED', diff --git a/providertests/google_test.go b/providertests/google_test.go index c978c824ec72a29f6147d0204cb1796668cef07f..f20aef8cb7625c4c4bc149d2fb7b4b611b2370ed 100644 --- a/providertests/google_test.go +++ b/providertests/google_test.go @@ -2,6 +2,7 @@ package providertests import ( "cmp" + "fmt" "net/http" "os" "testing" @@ -69,11 +70,20 @@ func testGoogleThinking(t *testing.T, result *fantasy.AgentResult) { require.Greater(t, reasoningContentCount, 0) } +func generateIDMock() google.ToolCallIDFunc { + id := 0 + return func() string { + id++ + return fmt.Sprintf("%d", id) + } +} + func geminiBuilder(model string) builderFunc { return func(t *testing.T, r *recorder.Recorder) (fantasy.LanguageModel, error) { provider, err := google.New( google.WithGeminiAPIKey(cmp.Or(os.Getenv("FANTASY_GEMINI_API_KEY"), "(missing)")), google.WithHTTPClient(&http.Client{Transport: r}), + google.WithToolCallIDFunc(generateIDMock()), ) if err != nil { return nil, err @@ -88,6 +98,7 @@ func vertexBuilder(model string) builderFunc { google.WithVertex(os.Getenv("FANTASY_VERTEX_PROJECT"), os.Getenv("FANTASY_VERTEX_LOCATION")), google.WithHTTPClient(&http.Client{Transport: r}), google.WithSkipAuth(!r.IsRecording()), + google.WithToolCallIDFunc(generateIDMock()), ) if err != nil { return nil, err diff --git a/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/multi_tool.yaml b/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/multi_tool.yaml index a8b82ac42b7cda3d00d343b7a4fb645bf802e28a..b385a1e79a4226670764da9732202439f2712bcc 100644 --- a/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/multi_tool.yaml +++ b/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/multi_tool.yaml @@ -14,7 +14,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent method: POST response: @@ -37,14 +37,14 @@ interactions: "b": 3 } }, - "thoughtSignature": "Cr4BAdHtim9LvttVUIQ0QpEtexErSfMWokWFxdJCGfdh4M6N0YBwqI+kBhIbVJOwQonI1GmBaw8lfUzjvYYW2ScSRvYAUJoBWMRuLzcaafC/2FnOcLPR9hyaC9499fBWocLFbnCRO/0bzA+Z4uAS81EL/zTqCsZuO5OS5KwvLe9OIbPXrMc65pKhED6D80UaJe9+9OfeIKsTf53yxXUk7elFlA//EukpULLiadHrHKMVFu9FKnHwFBQ+BsY9lALcSg==" + "thoughtSignature": "CrwBAdHtim/FP8KqTMIQ2DVD+5BAiIXjN0k+ERNVFbVGtenSKcR/G6MtoIcIE/2nxX2ysKRnwClCPnq5+/KJSzS8uFjvU0577RF+LrP7bRIXSNoufBoAJV0aKusqd1DtXQBZif76FBAMtgiG42NALcM0+Jxs2JaKOhFof+1GhNOi8Zbnj+S/YYkU34CvqANixzHQCFkLpFpHbOmsqfYaiMol4juPFMVOJg2w1WZMS/0mE36gP5C8i8p3B0njO9E=" }, { "functionCall": { "name": "multiply", "args": { - "a": 2, - "b": 3 + "b": 3, + "a": 2 } } } @@ -52,44 +52,45 @@ interactions: "role": "model" }, "finishReason": "STOP", - "index": 0 + "index": 0, + "finishMessage": "Model generated function call(s)." } ], "usageMetadata": { "promptTokenCount": 125, "candidatesTokenCount": 36, - "totalTokenCount": 200, + "totalTokenCount": 201, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 125 } ], - "thoughtsTokenCount": 39 + "thoughtsTokenCount": 40 }, "modelVersion": "gemini-2.5-flash", - "responseId": "53LWaN-ZF8_l7M8Pt4CxmQE" + "responseId": "WtH5aJy3I4K0nsEPiZnbmQs" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 1.153815667s + duration: 1.046624584s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1173 + content_length: 1155 host: generativelanguage.googleapis.com body: | - {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"add","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"multiply","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"add","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"multiply","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"1","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"2","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"2","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} headers: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent method: POST response: @@ -126,11 +127,11 @@ interactions: ] }, "modelVersion": "gemini-2.5-flash", - "responseId": "53LWaPLjL-Li7M8P1p-bsAs" + "responseId": "W9H5aO2FIdbj7M8Pjvyl8QI" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 401.486666ms + duration: 1.09843275s diff --git a/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/multi_tool_streaming.yaml b/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/multi_tool_streaming.yaml index 5a620faed2700c52c14f8fca20afaf7dcc9fbbf0..2772d90a3387d0a07a3452c9f07b3917a67028b1 100644 --- a/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/multi_tool_streaming.yaml +++ b/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/multi_tool_streaming.yaml @@ -17,7 +17,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse method: POST response: @@ -25,22 +25,22 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"add\",\"args\": {\"b\": 3,\"a\": 2}},\"thoughtSignature\": \"CikB0e2Kb3lvvSL0It28ryFF9z5njRrxz3nsWrllFnR383RdO+Nvx+O+jAptAdHtim90asVCH4fPJo0zzAM1LahZnmnG89/nkCa+cp1fnFR9gNoREBnHD+AeskNrSR799cQqjqA9e/fU82a1LDE59kURBuczfm0udTUlIHvry3e8sg4ST4P3T1HxxDl7fdjSs6U0OYGcu4J1TgpnAdHtim8/SPXWy3ZQd+BX+TdRCZ+dmdpkztv5mNK8x6m8pkAIeVPJOQq2xOq1R4kXryxbzcjeEgW60lBKOaHz8sVUMkuHC03Y0WnuNr29ObdqmLCQdSFRvpLljGIXoYQU4egHik5IiQ==\"},{\"functionCall\": {\"name\": \"multiply\",\"args\": {\"b\": 3,\"a\": 2}}}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 121,\"candidatesTokenCount\": 36,\"totalTokenCount\": 195,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 121}],\"thoughtsTokenCount\": 38},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"6HLWaOOUB8W1nsEP0aLTmQs\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"add\",\"args\": {\"a\": 2,\"b\": 3}},\"thoughtSignature\": \"CiQB0e2Kb02QlBJ2I5/zDqv1c0AUEV+Ct+vGYwdFdWC3cx3yIuUKXQHR7Ypv3ZUytEmQlCdJhzrfshB8YFIoW134jv3AuUL8L16mz3cXjEvhr8tAFeSEScUollNyBu/e3OFraKdblEfpDXY2UASkOMhrezbveAaD4bxTeBmXbcJNqLFeTwp/AdHtim8YarufF4O5TXWRjFYgnIppzlQcQfTEyqqmA8J3gLjGgyROG7/2MSw/0EakJKFOXuFth2Sdskl1sLjsD7lOvAxbmzDHITcg9l39JrSaXcHN405OLs1bfgIhKdi8m/wq+MXPL72IOuO6YjuBjud9qruxF3/THtP+netVeA==\"},{\"functionCall\": {\"name\": \"multiply\",\"args\": {\"b\": 3,\"a\": 2}}}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0,\"finishMessage\": \"Model generated function call(s).\"}],\"usageMetadata\": {\"promptTokenCount\": 121,\"candidatesTokenCount\": 36,\"totalTokenCount\": 196,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 121}],\"thoughtsTokenCount\": 39},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"XNH5aLSAF8GznsEP9sXIsAs\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 798.333667ms + duration: 1.227179416s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1156 + content_length: 1138 host: generativelanguage.googleapis.com body: | - {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"add","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"multiply","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"add","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"multiply","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. Always use both add and multiply at the same time."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"1","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"2","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"2","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. Always use both add and multiply at the same time."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} form: alt: - sse @@ -48,7 +48,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse method: POST response: @@ -56,10 +56,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"The sum of\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 181,\"candidatesTokenCount\": 3,\"totalTokenCount\": 184,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 181}]},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"6HLWaNm2N6epnsEPos_v2QM\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" 2 and 3 is 5, and the product of 2 and\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 181,\"candidatesTokenCount\": 18,\"totalTokenCount\": 199,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 181}]},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"6HLWaNm2N6epnsEPos_v2QM\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" 3 is 6.\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 181,\"candidatesTokenCount\": 23,\"totalTokenCount\": 204,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 181}]},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"6HLWaNm2N6epnsEPos_v2QM\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"The sum of\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 181,\"candidatesTokenCount\": 3,\"totalTokenCount\": 184,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 181}]},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"XdH5aNS5Ha-4nsEPwLKM8Aw\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" 2 and 3 is 5 and the product of 2 and \"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 181,\"candidatesTokenCount\": 17,\"totalTokenCount\": 198,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 181}]},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"XdH5aNS5Ha-4nsEPwLKM8Aw\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"3 is 6.\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 181,\"candidatesTokenCount\": 22,\"totalTokenCount\": 203,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 181}]},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"XdH5aNS5Ha-4nsEPwLKM8Aw\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 310.455333ms + duration: 611.819916ms diff --git a/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/simple.yaml b/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/simple.yaml index c7e7c9cbb675cdd6ae77da30d4288cf56bbd2d77..e59819b93b4b9c967c23d30c2a5643443680515b 100644 --- a/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/simple.yaml +++ b/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/simple.yaml @@ -14,7 +14,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent method: POST response: @@ -30,7 +30,7 @@ interactions: "content": { "parts": [ { - "text": "Olá!\n\nIn Portuguese, \"hi\" or \"hello\" is **\"Olá\"**." + "text": "Olá!" } ], "role": "model" @@ -41,22 +41,22 @@ interactions: ], "usageMetadata": { "promptTokenCount": 11, - "candidatesTokenCount": 19, - "totalTokenCount": 54, + "candidatesTokenCount": 2, + "totalTokenCount": 51, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 11 } ], - "thoughtsTokenCount": 24 + "thoughtsTokenCount": 38 }, "modelVersion": "gemini-2.5-flash", - "responseId": "4nLWaKeCGN-ynsEPsYS_iAs" + "responseId": "VNH5aLz3OsyinsEP1JWGwAY" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 831.958458ms + duration: 1.251824334s diff --git a/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/simple_streaming.yaml b/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/simple_streaming.yaml index 6a0ac1f310f4b230d3a0906d011fc2d7ff33d967..5cddeaff04a9b4d23ea4e8f978a74eaa53797a88 100644 --- a/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/simple_streaming.yaml +++ b/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/simple_streaming.yaml @@ -17,7 +17,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse method: POST response: @@ -25,10 +25,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"Olá!\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 11,\"candidatesTokenCount\": 2,\"totalTokenCount\": 39,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 11}],\"thoughtsTokenCount\": 26},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"4nLWaP6OKvCDkdUP7Ze-gAc\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"Olá!\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 11,\"candidatesTokenCount\": 2,\"totalTokenCount\": 36,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 11}],\"thoughtsTokenCount\": 23},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"VtH5aOrPCKXe7M8PyIqmyAQ\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 423.699166ms + duration: 1.273950833s diff --git a/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/tool.yaml b/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/tool.yaml index 622aae39e79c59c221828a9bc62e1d3260b686ca..9eb93b76f2d3196b3c586c23ee87074c7509242a 100644 --- a/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/tool.yaml +++ b/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/tool.yaml @@ -14,7 +14,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent method: POST response: @@ -36,50 +36,51 @@ interactions: "location": "Florence,Italy" } }, - "thoughtSignature": "CoQCAdHtim/RXh2BurmfhDAIWuDZaECZhw96eMGy0JrHOvouNR43xVQZdtrsPVDRc9XlaGzzZMpiBeJ90773lWhO96qMygspNDBUXQLCnl73AjXpkroRFxcupqHe0xjcZq1WwTLqmq+1JOcdZ4EY9MQl2LkBccWIM38fZFW0bV76uuGAikuhRw8huaD7EjP/8819+E7WVVGKjmaYr2lchfYv36/1OJU4Y2cqwgO6aNTEyVBYmbs61vN4SaNhj+ogcJ6orbgNLiq0Q2nfLL2LPLBxW3MfefywSvaq147G6NmA6HCfno10SEBA5tmrNfmFMvfdOcppyRB8rfDU0QXcyDnJEhUNfrQ=" + "thoughtSignature": "Cq4CAdHtim/sCKoBA0iloUCbLJWtYGJ3Erj6sIXdg1uSnBCPSFzy/3AeL+OpNUxx+N1pYyE7i0pmxs4o2aws3AdQiEN3ATSeiIVjI9BSNXo32VsDtcGmKtB1Gd+p/3MJSh9BCfA1ob6StFyP6Fn7aUoXpPEzV0JN54wDGaBskFWVwXY3sSx7vNU4akaRYYATrg49z66uUqPN+j95C2d8dRYBJe7bJqYbLi4w96Wzl5gLpAURmMv/XlJrK33cf/69yTrxVmQ2nxIeP7ok710y5FIz1n3x1GmQ6ZsQsoJ6QfDLr3lmTFH0DP91MUYB0w28nJ/dMz61MYzOWPNsL1GgHce13+sQTfxLGli+7Tw9/aNXJkxlU9mBpRCdHrLJXLvT9dctSeQ0BzOrrmmFckp3sRs=" } ], "role": "model" }, "finishReason": "STOP", - "index": 0 + "index": 0, + "finishMessage": "Model generated function call(s)." } ], "usageMetadata": { "promptTokenCount": 54, "candidatesTokenCount": 15, - "totalTokenCount": 122, + "totalTokenCount": 134, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 54 } ], - "thoughtsTokenCount": 53 + "thoughtsTokenCount": 65 }, "modelVersion": "gemini-2.5-flash", - "responseId": "43LWaMOULuH6nsEP-JagUA" + "responseId": "V9H5aMaoC7b1kdUP5pDSgA0" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 926.95325ms + duration: 912.648167ms - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 734 + content_length: 722 host: generativelanguage.googleapis.com body: | - {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence,Italy"},"id":"weather","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"weather","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence,Italy"},"id":"1","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} headers: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent method: POST response: @@ -116,11 +117,11 @@ interactions: ] }, "modelVersion": "gemini-2.5-flash", - "responseId": "5HLWaP7VKJS9kdUP1JnEcA" + "responseId": "V9H5aPKVNI_i7M8P5667uQs" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 906.09475ms + duration: 754.80525ms diff --git a/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/tool_streaming.yaml b/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/tool_streaming.yaml index 44504fb103cf8d3273308dcb4cfb0aa1b28c9820..a65c1f974ec07e73a7446c7d921148eefa4f42e6 100644 --- a/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/tool_streaming.yaml +++ b/providertests/testdata/TestGoogleCommon/gemini-2.5-flash/tool_streaming.yaml @@ -17,7 +17,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse method: POST response: @@ -25,22 +25,22 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"weather\",\"args\": {\"location\": \"Florence,Italy\"}},\"thoughtSignature\": \"CiQB0e2Kb2nydtkPsPv5SBWwfdU4qx+TcPFwpZyuV8D6pFTSVcoKZwHR7Ypvj342RSIe13FWPJAwLK5jtwQ8vNB0R6Q/XEGomKaJZ+q+5cbb3zD4MA6RKHhRObxc19xlYF2o/5P/3z40n0bunAwVbFaBL3l157WWknCig6L+sxuE1lb9geTGs/rNi4GNJXgK3wEB0e2KbyPDgGodb0LeqS5p5nZ9/fYtRl65VHCvxzHINo3aSZB6Ge8cjhTUE+HWdVxa5Lj7k4Yu/yfzWX3fHxkSFLoJ1cZnbHo9YJ+BbwMtkhTKtgrguoWnUJUq1hEzZRB0vWfPbcy5C1Nr1ciVtFLj7mTnPg1AYaHXLTpnnA3jZkk+0AMjmo7VhMISvDy5UB4RLWp5xS7IRb+mapcLpF81KPFCqvaePBJg42sGp6WPc35IdAaCkGDGPnKc2PwojKBN9vFzdU7fFEUtYGadMzc9TytgDwWb9+ajZElJFmPp\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 54,\"candidatesTokenCount\": 15,\"totalTokenCount\": 131,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 54}],\"thoughtsTokenCount\": 62},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"5HLWaPDAOMnynsEP8_L8-Ak\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"weather\",\"args\": {\"location\": \"Florence,Italy\"}},\"thoughtSignature\": \"CiQB0e2Kb4Uih6wsHsNHzVaCTSiEknpHAWo/Y2LppuXX62WFVvUKZwHR7YpvRMLI00XBxIkYFBQFyI9ft9S4puwuHmzSg9EU5lBWOTz4eMOHwAJGuUtSUUHDyP98v//thr+orBjyHiPkOhHyz1VnXX8Q199T7OUKqZkn2MoLviyfPJjwbffGkHFzthi3JhcKsQEB0e2KbwshEcdvkAdQZoyVIItStPrgx+Y6rv+wbMppDrPoiVyqCukwhOZpYaL6NB+LyZ2Ob2sniLjn+ORdk19bdACI8+Vw0j11gvFFoF0jE1xXi6dGmGAoUw16huMW54zbXLzdt1eXBCx4cqw1SyMRk1bY6InQVpA5/zlI7fqBkBqhAXSwbd7uP4AegrPsQqIz+ld4xrlxDRf4tUGitkBzJ5D6pBl33DL0McFgonD9lNo=\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0,\"finishMessage\": \"Model generated function call(s).\"}],\"usageMetadata\": {\"promptTokenCount\": 54,\"candidatesTokenCount\": 15,\"totalTokenCount\": 120,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 54}],\"thoughtsTokenCount\": 51},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"WNH5aM-NJ4n5nsEP-uOMuAg\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 835.207542ms + duration: 965.071ms - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 734 + content_length: 722 host: generativelanguage.googleapis.com body: | - {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence,Italy"},"id":"weather","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"weather","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence,Italy"},"id":"1","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} form: alt: - sse @@ -48,7 +48,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse method: POST response: @@ -56,10 +56,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"The\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 84,\"candidatesTokenCount\": 1,\"totalTokenCount\": 85,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 84}]},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"5nLWaMntB43j7M8PnrON6AE\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" weather in Florence, Italy is 40 degrees Celsius.\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 84,\"candidatesTokenCount\": 13,\"totalTokenCount\": 97,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 84}]},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"5nLWaMntB43j7M8PnrON6AE\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"The weather in Florence\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 84,\"candidatesTokenCount\": 4,\"totalTokenCount\": 88,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 84}]},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"WdH5aJyLHaDNnsEPrYb6kAs\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \", Italy is 40 C.\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 84,\"candidatesTokenCount\": 12,\"totalTokenCount\": 96,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 84}]},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"WdH5aJyLHaDNnsEPrYb6kAs\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 615.482167ms + duration: 596.610958ms diff --git a/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/multi_tool.yaml b/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/multi_tool.yaml index fc2dc75339191ef3bd11c0f786cd23403d6f20de..2d9fcd375aa32712968fe6d90b4bb3c8f13738f3 100644 --- a/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/multi_tool.yaml +++ b/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/multi_tool.yaml @@ -14,7 +14,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent method: POST response: @@ -37,7 +37,7 @@ interactions: "b": 3 } }, - "thoughtSignature": "CuQFADAxMjPxsJR9toWWnUfIQFL4+a3a3TWJc2aElVgfba0XCZa46jIcj060TCXh0Mb3Lk67jSTZpDpBGoftUak55wpLE14yvA/zCS135HKExtymOMVOniuL4C2o2Uj6MmECZRfLk0ihCSap/oNyqcZijc+L1lvBh0UTH1FsfQgoTuRCpdkxfFYTX+TVgfwuct4QAoWsU+UuGr+Bh5MgVPyP4iVe6c3g8zrw0F2sm8jNXpwG3ymsZzZou2zZYl1s6yEXlTiQSqL6ZC+D862pT44cRaiG/gvCGRsluyW4/U0cwRmyGMEqmraUnTgwWhBp2UbcKwGjwn/UO9kUGMObS3j8YUaiGRlhv5HXxQpKEpVwmTawBgcdVjV7JI+W2Kn81dY4GtF2KMDqXuDvXyakh3GAjkXqtVGHU4oqOS/unBUGP9Skkmo3CX8Q1oaZO2uPBmF2XkQKVR1VcSRQ8t9eNXo7ps1LcPLw2vejhdxVl7GlWN+4Gq36R8EVroBF2EUhCAquPZi/F9wyw69ISGyc74uSpxldhgfXCrBc4ZBkX9mOrEeefTxZZRYUfFyhjhjCfXmkm1mZyDAJWsiVqEPjli9n7ze1Nfm6xpclH5s/sF7ehiaR7UzsyoIYDNdJEBj4Oel689uKX6BX0/RMPYy3x/7b8313MCTjRbng3F53nJ8X/86TZ6/oc3BREuZ/V1WMhmtvxoyhxkkkwqszFMEGvovN8WcBbhxOhJSxSsN1GX/Ml8s/B/j6ltWK9hTTzq2tjAXkr8IAExCFZKXI8t0YPnQPtFwthEhr/uHwfax2AevlH1coqdzsW8ji5KWFu5b9A97/plyTR3p9LZ0eQu5Axp7NPlXty1Ee+rHqHztKSGq4WAdLgJwrN12lAMMDl2D4xYEAqI5Kxp7rMQAmt3tEwUPpGHh9ppF5xhlkAVstu0a9KRiHCQOac0MM2fJhj8/IbwrExkkbdnBdlybN+s5NjJ43vftZ0q4=" + "thoughtSignature": "CsoFAdHtim+KBwj8VhhtWPwHBKgsH6dtIfSN4UcLG1h1wVl+dlvTMhaJM6YG/Kk6nkH9eFwqxegt0E36kNDU0Bpvqu9I8HBczBdrHD88KH0J1dfJFlmAOPrpNQo9wCsGFYPNcMxWd4daJem3NseOfDV+M5dsbhjGT8HQ+g8ZAe02xHjPnaogeq5ehnVDwK1iEqTkhZ01916zrjpqkCI0g4Shecz5CMLXO9KWGv4uGqTPPtw8qr+WEUdz86jVsmIfehGL3wZYvu87BoUfAdapQMJKhl+jHf1NUHGTIrXpx+4ytQuI966SvC36SRj5SgfMiFHYz6Whf/dtD6733w2DfOD1V8ks8yp/r8qNQkXjZHQUXypbEBnW/snrtbNuRRF+l0V1vz9FaKcHL5QhVwLDsH9H//hVmtFs+UA79DPSJL/kqtdhyAewQ15MOU4IpeoUhoofGSEaT7zmji5/Tr2RT3bTIW0o6itpcKKHft9+jYWkAzXO4JN97ceWwJbA/wRTF9DrqPERbUDxsAZdLfPjJRwm+Cg6sjtZA8sPhdlHKVJrnM6LnyAVr9jGtgjNRcJRa0M3IrP64JJ1JHp+6Cpdi/jU6JdJ0s/awYgDg5OpEX8STUSMjqOoWCVBOsLEFj0VzRpa3ABbidMYj/enEdZ4jCGAVGxrXLAYxWf5CO+DXN6flUMAPMcD+LkaMhdROa6+q9Oe0uCLOGL2DT2xZof2FWw0vks2DzkVHGr/QQVWNZQdhIEQinGrQBaqgfw3jtxnZs+LYWAD5s2Hev+2BY/MqPCw3/yxxTbU+FFoA44AkbfW6eKlCHvoXXVaijZ/+M0t4pAtEkqKzEnk5HVi7aXcSj2nNR4DvpHifDOQ7zOZBumDU6EHYnFT9nJh/GjvUUKK0daXTc9IPwfxyeIn/0hAExQlWIlErjHoHtk8UU9OwLcNIpy7bH+VYDaFxNkb" }, { "functionCall": { @@ -52,44 +52,45 @@ interactions: "role": "model" }, "finishReason": "STOP", - "index": 0 + "index": 0, + "finishMessage": "Model generated function call(s)." } ], "usageMetadata": { "promptTokenCount": 125, "candidatesTokenCount": 36, - "totalTokenCount": 359, + "totalTokenCount": 347, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 125 } ], - "thoughtsTokenCount": 198 + "thoughtsTokenCount": 186 }, "modelVersion": "gemini-2.5-pro", - "responseId": "B3PWaMOZIoq8kdUPytqTAQ" + "responseId": "hNH5aIqjLcjz7M8PsbmN8AI" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 4.136286208s + duration: 5.258761542s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1173 + content_length: 1155 host: generativelanguage.googleapis.com body: | - {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"add","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"multiply","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"add","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"multiply","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"1","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"2","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"2","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} headers: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent method: POST response: @@ -105,7 +106,7 @@ interactions: "content": { "parts": [ { - "text": "I have added and multiplied the numbers 2 and 3. The result of the addition is 5, and the result of the multiplication is 6.\n" + "text": "The sum is 5 and the product is 6.\n" } ], "role": "model" @@ -116,8 +117,8 @@ interactions: ], "usageMetadata": { "promptTokenCount": 185, - "candidatesTokenCount": 32, - "totalTokenCount": 217, + "candidatesTokenCount": 12, + "totalTokenCount": 197, "promptTokensDetails": [ { "modality": "TEXT", @@ -126,11 +127,11 @@ interactions: ] }, "modelVersion": "gemini-2.5-pro", - "responseId": "CXPWaK2IFtmAkdUP6o2M6As" + "responseId": "h9H5aKLELY7gnsEP56C2iAs" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 1.801805917s + duration: 3.176918083s diff --git a/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/multi_tool_streaming.yaml b/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/multi_tool_streaming.yaml index 69d75e91e3624b1443ef2591c62c49aacf6aa307..7daade49ef716dc5445f8b306ad94ba385da0f33 100644 --- a/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/multi_tool_streaming.yaml +++ b/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/multi_tool_streaming.yaml @@ -17,7 +17,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:streamGenerateContent?alt=sse method: POST response: @@ -25,22 +25,22 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"add\",\"args\": {\"a\": 2,\"b\": 3}},\"thoughtSignature\": \"CiQAMDEyM7y/wJvle9H/ekhz/c4+Ce/W+U6hquBT5IxsfDMOQCYKXgAwMTIzWD1quQehsgBRbbQIb4N9aHtIKnu5KC+fWwJ0qMKDcxiZqn8B/RxLKATLm2DM4+zOFX2/krQW+/ShV71Ngjxx3i9XpZlSwBu9DREDdkS7Fknzusxmeh1B47MKiwEAMDEyM7pnSAMl8nSvleQVsTJjuP/qhwGHUYPn3+NvR42c4S0eHa9xCN4oUyFYStUxz8nqjSKhljwJMD+8L57dTLodpUKlOyuMV9ERdPdklT18jUQc/KiykSZw0m4fdTUSm02+Dgf7Ar2XLa7t5r5GXDCrlXGomSA8spVaTLKbdmaZ3SfdDH8zwoDCCocBADAxMjPSj9qhCP7GOfWIyJ9Wdzm1fZtFMbfpOcj+GWX29v0NInD72rEnOr3IaFgCEDtIXkivAo8DVbOSfRM9p/IJq+eHUFyu1h+5/hoJ02vto4EYgRUYslcp0HpFePJY07AtteBLPWyYN8eUzRLVis64BHB21xDcN9OqODmpIGOFcymoF+yzCnEAMDEyM/5NuMhYGYKfsdn23hHFvIc9Gx0ECxXSSoQ3co3Kd/C0Hruis7/jD/5o3Os6uipn2TFyHRgBlFyqYCFN9419VgR7Z2cv4DxZMqPsSO4y/96t9elOQFfmh4k2Y0FXr5la9pjV+4+9gxP5w60SCwpnADAxMjM7orP6u/v7wdr8RJAOaN78ZlvrjXqT/JAEbIVamKpoGFWpkaRmzXRHy6u6cTuE9MoEzXZL/jmUx1dU4lm89QTjkp5UHvc2F8COgxEqI3j0vjLPTNoxZyYdQwx7CuSdRhGIqQplADAxMjO/9cBSAtAwIzb5Z+/GHCU2RQWkqtcIMbLhUSDgETcEeZ8GdMWiaAcdRF6BNalgcq4aduMvoWIHY3VwWKLTlvyB99oX9jpzYP1wHPDKnb0DM1bZecSIq63wdalB3kbsWHsKhgEAMDEyM9mhHHqmKYjUbSNUJ7Q3iCzWgDT6hf7mqv6xCzKeeDpyAE3U+CSUnlh+HUSvj9Qp4H+v7SVmndUTWl/6BQht7NfuldoB4gaNVRQhfhvQEpFtFFGiP+Hgh/Fqz9n44K6yB/C2D9XghUdvQdYa2wakavP/f4JT4kkdph9h4+K87186ZgpEADAxMjOOt4RZQFYJ853EhuT3VM0Xe3SWNyeHZqJSwOw47syn0Qv85zcMaeLzEXF98K8Zclz1+2LkxMAzqXWXN3dF8BE=\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 121,\"candidatesTokenCount\": 18,\"totalTokenCount\": 326,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 121}],\"thoughtsTokenCount\": 187},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"DHPWaITGFqe5nsEP0f-NgQc\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"multiply\",\"args\": {\"a\": 2,\"b\": 3}}}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 121,\"candidatesTokenCount\": 36,\"totalTokenCount\": 344,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 121}],\"thoughtsTokenCount\": 187},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"DHPWaITGFqe5nsEP0f-NgQc\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"add\",\"args\": {\"b\": 3,\"a\": 2}},\"thoughtSignature\": \"CiQB0e2Kb57nv74mjLhshFKCmBXd6OPdPXW6hcvhQ0Ah+RTWpvUKXgHR7Ypv2muReT3X/CMDBYqroFimUxlMLj8fYkd6ItNVADJZgVAz8s+GPlUX/X5ek+s3AsQxCk8comKPDFK025fkkNswGveqOfToi4ZKID+OgZ1UnJvgO3XA+5RxoHMKkQEB0e2KbwMhww+0chgTKrKmtGlVJEulUm8CodC3QpNadxWRmO2leIYgJu65gZEFdgaY58heQAwB+UZC4KRU/sSazBaG7+whubHZqf1v0XA+N9OGuq7tMI98lV+Pu33+XfjdpT5LLe9yudqZCwdGJwA8l9YjTl+zNZfEul/8/rY90S/DFS2E+2NkYq64vIi4vdEyCpoBAdHtim8KQahce7ytBBjX/e/zYLHMXGXgLsQm21oILm01MwjnLaaqmYS/9eQlPyGaLU2KTvfsgwKlGoTlPpqJ9jetepn/Ry8fkiCTVaufSXI2MP+ybDOMYMM8gaRZOyuu2Bzpjm/+J4i0VpUKNNICQh3WcJzW5qR+p8RHoiFdROWg9/LnMqS6ql6cyrxhGMwv2wIV5W9YqgjT6QqGAQHR7YpvhVr/elrAHhKJgicP7Y531AVoH/l4eb+qOY+7hzQujMZYEj8MefRJqjuPdcDfG+RYaBpgek5S1p5cohl1XE/oAkHNQXgpfvFuL02t4H+AlHejTwuR1s2x2XRNQKK6C+3mWr4R5Q79FY09Ieq/BAkLtrZvo0qGRDKyegrXTh+6WKvuCoYBAdHtim8f7Qn30hkTiHPm65o5izhEee3Ln58hX0mnFoP1UwpM5esqheL4kxEKQpcanIRDCmtj45oGOfB6VF7MEWgEQCZJwrv8KoH4CCxQwsoxdySngnL3kAGn6wfy40LOGiIA0np3mGDqhU600bm8UKjx3gj50DHwzLEEadNT3wy41oQ9xbEKagHR7YpvRXJGf6R/nSrN0wiqiAxYH8S/3OkkvL37e4HpwqMUY/4fIneWqquAB9lgbsBBrD7LKXu09p18UsLZtSz8/eFhtFB0YTnwHQZjAE/DEAPxRgprpym3W5XKtPEr7YzKbyqbjwS6l1YKYgHR7YpvSe18xmCtimGx0eW40nwaeZpXJ2hJCaOL01kzIz8cYrFQ8FvflkkOOEYnHHVEI5Io5ZtNu27OQfDttIyI82/s9rgFwFHIFqELwJgrPTx44Vr+db9wbZJqT7JNbQHqClUB0e2Kb9ctFr54D8Y/7NH/rFW4LtfWxRWLIJtPukLCA2XPRjjMzs33V8gzxH6RefPIbVVZlUOS655vRt7xV+qKxz919n4Idmwh6/tvWam6h/sM62eyCocBAdHtim8KLIApG87MqfFodW/FiuP5wi4eCxaBS3HRjdd76dN60hnL9BfdA91b0h9REWlyB5PF69Ps0L3nMUTMzOLQz5JDeRepYnCNLwd5JydEKdb2wu3VZD5YCY2sOUwwJVYjvIx75JuxAroAKBz9xvNP4lQjqlAKcToY7jppmCDa1yrvxnPzCpQBAdHtim9yshTGhyOwsEUpmAEzPlt+7ZJZFaU7DVFcSPg5N/w6u0yS30HInOHFPlkgc+uqSbgbAQv1tYI5+9z8LwfRDwmJohix4A/Gb1Yclj05Rm90gPucBd7CQPFdXz/11Sk8T8WLU9X0IKEz3x78ywWHsBcFWR5RMjxTsLFXb9qAtuCdEv1hb41As2ywKCLE9Tp28wpoAdHtim8VRv1D+31h2K/XWrtGT+3yb4K9s6iuxUgcUml21PO+Equsi+B5rhL3L6bFS+JNZE4QNjHhxPbcd7HYkUCuaFrUf1eSopsoHX39sYC0XMrJEe4VLlIUkET2lf/XIl+DaPbhZUsKRQHR7Ypvf8F2YJBtTLptW4g4i/ZDbcr11MMyv64V2/EqZZEmHTtw9nBE6SMCmgmrWYcMvYSPMkUr4eYZYPZl9tvgmXG/kAoiAdHtim9aDszqnOeIs2xlNS4m/E0X/HX7v+VS8LtXfbBGGw==\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 121,\"candidatesTokenCount\": 18,\"totalTokenCount\": 424,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 121}],\"thoughtsTokenCount\": 285},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"itH5aJG_B8zqkdUPprP6mAs\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"multiply\",\"args\": {\"b\": 3,\"a\": 2}}}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0,\"finishMessage\": \"Model generated function call(s).\"}],\"usageMetadata\": {\"promptTokenCount\": 121,\"candidatesTokenCount\": 36,\"totalTokenCount\": 442,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 121}],\"thoughtsTokenCount\": 285},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"itH5aJG_B8zqkdUPprP6mAs\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 4.498333334s + duration: 5.033293083s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1156 + content_length: 1138 host: generativelanguage.googleapis.com body: | - {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"add","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"multiply","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"add","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"multiply","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. Always use both add and multiply at the same time."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"1","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"2","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"2","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. Always use both add and multiply at the same time."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} form: alt: - sse @@ -48,7 +48,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:streamGenerateContent?alt=sse method: POST response: @@ -56,10 +56,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"The\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 181,\"candidatesTokenCount\": 1,\"totalTokenCount\": 182,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 181}]},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"EXPWaOXfNY3j7M8P3bON6AE\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" sum of 2 and 3 is 5. The product of 2 and 3\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 181,\"candidatesTokenCount\": 20,\"totalTokenCount\": 201,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 181}]},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"EXPWaOXfNY3j7M8P3bON6AE\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" is 6.\\n\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 181,\"candidatesTokenCount\": 24,\"totalTokenCount\": 205,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 181}]},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"EXPWaOXfNY3j7M8P3bON6AE\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"The\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 181,\"candidatesTokenCount\": 1,\"totalTokenCount\": 182,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 181}]},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"kNH5aK-jF8vqkdUP0uSP-Aw\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" sum of 2 and 3 is 5 and the product is 6.\\n\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 181,\"candidatesTokenCount\": 18,\"totalTokenCount\": 199,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 181}]},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"kNH5aK-jF8vqkdUP0uSP-Aw\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 181,\"candidatesTokenCount\": 18,\"totalTokenCount\": 199,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 181}]},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"kNH5aK-jF8vqkdUP0uSP-Aw\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 3.872278375s + duration: 3.445411166s diff --git a/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/simple.yaml b/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/simple.yaml index 5fbc5ef7c5d916f2f3601e680b0d94d14c917ca6..b7b7093ccf509466742925c89277f11454c9f04f 100644 --- a/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/simple.yaml +++ b/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/simple.yaml @@ -14,7 +14,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent method: POST response: @@ -30,7 +30,7 @@ interactions: "content": { "parts": [ { - "text": "Of course!\n\nThe most common ways to say \"hi\" in Portuguese are:\n\n* **Olá** (A bit more formal, like \"hello\")\n* **Oi** (Very common and casual, like \"hi\")" + "text": "Of course!\n\nThe most common ways to say \"hi\" in Portuguese are:\n\n* **Olá** (This is like \"hello\" and works in any situation, formal or informal.)\n* **Oi** (This is more like \"hi\" and is very common and informal, especially in Brazil.)\n\nYou can also use a friendly greeting like:\n\n* **Tudo bem?** (Literally \"All good?\" but used to mean \"How are you?\")" } ], "role": "model" @@ -41,22 +41,22 @@ interactions: ], "usageMetadata": { "promptTokenCount": 11, - "candidatesTokenCount": 49, - "totalTokenCount": 677, + "candidatesTokenCount": 100, + "totalTokenCount": 893, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 11 } ], - "thoughtsTokenCount": 617 + "thoughtsTokenCount": 782 }, "modelVersion": "gemini-2.5-pro", - "responseId": "8HLWaNeEFcqpkdUPnej7cA" + "responseId": "Z9H5aM_PPKKBkdUP-OO7oAM" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 7.315723791s + duration: 10.457368166s diff --git a/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/simple_streaming.yaml b/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/simple_streaming.yaml index 51f9e3f4f9597acec070cc03a30a4e3150643d52..f9999350178e0d487e85caca70841a0fc5717025 100644 --- a/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/simple_streaming.yaml +++ b/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/simple_streaming.yaml @@ -17,7 +17,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:streamGenerateContent?alt=sse method: POST response: @@ -25,10 +25,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"Of course!\\n\\nThe most common ways to say \\\"hi\\\" in Portuguese are:\\n\\n* **Olá** (Hello\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 11,\"candidatesTokenCount\": 25,\"totalTokenCount\": 816,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 11}],\"thoughtsTokenCount\": 780},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"8nLWaJ6zBu-E7M8Pvti6oAc\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" - a bit more formal, but can be used in any situation)\\n* **Oi** (Hi - very common and\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 11,\"candidatesTokenCount\": 51,\"totalTokenCount\": 842,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 11}],\"thoughtsTokenCount\": 780},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"8nLWaJ6zBu-E7M8Pvti6oAc\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" informal)\\n\\nYou can also use greetings based on the time of day:\\n\\n* **Bom dia** (Good\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 11,\"candidatesTokenCount\": 76,\"totalTokenCount\": 867,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 11}],\"thoughtsTokenCount\": 780},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"8nLWaJ6zBu-E7M8Pvti6oAc\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" morning)\\n* **Boa tarde** (Good afternoon)\\n* **Boa noite** (Good evening /\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 11,\"candidatesTokenCount\": 100,\"totalTokenCount\": 891,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 11}],\"thoughtsTokenCount\": 780},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"8nLWaJ6zBu-E7M8Pvti6oAc\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" Good night)\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 11,\"candidatesTokenCount\": 103,\"totalTokenCount\": 894,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 11}],\"thoughtsTokenCount\": 780},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"8nLWaJ6zBu-E7M8Pvti6oAc\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"Of course! Here are the most common ways:\\n\\n* **Olá** (Hello) - This works in any situation,\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 11,\"candidatesTokenCount\": 26,\"totalTokenCount\": 840,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 11}],\"thoughtsTokenCount\": 803},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"adH5aP3PAq3d7M8PqtjQ2AI\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" formal or informal.\\n* **Oi** (Hi) - This is more informal and very common, especially in\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 11,\"candidatesTokenCount\": 50,\"totalTokenCount\": 864,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 11}],\"thoughtsTokenCount\": 803},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"adH5aP3PAq3d7M8PqtjQ2AI\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" Brazil.\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 11,\"candidatesTokenCount\": 52,\"totalTokenCount\": 866,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 11}],\"thoughtsTokenCount\": 803},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"adH5aP3PAq3d7M8PqtjQ2AI\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 8.844180583s + duration: 8.964147375s diff --git a/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/tool.yaml b/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/tool.yaml index 7f403793d14c5599a69fb73d4547918b67a113c6..e2f5cc500fb2a862c284b9e10edba8e29709eac8 100644 --- a/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/tool.yaml +++ b/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/tool.yaml @@ -14,7 +14,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent method: POST response: @@ -36,50 +36,51 @@ interactions: "location": "Florence, Italy" } }, - "thoughtSignature": "CoIEADAxMjP/1r9Ehb1hMsCGxmRcIP+NfJYs5AhN1vOqcJSADnQNg0th80QbX5wKXuEj5Qf/EhEXvIKSHiTZTEIre13But3TzRwORDAJjrprSqG778poPprDsbFv+mUlydKMQ/2xv32LcNVeAAWf/b3fp9LX+02t2LWNh1Q07j50ok7vf5pTaH3MVY6xTKekx9mSen3IsKX1u95mu8EJKBCd7bUJri8WZDuuh7ujhWZxfcSe0uRtwQTPCxzY0ZPwOdKPh0Pi4qqwTIBUgczVJHdAzwZrJGLlf5X53i/tcV3N0x8/Evg5yMrqrTrmOKW6j7fcYpvnVi6qa+VTQsFLBgMmA3sB+KiHEepTUjqOzVsONvCPEUY401AmopBy/+0IZKXAoSFrfMDI5nYc+QtxBH2d0QIfk9ZAYY98B3vo1edYZt7Hzc8D/YkBHUcmMsIjVYyfTyuWGalq0vXYqj6jzjHKu1t+oIV6GhehVhCX6MFNu2ogIFPREusFNmqHQvRsIIaatOgddEEy+kath3csDKU41RKvD6XCtt0LkAwCVR/S+zJHdphGkgy3DxAENrmpOLkP/4DPMv/VvmtPcVo9pp2GGy515YnrPgPD9N++lPFXB+pY27tVhCpgRo/XDnM7cot64U3IURL35jgvYPytKsU7J9+G+KI/uUFKhDLKfpsFCJMVaw==" + "thoughtSignature": "CoUDAdHtim/bgtT9Odj2/r1QcjzgE9Zr7qHxmcWWEWix5kqp2At0qQunrv0dH5Lpnh6leBLIjYTZh9Zws11pzYaMxpo8FuY9ajBeG2xcYNkBtmCpNTwXNMODKv90J0jq6PM3RsddM4a0yqfcr8ES2PEtD6XY5KJBdtmcdgIZI6T0S03ITXOXfcwtAoOP5Jm0cdl2YmnvafVbJYCnNlZjuOvpGCMaJIsW8fG9lJZRJKDeg7v80t5sN91085qOP1ZdfhiXxOB/GumlRYO/u35IK3Me35wJI+oFCb1tFxEK7w6HrCBBXduvZqneGgwZyMH+clrRZ6euFhy5uF5xUJPPfeXxLJIw40x6l1bWjAmOtTtiQXFmTSYLerz1iZeFPnZxzbRz0Vr9k4kUBjEEppCgKHm/VN0dfsG0bmrRBIgkJ166xlhwZBJu6cic2Iabw50Sow/VLhzYCXuLQ7lfcL2g5s6arkIAEY62N9gIYpGNRWWh9qghP47ouM5cKzCe1WVWAHIXcs1XBrU=" } ], "role": "model" }, "finishReason": "STOP", - "index": 0 + "index": 0, + "finishMessage": "Model generated function call(s)." } ], "usageMetadata": { "promptTokenCount": 54, "candidatesTokenCount": 15, - "totalTokenCount": 188, + "totalTokenCount": 162, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 54 } ], - "thoughtsTokenCount": 119 + "thoughtsTokenCount": 93 }, "modelVersion": "gemini-2.5-pro", - "responseId": "_HLWaOTEEaaE7M8P2v-q6AY" + "responseId": "dNH5aK6UFNX1kdUPluXGkAs" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 2.570022292s + duration: 3.179773083s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 735 + content_length: 723 host: generativelanguage.googleapis.com body: | - {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence, Italy"},"id":"weather","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"weather","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence, Italy"},"id":"1","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} headers: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent method: POST response: @@ -95,8 +96,7 @@ interactions: "content": { "parts": [ { - "text": "It is 40 C in Florence, Italy.", - "thoughtSignature": "CrEFADAxMjOTETaUeVTeEBfr/K5W2YcCHTKu2k2V7oGdytdZWBmRyAWtt6l1BEuP1CaoRb5xKDNZiZAPbwfsZjb4xW7nV34Va6I7Q7XtewDymKsCwTGoO6pbJJ02jm/LgjSsv6LsHxu37DlTo2IQzaM9OgEGRqRksE4FcGNJA06RBbm3KZLUJLue19ZW9E1ucict1u+jc7W/Hk+JqYdd3nlZPEVsbAdAVhxV3gsh6ElJuK47hAzj1sEbzt2pxEMx7abDMxAxPsm+i059DM3URTOcsHGHApsr3fvjdFReFGA+HyPm37wTysqoOsP6pjUzAN6IKP+OFYP1fZcWUsR4rI6pn1KSPGcl37pT3vGbkLTjxHahTMdcnipUTOTQRP/FkG99SeYcqXGWDTeXjbOR4GnrFIFGVHog7VUmMN7bx9UUpnOQ6chGzT7ZoayyhcQTCi5yYCzNAT4rXgg0eCwpMu13OTaeI+KVIbuCqgKLswrQ+9nllsRgpngmoE2p3U+Y1FFz0intoU2tBDI6AVf134xvnBWHVsbWry05QJPP5RQQYJ3EHEvYaHdWkHiWuO8i9aZ99YQ0U6O92Sy0i31qY8eXLH1JzZ/KESHra7pDOPUPNAgnZLxm3gnbfUafehEEes0NG4DJ8YIh4Lqy25g+Uk6IXl6WzCiHiveji5towENouDnmAc9ONCXX5rf2a+Gv392bdO9bIXzaWdRTVBWdfgq0NcqX+o2uqZL9+oK5tgho5YodFN4Y9yA1cR+zJV+cEJ80s1Td8kEF4oFpQgleLmid+sXtWS7zRd0CoTM0MuKXrfFzmZVAYSWrOnI06Bfjp2yuVt0EfwmZnTb2iaL/WcFoErPtu4cotTnl+zcZe53hEytICMm2JdpVjia5SoVttqe0Vuusk5cD86WPQ8Bu2JSfP8s=" + "text": "The weather in Florence, Italy is 40 C. \n" } ], "role": "model" @@ -107,22 +107,21 @@ interactions: ], "usageMetadata": { "promptTokenCount": 84, - "candidatesTokenCount": 11, - "totalTokenCount": 261, + "candidatesTokenCount": 12, + "totalTokenCount": 96, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 84 } - ], - "thoughtsTokenCount": 166 + ] }, "modelVersion": "gemini-2.5-pro", - "responseId": "_3LWaM30LrSC7M8PlbSegA4" + "responseId": "d9H5aJKyGI3rnsEP9MvF6Qs" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 3.478226625s + duration: 3.521672167s diff --git a/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/tool_streaming.yaml b/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/tool_streaming.yaml index c412d01137b3d4dcda9f4a76eeeaddcdeea20d4c..4e6d2609223ca486b8b1d185981eba1b9d865fe0 100644 --- a/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/tool_streaming.yaml +++ b/providertests/testdata/TestGoogleCommon/gemini-2.5-pro/tool_streaming.yaml @@ -17,7 +17,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:streamGenerateContent?alt=sse method: POST response: @@ -25,22 +25,22 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"weather\",\"args\": {\"location\": \"Florence, Italy\"}},\"thoughtSignature\": \"CiIAMDEyMwwMJJqiCKz4VzG3qJA7LTurT7NRFfJD5RbIGkyKCmcAMDEyMylbN4M9IorKIgnOaeKSZLO+Dmdc3CN8Ykr/J85vASu1ewoQzxWXSaGyvblIjXsuD/O+5bQK6JovlFpSOdr4DInlXATtkMTtxZNtZdKBscb7H/ZfhlDQVuPzRcriIRflrk1nCocBADAxMjOR8UCtfaH+TNsdgdU5M81Ytdcw1B9wWslWPBJoy+ol+fHoQWWxGKxFMFr85j8CP8Y3ABWH8ys1Q27jJN1Zol3zYGeLM89G/0yHxOjuHmTpbVVOU21czJQqBNyOHjIh/me1SJeaYFmdNyoYjp0p3rOmo61aWdpMBy8K4hFR1CIIEZfVCoABADAxMjOprlT85BY4gsIO4TrKV/YnfpwDJyTG6LFoefZucUiQG1e5DqGWqS7kQExDzHxXN6hiexCUiGlG8wZ+8F8+FtkYfkz0e4JmDB61z3bQCd16mrg+hv8dfoAhEOZFDtsfwQ9qBrS7hka4RJN0gT6mGzztfd98zQiQXpy61L8KhAEAMDEyM10gRA4BgbBVpr3JZ5Qp0/Mjdfbkoyq6nZNhPfTMfILNA1QAvzvGmLMnVMnJdvwTSUGTfFuh2+f2eSB6pmDrFYijitpQs+ZW1VcquhwlekwJxkUm/iR0BnsgRCXb/qMOZ0wXwH/RhEuSjJUDmFJBVZLbRaANk5kAi6RReUfsldUKYgAwMTIzMqLxvuGouzbh55D8UKHRWRquiTQeuTboYdqInp81Z53hsmg10JUicZ4zKTTngH/KEldeldZZ6z/d6+0oQEW7mV+o3+bfQXCDKLlN/nBfMrzH7R0olGEQKgoxBZAm\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 54,\"candidatesTokenCount\": 15,\"totalTokenCount\": 176,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 54}],\"thoughtsTokenCount\": 107},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"AXPWaOOVFs-D7M8PzsSZgAc\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"weather\",\"args\": {\"location\": \"Florence,Italy\"}},\"thoughtSignature\": \"CiIB0e2Kbz0BLNkrLk7+No9WGlLTJZ+xMx9A1TxMe+Y6NonoCmcB0e2Kb706fnMCgK85NUwapXVlvHLfykeWH8MI5LgoV4MUsEHZYCpYIl727ErZ4RBQjtGmeXlj/azrhRNM/TvHMnk7zJYadvftZaTiGdRl9jKvlQe6/S7M6bSkxPlYp+lQo2ty1L2YCpwBAdHtim8LzZus032fdxYFzNkGGMGKtMP2tUDh99Z03MCvi+wxA8BNAb6TO+WBH9n4w811qYi6vtnx6CSEpNfmu69Gxg0mzzJcy18aftjQsIMI9I6s/Em67I0H5KvvJIIORVUQRJV79WxBxJosXKq6Qp0ouGnHDeu6amYE3gNkPa5avQ6ylcPFYxEFiocnnByI2+T5c/MfX0VMuhfJCn8B0e2Kb5mZWqcXceVRxrUEPnB9hIZ1Z1Fw0LsZu0mtQLIu5wrbKASt8tngqGH/Ih0JKjyhYCMMXQgZv/+SSD9aCrNuHVcuUT70gOAlh1+8GAVExQKK91LNOqzJQzPY3eDWmZeOaZzTClGndGvV5yei98NXpot/WLOSk+0vjOKRCogBAdHtim8NoLk4AU1mmgzvKhGBdd2+k40AXhi5/HdOH25mDEIu1aE2UYzGb5fWDHEBPk9kCLXboACayHmSUL5jn4vZGD6RGOeD8fLWkMZ9QkMHVIHqeJf6/bWWGpXJqyKJuPuVJr4Js942G2j0HuRZhjE/Pp0Juo1nZLPnCpXF/ocgNvajxnChSwp8AdHtim8NRblW7y2ldLbbnvLJxgEdlbXwFdIfCdhh9o/Z9bey8btecUY1RDywFlbieqveGpM7JYL44YqHx49mhiA6xMqNYSlBdjmyDGMCSRe2DqM3Q9tZlJsDU98Ram0r30EaaLbdegYMvxRRJQxfqwyUYWj6sBxnSIePmAo8AdHtim8/Dviufwa51o7mshU5jZE49QI8GXiYtII8ISmrhZp3U6FDPpyvnanR17ZVXQ4n78bmWk2hW6lUCiIB0e2Kb51t7bXCuEJajiqXKq10+LClxmq1MeDkr8I+kQyX\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 54,\"candidatesTokenCount\": 15,\"totalTokenCount\": 197,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 54}],\"thoughtsTokenCount\": 128},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"edH5aJCaLLH6nsEPqZGMqAY\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 54,\"candidatesTokenCount\": 15,\"totalTokenCount\": 197,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 54}],\"thoughtsTokenCount\": 128},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"edH5aJCaLLH6nsEPqZGMqAY\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 2.716681667s + duration: 3.057425792s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 735 + content_length: 722 host: generativelanguage.googleapis.com body: | - {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence, Italy"},"id":"weather","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"weather","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence,Italy"},"id":"1","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} form: alt: - sse @@ -48,7 +48,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:streamGenerateContent?alt=sse method: POST response: @@ -56,10 +56,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"The\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 84,\"candidatesTokenCount\": 1,\"totalTokenCount\": 85,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 84}]},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"A3PWaIXxEde1nsEPp5-3iQE\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" weather in Florence, Italy is 40 C. \\n\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 84,\"candidatesTokenCount\": 12,\"totalTokenCount\": 96,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 84}]},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"A3PWaIXxEde1nsEPp5-3iQE\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"The weather in Florence, Italy is 40 C.\",\"thoughtSignature\": \"CiIB0e2Kb56sxLRU03mYcZSclEd3sEuDNOhALD62B0KGHxFYCmcB0e2Kb+ghbxMMaV82lqir0eauJgRynLiu4qQd9yj+0pycTZ29YhNIr/WDsrDK/WHOdFO2pMleUHDx0tvOtpGDMkraX/dm4wWmufOU7X7JY/JwAzzJzyCWTWHl5VdSM5sBMeyzYayMCpwBAdHtim/sqOq26orx9LidxeQIl6psi5DopqlHlNiDzoMhQ9cElW01aJRwICHbhJVyuSeq4ZAIzgKZ9F5VVd27PsG+jfZu5nvsLVBiD3kNKx9EYoVNqiXBwyRD9z41ws45gFrgJDkb72kwZ3RWdVKhnIdd+AmKM0VeLHlrbCoDMS4s+s9qJOs7X1n5Q2kj3cr+Ac3ywIShC1GqdOpDCogBAdHtim+wjJ/Lt9GNO+nzU/A5kaePMu33H2JkvOjtJ2AO5vFBLtZozd/HN96L1mm8ci23VVhAyqeE4Fi5dHRRnnjMnjYJUAv+iGdotc3D0GglNNWzwF2AhWti3n4km100P+2/iNnGMwRnGc9yj1nHyeAUKeATFKlQn6kryoQ0AAP7y4Is5mu+ggqJAQHR7Ypv3wuCUWpQID2FttoYAxSX3+mj68ub92sx37TbBx1BnhP7xRsjhKRAgKe0jwBg1F65JRm93gC12kuhFY9HNYzJbkHp7uPbOwlu09x0reJ/ADZ8y0x3CQ1GUhtMn8TviCwqd0xhvWQBSN/LcX7xFrXJC863Go2Rc5X6ma/0fHFZNu9UYbkjCooBAdHtim8lf0ESA2Me6z3tLwXWw/FqoHM8toRP8dQkZbS5Tzt1c6x2eY8Jld1WEj1f358ZHGwClBx8KZ/CzQ3l1Qzr8xICaZIQ0euAhwPNqVCpAc4KzchVKt/09rrBj4FLQIUuc4YKL0qPSby13rg+9/v2GdccX+8ccpj6X8lQLIzwBI69E8hPWp+2CpgBAdHtim+sFWjG461P9CnczGAuQT1Tqg0XbVlyBdCpBlo6e30BaurGIeWCEOcbKui+LBVuu3GKtp+pqv+dUbUbT4DlwmDVyFqvDaM0mCAQecnErppQsc5C+YE6z1LWReheyriSrMn5Rdn7lL7WVfeGdZr/6fxTj3BlOgYb1m9ERNtgSXV2B/f7A3XUCvmhWtDjYBPiOjuVhg4KkwEB0e2Kb4rxYmYh+1JyBXYoTVKzbbDVntF9MhF1QnHw5SOPX8K35PDaJz40KHGxb57DTdYNnNClx7IAmLMCL5qDw/2wG6+uAP+3e0216KXHGeXQcTpZiZGuYGZUAgHoOD7gQa/1jfjsL0San5ukiW/UrTujI/uSM5SLlOfMdxLY6ljEHRaEJUA+Q/Qb2ixJek+RJjQKrQEB0e2Kb9cOXvEsHsB3FJemhDMqLpjaJfN2RxCNhotj8vvRx/s0LoT9pptx8uFT381mHFd4TYAujDWWuhm3pmYEultrifsvzmI/4tMsiIp9d2p2Gd+EfoYFZM6bCrwzOz3c/vARCDiQMBrXnhVtqt/Cm+F6xrY+EoAob7STNlrfxVDYNmvi6I9LvV8dQb+30ljuamBEe5lB4LZqYXz7z5UOctskS1BqkwZJzMNC2gqAAQHR7YpvAtO00MWKSEJ11C0llAJpdzfKY14sPFgXAWoBpJKes3OElywBKNH91m8Kzi6zQO9UVVYWGga/IGJIII9fzfUXVnTXAswMkMTr9xAIj8Z4v4znxZ5dI6QYLUbuh7P8ufb+Lbwrlp1C7qBELl3FqHptJ3HWZs58GPmyN6jSCicB0e2Kbxwoui+FrdfG/ptxdQpa/AzB+NRjqab1gKpMlOPSFZ2SdF8=\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 84,\"candidatesTokenCount\": 12,\"totalTokenCount\": 321,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 84}],\"thoughtsTokenCount\": 225},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"fNH5aPmlPNWsnsEPvpnKoAs\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 792.75425ms + duration: 4.537089792s diff --git a/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/simple.yaml b/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/simple.yaml index 12857166aec4c66b453d26cd11d0f060e1567812..881b3ff19fd3725f68f2235ecb5a5cd63e665e11 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/simple.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/simple.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Anthropic/Go 1.13.0 + - Anthropic/Go 1.14.0 url: https://us-east5-aiplatform.googleapis.com/v1/projects/fantasy-playground-472418/locations/us-east5/publishers/anthropic/models/claude-3-7-sonnet@20250219:rawPredict method: POST response: @@ -24,10 +24,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: '{"id":"msg_vrtx_01JoBtryoxdRxCJ4GfXam6Yu","type":"message","role":"assistant","model":"claude-3-7-sonnet-20250219","content":[{"type":"text","text":"Olá! That''s \"hi\" in Portuguese. I can also say \"Oi\" which is a more casual greeting in Portuguese."}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":16,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":33}}' + body: '{"model":"claude-3-7-sonnet-20250219","id":"msg_vrtx_01RTPizSndQfkUH6eWrcFtk8","type":"message","role":"assistant","content":[{"type":"text","text":"Olá! Como você está? (This means \"Hi! How are you?\" in Portuguese.)"}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":16,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":24}}' headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.987505375s + duration: 2.138460417s diff --git a/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/simple_streaming.yaml b/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/simple_streaming.yaml index 659cc5881c4092df9324beab9cad1c2fe55dd399..2ad18e989dfda92e6cfd2da135211413e7f94b42 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/simple_streaming.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/simple_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Anthropic/Go 1.13.0 + - Anthropic/Go 1.14.0 url: https://us-east5-aiplatform.googleapis.com/v1/projects/fantasy-playground-472418/locations/us-east5/publishers/anthropic/models/claude-3-7-sonnet@20250219:streamRawPredict method: POST response: @@ -26,7 +26,7 @@ interactions: uncompressed: true body: |+ event: message_start - data: {"type":"message_start","message":{"id":"msg_vrtx_01551jxgCbyerbL44qCuV9kn","type":"message","role":"assistant","model":"claude-3-7-sonnet-20250219","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":16,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":5}} } + data: {"type":"message_start","message":{"model":"claude-3-7-sonnet-20250219","id":"msg_vrtx_01UZhFsyrYaUuvRKEzxJ7FkK","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":16,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":5}} } event: ping data: {"type": "ping"} @@ -35,68 +35,20 @@ interactions: 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":"Olá!"} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"\n\n\""} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Olá\" is"} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" the"} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Portuguese way"} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" to say"} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" \"hi"} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"\" or \"hello.\""} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" It's a friendly"} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" greeting"} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" use"} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d in both"} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Portugal"} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" and Brazil,"}} - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" as"} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" well as other"} } - - event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Portuguese-speaking countries."} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Olá!"} } event: content_block_stop - data: {"type":"content_block_stop","index":0} + 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":47} } + data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":7} } event: message_stop - data: {"type":"message_stop" } + data: {"type":"message_stop" } headers: Content-Type: - text/event-stream; charset=utf-8 status: 200 OK code: 200 - duration: 1.902656792s + duration: 1.311998834s diff --git a/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/tool.yaml b/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/tool.yaml index edeafd4c8dd701676a96f0b4a8a9bc6915c2aa92..a7a20089b0ce8ced8b6bcae4095e17724c318c71 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/tool.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Anthropic/Go 1.13.0 + - Anthropic/Go 1.14.0 url: https://us-east5-aiplatform.googleapis.com/v1/projects/fantasy-playground-472418/locations/us-east5/publishers/anthropic/models/claude-3-7-sonnet@20250219:rawPredict method: POST response: @@ -24,13 +24,13 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: '{"id":"msg_vrtx_012JnDNruXUPVCywN7jYpwZ8","type":"message","role":"assistant","model":"claude-3-7-sonnet-20250219","content":[{"type":"text","text":"I''ll check the current weather in Florence, Italy for you."},{"type":"tool_use","id":"toolu_vrtx_0129YeW9ohuKMKgnDRAStbvo","name":"weather","input":{"location":"Florence,Italy"}}],"stop_reason":"tool_use","stop_sequence":null,"usage":{"input_tokens":394,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":67}}' + body: '{"model":"claude-3-7-sonnet-20250219","id":"msg_vrtx_01HMPWEJiA8uwFGoNxfXG78Z","type":"message","role":"assistant","content":[{"type":"text","text":"I''ll check the current weather in Florence, Italy for you."},{"type":"tool_use","id":"toolu_vrtx_017DkoRKzJJVLa8p4HV1RdJp","name":"weather","input":{"location":"Florence,Italy"}}],"stop_reason":"tool_use","stop_sequence":null,"usage":{"input_tokens":394,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":67}}' headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.557585167s + duration: 1.494068458s - id: 1 request: proto: HTTP/1.1 @@ -38,14 +38,14 @@ interactions: proto_minor: 1 content_length: 881 host: "" - body: '{"max_tokens":4000,"messages":[{"content":[{"text":"What''s the weather in Florence,Italy?","type":"text"}],"role":"user"},{"content":[{"text":"I''ll check the current weather in Florence, Italy for you.","type":"text"},{"id":"toolu_vrtx_0129YeW9ohuKMKgnDRAStbvo","input":{"location":"Florence,Italy"},"name":"weather","type":"tool_use"}],"role":"assistant"},{"content":[{"tool_use_id":"toolu_vrtx_0129YeW9ohuKMKgnDRAStbvo","content":[{"text":"40 C","type":"text"}],"type":"tool_result"}],"role":"user"}],"system":[{"text":"You are a helpful assistant","type":"text"}],"tool_choice":{"disable_parallel_tool_use":false,"type":"auto"},"tools":[{"input_schema":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location"}],"anthropic_version":"vertex-2023-10-16"}' + body: '{"max_tokens":4000,"messages":[{"content":[{"text":"What''s the weather in Florence,Italy?","type":"text"}],"role":"user"},{"content":[{"text":"I''ll check the current weather in Florence, Italy for you.","type":"text"},{"id":"toolu_vrtx_017DkoRKzJJVLa8p4HV1RdJp","input":{"location":"Florence,Italy"},"name":"weather","type":"tool_use"}],"role":"assistant"},{"content":[{"tool_use_id":"toolu_vrtx_017DkoRKzJJVLa8p4HV1RdJp","content":[{"text":"40 C","type":"text"}],"type":"tool_result"}],"role":"user"}],"system":[{"text":"You are a helpful assistant","type":"text"}],"tool_choice":{"disable_parallel_tool_use":false,"type":"auto"},"tools":[{"input_schema":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location"}],"anthropic_version":"vertex-2023-10-16"}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Anthropic/Go 1.13.0 + - Anthropic/Go 1.14.0 url: https://us-east5-aiplatform.googleapis.com/v1/projects/fantasy-playground-472418/locations/us-east5/publishers/anthropic/models/claude-3-7-sonnet@20250219:rawPredict method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: '{"id":"msg_vrtx_015jg26txA4Uuayzue6Q8PP4","type":"message","role":"assistant","model":"claude-3-7-sonnet-20250219","content":[{"type":"text","text":"The current temperature in Florence, Italy is 40°C (104°F), which is extremely hot. If you''re in Florence or planning to visit soon, I''d recommend staying hydrated, seeking shade when possible, and perhaps planning indoor activities during the hottest parts of the day."}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":475,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":63}}' + body: '{"model":"claude-3-7-sonnet-20250219","id":"msg_vrtx_01BJEBEdTy82Hb4nNAn5b1GE","type":"message","role":"assistant","content":[{"type":"text","text":"It''s currently 40°C (104°F) in Florence, Italy. That''s very hot! Make sure to stay hydrated and try to avoid being outside during the hottest parts of the day if possible."}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":475,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":49}}' headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.644774333s + duration: 1.508433666s diff --git a/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/tool_streaming.yaml b/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/tool_streaming.yaml index de7e476fc59ad62e60b1590b21ec5d038213bf0a..63d0a165034a3283428dd912ec7e21c3d9b56faf 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/tool_streaming.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Anthropic/Go 1.13.0 + - Anthropic/Go 1.14.0 url: https://us-east5-aiplatform.googleapis.com/v1/projects/fantasy-playground-472418/locations/us-east5/publishers/anthropic/models/claude-3-7-sonnet@20250219:streamRawPredict method: POST response: @@ -26,52 +26,52 @@ interactions: uncompressed: true body: |+ event: message_start - data: {"type":"message_start","message":{"id":"msg_vrtx_01MtpPXF7gH6SFEyKNTJLWEw","type":"message","role":"assistant","model":"claude-3-7-sonnet-20250219","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":394,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":3}} } + data: {"type":"message_start","message":{"model":"claude-3-7-sonnet-20250219","id":"msg_vrtx_018pH9zeQy8MYJ3gttq4JD8x","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":394,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":5}} } event: ping data: {"type": "ping"} event: content_block_start - data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""} } + 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'll check"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"I'll check the current"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" the current weather in"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" weather in"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Florence, Italy for you"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Florence, Italy for you"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"."} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"."} } event: content_block_stop data: {"type":"content_block_stop","index":0 } event: content_block_start - data: {"type":"content_block_start","index":1,"content_block":{"type":"tool_use","id":"toolu_vrtx_01Tj3azsUbpPDwNvW3itTJ3L","name":"weather","input":{}} } + data: {"type":"content_block_start","index":1,"content_block":{"type":"tool_use","id":"toolu_vrtx_01QqhPGFZ4wcxFxZLX6rF6ht","name":"weather","input":{}} } event: content_block_delta - data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":""} } + data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":""} } event: content_block_delta - data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"{\"locatio"} } + data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"{\"loca"} } event: content_block_delta - data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"n\": \"Fl"} } + data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"tion\": \"Fl"} } event: content_block_delta - data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"ore"}} + data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"orence,I"} } event: content_block_delta - data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"nce,Italy\"}"} } + data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"taly\"}"} } event: content_block_stop - data: {"type":"content_block_stop","index":1 } + data: {"type":"content_block_stop","index":1 } event: message_delta - data: {"type":"message_delta","delta":{"stop_reason":"tool_use","stop_sequence":null},"usage":{"output_tokens":67} } + data: {"type":"message_delta","delta":{"stop_reason":"tool_use","stop_sequence":null},"usage":{"output_tokens":67} } event: message_stop data: {"type":"message_stop" } @@ -81,7 +81,7 @@ interactions: - text/event-stream; charset=utf-8 status: 200 OK code: 200 - duration: 790.875833ms + duration: 1.365237292s - id: 1 request: proto: HTTP/1.1 @@ -89,14 +89,14 @@ interactions: proto_minor: 1 content_length: 895 host: "" - body: '{"max_tokens":4000,"messages":[{"content":[{"text":"What''s the weather in Florence,Italy?","type":"text"}],"role":"user"},{"content":[{"text":"I''ll check the current weather in Florence, Italy for you.","type":"text"},{"id":"toolu_vrtx_01Tj3azsUbpPDwNvW3itTJ3L","input":{"location":"Florence,Italy"},"name":"weather","type":"tool_use"}],"role":"assistant"},{"content":[{"tool_use_id":"toolu_vrtx_01Tj3azsUbpPDwNvW3itTJ3L","content":[{"text":"40 C","type":"text"}],"type":"tool_result"}],"role":"user"}],"system":[{"text":"You are a helpful assistant","type":"text"}],"tool_choice":{"disable_parallel_tool_use":false,"type":"auto"},"tools":[{"input_schema":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location"}],"stream":true,"anthropic_version":"vertex-2023-10-16"}' + body: '{"max_tokens":4000,"messages":[{"content":[{"text":"What''s the weather in Florence,Italy?","type":"text"}],"role":"user"},{"content":[{"text":"I''ll check the current weather in Florence, Italy for you.","type":"text"},{"id":"toolu_vrtx_01QqhPGFZ4wcxFxZLX6rF6ht","input":{"location":"Florence,Italy"},"name":"weather","type":"tool_use"}],"role":"assistant"},{"content":[{"tool_use_id":"toolu_vrtx_01QqhPGFZ4wcxFxZLX6rF6ht","content":[{"text":"40 C","type":"text"}],"type":"tool_result"}],"role":"user"}],"system":[{"text":"You are a helpful assistant","type":"text"}],"tool_choice":{"disable_parallel_tool_use":false,"type":"auto"},"tools":[{"input_schema":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"},"name":"weather","description":"Get weather information for a location"}],"stream":true,"anthropic_version":"vertex-2023-10-16"}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Anthropic/Go 1.13.0 + - Anthropic/Go 1.14.0 url: https://us-east5-aiplatform.googleapis.com/v1/projects/fantasy-playground-472418/locations/us-east5/publishers/anthropic/models/claude-3-7-sonnet@20250219:streamRawPredict method: POST response: @@ -107,80 +107,83 @@ interactions: uncompressed: true body: |+ event: message_start - data: {"type":"message_start","message":{"id":"msg_vrtx_0164AzFzxtcpgGX36csNs7ch","type":"message","role":"assistant","model":"claude-3-7-sonnet-20250219","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":475,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":2}} } + data: {"type":"message_start","message":{"model":"claude-3-7-sonnet-20250219","id":"msg_vrtx_01EsEHsrt9QdPFuhVgtfjum1","type":"message","role":"assistant","content":[],"stop_reason":null,"stop_sequence":null,"usage":{"input_tokens":475,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":2}} } event: ping data: {"type": "ping"} event: content_block_start - data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""} } + 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":"The"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"It"}} event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" current temperature in Florence,"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"'s"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Italy is 40°"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" currently 40°C"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"C (104°F"}} + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" (104°F)"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"),"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" in Florence, Italy."} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" which is very hot."} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" That"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" If"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"'s very"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" you're there"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" hot! If"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" or"}} + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" you're there"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" planning to"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" or"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" visit, make"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" planning to"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" sure to stay hydrate"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" visit, I'd recommen"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d and try"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d staying hydrated and trying"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" to avoi"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" to avoi"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d extende"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d being"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d exposure to the sun during"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" out"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" the hottest parts of"} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"doors during the hottest"} } event: content_block_delta - data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" the day."} } + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" parts"} } + + event: content_block_delta + data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" of the day."} } event: content_block_stop - data: {"type":"content_block_stop","index":0 } + 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":59} } + data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":57} } event: message_stop - data: {"type":"message_stop" } + data: {"type":"message_stop" } headers: Content-Type: - text/event-stream; charset=utf-8 status: 200 OK code: 200 - duration: 1.460643125s + duration: 772.506333ms diff --git a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/multi_tool.yaml b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/multi_tool.yaml index 2453c3370aa101a782243b1c6613fb8d1b5560b4..2d20be2115317edf5f3924b8a6528338a261dc34 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/multi_tool.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/multi_tool.yaml @@ -14,7 +14,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-flash:generateContent method: POST response: @@ -38,27 +38,27 @@ interactions: "a": 2 } }, - "thoughtSignature": "CtYBAR/MhbZp5ZDuhyHbftCznQzuyaI5rPK4iL6DCOZOAmHm2hvqsydZ6Zw+07tzqcdyvt0Xj3Jnh9XktQUlSX7lLhgt9ChPZYfBbTUMPnBujEDNLtWhe8/7rZrBKchffl35uHsDpucQ+I+KC9Wj6NzQyaUr/TlGlyGsEXG6RotaEkVFjgxkbwLI7Ibh7CKjSQfqRd5cRz3ANCA9Td7OGCMRGXFGVwm8iC9lmhRtIOFUGxP2WyU/Nnsr3wGO9i4q+3gK17X2+rNbqMKHgb0W0anxkm4kfn8EDw==" + "thoughtSignature": "CuACAePx/153kf8ikIzjnbSUf9jLxFZAf53a2GQYy4mUIqUl077OLhKwcyMd2YnG1/umJQZK8aqE6kdtgJG7sqpuDFZuFmEOqjgc1O3MxE4S+TaBZSa5wS/KAA05t4aGvS8TpkEttdy3u6wfIv6y8LM8A7LHn04qC9gswllmAiZ9iQn72RDWDgS7o2/ciprExjiDQMkU+m5yk3eRkXm1ovs9oNDNoDqlTTJnN0jtu2YgYtsxB/mwKBdA3MjSKwsiuIVc5fJj8970xQrfEmsA94QSGUQ9MNCUkB6kAUsFt3wQQ07X/Q3bYmfyud0OP/dB9HIM4xyVkayDrrVkbAOKD/1u8nKMGkPA5G/0+DaDVU4ZAqhCRGQAtHYRWYhwUZ4DICXJAqhBk9iTLIHvglDMaw4sKDZHqIlVRNnjvsx4nOoirR2S2Wpm3mKoEmCPnFGcQwRV9yJNY5/JwDquRAcwU9q1ug==" }, { "functionCall": { "name": "multiply", "args": { - "b": 3, - "a": 2 + "a": 2, + "b": 3 } } } ] }, "finishReason": "STOP", - "avgLogprobs": -0.949029541015625 + "avgLogprobs": -1.9749752044677735 } ], "usageMetadata": { "promptTokenCount": 60, "candidatesTokenCount": 10, - "totalTokenCount": 129, + "totalTokenCount": 146, "trafficType": "ON_DEMAND", "promptTokensDetails": [ { @@ -72,32 +72,32 @@ interactions: "tokenCount": 10 } ], - "thoughtsTokenCount": 59 + "thoughtsTokenCount": 76 }, "modelVersion": "gemini-2.5-flash", - "createTime": "2025-10-10T17:53:33.301138Z", - "responseId": "HUjpaNKwEoav1tEPtZXfiQc" + "createTime": "2025-10-23T06:56:24.603477Z", + "responseId": "mNH5aNXqJMHDptQPtJigwQc" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 1.033450667s + duration: 1.215592042s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1173 + content_length: 1155 host: us-east5-aiplatform.googleapis.com body: | - {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"add","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"multiply","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"add","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"multiply","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"1","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"2","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"2","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} headers: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-flash:generateContent method: POST response: @@ -114,19 +114,19 @@ interactions: "role": "model", "parts": [ { - "text": "The sum of 2 and 3 is 5.\nThe product of 2 and 3 is 6.", - "thoughtSignature": "CvMBAR/Mhba8Or3cizXO+bltJNPmX3Egn41Nag1M8hjUlogeXAA1V3QbRuM3otL2FTMLckFiUxhtWnp8SPfF6wzh2jMPbhKOt9YOgRzjxpqqpH+HmvDhiWiuc0mxsZiazLNjv6M98WD3sBPK4RGLV2QtnWKJAda6NdgAITqFljR/T2efQMopsaStKTWTu2vzO8mm5vUkuYo7uX1gJLJya6+Hp2BWDEliJBDksLt52BJCo9Y7es21bHfMYq1cAytPHX/PbWl975i7uogyW0tMaT+FID0RMAWAivgKum8b8dwb26UMv5jXaHnNLxvnulBGFWfynXYc" + "text": "2 + 3 = 5\n2 * 3 = 6", + "thoughtSignature": "CsoBAePx/154N3gpceO1Pxh1IXX13o0HK5ftN5BUuyjfGfQi/778zwB+y0XPP47mlVhcC8YrYbdY9OCdsch6wLFdr8GW2Q/X0G7wvo5uCO+rxBCPgj0EJaQ36dnavIrM78MnwNT8JTFuNiifUYDO2Eek5//VNoFkZsbTfR0u6pHlX8odsl2zTqkihtwNkeun9UVCAkOE1J2royE0NUdFe5YQk6cMn/LboPV2NKVDWZxjvV6hlwV27nBoFqiH0r6zRT9AiKi55oTDlvwADA==" } ] }, "finishReason": "STOP", - "avgLogprobs": -0.5109736633300781 + "avgLogprobs": -0.83015022277832029 } ], "usageMetadata": { "promptTokenCount": 76, - "candidatesTokenCount": 25, - "totalTokenCount": 151, + "candidatesTokenCount": 15, + "totalTokenCount": 136, "trafficType": "ON_DEMAND", "promptTokensDetails": [ { @@ -137,18 +137,18 @@ interactions: "candidatesTokensDetails": [ { "modality": "TEXT", - "tokenCount": 25 + "tokenCount": 15 } ], - "thoughtsTokenCount": 50 + "thoughtsTokenCount": 45 }, "modelVersion": "gemini-2.5-flash", - "createTime": "2025-10-10T17:53:34.331007Z", - "responseId": "HkjpaP-ZFLqK1tEPkOGW2Qo" + "createTime": "2025-10-23T06:56:25.801186Z", + "responseId": "mdH5aKLzMMqZptQPrcWIuQM" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 816.680917ms + duration: 1.129055042s diff --git a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/multi_tool_streaming.yaml b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/multi_tool_streaming.yaml index 4268174b18bd046abfbcc42258816410a57cc44b..4084a7fdb08c004a732d6d4b6843aa829bdc75cb 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/multi_tool_streaming.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/multi_tool_streaming.yaml @@ -17,7 +17,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-flash:streamGenerateContent?alt=sse method: POST response: @@ -25,22 +25,22 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"functionCall\": {\"name\": \"add\",\"args\": {\"b\": 3,\"a\": 2}},\"thoughtSignature\": \"Ci8BH8yFtuLxt45+UfeKxkMFQ0z1DpxuAVwZgBO1bkie02mw/IydtauigConMkI1BAphAR/Mhbbc1S4CtuarH8jYYzhaj52+9bv5u/bT2t69eSWaxX6cbCo2UFFP0B8X6OkhlSwlTD3SXQkRfjGJkVOBR+qvQ+hnWd2RgZj2MYk2F+USfyFM+246c7s7S90QHbJWpQpZAR/MhbbXo+/edJGN/ayzTQpejpOFNRxKqRWgLG9y6Mq/xR+XpOdSQmyIcEHZgcdz33JJnIf4bly4Uf2ImuxgPWglL7/OF/AqqzmJ6HV87cn8Gcm9d20UWpkKhQEBH8yFtqsVvzlx3eu7b6fwuVEtf2PYAlXtUqGwF9Z83wbQEGXLVQhHTP1q4VRvWWxnQOkRVQYAyOC2m6k8GKmfP5yrTKEulMhWRzIOgmGWd/hOp2ovZhBW1j+7JU2Def/rlvKRhqCWSK+lSb6foAdz2qO/ljV/LBYag6/K54zoCgcVYgrTCmgBH8yFto6oWP1fkj62haTIkAh7HANl76Cjr5WxN1V+LxU5cZ9MoMCo1MT/QttsDSYuCjbhUbWptDRrHa3sXeTfC9/BzB8hzo3lp8xX+jxw5KE0FYcS4ljTPRpM6Pcd9TS6kz8jEUY41A==\"},{\"functionCall\": {\"name\": \"multiply\",\"args\": {\"a\": 2,\"b\": 3}}}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 57,\"candidatesTokenCount\": 10,\"totalTokenCount\": 160,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 57}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 10}],\"thoughtsTokenCount\": 93},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-10T17:53:35.428458Z\",\"responseId\": \"H0jpaKqTGqLFr9wPqPX_-Aw\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"functionCall\": {\"name\": \"add\",\"args\": {\"a\": 2,\"b\": 3}},\"thoughtSignature\": \"Ci8B4/H/XjyuOgee7LpJYpRJHpOGMkGzHvGpWPF+MgqA7QzwZuX8oQg3ACg0PFB7UQpsAePx/143T9/D/yFC87UGCQANubpumR3Qev0eCIxUwuYK0PWzeQBNOVG3hT7OfGpnCYz7+rCn4D+eFYtOv+DfNGuNnrfXLU/NaWE56qZPyTsZbRcpeNbsqJBpoFAAthOt+BkgcnDoUUrRrc86CmIB4/H/XsWPHWZiN8O5jfSPelfimUn0hxxRTBeoyQxc4IyY+yUAWgCadZIDp93ZpG+Yv0U64V98tV6CSceelboz0J3+o3Cb5v40SA94bj789jqKHPwiFVKFb7FrQCKHFMVHzg==\"},{\"functionCall\": {\"name\": \"multiply\",\"args\": {\"a\": 2,\"b\": 3}}}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 57,\"candidatesTokenCount\": 10,\"totalTokenCount\": 105,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 57}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 10}],\"thoughtsTokenCount\": 38},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-23T06:56:27.169269Z\",\"responseId\": \"m9H5aLWqCvLEptQP_MqZuAw\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 1.12027675s + duration: 1.096928083s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1156 + content_length: 1138 host: us-east5-aiplatform.googleapis.com body: | - {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"add","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"multiply","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"add","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"multiply","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. Always use both add and multiply at the same time."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"1","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"2","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"2","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. Always use both add and multiply at the same time."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} form: alt: - sse @@ -48,7 +48,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-flash:streamGenerateContent?alt=sse method: POST response: @@ -56,10 +56,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"The sum of\"}]}}],\"usageMetadata\": {\"trafficType\": \"ON_DEMAND\"},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-10T17:53:36.542521Z\",\"responseId\": \"IEjpaLmOIdiK1tEPrt_M8Q4\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \" 2 and 3 is 5, and the product of 2 and 3\"}]}}],\"usageMetadata\": {\"trafficType\": \"ON_DEMAND\"},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-10T17:53:36.542521Z\",\"responseId\": \"IEjpaLmOIdiK1tEPrt_M8Q4\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \" is 6.\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 73,\"candidatesTokenCount\": 25,\"totalTokenCount\": 98,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 73}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 25}]},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-10T17:53:36.542521Z\",\"responseId\": \"IEjpaLmOIdiK1tEPrt_M8Q4\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"The sum of\"}]}}],\"usageMetadata\": {\"trafficType\": \"ON_DEMAND\"},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-23T06:56:28.255215Z\",\"responseId\": \"nNH5aO_JD6ryptQP-_6vMQ\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \" 2 and 3 is 5, and the product of 2 and 3\"}]}}],\"usageMetadata\": {\"trafficType\": \"ON_DEMAND\"},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-23T06:56:28.255215Z\",\"responseId\": \"nNH5aO_JD6ryptQP-_6vMQ\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \" is 6.\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 73,\"candidatesTokenCount\": 25,\"totalTokenCount\": 98,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 73}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 25}]},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-23T06:56:28.255215Z\",\"responseId\": \"nNH5aO_JD6ryptQP-_6vMQ\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 562.439458ms + duration: 501.976958ms diff --git a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/simple.yaml b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/simple.yaml index 11b9cf2ffd61e986dde8a7c0441dcb9774ea624e..33dda73c378dde22d23675a9861326c70c9b62fb 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/simple.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/simple.yaml @@ -14,7 +14,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-flash:generateContent method: POST response: @@ -31,18 +31,18 @@ interactions: "role": "model", "parts": [ { - "text": "Olá!" + "text": "Olá! (Oh-lah!)" } ] }, "finishReason": "STOP", - "avgLogprobs": -2.0520646572113037 + "avgLogprobs": -1.2647225516183036 } ], "usageMetadata": { "promptTokenCount": 9, - "candidatesTokenCount": 2, - "totalTokenCount": 37, + "candidatesTokenCount": 7, + "totalTokenCount": 43, "trafficType": "ON_DEMAND", "promptTokensDetails": [ { @@ -53,18 +53,18 @@ interactions: "candidatesTokensDetails": [ { "modality": "TEXT", - "tokenCount": 2 + "tokenCount": 7 } ], - "thoughtsTokenCount": 26 + "thoughtsTokenCount": 27 }, "modelVersion": "gemini-2.5-flash", - "createTime": "2025-10-10T17:53:28.119129Z", - "responseId": "GEjpaNmiB8Kh18kP2devgQ4" + "createTime": "2025-10-23T06:56:18.469078Z", + "responseId": "ktH5aNbQHOn1ptQPkf36wAU" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 1.410897667s + duration: 1.883201042s diff --git a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/simple_streaming.yaml b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/simple_streaming.yaml index 4bc89922229ba8656a7cbe9f75b227a7bcbd7eab..6a66985409dc85e08a5bedd686c69b1246781a6c 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/simple_streaming.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/simple_streaming.yaml @@ -17,7 +17,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-flash:streamGenerateContent?alt=sse method: POST response: @@ -25,10 +25,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"Olá! (pronounced \\\"oh-LAH\\\")\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 9,\"candidatesTokenCount\": 9,\"totalTokenCount\": 45,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 9}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 9}],\"thoughtsTokenCount\": 27},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-10T17:53:29.051002Z\",\"responseId\": \"GUjpaLqOA4av1tEPtZXfiQc\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"Olá!\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 9,\"candidatesTokenCount\": 2,\"totalTokenCount\": 37,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 9}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 2}],\"thoughtsTokenCount\": 26},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-23T06:56:19.541931Z\",\"responseId\": \"k9H5aOuJIcqZptQPrcWIuQM\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 780.130208ms + duration: 838.164042ms diff --git a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/tool.yaml b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/tool.yaml index 5ff1f88947fed205a4876a40933eec96f94fcee5..c81ef1d34688477293d6fb7849d85aa73307041c 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/tool.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/tool.yaml @@ -14,7 +14,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-flash:generateContent method: POST response: @@ -37,18 +37,18 @@ interactions: "location": "Florence,Italy" } }, - "thoughtSignature": "CvoBAR/MhbYk0qvoO1yRgdHDwwyxH/IbvJEJWkExyjhCp5q/0S0Zf9zBcxa2OWwWdQJR8+Z0JMwJ0PLQnf58ln2HT24wU1p3Nr2gMxAVoZUaB4Uxo/g5rq5C5sFVqfrdzeMXIDxhtrC0Q8OzSEcQy2XIjrrmu0XZLF3BVU58ewt4Ok4/HRGzoworbz23/JLZxUEmB4Jz3TmQD3+tCNhENGIko9zcXctE/R06mFmVF/WaihIM1ibpNichDjYZqmHq5NGSE36wpBaxwJgfxxNwspek3hjVT4EsDn97FJsMeL5I3W1j0Tu8XjF7BX92tWcmP9jZO4iF5O2nda6bbQ==" + "thoughtSignature": "CsICAePx/14z2/Y1LwOZuOEfW+8h7yERSI5lsHY/AqynX6oLR1OiF3GZPJApHAIv7Z1RJZJszK371HXJVUnVWQIM3RW5uHNhwqD5iiMhJKgEkC5R5b4LC4EzCzHSQKGXEuFEJKUhIjy36IZKGS8aChOGVs4Cx1g+wgYICstMVtF2Ny86IuYHKfE+KL9BAc6TYN8d5yQySsuPRmPKCHTMC5q/ZaL5muk+Y+2KBMNOb2pI0tM3JiJyl3m/iYn9ENTMOCtPW8WVnR/43SCjF8ECpJH4Ot19VC0DQarwkgj6G1Hb/kw+kypGLm+SXsjWB/nnfOrvjbysSPNKPWL2GJtjTI1aMt6VOE4m8FPTlOQXze4jr3XeiHcylNOoRvWF9t8hesLdmy8xnyKrwSKCH+nAn21yTHPhoYgc69k5gquSB7jztgU/mQ==" } ] }, "finishReason": "STOP", - "avgLogprobs": -1.0515016555786132 + "avgLogprobs": -2.8889617919921875 } ], "usageMetadata": { "promptTokenCount": 28, "candidatesTokenCount": 5, - "totalTokenCount": 84, + "totalTokenCount": 101, "trafficType": "ON_DEMAND", "promptTokensDetails": [ { @@ -62,32 +62,32 @@ interactions: "tokenCount": 5 } ], - "thoughtsTokenCount": 51 + "thoughtsTokenCount": 68 }, "modelVersion": "gemini-2.5-flash", - "createTime": "2025-10-10T17:53:30.097682Z", - "responseId": "GkjpaJL7BYXg1tEPj-il0Ak" + "createTime": "2025-10-23T06:56:20.673204Z", + "responseId": "lNH5aLSLKbHEptQP-Ob28Ak" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 765.1515ms + duration: 835.350042ms - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 734 + content_length: 722 host: us-east5-aiplatform.googleapis.com body: | - {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence,Italy"},"id":"weather","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"weather","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence,Italy"},"id":"1","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} headers: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-flash:generateContent method: POST response: @@ -131,12 +131,12 @@ interactions: ] }, "modelVersion": "gemini-2.5-flash", - "createTime": "2025-10-10T17:53:30.858865Z", - "responseId": "GkjpaPG1NOnqr9wPkPmEqQc" + "createTime": "2025-10-23T06:56:21.509020Z", + "responseId": "ldH5aNyIH6D5ptQPsI7YiQ0" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 613.84925ms + duration: 1.159554792s diff --git a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/tool_streaming.yaml b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/tool_streaming.yaml index d1b064574f9e392788efd75822f3de3e9e1a0327..132a21f511944a1297657e7a9167bbdef8385417 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/tool_streaming.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/tool_streaming.yaml @@ -17,7 +17,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-flash:streamGenerateContent?alt=sse method: POST response: @@ -25,22 +25,22 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"functionCall\": {\"name\": \"weather\",\"args\": {\"location\": \"Florence,Italy\"}},\"thoughtSignature\": \"CiwBH8yFtgEWrsswuiJKtTm0O71xdqArwu946YzZi5DrhqMCR1W/dnTDzrpqMwp3AR/MhbYwgf419d8Qiz1fWmXv2jiaOpg20ejYd0inos2QznyEobLAsVaijF3/F0+uly2ejv4gv9c4eCkyZB95YISvFsv/HVG/vToYgknRhyavgulI5qOX5DPM8HxiDvVqZbEXkPxavasO3DpfsEL0sr/9fJSt+p0KZwEfzIW2wd0x5PgFQS9gGldYmeJXJWKeR6jHti1+zWHy/kJyLU1yI+wmSDNbirg8PdKclw9LoSAAI5UZ7kuf6J4q0AOe+cOU24O/6EhbIKUah0ogHw8mdejEACapOYFI0zkQkloLx0wKtAEBH8yFtpcCgetdQOOK19Pam07q0m8lriGrD+sEGpwmDIHld20IWbN5uLNmzF0zo7Kew6cMg08xPO1VrOXNJyJV+URM82AcshrAX1syE3U5RpN7z7Drj66OR8htZH9vUKX/t9ypZ8HcRCBmoFNyEGScyDE55v19l0CwNEgQMpHUpBGUtl42USTyQmjC8p+S1QLEQtGd7wb8q7Pgn3YDz9EbSvWXqbz6glpVM0vzRyOs/sYwVN4KKwEfzIW2sqGeUzyn2WpY7x08z6MROjREGmnXIOZ9NUa71OVNaFLAOOMa858=\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 28,\"candidatesTokenCount\": 5,\"totalTokenCount\": 110,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 28}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 5}],\"thoughtsTokenCount\": 77},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-10T17:53:31.720272Z\",\"responseId\": \"G0jpaJD7K7qK1tEPkOGW2Qo\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"functionCall\": {\"name\": \"weather\",\"args\": {\"location\": \"Florence,Italy\"}},\"thoughtSignature\": \"CiwB4/H/XvlH08G061BPTdLFZQ/cL6v5RR0Oby+C1ix5VeIXKFWbifeGcrjzTgprAePx/17Qhrpr2LDauCV/W3P/z516lJHLGJ9WRHLyHL68Ys87p9FEo7RaIE79+dyA7dyh/xQXbGkPw4+RbojKamEd6TOTIJduKy2dL4tikBU432wW/l6ieQrkWVgpUyC35GhQWwUvXFpzoVMKegHj8f9e4baQx5XTsS6xxPTmwaBoDtoUSUFUzV6n91uRVMIVTV1CEylQAciPtdb+N+qY3P2PYoiIIRiFHdxvFAgSokJYLMWW4b2jlbeDOMGHUAJvpMosnDYSaPyIeUYC1ALMihEqF98m2L+M6C433oCttoXixbQ/KUkgClYB4/H/XjDlUAZqwxNT97oDxqYPySeZhflM0Iu0FNvOA8jvMA8HrFun6d79vs6N8cBYm+VP9AC2tkogjlwQv0hPSpbXDVMdA3YL6t2RwDN+Q97sFqS1kQ==\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 28,\"candidatesTokenCount\": 5,\"totalTokenCount\": 86,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 28}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 5}],\"thoughtsTokenCount\": 53},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-23T06:56:22.876583Z\",\"responseId\": \"ltH5aKfANfLEptQP_MqZuAw\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 849.035958ms + duration: 830.580459ms - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 734 + content_length: 722 host: us-east5-aiplatform.googleapis.com body: | - {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence,Italy"},"id":"weather","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"weather","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence,Italy"},"id":"1","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} form: alt: - sse @@ -48,7 +48,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-flash:streamGenerateContent?alt=sse method: POST response: @@ -56,10 +56,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"The weather in Florence, Italy\"}]}}],\"usageMetadata\": {\"trafficType\": \"ON_DEMAND\"},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-10T17:53:32.552899Z\",\"responseId\": \"HEjpaMPfIcKh18kP2devgQ4\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \" is 40 C.\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 38,\"candidatesTokenCount\": 12,\"totalTokenCount\": 50,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 38}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 12}]},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-10T17:53:32.552899Z\",\"responseId\": \"HEjpaMPfIcKh18kP2devgQ4\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"The weather in Florence, Italy\"}]}}],\"usageMetadata\": {\"trafficType\": \"ON_DEMAND\"},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-23T06:56:23.704924Z\",\"responseId\": \"l9H5aJyDK6ryptQP-_6vMQ\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \" is 40 degrees Celsius.\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 38,\"candidatesTokenCount\": 13,\"totalTokenCount\": 51,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 38}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 13}]},\"modelVersion\": \"gemini-2.5-flash\",\"createTime\": \"2025-10-23T06:56:23.704924Z\",\"responseId\": \"l9H5aJyDK6ryptQP-_6vMQ\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 429.281708ms + duration: 521.369167ms diff --git a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/multi_tool.yaml b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/multi_tool.yaml index be25f2f950656ed8127ffe87f1a327011e9f510c..24b82e40b5446db5cddeeee2238166f84006441e 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/multi_tool.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/multi_tool.yaml @@ -14,7 +14,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-pro:generateContent method: POST response: @@ -38,27 +38,27 @@ interactions: "b": 3 } }, - "thoughtSignature": "CqQCAR/MhbZLwIC6tafwHAkCxScqjr2T0r1NLWoahLzRTjgt+N9/7szY8vWOM7QZWZZ88VI9n2FshjX2uMxOuA17pXgQkyvSD3RFCTbzN46tFVYUY+ZyOLMM5YXSyHV40LjXUjbuzMAl/zy+m3ePoYHjQa6xnYhjBPSb/By2HvrCQeDkvRJlvh0uG6xxUr2+0mH0T6ml3Dz6M1LIBHIQiQb20vaPtYn2AyboMVIZA2wFPr14kQhVrOec6fwLc9EtVhoEQO+l+/wPIKfbSdxoX1iA9WqgcdarYtREK7FMcM7afsFKpxziZzPw8BEOAmR2piTTSLPpRckvvB0AkRs25Cnq8IYd2A6D543MpTWrZVcvMcLxL9SJ1DGitNCwc3T7NrPRxR6M+w==" + "thoughtSignature": "CvIGAePx/14SkHhFE9nSX3tF/UUvEyMSIydpEPiedFizUyl12h1UWiXnKK/2KRCeTzCPnlf63nU3gkBYSR4VK3AcDgWD2P8wffTD09sY4ofwSBsb6ryX7/h66mtf0s/K+AVm9bT7/u4vT2nBrghELUoq+Oc1xbYXUfbS61L17gseMmc5mxrjJTwqWrV1oc0XkyzBad6LEDp8rZBuQP7yj4mGeaJyY6SchHJBKPfPVK1tweHnkrvxLpLlDzyNL0iYeYhKXtsdeCa94KlMpH/yU9FoGemcSUHH4gaOoDBPP3E70eHCi/bgLvd9ktEaY7Mvv/GD167aEpuWN+hyXgKvRAQLcuuXVrH9I+nDEaZ9H9jVTvZjMnGT8GrooMWBvOrVp9gDPZBT+qXqAfh+v8VK2olKLy8wpc+y1SNUEJpC3HmlAkLLwFlT6CpG7qYvYX4fios1YYlnNMAI5m/GRGgy8uvxNLQtTXckzduT5uB2LtMyymbhNohbP16yveBu7SZcWHxyC6SjQuB9ztNY1t9dvXJmBxrj/jNZ9t1s5BtAX9WmRnIvyRA9ZnyxEtqvRuT1yxmfSN0JCTtrnAuZxm+tm3PfSXeXtQuaAqY7sZ8SSkzfxf51H8FjymvZzVTr4CmPHZlxqouLD0WUrvR4m+f1QWhENMvMfes0N+9PCwUmjr7sdfcwMlKXppLAhZu3i5sXb8NrOyP/IaQh1Z45De1Q1RIGRJjb7SXOaZza39jbunGVX2GneRoFG0cYbOTwFiDHJ/m9+zN2aXBDmOkPuhBVP35Gq4W6RyQmaFLfrNhV6hQTKLRr3Cqc83V1UxjdR096ZPKlyhgZ2Jm6J+nKiMYlBmPssUJONHRvfHlFNPCUlyDXezzslqfAmuhabeQAVrwk7BhWkluO8DpjWyr7fy+qdW+j2Q50d8CIFOZS+vH4BnmGEKUBDq/6LlEGpLHMrQ6p9domxkFWCUzh0AkeNASc/RXqsi3tGbkWlw8dTaCIEnxdTOeKjrggttp/Bj7rIbHMJIMwhJn0l5gV22eUuv2fmtJhZr2pzOi8RWPI+SRPiIz8WXeLFheeZCJc2WYzAF+Hf7P4vZREZu9T+Cyiiqa8aZV41vE/w73R1Jyi0Na08pwZUbEyxZzkCAeT9FykRHe/NPSVpSflslaarfMgPMfEPg+9cib+" }, { "functionCall": { "name": "multiply", "args": { - "a": 2, - "b": 3 + "b": 3, + "a": 2 } } } ] }, "finishReason": "STOP", - "avgLogprobs": -0.074593436717987058 + "avgLogprobs": -0.68308839797973631 } ], "usageMetadata": { "promptTokenCount": 60, "candidatesTokenCount": 10, - "totalTokenCount": 149, + "totalTokenCount": 300, "trafficType": "ON_DEMAND", "promptTokensDetails": [ { @@ -72,32 +72,32 @@ interactions: "tokenCount": 10 } ], - "thoughtsTokenCount": 79 + "thoughtsTokenCount": 230 }, "modelVersion": "gemini-2.5-pro", - "createTime": "2025-10-10T17:54:09.984997Z", - "responseId": "QUjpaKWPPNOJ0ekPr4ebwAs" + "createTime": "2025-10-23T06:56:55.716370Z", + "responseId": "t9H5aNLcK6ryptQP-_6vMQ" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 2.03884825s + duration: 4.090130167s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1173 + content_length: 1155 host: us-east5-aiplatform.googleapis.com body: | - {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"add","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"multiply","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"add","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"multiply","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"1","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"2","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"2","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} headers: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-pro:generateContent method: POST response: @@ -114,19 +114,19 @@ interactions: "role": "model", "parts": [ { - "text": "The sum of 2 and 3 is 5, and their product is 6.", - "thoughtSignature": "Cp4IAR/Mhba0Bn7Mh4n08b+PXOBE1CdnRh+TKHsZaAOWoWHY99KDr1mrl6vTj7pPhTKHdFrEoyWag0Rq/sOLjWIkFu6lk+vKx0KUdBcYsGbRZFHAgExlW5jfRi2AL67vei71c5kHvY0BIxjCD/NLTNkM+toaZMxs8ScPCyPojqZKZ5M5VpzXqEZW1+qUI3DkbsVjGKoEp7sCn5CBVF5a+JUakLa3fprGMojBkc78BwFUHeph6CaBuXS+yUA/8HpCvs0qdZfCf5JEh4XE5PUl5Nu5Ak3gI76GJe5pJqP0goXZywRA8306sVi8Ooh5cVKraXGStRZRMtTO8ctiy7ASorUaIZ1o6/p4MacQorW1MxS/aJbe6FM9Uz/8r8Shfa8xhCnKJXbHoeGh/X5UA/m7PyEE66EwnmSqm2jy5u169qRQvlUoNVt3cKHQuk3/wxYNzzheseQoOti6TU46H8NbVG324VwQzw8wurLZstMTMfHwHDN0F/O3m1h9X43OvbGxxLE0nhBEhqQ66IChFT4vNf38TPd2Z5KVnPRcRpK0+oi6BhrDJbyW8UWjRzHuQbPrD9MAJz0bBBXHxfMgIjFkTi1+DYAF4dSLAL+l1dVAhZSof0MaPbiPX+nnmnNdOknwVPtFQ8gs1uuFE0q5vv2VzkLeh1fiz46UmfvhXg60cpVmlYuzg3L85saJ1jpCj3g3W/fPlCaeUs4jm/xEkMpmjx4HBQ26BvrEyQjU07B5KSceLtau3yb6LzwLTHHPyhE7a/TKsfcmmP2c4K8xFeetOoWA1pHfqwOEt0zcmuUTZgTh1nGGPtho1/lwZ8mz9NdUhuPKphuF7tJsPsxjva6AUoJ63Pr/B716/cstkJ7cnrG5jwTZrN2SPbbEPO/KJOW8lbjjQHZ/XyIR+wtWyY7xihTd2CcKQqJQA+q1PoSmTT7ZO2zSCFn/tEaKIFUBruBBkU4H2TL3+QRTjQfrcB1yzdk5Z0nKeLLqbA0iiq+X5D1MypbLwhU072t3QX/Fg5cvxUg0b04PSQ12lAtifhX9AsUJbEZKQCyNa2b4wvkQSmlGDjkhLob3CKTkSYkyFQ19B/yu25HMW7wD2DF03SMwq3esujWiLTunOzLx/0eU3qT4gbiSU1+ajZ3bCXWBYRSEihbbk3CzbJBWpal+7PgE9MiQUaZGZYpXBbPO027pZUxXX5LeRJj1KiyP7g7cmVON5ATkcWYnkuXgS6oMyXybgu+R0asLhahwtVt7f9z5o4rLBSyu/FSeTJhR+E85cupqEzyg3Vqb9CsdsILryOCFfDCbir2ijwnf8U4/xJ25ke+davAy7Tu/Sx/Y9uxatVQa9nRicNDjqzcrk6RJ+FEjKiAwDRNFfXQ6uRScNZLkUpOZQWJSarSNccFQQzeMPhzo3A==" + "text": "The sum of 2 and 3 is 5, and the product is 6.", + "thoughtSignature": "CtsIAePx/154bFPH9VHqinXcUV/n+fOBQz6u2MwnVRN+B0rYpcxkRaES1pXRfXkG2PomQeDzSqc4MXjv7eDsfJksXytwk8qxnvcGnkB/BkRXTKTNuageqAfft5yp+Jag2TDHqIUS8vthxuzFZf59t1TuTdB2NfOv3Of1DU6i7fafJ12ZWFq0PQJVtscAKYIDx3NhoAE7Q+vyGEQAKSDYKU3qxgvMXNE478pLsDr2nr6PpWva+uzFUQMlqUT4ye87x+WVkZ8nvYv4wwDwh+jfDbYH0xng6C5Um1BF27IY9H3PxV9BP46Og76rP62TsoLk4sl/vGYaz84XLu1Rg9WcO+Bc5RxEl5HLpPO7pxp5Nu1DR5aT199QYqb1vuMcaR3mLoHTPEHWpkL4lQivbwWJOPWXGxO8DLTmsrO9d3G1xidSavJ5x4JM980KIHMUvhAwNI3J3PnPWG1W66o8FTOEcNkdCv5uGFlYJVRxUpFy9EuQTytduTBdni2MNkRDlcwZTXZ+hTdH28Kfrs+VpXusYk4I4pLYS6f2JX2cCWWSE1o8rzZWqNOQpR/aKmxS2w1fV98OVSFyoF9ixedITXCBgWPigt1PsrXCsBaZAZLDQmJ3SxosPYAHvCuwfxA5VicxYdXCFga/So8pSqlDkv+48UNegPPC4FW5h9TBW7ejN/lNj0/6OfENpJQfHC7Rz+3GvU+OZiPKUL3JL1ayDot+aWsTZsM/PH/6ieO0EvSeW4FAyYML5Nux0VXnyIyvuRn66OBCbCkwZFOn+7nBzpmqi1LO0goAJJ6/hVyEtxtvTEDS/9C+d6KNamEQ+MC3Sao2OL8Ml+2LgvemMznqCOPoo/yO0hD3UVIhSyT4yI8HpBVbYtv+ikKK7+iVKGNYE74BDfeLUzWKm3eEnxPlfASiCtzF3oHtgoPn/cDQO4RW1uKUY8gKTtTLlhixk3Uk+0FkelkN0poolzVuunRpmY18UvpUytIZo8jIFj9hwnXIINPWSXU7lndZqgkdWhak3emm1lqmKHBBCXawd3wTO3YIQPhzPvTJZAcRQwMaaI2U/xgzdIN4bcYEeGPSj/+H0+m2ogW+BA6PF+nBp5vgH5naPsQJzuaRMnHx9axZRL9aeJvQXr9qF8XWCtAX1dTeA56UDyJNceML7wFPh5UxNEAAIrFZcLNuGh4L4XY9J9T0gtX45rWXHBV+qFvODJZ8V8eNI/oB6kKf1H+aw+P15nrg1Whn+8seKpherWhmmFTT+nozfz56slDbZ0vMCoLvXn8WDcsq/2Cn5/NC0ayoxznzXGBeN7oSgL5OEmt9ZIWOjmQ0h1j49Bmnovf+i4jPNfsNRxSWY0XntMmrH/X+4kUypK+AxHUn83+2wYsU06zNlgnViMuR2W3Qu6lvtFFVBSj/k34XMfsYx/p6bqN4NPtgB/rhYvb6EkHx4Z2LBFFF+R+dVl6pK5jsaP66vX8i6imoAjzUpzpZYLZcJCTjDLY=" } ] }, "finishReason": "STOP", - "avgLogprobs": -0.80596758189954254 + "avgLogprobs": -1.6167781227513363 } ], "usageMetadata": { "promptTokenCount": 76, "candidatesTokenCount": 19, - "totalTokenCount": 352, + "totalTokenCount": 396, "trafficType": "ON_DEMAND", "promptTokensDetails": [ { @@ -140,15 +140,15 @@ interactions: "tokenCount": 19 } ], - "thoughtsTokenCount": 257 + "thoughtsTokenCount": 301 }, "modelVersion": "gemini-2.5-pro", - "createTime": "2025-10-10T17:54:12.024491Z", - "responseId": "REjpaKu_AeWJ0ekP4czIwAs" + "createTime": "2025-10-23T06:56:59.999110Z", + "responseId": "u9H5aMb9PKD5ptQPsI7YiQ0" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 4.195487584s + duration: 5.075507708s diff --git a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/multi_tool_streaming.yaml b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/multi_tool_streaming.yaml index 77774ba81c5a27f0467c28aab91d8b99a31b0123..c6923b3466d25cc229ce1d48bb6388e61dd4aa77 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/multi_tool_streaming.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/multi_tool_streaming.yaml @@ -17,7 +17,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-pro:streamGenerateContent?alt=sse method: POST response: @@ -25,22 +25,22 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"functionCall\": {\"name\": \"add\",\"args\": {\"a\": 2,\"b\": 3}},\"thoughtSignature\": \"CiQBH8yFtiOcSPrtiNL/5MXYrS703YDiQC/ZycyRiAmPUlpi6l0KXgEfzIW29A9U1otPsCUT7fad8To1donPd/baxgZRwk/fEs0gO/09Op57nJ05ewa7TOEObY4lWHdPf1sa+xYyeZz6g9pZvN5wUeRoasi0bXmjorjsnfOCCnB1axBa9NoKawEfzIW2oHaOoL5wS/Cl8MTLXRGopnupUTLoAEoxQ059IF3Ac/KK4gzVUgR0zU32nPxctzscNnSV/fhTkHoTUPJ1fi4jKnnBAaHBrIO9+wdGJ6K0IUcDI6AwdJQoCdcZc2KoCnq2DveJsALPCocBAR/MhbZ5vtT1vqjHBw7JBLescYfie2bV9pWagSRmJeht2TpVC6kHSJzaq9bSmxoogznwAQQQ9Viv4Sk7Noh4nT/4RYb8VxQf73EO7x/ZWIqBiXeJH1/UGtRqf39sTPf41t8BgDFXd4GWMDD5LfIDg8A4+t8f9LJnfoaS1Q5Mq5iQF0WDt7LECjcBH8yFtiJotlgofhgSjsotMNdEZlax36o6OLNnE++1a+1x+kxfG3nfV7Ck5ulR1olMb9coOPNt\"},{\"functionCall\": {\"name\": \"multiply\",\"args\": {\"b\": 3,\"a\": 2}}}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 57,\"candidatesTokenCount\": 10,\"totalTokenCount\": 147,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 57}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 10}],\"thoughtsTokenCount\": 80},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-10T17:54:16.458370Z\",\"responseId\": \"SEjpaIL9G6GI0ekPqveHmA4\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"functionCall\": {\"name\": \"add\",\"args\": {\"a\": 2,\"b\": 3}},\"thoughtSignature\": \"CiQB4/H/XgQAcXu85WneoGBRKOpeHj0vTklm62USpUddzxZPPLoKXgHj8f9eRUdyVNG1O8Vp4mjOWASvJe/hnO2R7E419QoQB9wL0mqpFa3bC0Ms9zWWHp7S4un46VSIbmd3W/jopqwPDev4hQxsMvhlwbPNZ5eF5bIIKKaOMVv5vcmvFWoKawHj8f9eUrqUzNrwVAJzpRGt+Z7cav1doL0DCW59c06QmgXdcDmTdIX436bdU8yG/Jn8gLfaA7mAOKR+C40/rsjaXpkN+SsQZfL/PU7UCCQvFX+utGUqBwDMGskTfSRZvvQjQTiGldElpP4oCocBAePx/17J+F3vQacIiy1DFbbLNVOstVJEBAnO5z+pniBktLDZOKW1n/8llyTjgSfu9p5t+AzitLEsdb4gdDs5kzRFeglMheIcyLq3+jeOkBklhYkg30b0XZ42c+NUKPj3MN7OkhIyGiYHS5QfLsnXKEeN/h/+EixGq3iKoFMWZDuAsBewbIBDCqgBAePx/17PxUt1XslgsF3qwthx62owqkHzGOYLYy07mGOcXLsFhsu0SxNowKP8X9BFHpfPy7f/5/TPzKS4EDRiwVQeNcW7ngB726QS54Kmlp1wVc0fozejv2CiMCGSPkCFX2CSKrWpb6WY25FbJC7G/6TpC7bg9Hl6sswf/UGlx1/bYoFs0qsMjuPJawOLEaV/5i8SiqXoNvwwqdI/9CoAkt0vMpTabUx8CtgBAePx/14VIfF1svGPHCOsnNOiECbcYfyXvW0hH2myrxAihs8wh++yOaa5Qd16rJyOmVsALu0utjvJuJbDbauY0WOVPGrvHvvAqNSX7CImrlPXjo+uM9TJRlnfk4fS+LgHjEm/3WevSgNALvQSVNwxR9OFqHzGrclY1dyQX1KopfO+Np+Q6lq0UWQrrXTx5iSdScz6mqfNeGT8Htcti/L8t/y1//TS6GAONi71KIr3sHuWYGjFQKAVf9EsKowOANdJcmqiWCp9+aFzpX+DRA1t0A+Y/5YylAQXCkIB4/H/Xt4MOLiYgKHOwz8wYMLC1aWabrDS13VEoVz8mGPnvpbFsEvshPcb0GZS1e1fcIkvgaLBhcFRDYwBFlxBQL0=\"},{\"functionCall\": {\"name\": \"multiply\",\"args\": {\"a\": 2,\"b\": 3}}}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 57,\"candidatesTokenCount\": 10,\"totalTokenCount\": 236,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 57}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 10}],\"thoughtsTokenCount\": 169},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-23T06:57:05.167720Z\",\"responseId\": \"wdH5aKieCrHEptQP-Ob28Ak\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 1.744036208s + duration: 3.020269292s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1156 + content_length: 1138 host: us-east5-aiplatform.googleapis.com body: | - {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"add","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"multiply","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"add","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"multiply","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. Always use both add and multiply at the same time."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"Add and multiply the number 2 and 3"}],"role":"user"},{"parts":[{"functionCall":{"args":{"a":2,"b":3},"id":"1","name":"add"}},{"functionCall":{"args":{"a":2,"b":3},"id":"2","name":"multiply"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"add","response":{"result":"5"}}},{"functionResponse":{"id":"2","name":"multiply","response":{"result":"6"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant. Always use both add and multiply at the same time."}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Add two numbers","name":"add","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}},{"description":"Multiply two numbers","name":"multiply","parameters":{"properties":{"a":{"description":"first number","type":"INTEGER"},"b":{"description":"second number","type":"INTEGER"}},"required":["a","b"],"type":"OBJECT"}}]}]} form: alt: - sse @@ -48,7 +48,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-pro:streamGenerateContent?alt=sse method: POST response: @@ -56,10 +56,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"The sum of 2 and 3 is 5 and the product is 6.\",\"thoughtSignature\": \"CiIBH8yFtlXMzNL6Mlcd9Oh4/T39qsj/so81HRuh5ja754RbCmQBH8yFtkiXilnsEhjqc+/oAV73czI/IVX63MIHx3fP6R6ym+AMNejgj5D0Mnk0MrxaOjFENDK4uUSK40L73j4kyIyZK0pVYoiNDAk0u+MwyI1kpCgdBnFuz9/8lIuOyStAZEPNCmwBH8yFtny8MMG09k0CweELugi0Zh/wRbjCIr9hWcbbVLLYypxNsFa6mEmLukfA/a+ot+kC03T15CEXfgDzmG5AOMQM2PQPErmfWU6Bee6ig3dtgVR6Fbb+97giKMq58tA2ZCZEQomBQ0xT1gMKkAEBH8yFtja3OB/r3IDwXUfQZkMMyHb7gkS1G/2TT0xbJ+7Yf5AdJ/E9wMLbVBGTu9hcnvHtB5A1Avp1cHBuXIWAlXtmayNEdausKCknw6zTkJ+iKilGhfOuRkzB8zEkH6RZlOoLSVRbOWZxV/7U5pS9LHdemdNe9h0Ajfny7Q6YmqmfuHTQtkdl39IcYLCyFw8KmwEBH8yFtqPbXbtcY7mvM4kZoiCqTAkr5uJKtLZ0tB7jJEBpj8d4goZ9np2GFMQpTElWrg0E6xCHj3GR+KjoalO1bzMBoCTHXsoDZzqBEr+69r8i/LgtEhpes1KSaCquu+/eNAt3O8HmNKwAE032DsW7PLjIEtCWcmD+tsEV9Y/t0JiJomPxcxtQ5ZRbRUHFlU3hf0XSl5jISDFhFAq9AQEfzIW2EQtf8LwsjffveUDSoK4t5JPiM6P2uaYyGJoaLVL6yyn1qJ4cnJuidaFCSoAxWuuTyLAnf1SXrRRpPrnXEp8viKP2kFoETmHnvD20exLG/oKHqLu/iwAz2WAYy+jI2wk7A0WfOT+c+RJ7UJC7g3j0g+Lg6nnDYJyyS1dHp6wuuLHmcmzqbHPcbDxIFp28GromOMoIdTYZLIxQKUuS9MYvVv6TV9p/Tjkj5IdfZMRFnlCOY5DcEu7leQrPAQEfzIW2862vzTEGXazlJpXbYzn3L5gjv7pDkYxkU59vHMsbZcMZ+sV1S/fB2ginwKk7JPw8DoTBWyWzLIh9c2Tzq6DlrJaFqkwXU3SFYlrOAUyweYIf0w4toI6ztgvfPkLbW5os2eIi167eW67iOZ33oE/0x5alqU751Pt470hP6DBL8gEvK0sPAmQarQHyBwdcK3tDij97YTS43kdYMBtpVFUA0minG9eFwROm8hEfPvFdl9B+UFD83lkPbwQTfjhXjtnhDtvDJEifmu41YgqtAgEfzIW2Hk/ImHb4xRcLbbD0bEsKXpx/5Ko1X8arWTvI50jugUkAW8GTLLZC6I8tvARLBNQQH3xNuA7wUoFLJ4zVx9MLT4Rd42XbAK3C+pvjr8pZwdx1vVKOnZaBpbzTXcgYiS2/7hTjGWMapLhSoWOsaAfEyRD6bxEcFfLolAxD6nTR4sroz6vTOCyvfIzC/ebpMbUn8jZU1hhk6Pud9asWOl96tn9NNREEmQDqN4CZp168YHoPqgpiNO4K1ZzpcBq8VsjeytE0c9RRfgEsLalwNHLByjtlh6WkmQfEOBQ9Au2gm+Z7HdaWfjl7NfADGTnUBEADNUzLa2f2gNIUqfer85QfjZGUCLU9PWgepAf0eyMwqw47XB4cjz0Nigz5meNqt8sYwD9Vnxn3C18KawEfzIW2J+5eifzMPjA70QprJPL4wejGz5LaslO4rJZtnN1RnfNmsoWWaq6+V9mzvISPD9me2lVRWCnfXc0hCj4qFUPaH51l6/K56Q6JAdccLX379ipjSLjlI8reh13IYdC5ZrfRx1dcXC2t\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 73,\"candidatesTokenCount\": 18,\"totalTokenCount\": 373,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 73}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 18}],\"thoughtsTokenCount\": 282},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-10T17:54:18.206739Z\",\"responseId\": \"SkjpaJPPDNOJ0ekPr4ebwAs\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"The sum of 2 and 3 is 5, and the product is 6.\",\"thoughtSignature\": \"CiIB4/H/XuqOIBIeEbsjSAQFNssL8DW8i38s/pGkh/wrji/6CmMB4/H/Xtr2CkY2+DgKDRCXzRSyIiViWVfzPYzWFvFZjklzwLs7z/RitrewOTYnv7yelrs+ut2Y+FuI6RvDNRYlN7SG8OVBDyyDeCwumyZsW2maZGfq79JOV87NszIzszwdndQKbwHj8f9eQbg0MvA96ZIAwWu+z++vKamUeAx2AaLoBzTnCqdxQQax2RL+/w3iRrR7+dQ4A1cjsoQ/JcMF1NJs66JBP3kvmMcTejiCsv3gyaG2psBpyRN3TjWGMAH+P6EHbYB4iwcfpTY+8xjp34MpAQqdAQHj8f9e759GLlCPcBfF3B7udebCaTL1DFnQdpd0GYpvoVaksBKX+NRoSfumOVP7wuyj9qq96WHXizD2Te1U/l3+wnal73r8ONKWSha/QEwII63Nel3m2um7wAZLRFTLHtJQSkINYNtpRXFQ+5F/Dep9Uh/l4kiv/1LCW+glX6YNkzWOYwHaOLKxucACRs3LHeskm+sqCqCmAfBWMUIKlAEB4/H/XvwLk0os758loEMT/aLUkdOgHx3YURoMD+lIC4aHroU0gajMAD+1D/C5b//pAT/nKGp8JcFnNKwDYU8Ckf1KJS+xqQdckhlJWwQGZOOlpCKVzwZ5YW3vRXUQ20cbXIXtdbI48gJmH/K639Ptjh2+G33vJP+YVTHEdo6PwZf1Ypq9r4YyrotKX139iCAW2MjYCt4BAePx/14FAEqPjY5o+hFp2wrlj9xyLihYAXE+u8xbbH9sCFc6lY2vtGjoWR3nEe9/83oyNoUM9piM2V9LQsznmYTB+GsVFIkUCqVmQwBe6lgFHhR3pLGiggel42Ou9JQfhjROHZsv30pmn74+uWzlb/IhZ1g7F6CRNCpKXyIcucFek9qYiNTarqxZhvb+BD7t8GT2sC6xJTAEh3x2Q67AjM/QOGLoO+HgjVWMmcRld5U4pxcR9BRytmthym5gd0DcknQEl8SbNjmiB9RYluCmrRD90ZLbJ9IrB5rV1sfECrIBAePx/17U61rja323csLvLACgx6DDNUS1nT/vq0Sw2JFhZ8cs58kKA38hYAldyMFZU/UlXV/kAsdxkVL4NxUg1cplYKd94mRN85ACsEjDWLTkrgSmt3NO1dq6A2FwT0tVly0/fdZO+DrZ3Qrn4Kgv8dIe6PQXOWieiVazxs7eBEtD9ZX2Os7cj2Jmnd9QO2hv1Z7IVCUxWKeU5wf4RTl5JiRn1athzRVpsgfAHfOkdWsaKwqpAQHj8f9edkr6y9NB31IBu8UqU83M/ssH3yqoluC+iJrP19OkZIGVRiDliKBFCW5z2wRhoj9OnqrtfeiIAchcZNfUBWxALRIZotgiemozDTl9lHY7r/wst5tnlrMoNCGhjxLIJ8AbFwtCpED/OaMxisop8QTnRftghOJsDJ8rqprgpOOHq82buKUoVqO8ie2vcxkyW++/VjEOnselrYAHjqA9HR2ZPSH7SSc=\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 73,\"candidatesTokenCount\": 19,\"totalTokenCount\": 328,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 73}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 19}],\"thoughtsTokenCount\": 236},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-23T06:57:08.169231Z\",\"responseId\": \"xNH5aI-qCoXwptQPy7WwqA0\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 4.37384875s + duration: 3.008985s diff --git a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/simple.yaml b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/simple.yaml index 15367be8152d0bdc096aac6e8a21c2099fbec0b9..ab3a9c08cd364434d67775321b268e1dd9b243d9 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/simple.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/simple.yaml @@ -14,7 +14,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-pro:generateContent method: POST response: @@ -31,18 +31,18 @@ interactions: "role": "model", "parts": [ { - "text": "Of course!\n\nThe most common ways to say \"hi\" in Portuguese are:\n\n* **Olá!** (This is the direct translation of \"hello\" and can be used in any situation, formal or informal.)\n* **Oi!** (This is more informal, like \"hi,\" and is extremely common, especially in Brazil.)\n\nYou can also use greetings that change with the time of day:\n\n* **Bom dia** (Good morning)\n* **Boa tarde** (Good afternoon)\n* **Boa noite** (Good evening / Good night)" + "text": "Of course!\n\nThe most common way to say \"hi\" in Portuguese is:\n\n**Oi**\n\nYou can also use:\n\n**Olá** (which is like \"hello\")" } ] }, "finishReason": "STOP", - "avgLogprobs": -1.9789696365106302 + "avgLogprobs": -2.3780706305252877 } ], "usageMetadata": { "promptTokenCount": 9, - "candidatesTokenCount": 122, - "totalTokenCount": 1356, + "candidatesTokenCount": 38, + "totalTokenCount": 720, "trafficType": "ON_DEMAND", "promptTokensDetails": [ { @@ -53,18 +53,18 @@ interactions: "candidatesTokensDetails": [ { "modality": "TEXT", - "tokenCount": 122 + "tokenCount": 38 } ], - "thoughtsTokenCount": 1225 + "thoughtsTokenCount": 673 }, "modelVersion": "gemini-2.5-pro", - "createTime": "2025-10-10T17:53:37.635488Z", - "responseId": "IUjpaODkJunqr9wPkPmEqQc" + "createTime": "2025-10-23T06:56:29.134156Z", + "responseId": "ndH5aIyYCLHEptQP-Ob28Ak" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 14.255680041s + duration: 7.471405083s diff --git a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/simple_streaming.yaml b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/simple_streaming.yaml index f19fd6958fba93b539f2f61f2890f2eb29fbc18b..8e14cfe7de1d6739d28e34a8868b76ebacb07d47 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/simple_streaming.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/simple_streaming.yaml @@ -17,7 +17,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-pro:streamGenerateContent?alt=sse method: POST response: @@ -25,10 +25,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"Of course! Here are a few ways to say \\\"hi\\\" in Portuguese, from the most common to other useful greetings.\\n\\nThe most common ways are:\\n\\n* **Olá** (oh-LAH) - This is the direct translation of \\\"hello\\\" and can be used in any situation, formal or informal.\\n*\"}]}}],\"usageMetadata\": {\"trafficType\": \"ON_DEMAND\"},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-10T17:53:52.753834Z\",\"responseId\": \"MEjpaKqBLuWJ0ekP4czIwAs\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \" **Oi** (oy) - This is the most common, casual way to say \\\"hi,\\\" especially in Brazil. It's friendly and used everywhere.\\n\\nYou can also use these common greetings:\\n\\n* **Tudo bem?** (TOO-doo beng?) - Means \\\"How are you?\\\" or\"}]}}],\"usageMetadata\": {\"trafficType\": \"ON_DEMAND\"},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-10T17:53:52.753834Z\",\"responseId\": \"MEjpaKqBLuWJ0ekP4czIwAs\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \" \\\"Is everything well?\\\" and is often used as a greeting on its own.\\n* **Bom dia** (bong JEE-ah) - \\\"Good morning.\\\"\\n* **Boa tarde** (BOH-ah TARD-jay) - \\\"Good afternoon.\\\"\\n* **Boa noite** (B\"}]}}],\"usageMetadata\": {\"trafficType\": \"ON_DEMAND\"},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-10T17:53:52.753834Z\",\"responseId\": \"MEjpaKqBLuWJ0ekP4czIwAs\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"OH-ah NOY-tchee) - \\\"Good evening\\\" or \\\"Good night.\\\"\\n\\nSo, a simple **\\\"Olá\\\"** or **\\\"Oi\\\"** is perfect\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 9,\"candidatesTokenCount\": 233,\"totalTokenCount\": 946,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 9}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 233}],\"thoughtsTokenCount\": 704},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-10T17:53:52.753834Z\",\"responseId\": \"MEjpaKqBLuWJ0ekP4czIwAs\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"Of course!\\n\\nThe most common way is:\\n\\n* **Oi**\\n\\nYou can also say:\\n\\n* **Olá** (This is slightly more formal, like \\\"hello\\\")\\n\\nOften, you'll hear them combined with \\\"how are you?\\\":\\n\\n* **Oi, tudo bem?** (\"}]}}],\"usageMetadata\": {\"trafficType\": \"ON_DEMAND\"},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-23T06:56:36.845945Z\",\"responseId\": \"pNH5aPnQM4XwptQPy7WwqA0\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"Hi, how are you?)\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 9,\"candidatesTokenCount\": 72,\"totalTokenCount\": 890,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 9}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 72}],\"thoughtsTokenCount\": 809},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-23T06:56:36.845945Z\",\"responseId\": \"pNH5aPnQM4XwptQPy7WwqA0\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 8.862185916s + duration: 9.024153875s diff --git a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/tool.yaml b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/tool.yaml index d3149046d91d66ac489ee7712b83c995bb9cf42c..350eb8be4c0709916efd4be651d1314a52cf88e3 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/tool.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/tool.yaml @@ -14,7 +14,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-pro:generateContent method: POST response: @@ -37,18 +37,18 @@ interactions: "location": "Florence, Italy" } }, - "thoughtSignature": "Cv4DAR/MhbZ2LpWbGDKTyyTnSEI5Mbxsa8KH+9LlZ7C1whClIZwMMYizqs+M3qhEkbCwG4lqJXruVsWCWHhA8Mth+s3XzLc4cq3DChXa/vjuNuTGi7NWDzjAOA5ZY+BnK658YQvva+1dFinvrKu1H928HLMQkthqikGFX/oEJw+VJo0tKTWAEKU00oL5D3BL10AWE+D7xcuc/sxoEsJXq+cJaZf4TqNuQ2WvsPi0bx+CIqDmCVJ8Zr7S94jYj0CiAX+taFLoPyvpjG79R5kcnqI6euqhckUnsSbG3nXOeHBiNvsaTD3eHjl+lIs6rWOCVu7sQDOQhO2IkZlrVl+/uYzWFLz/4JJYODYtECgJCz7VK5OSeqIx/YOxADIMpCCgF5S74pGz+9o33foKqukPtPHiJ22YMOs37RYFZDR8f5cnvkomHwIChRQ1T723wsGHLK/KD2c6mb2I8eeVtYQwODyP11ryI5r7G7aMUKM6NKu9K/FzlSkURUlJ18hZ1tPaIyFYGys3+WI0Q7CbxP9Yc7M6luXxy8UdiMqZkk7fegM4EO3IVHp4yYB9exU9Y1QjhY1jTsZcgYZd8QMLpI6mRtwnqtsPF6ymqvo9jfxi1FXCAjhyiNjmP1IPjt1hPoYXbOb+Ntbb9XvGxWtGv1ZhVSveggLzbI53wZFTGd6IuhWd" + "thoughtSignature": "CsQDAePx/16BSTox7w915NWGeZDiCcadqyQOruFo69gjDNj2kp4g8LWDvvqodBi8WkgyhBQCwvQFUOs/UuJDUgabzKp22DWPBpri/c9PH56m7Ss1siHb9d0ETRVWu5d4+Z3cU1iu1/OJy8a4zskJICrRSg8WU8euc2C1qPSHsM0KoFDMPNCluTO4+/BKef19qKEByzGP126OHQPcL498iUIB3dq9suqF4inMw0wQ81J5Cn4+68ckU2fMbvPQpKqmZfzF0y68MwvPH0RWhl1CWiOeIC0tzI/flCWNQJKAB2q+RoK5D3zr1gFQ8QP/cfwet6VW16ajcnmYH7F9Df4/H01iV/aQ5A9M5IRBcwed97whvZraqQFefMQNSru4PeiXygp0cYYbrMQ3+5fntpqhIviNg7oxexnd5jcZhaNZOYD4OIJt6+CPkZXzBtzc9BE9UwCcnJzWRyvHSgDH7zl/xudo8/p4KleUVaD+rzO3f54UtOAV/zd+Fd8qyoqAb2BpLS8czoKP9KVCnFbNizZgno7oTgi8dUkgAtPNUzL4SbDrgNQTKkNDzpfKd8OOmvxo3YVgrXGSeI1fonHIOGf0eMmmzvd+AUY=" } ] }, "finishReason": "STOP", - "avgLogprobs": -0.83615646362304685 + "avgLogprobs": -1.9075927734375 } ], "usageMetadata": { "promptTokenCount": 28, "candidatesTokenCount": 5, - "totalTokenCount": 150, + "totalTokenCount": 128, "trafficType": "ON_DEMAND", "promptTokensDetails": [ { @@ -62,32 +62,32 @@ interactions: "tokenCount": 5 } ], - "thoughtsTokenCount": 117 + "thoughtsTokenCount": 95 }, "modelVersion": "gemini-2.5-pro", - "createTime": "2025-10-10T17:54:02.708890Z", - "responseId": "OkjpaJqiK6GI0ekPqveHmA4" + "createTime": "2025-10-23T06:56:46.277788Z", + "responseId": "rtH5aJz6EOn1ptQPkf36wAU" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 2.841282292s + duration: 1.957397917s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 735 + content_length: 723 host: us-east5-aiplatform.googleapis.com body: | - {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence, Italy"},"id":"weather","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"weather","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence, Italy"},"id":"1","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} headers: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-pro:generateContent method: POST response: @@ -104,18 +104,18 @@ interactions: "role": "model", "parts": [ { - "text": "The weather in Florence, Italy is 40 degrees Celsius.\n" + "text": "The weather in Florence, Italy is 40 C.\n" } ] }, "finishReason": "STOP", - "avgLogprobs": -0.07556527001517159 + "avgLogprobs": -0.1211475684092595 } ], "usageMetadata": { "promptTokenCount": 38, - "candidatesTokenCount": 14, - "totalTokenCount": 52, + "candidatesTokenCount": 13, + "totalTokenCount": 51, "trafficType": "ON_DEMAND", "promptTokensDetails": [ { @@ -126,17 +126,17 @@ interactions: "candidatesTokensDetails": [ { "modality": "TEXT", - "tokenCount": 14 + "tokenCount": 13 } ] }, "modelVersion": "gemini-2.5-pro", - "createTime": "2025-10-10T17:54:05.547479Z", - "responseId": "PUjpaJe1IbqD0ekPpPnL0A0" + "createTime": "2025-10-23T06:56:48.759113Z", + "responseId": "sNH5aMmqLsHDptQPtJigwQc" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 1.102223375s + duration: 1.759973041s diff --git a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/tool_streaming.yaml b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/tool_streaming.yaml index 95240e13239639a4f3fccc72fc349f17d5fe9e86..af9bb9a308690f6d7e79855fa1074a088ca083e5 100644 --- a/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/tool_streaming.yaml +++ b/providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/tool_streaming.yaml @@ -17,7 +17,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-pro:streamGenerateContent?alt=sse method: POST response: @@ -25,22 +25,22 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"functionCall\": {\"name\": \"weather\",\"args\": {\"location\": \"Florence,Italy\"}},\"thoughtSignature\": \"CiIBH8yFtqL+SsLCddk/4VoOe5DT5r8R3xnYhp5FOfJ6nVFACmUBH8yFtufUQzXlrerRxV8pyDnVz+0YNJJPyN4CSlW1pXY/r2CjlepDUpqwYGqNY67zKQsEgIDsC5ItwTe5zdj12Ciq3Cj38c+Ig8D1owiSgHDOWkLgzn27ZMLJ1DEc/RBULRZumwpjAR/MhbbT0a16XvU3Gc/6vCBsiVbKrZEiEbCgX9uCVjCSJW4ejWv+6LfHk31Msi4FcYhEDDwfZWpzopUjARW9eAr34TvnT/MNfa5Pkw8VBtWVcnAV0GCSmBt6qAssoQg+hPWuCqMBAR/Mhba1Dz5g8+pNt30JVQoYkqnaXjkPFZZFi53PfD1702ZTTyBuEHkAfaGA5xkc1DGFOOJBIKcvS+g93dimA9CPl6WqxPjNIS09hArslMsSBlijTvxEfA+be3bTZ5ic0bgMcghEmtG3o22hBxeArg6bIp9E1ZygA1Djd6pWwv2Iq5AoZgy+5EqIaXqCtFYxLjrBrAH30bHm4QmQTU9r/vVHnwquAQEfzIW2ecG1QOUJU5BlGtXHsahNSDLbVvFKEuH24OnkVDTlOwiZ+XcaoiSujahdKJTh9F82arYSoPorcamcw8O1n0NP1Z59gIflpY73BqlJbt4hCBK0DH+6/KfqHvF533gWM5f7Kce4+GrU580MOC1DEeeivoCApF6HORDdgbi9UtfLHBG7MI476E+walwqcpGJvsVDY10NmynGjQM85IlfhTMyKmRYXsQL7GeROQp2AR/MhbZZNS7io3fAV86vVIwJkLgi1uxiTGOuXp3ZO2Iee5rIWVvSookdboinzffqMQCW9Br2pgzWA2uuF0KJV5Py3wXoYVTMQ/o7ZIvZMGTNNW0xzj1fZITx8w8lthHRA1iFG2C4rPjpu13QL9k+xWQ/0i0XUg==\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 28,\"candidatesTokenCount\": 5,\"totalTokenCount\": 158,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 28}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 5}],\"thoughtsTokenCount\": 125},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-10T17:54:06.896572Z\",\"responseId\": \"PkjpaLzcNrGM0ekPl93MkA0\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"functionCall\": {\"name\": \"weather\",\"args\": {\"location\": \"Florence,Italy\"}},\"thoughtSignature\": \"CiQB4/H/XiVd2Ca1mefZ0aLYQnjMBFig65C/dnUtnFkZT4xoiHcKZwHj8f9e8rbVyC3ickntc16RBwRCl6Hh2xBWIL3GUMzy8jYc98uqDcFh9QAEOZXme0vga0w2aHw39rXSHZ61/CJrooMWZa9OSbi6FaSnkJjkrD2y0T2zYx4uAtUnUQlsm6NFY0TjuTwKZAHj8f9eeb8p5DuPp6/oQ1Ldul8Sh0pLWZweoB2kCNqo32qtlnsuVTaNI7YdySX/KlfX7retiXWWUnMFUr9Q0Vy5gtZSoeGB24j9TSt6Y06DOIxQGklBqgEU35B+vPPVJxv54ZQKuwEB4/H/Xi45y/8RIM8hdYJecYG8FkidK5eBV1V41wvCFAw7NnqUyKWAg9EB6I3MdoGXm8xZJVRZVSQ5YYoEfr/109ig3ac0hTOkkmhAEkO9TywD4gKAsNPPGbN5SEDaIKbmXHSu4JZo9qZM4DxNuQafRPXlcIK2tQf2cYz7dZQPakHF90zcCkSjCwGfveIA1lxyZrmuUymAVATkols0V6thSDPWAIg9RqvEwBwJM84Y8ngcH8WlV/bJWU8YCpEBAePx/14EHisTU5veThMq0WqAP0YTTgX7lC2Sf0KC983R4kVAk1gZfX9dV3r80Fh5sGpA6enSJ9IVSfXEmK2L8J8Fz6uYZuxxR/+ON1zbsW+qhmWlLyk4c9dAevD4X5ggrFLB4vef4u9TG4Pt76xWiKscZ3ksGNqNb79AMn3cALCSNIht8mZb2hEtJoq1KgttMAr5AQHj8f9e075jP5UhjdIS5xaZmAMvBE1/xSc0FQYiHOCt+ANGOoDrFQNYDDgnwv3hftQ6d6XJ+ZY3lKeeazpZNP3LEZKK26UfkcKEr8NXSXY/E5QmcNnl9B/zEg3CHNOaudceUDEYJ+AVb52oNWK1AWEs1zE0Xv8u0Eu7LmIIljlUTuNB5KejB2SapZKH9AJjrG0+Xkj5iPHiQXMlmwKR5tXnxQ84DDZARw8icYLvXGcjgKlRjb4yZEGoBg4kZ55MGDrYML6l1NNYkhdU9zztHoK9LpYN6VWy7bAmN/zYdGYcjT+qrkjajRgruUCDIL+X6BnZnAfXk2oEkQqAAgHj8f9e4A41922IOEm/ITVmO7ACrhtZTskqgZTJVGun5tLrcr1RPjcTr1Qc0TRlY6cV2v8CtZhqndD1fZyqXm+Uk8JlACQ3F6y2sUyeEyaOFzAOk6zp163goJmjYQq5o1LO4QaPPm1nRj7kRj9Op9/EdjKzbT5/UCv92uEZXQPe8jhRL7d0eVO1oWetqIfMrCiBnOn8SAlettm+UBaHob8P8jeSbh31odyCtdiujkba3qJRaiHiCw6hSttLqqVdtU5JVhImtlaP+AcZNVGrHX9XoqBzJZj8B7rGivLy3jxEDKXUSQcXIIcmgGxLvP7ropYurfZlsOzAcW/WAWpPq2AKwgIB4/H/Xvo30nvn8/Jxv1E88kh9AVzNp0K+grX1rne/jeYy6KFLuo86C6rCS5zpf6dtvYVHfTsogYdppukK92rpDkKkCb1JzpkHEtcGRXmV0aLS2w69f4OpCfzlTBztZTpN2g5HWH7gD4fuDutPDYTYGqishkOkzhshDJWWRv8lBexq2yUl58a5AlyS2CSwa4BYT9GNF5AEJywImkJL5lUxCh4hISJVxZqO550zXiZoHcJJVMqcgaA4w0sBfy4jFjB6werEz9mYjo34wyBhj286XcYWfOw98myot4vSEWwhF9amVikwHl3meV5gQ8iKuyEG6C9dkEXmGwUf9ywca4vit/F9SGKKc7CC7lUiGqvLSDW6r+TzO2sY59E0sfcE4K4/N7766mSJWCOQwK2pgleuzglopb8zXY+PvYNuXhQ+BsGrCtkBAePx/17EUMUCjtZhMxfoeotAHmAm1Qz+syfxTkH5u87SlvGxtgxnAuu1h3VKUZzVe8hSCMUsoXfsqXroG3UjX/TJFm5yMPqNFYuurXkfjRX9N8IWDyqiz1lOvR5R0pMSMiUX/WHOYH2Efaukz0M2aoigvjH1FI4a/Z2zA2uE14lxq1SQOuI5QEwWKf1NXY8JZ1AhVEp4VUODtwc/DoxCC/hwFhk5hKkz+W1/3o/gAlkU5OeWdDF4KZ74yYFDCpPuPEtvvFqF+3amQMo2dRwcpQsof5x0+xyQgg==\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 28,\"candidatesTokenCount\": 5,\"totalTokenCount\": 340,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 28}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 5}],\"thoughtsTokenCount\": 307},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-23T06:56:50.220833Z\",\"responseId\": \"stH5aKG9DcqZptQPrcWIuQM\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 1.922630417s + duration: 3.985236916s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 734 + content_length: 722 host: us-east5-aiplatform.googleapis.com body: | - {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence,Italy"},"id":"weather","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"weather","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"What's the weather in Florence,Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence,Italy"},"id":"1","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"maxOutputTokens":4000},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} form: alt: - sse @@ -48,7 +48,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.29.0 gl-go/go1.25.0 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://us-east5-aiplatform.googleapis.com/v1beta1/projects/fantasy-playground-472418/locations/us-east5/publishers/google/models/gemini-2.5-pro:streamGenerateContent?alt=sse method: POST response: @@ -56,10 +56,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"The\"}]}}],\"usageMetadata\": {\"trafficType\": \"ON_DEMAND\"},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-10T17:54:08.815625Z\",\"responseId\": \"QEjpaInkMcCC0ekPm6v86As\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \" weather in Florence, Italy is 40 degrees Celsius.\\n\"}]}}],\"usageMetadata\": {\"trafficType\": \"ON_DEMAND\"},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-10T17:54:08.815625Z\",\"responseId\": \"QEjpaInkMcCC0ekPm6v86As\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 38,\"candidatesTokenCount\": 14,\"totalTokenCount\": 52,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 38}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 14}]},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-10T17:54:08.815625Z\",\"responseId\": \"QEjpaInkMcCC0ekPm6v86As\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \"The weather in Florence\"}]}}],\"usageMetadata\": {\"trafficType\": \"ON_DEMAND\"},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-23T06:56:54.192162Z\",\"responseId\": \"ttH5aKLdC_LEptQP_MqZuAw\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"role\": \"model\",\"parts\": [{\"text\": \", Italy is 40 degrees Celsius. \\n\"}]},\"finishReason\": \"STOP\"}],\"usageMetadata\": {\"promptTokenCount\": 38,\"candidatesTokenCount\": 15,\"totalTokenCount\": 53,\"trafficType\": \"ON_DEMAND\",\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 38}],\"candidatesTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 15}]},\"modelVersion\": \"gemini-2.5-pro\",\"createTime\": \"2025-10-23T06:56:54.192162Z\",\"responseId\": \"ttH5aKLdC_LEptQP_MqZuAw\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 656.704042ms + duration: 1.02386s diff --git a/providertests/testdata/TestGoogleThinking/gemini-2.5-flash/thinking-streaming.yaml b/providertests/testdata/TestGoogleThinking/gemini-2.5-flash/thinking-streaming.yaml index fa3f6991266b316580023fec59cd272612489dab..8d335d2790dafc50983c434db30bd4c1dd310bff 100644 --- a/providertests/testdata/TestGoogleThinking/gemini-2.5-flash/thinking-streaming.yaml +++ b/providertests/testdata/TestGoogleThinking/gemini-2.5-flash/thinking-streaming.yaml @@ -17,7 +17,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse method: POST response: @@ -25,22 +25,22 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"**Querying Weather Data**\\n\\nI've determined that the user's request can be fulfilled by using the `weather` tool. It's clear that I need to specify the `location` parameter, and I'll populate this with \\\"Florence, Italy\\\". I am ready to call the tool now.\\n\\n\\n\",\"thought\": true}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 54,\"totalTokenCount\": 106,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 54}],\"thoughtsTokenCount\": 52},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"FHPWaN7CN6S9kdUPhISBeQ\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"weather\",\"args\": {\"location\": \"Florence, Italy\"}},\"thoughtSignature\": \"CiQB0e2Kb191ccXCh0JJt9w3ri7G1OxNATmQ9chokxNfPmwGWSEKZwHR7Ypv5Jovjiqc+ZR/5pEskMvrvcGHTOLGfXr/LUvTM4wq1+Euk8qjznH4X9T6lY+lTiZDual4jaePvaBznDiNLYZ+2DDTahydIuPCh528oYH8Rtdf7TrGszGZ8ImYVcNOZwUBG4UKtwEB0e2Kbx+F1dXr9HLWeMb7GEBhHd3APs8Poy8p+RKC1CkkWn99WMBa4gplxjUH6lPgozGGxph9L4aT9RSqJbZZ+Q1oF83pzqW6SuhL1ieu7RNODnrnq9Gju4J6GBhky8ORO7Ewxts2NKJ530In1RCoR2Ps9oF4XsYv9gl8Fm+4FPfTIn4oure9n4LzuciGoikx3+DRB0oAdIA+TKyjsPbrCXxI8SSk8Nz21Jhl3Mj8Oyn7Zq8hljs=\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 54,\"candidatesTokenCount\": 14,\"totalTokenCount\": 120,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 54}],\"thoughtsTokenCount\": 52},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"FHPWaN7CN6S9kdUPhISBeQ\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"**Querying Weather Data**\\n\\nI'm ready to query the weather tool now. My plan is to input \\\"Florence, Italy\\\" as the location, based on the user's request. I'll pass that location to the tool and expect weather data in response.\\n\\n\\n\",\"thought\": true}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 54,\"totalTokenCount\": 105,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 54}],\"thoughtsTokenCount\": 51},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"kNn5aN2wEczXvdIP053f0AE\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"weather\",\"args\": {\"location\": \"Florence, Italy\"}},\"thoughtSignature\": \"CikB0e2Kb4LhbEW+bno+g0avcBVT72K/jrl7SHLNSzpvehMq0dFuukNMSApwAdHtim9oE+9UuZVsIfU7F0iJ2uDjbyQ4/n7iBhOK0DglXXf0NaMXZ55kajoo7qPGExtaignwaxA5BeypkEvGBa5pPT4hdnlnLKLiUuDq51OHryjhVr365l31xL6b6DgQcSJ1Wh8dacD/4ZEiY1SHLwqmAQHR7Ypv/W6j/0drQh5idhsZVVbwxE8wM1dVOtfJnpyjAqV4TJPkbmuXBB6+1HL0x/BY6UAgk8Apbyf7yvjC2Les3AFP5wsc9TPIqRpPAmqlSsL+CT31kh5jXwVYHLeMlj0+kvbT9N7jzPSxzrIfiGDt+JjPBuhou6aUWf1NUqd6jowxfewjfoKh/ku5engRpQNF6KBCZTXztf7+pE72NnByHM0ocpY=\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0,\"finishMessage\": \"Model generated function call(s).\"}],\"usageMetadata\": {\"promptTokenCount\": 54,\"candidatesTokenCount\": 14,\"totalTokenCount\": 119,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 54}],\"thoughtsTokenCount\": 51},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"kNn5aN2wEczXvdIP053f0AE\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 1.302133666s + duration: 1.633302125s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 776 + content_length: 1222 host: generativelanguage.googleapis.com body: | - {"contents":[{"parts":[{"text":"What's the weather in Florence, Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence, Italy"},"id":"weather","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"weather","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"thinkingConfig":{"includeThoughts":true,"thinkingBudget":128}},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"What's the weather in Florence, Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence, Italy"},"id":"1","name":"weather"},"thoughtSignature":"CikB0e2Kb4LhbEW+bno+g0avcBVT72K/jrl7SHLNSzpvehMq0dFuukNMSApwAdHtim9oE+9UuZVsIfU7F0iJ2uDjbyQ4/n7iBhOK0DglXXf0NaMXZ55kajoo7qPGExtaignwaxA5BeypkEvGBa5pPT4hdnlnLKLiUuDq51OHryjhVr365l31xL6b6DgQcSJ1Wh8dacD/4ZEiY1SHLwqmAQHR7Ypv/W6j/0drQh5idhsZVVbwxE8wM1dVOtfJnpyjAqV4TJPkbmuXBB6+1HL0x/BY6UAgk8Apbyf7yvjC2Les3AFP5wsc9TPIqRpPAmqlSsL+CT31kh5jXwVYHLeMlj0+kvbT9N7jzPSxzrIfiGDt+JjPBuhou6aUWf1NUqd6jowxfewjfoKh/ku5engRpQNF6KBCZTXztf7+pE72NnByHM0ocpY="}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"thinkingConfig":{"includeThoughts":true,"thinkingBudget":128}},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} form: alt: - sse @@ -48,7 +48,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse method: POST response: @@ -56,10 +56,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"The\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 84,\"candidatesTokenCount\": 1,\"totalTokenCount\": 85,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 84}]},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"FnPWaM3ZJpXdnsEP5qn1eQ\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" weather in Florence, Italy is 40 degrees Celsius.\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 84,\"candidatesTokenCount\": 13,\"totalTokenCount\": 97,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 84}]},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"FnPWaM3ZJpXdnsEP5qn1eQ\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"The\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 133,\"candidatesTokenCount\": 1,\"totalTokenCount\": 134,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 133}]},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"kdn5aJTAOb6V28oP0uCC8QI\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" weather in Florence, Italy is 40 C.\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 133,\"candidatesTokenCount\": 12,\"totalTokenCount\": 145,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 133}]},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"kdn5aJTAOb6V28oP0uCC8QI\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 665.085208ms + duration: 715.224792ms diff --git a/providertests/testdata/TestGoogleThinking/gemini-2.5-flash/thinking.yaml b/providertests/testdata/TestGoogleThinking/gemini-2.5-flash/thinking.yaml index 7cfbda211a953f61b07d77c52fbbff5d68d7878b..8df862f1e07a7e065f4d5a240727e085d8cd8bd0 100644 --- a/providertests/testdata/TestGoogleThinking/gemini-2.5-flash/thinking.yaml +++ b/providertests/testdata/TestGoogleThinking/gemini-2.5-flash/thinking.yaml @@ -14,7 +14,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent method: POST response: @@ -30,7 +30,7 @@ interactions: "content": { "parts": [ { - "text": "**Alright, here's what I'm thinking.**\n\nThe user wants the weather, simple enough. They've specified \"Florence, Italy\". My internal processing is telling me I have a `weather` tool that's specifically designed for this sort of query. It needs a `location` argument, and \"Florence, Italy\" is *perfect* for that. So, I should just feed \"Florence, Italy\" directly into the `weather` tool's `location` parameter. That's it, should be a quick and easy retrieval.\n", + "text": "**Analyzing the Request: Weather in Florence**\n\nOkay, so the user wants the weather forecast for Florence, Italy. That's straightforward enough. The \"weather\" tool is the obvious choice here – it's designed specifically for this kind of query. Now, I just need to figure out the right way to use the tool. It looks like it needs a \"location\" argument, which makes perfect sense. And since the user explicitly mentioned \"Florence, Italy,\" that's the location I should provide. So, to get the information, I'll call the \"weather\" tool and pass in `location='Florence, Italy'`. Should be a quick and easy retrieval!\n", "thought": true }, { @@ -40,50 +40,51 @@ interactions: "location": "Florence, Italy" } }, - "thoughtSignature": "Cv0BAdHtim/faT2T5UU6b+75rrcyw9ZzINxOjX23TIc40xJ+vXIv0bdgEIs1AckES34/063nRHBt7/gjtCTI+I/EQvdFAeW8wmtXO0Bp7Vqyineg3rw9u9W4E//mEjfLqcP9EiYi4HER9Pwj+iASiRpZQ0l/hJ32cSCzFVLVgVPQFRlWOrl7AbqZKRZDx1u72L6+3VBhXTGAB+i8m4CK0s1HY4/apyoOcfHVKJyNviC9kXRUhGstF6LO1Gwhz4ckVPHrVOMUCbEDkdcqR4zkCm1R/x6r+9nXwJKoKli5BDcQ7LssCBal009/HaRMJxVnFOLKi5NgSUFqf5SBmZ006g==" + "thoughtSignature": "CqcCAdHtim+w7Zjxo3b6l9LJXbVvkFXVwAc85VHZldttwHx3G4FKSfN61k8WbpQjZArax2N/4C5HtNmYKM7mkzpmqxmR8wiJ9+o5QuG+L6EB6/gs3p0cnJR0tYrt0e/N6uvVasA8wF0DK1GehZ4WPRR6XbQ1fx66s1t2Pi4y0ri70XEa6QgE+TxaGDVg6KOm73GCVVp2IifpSorSF0hmgLboLqPHL5IVgWXbGnr9+0t25KqY04v01BAK04QY3Lmdr4Xr+jxjoCBeCSL7xS/K8zPTl94QtwdWiNqsqK/X5IcGDcz7rlLOLkv76IurHs9+JfPtAcGjZgWO5ZyW5Mf31O8cW4O/9QDYwRTSuBfmY3/dPjUj0Ijk2tHVJkqmmCZ5xe2M7UOWxdV2Kg==" } ], "role": "model" }, "finishReason": "STOP", - "index": 0 + "index": 0, + "finishMessage": "Model generated function call(s)." } ], "usageMetadata": { "promptTokenCount": 54, "candidatesTokenCount": 15, - "totalTokenCount": 120, + "totalTokenCount": 131, "promptTokensDetails": [ { "modality": "TEXT", "tokenCount": 54 } ], - "thoughtsTokenCount": 51 + "thoughtsTokenCount": 62 }, "modelVersion": "gemini-2.5-flash", - "responseId": "FHPWaKjHEu-C7M8P4Yuh8QY" + "responseId": "jtn5aJa6OuayvdIPornA0Q4" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 2.220739041s + duration: 2.3995905s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 776 + content_length: 764 host: generativelanguage.googleapis.com body: | - {"contents":[{"parts":[{"text":"What's the weather in Florence, Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence, Italy"},"id":"weather","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"weather","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"thinkingConfig":{"includeThoughts":true,"thinkingBudget":128}},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"What's the weather in Florence, Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence, Italy"},"id":"1","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"thinkingConfig":{"includeThoughts":true,"thinkingBudget":128}},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} headers: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent method: POST response: @@ -120,11 +121,11 @@ interactions: ] }, "modelVersion": "gemini-2.5-flash", - "responseId": "FHPWaL-mJ4X9nsEP8NW9qQc" + "responseId": "j9n5aPLXJ5uP28oPi-aP0QE" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 338.789083ms + duration: 506.190917ms diff --git a/providertests/testdata/TestGoogleThinking/gemini-2.5-pro/thinking-streaming.yaml b/providertests/testdata/TestGoogleThinking/gemini-2.5-pro/thinking-streaming.yaml index 6f6cc460d171a61965a1501a5dff03cc455317ee..8b922a35b402caf8f33dc01ccbaec5cfbc847a2b 100644 --- a/providertests/testdata/TestGoogleThinking/gemini-2.5-pro/thinking-streaming.yaml +++ b/providertests/testdata/TestGoogleThinking/gemini-2.5-pro/thinking-streaming.yaml @@ -17,7 +17,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:streamGenerateContent?alt=sse method: POST response: @@ -25,22 +25,22 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"**Determining Weather Parameters**\\n\\nI've zeroed in on the user's request: weather in Florence, Italy. It looks like the `weather.get_weather` function is the key, taking a 'location' parameter. I'm setting that 'location' parameter to \\\"Florence, Italy\\\".\\n\\n\\n\",\"thought\": true}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 54,\"totalTokenCount\": 120,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 54}],\"thoughtsTokenCount\": 66},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"H3PWaM6bBs2unsEPxMjWiAE\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"weather\",\"args\": {\"location\": \"Florence, Italy\"}},\"thoughtSignature\": \"CiIAMDEyM0c+NCJiy3JYj0XsvZTkXuxLKGihdjDat3f5/7MLCmcAMDEyM09qXk3Bi2pPwg2Cd9+7MfbfahSwcfaEEEKsuJoZxhKBtT2fk4IM+uXzoxDXaLbFm9F9xq8BP3/LD43xkPDFR/fdIMX+FDeWIcoanKT5KaLZ8oEbAnaSyjNYtT2rnLOI2oVCCoYBADAxMjNl5B+PwPpQYdh6yiUZTp+IG+mGlaKFT+mbCMfFoeXBV7zsuEy8VB/zDk32MmLGpavVKboxQh5vK/0q9iStZDq/mpNilf3IMvLbCRU+1xMaRyE6GMYNYMPFLjbXp4aVaLtX6EaSjXnVo5ReqTnFTZVQPpUMy3siCQw6fiU+eQmH8fsKcAAwMTIz43hmoPPgQ1gQePbuV/plxGwv6JVW85ei/79k5Fza521goyRkMxofrwwDET4jw+6KjEPO9s7A393hLOIzFqrJpM8AJ5om+XoGlT2PVWxRBO5d7gMCNNjirCsULSS+4Qr7GscMcsmV409jKt0=\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 54,\"candidatesTokenCount\": 14,\"totalTokenCount\": 134,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 54}],\"thoughtsTokenCount\": 66},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"H3PWaM6bBs2unsEPxMjWiAE\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"**Identifying Location Details**\\n\\nI've homed in on the user's request. It's a clear weather query targeting \\\"Florence, Italy\\\". The `weather.get_weather` function looks like the right tool, readily accepting a `location` parameter.\\n\\n\\n\",\"thought\": true}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 54,\"totalTokenCount\": 121,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 54}],\"thoughtsTokenCount\": 67},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"3tn5aKLZDtWq28oPr-2tqQ0\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"weather\",\"args\": {\"location\": \"Florence, Italy\"}},\"thoughtSignature\": \"CiIB0e2Kb1FLqBI/wxGNT0RKCf68VTc3ZwRnJ8Uh74FlZRASCmcB0e2Kb2SLzqSsLuj9ZxB7klrblvPhd9xN2XCswmvhOYfh0inSyhO6jRCJ+FMbyNS/3GAStARhxhHE3MVqA6apDOui0uUpUXBSiWugKid3MMigbb3w5Atxi46VRyxI/SH5bqxzpxL6CocBAdHtim/5hLaIc7hPhvoJrnfaFJIPt1o4aDhQU0Tr1pokGWe4h/iYQPNg8PYAPLDIttANib1/Lw9qChOxCAFm/JmppKB/z4gm/lIXqN/aebKziVWyYic6NLShEApycsTzFGw0yJel33OJJla3Mm7G6znOsR0Xc3w49PsX3oyjzW7GzgmJE0IwCnAB0e2Kbz+1WoP+7u1l+n7kwIXVvczL1b0MgaacTwapFVCR/ykH8xnY6NCkElpVBhwPdR/6si/YEy66Cej3SG3mXLeRo5VVYLkipwPkqV4trldlzK0E6oPHCf7nT9dYFjqWFdidrYWAGUXQxSlt+EtI\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0,\"finishMessage\": \"Model generated function call(s).\"}],\"usageMetadata\": {\"promptTokenCount\": 54,\"candidatesTokenCount\": 14,\"totalTokenCount\": 135,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 54}],\"thoughtsTokenCount\": 67},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"3tn5aKLZDtWq28oPr-2tqQ0\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 3.749029209s + duration: 2.969825209s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 776 + content_length: 1310 host: generativelanguage.googleapis.com body: | - {"contents":[{"parts":[{"text":"What's the weather in Florence, Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence, Italy"},"id":"weather","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"weather","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"thinkingConfig":{"includeThoughts":true,"thinkingBudget":128}},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"What's the weather in Florence, Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence, Italy"},"id":"1","name":"weather"},"thoughtSignature":"CiIB0e2Kb1FLqBI/wxGNT0RKCf68VTc3ZwRnJ8Uh74FlZRASCmcB0e2Kb2SLzqSsLuj9ZxB7klrblvPhd9xN2XCswmvhOYfh0inSyhO6jRCJ+FMbyNS/3GAStARhxhHE3MVqA6apDOui0uUpUXBSiWugKid3MMigbb3w5Atxi46VRyxI/SH5bqxzpxL6CocBAdHtim/5hLaIc7hPhvoJrnfaFJIPt1o4aDhQU0Tr1pokGWe4h/iYQPNg8PYAPLDIttANib1/Lw9qChOxCAFm/JmppKB/z4gm/lIXqN/aebKziVWyYic6NLShEApycsTzFGw0yJel33OJJla3Mm7G6znOsR0Xc3w49PsX3oyjzW7GzgmJE0IwCnAB0e2Kbz+1WoP+7u1l+n7kwIXVvczL1b0MgaacTwapFVCR/ykH8xnY6NCkElpVBhwPdR/6si/YEy66Cej3SG3mXLeRo5VVYLkipwPkqV4trldlzK0E6oPHCf7nT9dYFjqWFdidrYWAGUXQxSlt+EtI"}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"thinkingConfig":{"includeThoughts":true,"thinkingBudget":128}},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} form: alt: - sse @@ -48,7 +48,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:streamGenerateContent?alt=sse method: POST response: @@ -56,10 +56,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"Florence\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 84,\"candidatesTokenCount\": 1,\"totalTokenCount\": 85,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 84}]},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"IXPWaO3LNI3j7M8P07ON6AE\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \" is a beautiful city! The weather right now is 40 C.\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 84,\"candidatesTokenCount\": 16,\"totalTokenCount\": 100,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 84}]},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"IXPWaO3LNI3j7M8P07ON6AE\"}\r\n\r\n" + body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"It\"}],\"role\": \"model\"},\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 149,\"candidatesTokenCount\": 1,\"totalTokenCount\": 150,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 149}]},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"4Nn5aLX8I73WvdIPsMqa4QM\"}\r\n\r\ndata: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"'s 40 C in Florence, Italy. \\n\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 149,\"candidatesTokenCount\": 12,\"totalTokenCount\": 161,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 149}]},\"modelVersion\": \"gemini-2.5-pro\",\"responseId\": \"4Nn5aLX8I73WvdIPsMqa4QM\"}\r\n\r\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 1.450682458s + duration: 1.020048125s diff --git a/providertests/testdata/TestGoogleThinking/gemini-2.5-pro/thinking.yaml b/providertests/testdata/TestGoogleThinking/gemini-2.5-pro/thinking.yaml index 94778c04864258338d968f1bd7637227a05fdf27..cc19b897e59ab591c6f8bf0102e95a50f4fb3fed 100644 --- a/providertests/testdata/TestGoogleThinking/gemini-2.5-pro/thinking.yaml +++ b/providertests/testdata/TestGoogleThinking/gemini-2.5-pro/thinking.yaml @@ -14,7 +14,7 @@ interactions: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent method: POST response: @@ -30,7 +30,7 @@ interactions: "content": { "parts": [ { - "text": "**Getting the Weather in Florence**\n\nOkay, so I'm trying to figure out the weather in Florence, Italy. That's straightforward, really. My immediate thought is, \"I need to use that `weather.get_weather` function.\" It's designed for this kind of query. All I have to do is plug in \"Florence, Italy\" as the `location` parameter, and I should have the information I need. Easy peasy.\n", + "text": "**Getting the Weather in Florence**\n\nOkay, so I'm thinking about the weather, specifically in Florence, Italy. That immediately clicks - I know I've got a function, `weather.get_weather`, that's designed for exactly this kind of query. It takes a `location` parameter, which is perfect. Therefore, I'll set that `location` parameter to \"Florence, Italy\", and that should be all I need to get the forecast.\n", "thought": true }, { @@ -40,13 +40,14 @@ interactions: "location": "Florence, Italy" } }, - "thoughtSignature": "CpwCADAxMjOrBS23pWMtbykG2/HxS9zDAprusCU0aR/qeI4cMnnfJCAl4n2UOC6oNCFeNyL3anLH6D2mEwiah92877DeEAig/Rm9u98ApqtJ6mu9vaKXr92/xyQ3EOwYzdXtPEb8LS4qK0SQGWG4zB4KUTVliondCRp6EgYlmlArjj0zbbvNYE1YHtQ6jzR6FpLphhFY8jDP73M0JkwANtjZf+dv9aFNX9pNAK5XYfZCIPEzzWoJpV6zQ5v8dwdj7nSXUqWsd06MR5sRwrfVmtpGrKaDzdDwVcxg2GiWWfYggDbC9EpUidRpCcZt2rKOM486MLgrK1/yIRUCC4jdueC3rkzgihndxJqFNKZw4I1+0Ob+XCw8wanXc9lb314=" + "thoughtSignature": "Cp4CAdHtim8JgCsNhv84SCzZ8bo/kRaAn5bY0cEQ0mfo7nl3GCS7sRlN2T7G4P/Epnwc7/9wbdFzcvcdaqNgWk1flXACXm4QluykEizpys7U+TyP8I2vaUUDIl4Tii0yBZNwjaJxmYp0yb5E9LjpsuEFolG0Ao2vqoJar/0XgY5bzViogURnnUHqVzP2euy5PJEdAd+rOqz1hnK4lCumsNfF5vrkx8aeyGL99C1Eu1/ZETTU7TSnVht+z+4qlysMOlhx4ko0anJ5MWzjewwrZBFkMPgzzw0zVmsHZg9d4t0Hnhmk6Ft7Ge6JOhvI54NgL8MkiviZNvIYT6iHNRqSd71uYeCdCdiw9UJCwASXvbRIv/ktz6OZKrlGld61RP1BXw==" } ], "role": "model" }, "finishReason": "STOP", - "index": 0 + "index": 0, + "finishMessage": "Model generated function call(s)." } ], "usageMetadata": { @@ -62,28 +63,28 @@ interactions: "thoughtsTokenCount": 66 }, "modelVersion": "gemini-2.5-pro", - "responseId": "vHXWaNC4EY7ivdIPg5bG-QM" + "responseId": "29n5aPKhFJrivdIPhYnAuQE" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 4.127855167s + duration: 3.824523542s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 776 + content_length: 764 host: generativelanguage.googleapis.com body: | - {"contents":[{"parts":[{"text":"What's the weather in Florence, Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence, Italy"},"id":"weather","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"weather","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"thinkingConfig":{"includeThoughts":true,"thinkingBudget":128}},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} + {"contents":[{"parts":[{"text":"What's the weather in Florence, Italy?"}],"role":"user"},{"parts":[{"functionCall":{"args":{"location":"Florence, Italy"},"id":"1","name":"weather"}}],"role":"model"},{"parts":[{"functionResponse":{"id":"1","name":"weather","response":{"result":"40 C"}}}],"role":"user"}],"generationConfig":{"thinkingConfig":{"includeThoughts":true,"thinkingBudget":128}},"systemInstruction":{"parts":[{"text":"You are a helpful assistant"}],"role":"user"},"toolConfig":{"functionCallingConfig":{"mode":"AUTO"}},"tools":[{"functionDeclarations":[{"description":"Get weather information for a location","name":"weather","parameters":{"properties":{"location":{"description":"the city","type":"STRING"}},"required":["location"],"type":"OBJECT"}}]}]} headers: Content-Type: - application/json User-Agent: - - google-genai-sdk/1.23.0 gl-go/go1.25.1 + - google-genai-sdk/1.29.0 gl-go/go1.25.1 url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent method: POST response: @@ -99,7 +100,7 @@ interactions: "content": { "parts": [ { - "text": "The weather in Florence, Italy is 40 degrees Celsius. \n" + "text": "The weather in Florence, Italy is 40 C. \n" } ], "role": "model" @@ -110,8 +111,8 @@ interactions: ], "usageMetadata": { "promptTokenCount": 84, - "candidatesTokenCount": 13, - "totalTokenCount": 97, + "candidatesTokenCount": 12, + "totalTokenCount": 96, "promptTokensDetails": [ { "modality": "TEXT", @@ -120,11 +121,11 @@ interactions: ] }, "modelVersion": "gemini-2.5-pro", - "responseId": "vXXWaNC2HOqLxN8P_pmomQM" + "responseId": "3Nn5aMLPIMahxN8P5c69gQc" } headers: Content-Type: - application/json; charset=UTF-8 status: 200 OK code: 200 - duration: 1.178061334s + duration: 1.228113333s