chore: use `google.golang.org/genai` from upstream again (#57)

Andrey Nering created

The devs at Google made available a new function that fits our usecase
and allows us to stop using our fork in favor of upstream again.

I also made sure to test on Crush using `replace` and this is working
as expected.

For context, see:

* https://github.com/googleapis/go-genai/pull/526
* https://github.com/googleapis/go-genai/pull/592

Change summary

go.mod                                                                                    |  2 
go.sum                                                                                    |  4 
providers/google/google.go                                                                |  6 
providertests/testdata/TestGoogleCommon/gemini-2.5-flash/multi_tool.yaml                  | 20 
providertests/testdata/TestGoogleCommon/gemini-2.5-flash/multi_tool_streaming.yaml        |  8 
providertests/testdata/TestGoogleCommon/gemini-2.5-flash/simple.yaml                      | 10 
providertests/testdata/TestGoogleCommon/gemini-2.5-flash/simple_streaming.yaml            |  6 
providertests/testdata/TestGoogleCommon/gemini-2.5-flash/tool.yaml                        | 24 
providertests/testdata/TestGoogleCommon/gemini-2.5-flash/tool_streaming.yaml              |  2 
providertests/testdata/TestGoogleCommon/gemini-2.5-pro/multi_tool.yaml                    | 24 
providertests/testdata/TestGoogleCommon/gemini-2.5-pro/multi_tool_streaming.yaml          |  2 
providertests/testdata/TestGoogleCommon/gemini-2.5-pro/simple.yaml                        | 14 
providertests/testdata/TestGoogleCommon/gemini-2.5-pro/simple_streaming.yaml              |  2 
providertests/testdata/TestGoogleCommon/gemini-2.5-pro/tool.yaml                          | 20 
providertests/testdata/TestGoogleCommon/gemini-2.5-pro/tool_streaming.yaml                |  2 
providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/simple.yaml              |  4 
providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/simple_streaming.yaml    | 41 
providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/tool.yaml                | 12 
providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/tool_streaming.yaml      | 90 
providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/multi_tool.yaml           | 42 
providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/multi_tool_streaming.yaml |  2 
providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/simple.yaml               | 18 
providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/simple_streaming.yaml     |  6 
providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/tool.yaml                 | 26 
providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-flash/tool_streaming.yaml       |  2 
providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/multi_tool.yaml             |  2 
providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/multi_tool_streaming.yaml   |  2 
providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/simple.yaml                 | 20 
providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/simple_streaming.yaml       |  2 
providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/tool.yaml                   | 34 
providertests/testdata/TestGoogleCommon/vertex-gemini-2-5-pro/tool_streaming.yaml         |  2 
providertests/testdata/TestGoogleThinking/gemini-2.5-flash/thinking-streaming.yaml        |  2 
providertests/testdata/TestGoogleThinking/gemini-2.5-flash/thinking.yaml                  | 26 
providertests/testdata/TestGoogleThinking/gemini-2.5-pro/thinking-streaming.yaml          |  2 
providertests/testdata/TestGoogleThinking/gemini-2.5-pro/thinking.yaml                    | 20 
35 files changed, 262 insertions(+), 239 deletions(-)

Detailed changes

go.mod πŸ”—

@@ -7,7 +7,6 @@ require (
 	github.com/aws/aws-sdk-go-v2 v1.39.5
 	github.com/aws/smithy-go v1.23.1
 	github.com/charmbracelet/anthropic-sdk-go v0.0.0-20251024181547-21d6f3d9a904
-	github.com/charmbracelet/go-genai v0.0.0-20251021165952-9befde14ce97
 	github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5
 	github.com/charmbracelet/x/json v0.2.0
 	github.com/go-viper/mapstructure/v2 v2.4.0
@@ -17,6 +16,7 @@ require (
 	github.com/stretchr/testify v1.11.1
 	go.yaml.in/yaml/v4 v4.0.0-rc.2
 	golang.org/x/oauth2 v0.32.0
+	google.golang.org/genai v1.33.1-0.20251103191629-d15baab4f79e
 	gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20250923044825-7b4892dd3117
 )
 

go.sum πŸ”—

@@ -44,8 +44,6 @@ github.com/aws/smithy-go v1.23.1 h1:sLvcH6dfAFwGkHLZ7dGiYF7aK6mg4CgKA/iDKjLDt9M=
 github.com/aws/smithy-go v1.23.1/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
 github.com/charmbracelet/anthropic-sdk-go v0.0.0-20251024181547-21d6f3d9a904 h1:rwLdEpG9wE6kL69KkEKDiWprO8pQOZHZXeod6+9K+mw=
 github.com/charmbracelet/anthropic-sdk-go v0.0.0-20251024181547-21d6f3d9a904/go.mod h1:8TIYxZxsuCqqeJ0lga/b91tBwrbjoHDC66Sq5t8N2R4=
-github.com/charmbracelet/go-genai v0.0.0-20251021165952-9befde14ce97 h1:HK7B5Q+0FidxjQD5CovniMw7axkUeMHwgVkxkbmiW/s=
-github.com/charmbracelet/go-genai v0.0.0-20251021165952-9befde14ce97/go.mod h1:ZagL2esO4qxlOJBj0d4PVvLM82akQFtne8s3ivxBnTQ=
 github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5 h1:DTSZxdV9qQagD4iGcAt9RgaRBZtJl01bfKgdLzUzUPI=
 github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5/go.mod h1:vI5nDVMWi6veaYH+0Fmvpbe/+cv/iJfMntdh+N0+Tms=
 github.com/charmbracelet/x/json v0.2.0 h1:DqB+ZGx2h+Z+1s98HOuOyli+i97wsFQIxP2ZQANTPrQ=
@@ -139,6 +137,8 @@ golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
 golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
 google.golang.org/api v0.239.0 h1:2hZKUnFZEy81eugPs4e2XzIJ5SOwQg0G82bpXD65Puo=
 google.golang.org/api v0.239.0/go.mod h1:cOVEm2TpdAGHL2z+UwyS+kmlGr3bVWQQ6sYEqkKje50=
+google.golang.org/genai v1.33.1-0.20251103191629-d15baab4f79e h1:pGBT6ptC4ENtN9wA4dGhvjwrYpVZ6X9Lnpwu4Y+jozk=
+google.golang.org/genai v1.33.1-0.20251103191629-d15baab4f79e/go.mod h1:7pAilaICJlQBonjKKJNhftDFv3SREhZcTe9F6nRcjbg=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822 h1:fc6jSaCT0vBduLYZHYrBBNY4dsWuvgyff9noRNDdBeE=
 google.golang.org/genproto/googleapis/rpc v0.0.0-20250603155806-513f23925822/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
 google.golang.org/grpc v1.74.2 h1:WoosgB65DlWVC9FqI82dGsZhWFNBSLjQ84bjROOpMu4=

providers/google/google.go πŸ”—

@@ -13,9 +13,9 @@ import (
 	"charm.land/fantasy"
 	"charm.land/fantasy/providers/anthropic"
 	"cloud.google.com/go/auth"
-	"github.com/charmbracelet/go-genai"
 	"github.com/charmbracelet/x/exp/slice"
 	"github.com/google/uuid"
+	"google.golang.org/genai"
 )
 
 // Name is the name of the Google provider.
@@ -162,6 +162,10 @@ func (a *provider) LanguageModel(ctx context.Context, modelID string) (fantasy.L
 	}
 	if a.options.skipAuth {
 		cc.Credentials = &auth.Credentials{TokenProvider: dummyTokenProvider{}}
+	} else if cc.Backend == genai.BackendVertexAI {
+		if err := cc.UseDefaultCredentials(); err != nil {
+			return nil, err
+		}
 	}
 
 	if a.options.baseURL != "" || len(a.options.headers) > 0 {

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.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent
     method: POST
   response:
@@ -37,7 +37,7 @@ interactions:
                       "b": 3
                     }
                   },
-                  "thoughtSignature": "CrwBAdHtim/FP8KqTMIQ2DVD+5BAiIXjN0k+ERNVFbVGtenSKcR/G6MtoIcIE/2nxX2ysKRnwClCPnq5+/KJSzS8uFjvU0577RF+LrP7bRIXSNoufBoAJV0aKusqd1DtXQBZif76FBAMtgiG42NALcM0+Jxs2JaKOhFof+1GhNOi8Zbnj+S/YYkU34CvqANixzHQCFkLpFpHbOmsqfYaiMol4juPFMVOJg2w1WZMS/0mE36gP5C8i8p3B0njO9E="
+                  "thoughtSignature": "CrwBAdHtim+wl6784Zk4lDQyf935vvgPxSmTr5FU84nEUq8ijt+y5Ajfd9AXfYybZQjoWoSaAORt4/EsHJNCd45DrAwz8UZYKIvpGgw9k5aKjLYYgw5GkRc2Cgs6uy4AlHHRIkyWMQfaxIcyV2a0Mm4aiT419RVlLd5vIVxEVHlUVawR/9Sds+EuksQP/EKQfuNaAAFXhunEQmJJiMdyGWKMhXYF+L2jMBTN9DxGpoXBiNeu4w/a32l1OTtxdog="
                 },
                 {
                   "functionCall": {
@@ -69,14 +69,14 @@ interactions:
           "thoughtsTokenCount": 40
         },
         "modelVersion": "gemini-2.5-flash",
-        "responseId": "WtH5aJy3I4K0nsEPiZnbmQs"
+        "responseId": "9AcJad7SDPSGz7IPjsKs6A0"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 1.046624584s
+    duration: 3.031359958s
 - id: 1
   request:
     proto: HTTP/1.1
@@ -90,7 +90,7 @@ interactions:
       Content-Type:
       - application/json
       User-Agent:
-      - google-genai-sdk/1.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent
     method: POST
   response:
@@ -106,7 +106,7 @@ interactions:
             "content": {
               "parts": [
                 {
-                  "text": "The sum of 2 and 3 is 5. The product of 2 and 3 is 6."
+                  "text": "The sum is 5 and the product is 6."
                 }
               ],
               "role": "model"
@@ -117,8 +117,8 @@ interactions:
         ],
         "usageMetadata": {
           "promptTokenCount": 185,
-          "candidatesTokenCount": 24,
-          "totalTokenCount": 209,
+          "candidatesTokenCount": 12,
+          "totalTokenCount": 197,
           "promptTokensDetails": [
             {
               "modality": "TEXT",
@@ -127,11 +127,11 @@ interactions:
           ]
         },
         "modelVersion": "gemini-2.5-flash",
-        "responseId": "W9H5aO2FIdbj7M8Pjvyl8QI"
+        "responseId": "9QcJaYSCJPSGz7IPhcKs6A0"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 1.09843275s
+    duration: 1.487203542s

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.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse
     method: POST
   response:
@@ -25,13 +25,13 @@ interactions:
     proto_major: 2
     proto_minor: 0
     content_length: -1
-    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"
+    body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"functionCall\": {\"name\": \"add\",\"args\": {\"b\": 3,\"a\": 2}},\"thoughtSignature\": \"CikB0e2Kb/HMQc6i7UBRyFsYt3Py//kiN1i+ogTc09WPsRdhdlrPbqY0dQpYAdHtim8DpoYoaf6/9WaPOuM4ieoyrooxEGgr+rAl5vIIQ4mHHGPK3ES36kZb5fJGPx3mhtjks/+IGCakkpTqeVM5b8/uRyU+wFaI0KauqOwXHOhzt7euogp/AdHtim+wDPZH2rIZ9gMZsEEmpRPJB6D9vvfWb5DkLAc6lIG7AFW4Kzih+bkvgt96liwfadjYmkq/yepyTwMlArb+AA2NyudR0MgHxyh+l5BN/gxRZNmGhKfZprKbIPDiHstjnpJXZy136L25YwkcerUaVSUUi/bUUrScZW6IXQ==\"},{\"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\": \"9gcJaf-cE-uJz7IPu5TY2QE\"}\r\n\r\n"
     headers:
       Content-Type:
       - text/event-stream
     status: 200 OK
     code: 200
-    duration: 1.227179416s
+    duration: 1.219170666s
 - id: 1
   request:
     proto: HTTP/1.1
@@ -48,7 +48,7 @@ interactions:
       Content-Type:
       - application/json
       User-Agent:
-      - google-genai-sdk/1.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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

providertests/testdata/TestGoogleCommon/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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent
     method: POST
   response:
@@ -42,21 +42,21 @@ interactions:
         "usageMetadata": {
           "promptTokenCount": 11,
           "candidatesTokenCount": 2,
-          "totalTokenCount": 51,
+          "totalTokenCount": 42,
           "promptTokensDetails": [
             {
               "modality": "TEXT",
               "tokenCount": 11
             }
           ],
-          "thoughtsTokenCount": 38
+          "thoughtsTokenCount": 29
         },
         "modelVersion": "gemini-2.5-flash",
-        "responseId": "VNH5aLz3OsyinsEP1JWGwAY"
+        "responseId": "6gcJafzNJPSHz7IPwvXNgAs"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 1.251824334s
+    duration: 2.003357083s

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.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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\": 36,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 11}],\"thoughtsTokenCount\": 23},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"VtH5aOrPCKXe7M8PyIqmyAQ\"}\r\n\r\n"
+    body: "data: {\"candidates\": [{\"content\": {\"parts\": [{\"text\": \"OlΓ‘!\\n\\nIn Portuguese, \\\"hi\\\" is **OlΓ‘!**\"}],\"role\": \"model\"},\"finishReason\": \"STOP\",\"index\": 0}],\"usageMetadata\": {\"promptTokenCount\": 11,\"candidatesTokenCount\": 14,\"totalTokenCount\": 49,\"promptTokensDetails\": [{\"modality\": \"TEXT\",\"tokenCount\": 11}],\"thoughtsTokenCount\": 24},\"modelVersion\": \"gemini-2.5-flash\",\"responseId\": \"6wcJab6wEJucz7IP3f6J4Qk\"}\r\n\r\n"
     headers:
       Content-Type:
       - text/event-stream
     status: 200 OK
     code: 200
-    duration: 1.273950833s
+    duration: 835.455625ms

providertests/testdata/TestGoogleCommon/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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent
     method: POST
   response:
@@ -33,10 +33,10 @@ interactions:
                   "functionCall": {
                     "name": "weather",
                     "args": {
-                      "location": "Florence,Italy"
+                      "location": "Florence, Italy"
                     }
                   },
-                  "thoughtSignature": "Cq4CAdHtim/sCKoBA0iloUCbLJWtYGJ3Erj6sIXdg1uSnBCPSFzy/3AeL+OpNUxx+N1pYyE7i0pmxs4o2aws3AdQiEN3ATSeiIVjI9BSNXo32VsDtcGmKtB1Gd+p/3MJSh9BCfA1ob6StFyP6Fn7aUoXpPEzV0JN54wDGaBskFWVwXY3sSx7vNU4akaRYYATrg49z66uUqPN+j95C2d8dRYBJe7bJqYbLi4w96Wzl5gLpAURmMv/XlJrK33cf/69yTrxVmQ2nxIeP7ok710y5FIz1n3x1GmQ6ZsQsoJ6QfDLr3lmTFH0DP91MUYB0w28nJ/dMz61MYzOWPNsL1GgHce13+sQTfxLGli+7Tw9/aNXJkxlU9mBpRCdHrLJXLvT9dctSeQ0BzOrrmmFckp3sRs="
+                  "thoughtSignature": "CvYBAdHtim+VrL2UvucUTXguiAiFr1B+yVyHmXWGv262dyNf/DOFOwEVrAAoqSE8NbBv/nkGGVn7PkdDdEKEa+1uCDOMMa0K8FUj6zu3ZivA2JYeqY/ASmq6BnC8JMrvHObNh7KxKI7H7TJ4GzG7uoWUBuwTmmecQcN19f59Zf36Gekwa10X673O1v02WK4D2H+hGfnnNYauwrlMHjDYkruYSrb2u6QcEoLnASnW5WU9ESLGbZy0uqKMztlFvhDcoUCEPboy4p4KjUt0S/iEpjHc2bDjq+EqYS8icqu9zo2UeVREa6nPSOspkW0AGVedfMheSaeJHw4A"
                 }
               ],
               "role": "model"
@@ -49,38 +49,38 @@ interactions:
         "usageMetadata": {
           "promptTokenCount": 54,
           "candidatesTokenCount": 15,
-          "totalTokenCount": 134,
+          "totalTokenCount": 120,
           "promptTokensDetails": [
             {
               "modality": "TEXT",
               "tokenCount": 54
             }
           ],
-          "thoughtsTokenCount": 65
+          "thoughtsTokenCount": 51
         },
         "modelVersion": "gemini-2.5-flash",
-        "responseId": "V9H5aMaoC7b1kdUP5pDSgA0"
+        "responseId": "7QcJadHhA7zQz7IP_7Hy4AY"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 912.648167ms
+    duration: 1.571397s
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 722
+    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":"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"}}]}]}
+      {"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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent
     method: POST
   response:
@@ -117,11 +117,11 @@ interactions:
           ]
         },
         "modelVersion": "gemini-2.5-flash",
-        "responseId": "V9H5aPKVNI_i7M8P5667uQs"
+        "responseId": "7gcJadaCEfODz7IP5-D4uAo"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 754.80525ms
+    duration: 1.260155292s

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.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:streamGenerateContent?alt=sse
     method: POST
   response:
@@ -25,13 +25,13 @@ interactions:
     proto_major: 2
     proto_minor: 0
     content_length: -1

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.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent
     method: POST
   response:
@@ -37,14 +37,14 @@ interactions:
                       "b": 3
                     }
                   },
-                  "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"
+                  "thoughtSignature": "CpECAdHtim+6+kabSNJ55G1aHXgyrJEt4/hov4uGHkcSqzlgfBd4clna+c9UpSL1rvSqMOb2E8NohfunKGm4ZHHOX9X+dBKww0ekyLz+83CF28LbsOzDHrPtIiRYoDaL/75h/HzhboaPK+aunAUglNLxM/b5yrr2tT0jKvz4LzuymTYHCpzBCcoIecoeuT0RO/WaUsjB8CMRGxnigv2XtuFkBxxzk2OWPmhSM6KTeIQTVe0d3T4HjKe2L76XG1WeaV3weeMxeCyrqX4ycxH2fJ1h5cG5EONLNxqA9eHREWu/j5ABiOGxZv2ih6xU/xyo5apwpLAwVSYtyDKXiTH4T6Wp/V7t8E7Urj4smOABFupCATUl"
                 },
                 {
                   "functionCall": {
                     "name": "multiply",
                     "args": {
-                      "b": 3,
-                      "a": 2
+                      "a": 2,
+                      "b": 3
                     }
                   }
                 }
@@ -59,24 +59,24 @@ interactions:
         "usageMetadata": {
           "promptTokenCount": 125,
           "candidatesTokenCount": 36,
-          "totalTokenCount": 347,
+          "totalTokenCount": 234,
           "promptTokensDetails": [
             {
               "modality": "TEXT",
               "tokenCount": 125
             }
           ],
-          "thoughtsTokenCount": 186
+          "thoughtsTokenCount": 73
         },
         "modelVersion": "gemini-2.5-pro",
-        "responseId": "hNH5aIqjLcjz7M8PsbmN8AI"
+        "responseId": "DQkJadesHOWzqtsP98mO8Ao"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 5.258761542s
+    duration: 2.444643917s
 - id: 1
   request:
     proto: HTTP/1.1
@@ -90,7 +90,7 @@ interactions:
       Content-Type:
       - application/json
       User-Agent:
-      - google-genai-sdk/1.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent
     method: POST
   response:
@@ -106,7 +106,7 @@ interactions:
             "content": {
               "parts": [
                 {
-                  "text": "The sum is 5 and the product is 6.\n"
+                  "text": "The sum is 5 and the product is 6. \n"
                 }
               ],
               "role": "model"
@@ -127,11 +127,11 @@ interactions:
           ]
         },
         "modelVersion": "gemini-2.5-pro",
-        "responseId": "h9H5aKLELY7gnsEP56C2iAs"
+        "responseId": "DwkJadePAt-kqtsP1JHw4Qo"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 3.176918083s
+    duration: 1.534345s

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.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:streamGenerateContent?alt=sse
     method: POST
   response:
@@ -25,13 +25,13 @@ interactions:
     proto_major: 2
     proto_minor: 0
     content_length: -1

providertests/testdata/TestGoogleCommon/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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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Γ‘** (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?\")"
+                  "text": "Of course!\n\nThe most common ways to say \"hi\" in Portuguese are:\n\n*   **OlΓ‘** (This is the standard \"hello,\" and it works in any situation.)\n*   **Oi** (This is a more informal and very common \"hi,\" especially in Brazil.)\n\nYou might also hear people greet each other with:\n\n*   **Tudo bem?** (Which means \"How are you?\" or \"Is everything okay?\")"
                 }
               ],
               "role": "model"
@@ -41,22 +41,22 @@ interactions:
         ],
         "usageMetadata": {
           "promptTokenCount": 11,
-          "candidatesTokenCount": 100,
-          "totalTokenCount": 893,
+          "candidatesTokenCount": 94,
+          "totalTokenCount": 802,
           "promptTokensDetails": [
             {
               "modality": "TEXT",
               "tokenCount": 11
             }
           ],
-          "thoughtsTokenCount": 782
+          "thoughtsTokenCount": 697
         },
         "modelVersion": "gemini-2.5-pro",
-        "responseId": "Z9H5aM_PPKKBkdUP-OO7oAM"
+        "responseId": "AQgJabbjM5rQz7IPgq_yiAc"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 10.457368166s
+    duration: 8.976729125s

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.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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

providertests/testdata/TestGoogleCommon/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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent
     method: POST
   response:
@@ -36,7 +36,7 @@ interactions:
                       "location": "Florence, Italy"
                     }
                   },
-                  "thoughtSignature": "CoUDAdHtim/bgtT9Odj2/r1QcjzgE9Zr7qHxmcWWEWix5kqp2At0qQunrv0dH5Lpnh6leBLIjYTZh9Zws11pzYaMxpo8FuY9ajBeG2xcYNkBtmCpNTwXNMODKv90J0jq6PM3RsddM4a0yqfcr8ES2PEtD6XY5KJBdtmcdgIZI6T0S03ITXOXfcwtAoOP5Jm0cdl2YmnvafVbJYCnNlZjuOvpGCMaJIsW8fG9lJZRJKDeg7v80t5sN91085qOP1ZdfhiXxOB/GumlRYO/u35IK3Me35wJI+oFCb1tFxEK7w6HrCBBXduvZqneGgwZyMH+clrRZ6euFhy5uF5xUJPPfeXxLJIw40x6l1bWjAmOtTtiQXFmTSYLerz1iZeFPnZxzbRz0Vr9k4kUBjEEppCgKHm/VN0dfsG0bmrRBIgkJ166xlhwZBJu6cic2Iabw50Sow/VLhzYCXuLQ7lfcL2g5s6arkIAEY62N9gIYpGNRWWh9qghP47ouM5cKzCe1WVWAHIXcs1XBrU="
+                  "thoughtSignature": "CoUDAdHtim8N4HKZPr0LvOdoOCBZCvZIDq+277VOB/Ee7dBu8J4m0pT+8u9m55SqUFvQcQVSxjJEIvR/o6eUzbeSKwJ9s9MgEnQoNXUktpSUuiJ7HJhdapcQnZbCRPrcs+zdqSQGdXHdpjRguIVDRG+r5GnD40lYk1AurV31uEe6Jpox1MIfPxNOLnhuVDwjhAv2zqW0e6hf9ZtmlXk6qtIoLOnFxRAAx2NqZYA22kkoA0s0DtSTAUDQTMr+NrXTbOELd3ZeVjLBsWutkYNwIRWAnzNJ1il3A8xbmEh8YL4Uy+nH48ROgams6PCuxtxTEyOk0sAOKQkfid1STQfDO3VAoB4ne7cgNDh80y1fAo/5cXSGkeMPLqgyZr2jeIx7lWWWDaOHw/ieZDTaJGInBy5blOEkWxKl8mKKgAbvALOEFCdVDwFN+maw17w/Y0FtKWgk8zrdsM8naF/mBtGkulhMDoqjB0XNcIihur24NuD8vyifQl+s7MkkdctYLxdSXVFhfiB5D8w="
                 }
               ],
               "role": "model"
@@ -59,14 +59,14 @@ interactions:
           "thoughtsTokenCount": 93
         },
         "modelVersion": "gemini-2.5-pro",
-        "responseId": "dNH5aK6UFNX1kdUPluXGkAs"
+        "responseId": "DQgJaczjHfHAz7IPo92A4QY"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 3.179773083s
+    duration: 2.028702667s
 - id: 1
   request:
     proto: HTTP/1.1
@@ -80,7 +80,7 @@ interactions:
       Content-Type:
       - application/json
       User-Agent:
-      - google-genai-sdk/1.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent
     method: POST
   response:
@@ -96,7 +96,7 @@ interactions:
             "content": {
               "parts": [
                 {
-                  "text": "The weather in Florence, Italy is 40 C. \n"
+                  "text": "The weather in Florence, Italy is 40 degrees Celsius. \n"
                 }
               ],
               "role": "model"
@@ -107,8 +107,8 @@ interactions:
         ],
         "usageMetadata": {
           "promptTokenCount": 84,
-          "candidatesTokenCount": 12,
-          "totalTokenCount": 96,
+          "candidatesTokenCount": 13,
+          "totalTokenCount": 97,
           "promptTokensDetails": [
             {
               "modality": "TEXT",
@@ -117,11 +117,11 @@ interactions:
           ]
         },
         "modelVersion": "gemini-2.5-pro",
-        "responseId": "d9H5aJKyGI3rnsEP9MvF6Qs"
+        "responseId": "DggJacXrMP2Hz7IP-sawqQ0"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 3.521672167s
+    duration: 1.309785584s

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.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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

providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/simple.yaml πŸ”—

@@ -24,10 +24,10 @@ interactions:
     proto_minor: 0
     content_length: -1
     uncompressed: true
-    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}}'
+    body: '{"model":"claude-3-7-sonnet-20250219","id":"msg_vrtx_01E4ctksfNxnHxb8NL7AzY7L","type":"message","role":"assistant","content":[{"type":"text","text":"OlΓ‘! That''s \"hi\" in Portuguese. How can I help you today?"}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":16,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":22}}'
     headers:
       Content-Type:
       - application/json
     status: 200 OK
     code: 200
-    duration: 2.138460417s
+    duration: 1.867139833s

providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/simple_streaming.yaml πŸ”—

@@ -26,29 +26,56 @@ interactions:
     uncompressed: true
     body: |+
       event: message_start
-      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}}  }
+      data: {"type":"message_start","message":{"model":"claude-3-7-sonnet-20250219","id":"msg_vrtx_011vbTX9zC2NZRQEamT4cSJf","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":4}}             }
 
       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":"OlΓ‘!"}      }
+      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":" Como"}             }
+
+      event: content_block_delta
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" vai vocΓͺ"}       }
+
+      event: content_block_delta
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"?\n\nThis"}    }
+
+      event: content_block_delta
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" is a"}}
+
+      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":" in Portuguese that"}               }
+
+      event: content_block_delta
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" means"}            }
+
+      event: content_block_delta
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" \"Hello! How are"}      }
+
+      event: content_block_delta
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" you?\""}      }
 
       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":7} }
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":27} }
 
       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.311998834s
+    duration: 1.338077792s

providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/tool.yaml πŸ”—

@@ -24,21 +24,21 @@ interactions:
     proto_minor: 0
     content_length: -1
     uncompressed: true
-    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}}'
+    body: '{"model":"claude-3-7-sonnet-20250219","id":"msg_vrtx_013DoXQqRt9hn5cxD1GPCcbj","type":"message","role":"assistant","content":[{"type":"text","text":"I''ll get the current weather information for Florence, Italy for you."},{"type":"tool_use","id":"toolu_vrtx_01AbaFbEuoSmuk9UyZaC4byG","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":68}}'
     headers:
       Content-Type:
       - application/json
     status: 200 OK
     code: 200
-    duration: 1.494068458s
+    duration: 1.495076667s
 - id: 1
   request:
     proto: HTTP/1.1
     proto_major: 1
     proto_minor: 1
-    content_length: 881
+    content_length: 892
     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_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"}'
+    body: '{"max_tokens":4000,"messages":[{"content":[{"text":"What''s the weather in Florence,Italy?","type":"text"}],"role":"user"},{"content":[{"text":"I''ll get the current weather information for Florence, Italy for you.","type":"text"},{"id":"toolu_vrtx_01AbaFbEuoSmuk9UyZaC4byG","input":{"location":"Florence,Italy"},"name":"weather","type":"tool_use"}],"role":"assistant"},{"content":[{"tool_use_id":"toolu_vrtx_01AbaFbEuoSmuk9UyZaC4byG","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
@@ -54,10 +54,10 @@ interactions:
     proto_minor: 0
     content_length: -1
     uncompressed: true
-    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}}'
+    body: '{"model":"claude-3-7-sonnet-20250219","id":"msg_vrtx_01MrnUMp85dMAcyhkjGeX2we","type":"message","role":"assistant","content":[{"type":"text","text":"The current temperature in Florence, Italy is 40Β°C (104Β°F), which is quite hot. If you''re planning to be outdoors, I recommend staying hydrated, wearing light clothing, and seeking shade when possible."}],"stop_reason":"end_turn","stop_sequence":null,"usage":{"input_tokens":476,"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"output_tokens":51}}'
     headers:
       Content-Type:
       - application/json
     status: 200 OK
     code: 200
-    duration: 1.508433666s
+    duration: 1.353360875s

providertests/testdata/TestGoogleCommon/vertex-claude-3-7-sonnet/tool_streaming.yaml πŸ”—

@@ -26,7 +26,7 @@ interactions:
     uncompressed: true
     body: |+
       event: message_start
-      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}}            }
+      data: {"type":"message_start","message":{"model":"claude-3-7-sonnet-20250219","id":"msg_vrtx_015uS6fGm1egYvRuSAr5jmF8","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":3}}         }
 
       event: ping
       data: {"type": "ping"}
@@ -35,53 +35,59 @@ 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":"I'll check the current"}    }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"I'll check"}     }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" weather in"}            }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" the current weather in"}  }
 
       event: content_block_delta
       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              }
+      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_01QqhPGFZ4wcxFxZLX6rF6ht","name":"weather","input":{}}  }
+      data: {"type":"content_block_start","index":1,"content_block":{"type":"tool_use","id":"toolu_vrtx_01HCzehdpw6xDu3CDVXSFHFh","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":"{\"loca"}         }
+      data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"{\"lo"}        }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"tion\": \"Fl"}           }
+      data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"cation\":"}         }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"orence,I"}          }
+      data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":" \"F"}              }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"taly\"}"}             }
+      data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"loren"}           }
+
+      event: content_block_delta
+      data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"ce,"}           }
+
+      event: content_block_delta
+      data: {"type":"content_block_delta","index":1,"delta":{"type":"input_json_delta","partial_json":"Italy\"}"}          }
 
       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"  }
+      data: {"type":"message_stop"            }
 
     headers:
       Content-Type:
       - text/event-stream; charset=utf-8
     status: 200 OK
     code: 200
-    duration: 1.365237292s
+    duration: 1.281991291s
 - id: 1
   request:
     proto: HTTP/1.1
@@ -89,7 +95,7 @@ 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_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"}'
+    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_01HCzehdpw6xDu3CDVXSFHFh","input":{"location":"Florence,Italy"},"name":"weather","type":"tool_use"}],"role":"assistant"},{"content":[{"tool_use_id":"toolu_vrtx_01HCzehdpw6xDu3CDVXSFHFh","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
@@ -107,83 +113,71 @@ interactions:
     uncompressed: true
     body: |+
       event: message_start
-      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}}   }
+      data: {"type":"message_start","message":{"model":"claude-3-7-sonnet-20250219","id":"msg_vrtx_012cLcdjR2yjtxpzQjqjrHua","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":5}}           }
 
       event: ping
       data: {"type": "ping"}
 
       event: content_block_start
-      data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}       }
-
-      event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"It"}}
-
-      event: content_block_delta
-      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":" currently 40Β°C"}      }
-
-      event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" (104Β°F)"} }
+      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":" in Florence, Italy."}              }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"The current temperature in"}         }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" That"}    }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Florence, Italy is "}             }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"'s very"} }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"40Β°C (104"}       }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" hot! If"}    }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Β°F),"}              }
 
       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":" which is very"}          }
 
       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":" hot. If"}          }
 
       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":" you're in"}          }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" visit, I'd recommen"}         }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" Florence or"}    }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d staying hydrated and trying"}           }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" planning to visit soon"}    }
 
       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":", I'd recommend staying"}  }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d being"} }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" hydrated and trying"} }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" out"}    }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" to avoid extende"}          }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"doors during the hottest"}    }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"d periods outdoors during the"}          }
 
       event: content_block_delta
-      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" parts"}             }
+      data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" hottest 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":57}             }
+      data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":60}               }
 
       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: 772.506333ms
+    duration: 3.504416334s

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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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:
@@ -34,11 +34,11 @@ interactions:
                   "functionCall": {
                     "name": "add",
                     "args": {
-                      "b": 3,
-                      "a": 2
+                      "a": 2,
+                      "b": 3
                     }
                   },
-                  "thoughtSignature": "CuACAePx/153kf8ikIzjnbSUf9jLxFZAf53a2GQYy4mUIqUl077OLhKwcyMd2YnG1/umJQZK8aqE6kdtgJG7sqpuDFZuFmEOqjgc1O3MxE4S+TaBZSa5wS/KAA05t4aGvS8TpkEttdy3u6wfIv6y8LM8A7LHn04qC9gswllmAiZ9iQn72RDWDgS7o2/ciprExjiDQMkU+m5yk3eRkXm1ovs9oNDNoDqlTTJnN0jtu2YgYtsxB/mwKBdA3MjSKwsiuIVc5fJj8970xQrfEmsA94QSGUQ9MNCUkB6kAUsFt3wQQ07X/Q3bYmfyud0OP/dB9HIM4xyVkayDrrVkbAOKD/1u8nKMGkPA5G/0+DaDVU4ZAqhCRGQAtHYRWYhwUZ4DICXJAqhBk9iTLIHvglDMaw4sKDZHqIlVRNnjvsx4nOoirR2S2Wpm3mKoEmCPnFGcQwRV9yJNY5/JwDquRAcwU9q1ug=="
+                  "thoughtSignature": "CqECAePx/16hu6jpQBsua/6D0znPjMbbAuwTIAxACow0BHlZjpuJ2bAGyr7Wo7paE6FNx84jcAd1AMLIJAWscUNukGCRiDORASgswHP16BSSB6jN5dLjTJ0UpUoxESXEW4U0iyrruAkortreKykTPMnW63wWjao8KQESbO/Q7g7WOQPGUzpmOCw9cvKt6I/DRZLjiJ1S8BmgEbc8ix2C4YBguza0iJ28V3ggewHiXumC3RxijchXLLkLx9Y5ww3XoJk1QaaWN3puEeWyVpEOQQJHa0pQVLYIp+IkQ0t0oe3jKDI05FBjn+h1lvbHoPuImyLtjUZFAMBqh76BWHQAYsfVUEzzSWplygLX0RP+NABj/9jDMK22/+DjBnBpEL1dv0lXvQ=="
                 },
                 {
                   "functionCall": {
@@ -52,13 +52,13 @@ interactions:
               ]
             },
             "finishReason": "STOP",
-            "avgLogprobs": -1.9749752044677735
+            "avgLogprobs": -0.99647712707519531
           }
         ],
         "usageMetadata": {
           "promptTokenCount": 60,
           "candidatesTokenCount": 10,
-          "totalTokenCount": 146,
+          "totalTokenCount": 140,
           "trafficType": "ON_DEMAND",
           "promptTokensDetails": [
             {
@@ -72,18 +72,18 @@ interactions:
               "tokenCount": 10
             }
           ],
-          "thoughtsTokenCount": 76
+          "thoughtsTokenCount": 70
         },
         "modelVersion": "gemini-2.5-flash",
-        "createTime": "2025-10-23T06:56:24.603477Z",
-        "responseId": "mNH5aNXqJMHDptQPtJigwQc"
+        "createTime": "2025-11-03T19:52:55.484773Z",
+        "responseId": "FwgJaaXLHe2iptQP__zTsAs"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 1.215592042s
+    duration: 1.145860833s
 - id: 1
   request:
     proto: HTTP/1.1
@@ -97,7 +97,7 @@ interactions:
       Content-Type:
       - application/json
       User-Agent:
-      - google-genai-sdk/1.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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,18 @@ interactions:
               "role": "model",
               "parts": [
                 {
-                  "text": "2 + 3 = 5\n2 * 3 = 6",
-                  "thoughtSignature": "CsoBAePx/154N3gpceO1Pxh1IXX13o0HK5ftN5BUuyjfGfQi/778zwB+y0XPP47mlVhcC8YrYbdY9OCdsch6wLFdr8GW2Q/X0G7wvo5uCO+rxBCPgj0EJaQ36dnavIrM78MnwNT8JTFuNiifUYDO2Eek5//VNoFkZsbTfR0u6pHlX8odsl2zTqkihtwNkeun9UVCAkOE1J2royE0NUdFe5YQk6cMn/LboPV2NKVDWZxjvV6hlwV27nBoFqiH0r6zRT9AiKi55oTDlvwADA=="
+                  "text": "The sum of 2 and 3 is 5. The product of 2 and 3 is 6."
                 }
               ]
             },
             "finishReason": "STOP",
-            "avgLogprobs": -0.83015022277832029
+            "avgLogprobs": -0.047055284182230629
           }
         ],
         "usageMetadata": {
           "promptTokenCount": 76,
-          "candidatesTokenCount": 15,
-          "totalTokenCount": 136,
+          "candidatesTokenCount": 24,
+          "totalTokenCount": 100,
           "trafficType": "ON_DEMAND",
           "promptTokensDetails": [
             {
@@ -137,18 +136,17 @@ interactions:
           "candidatesTokensDetails": [
             {
               "modality": "TEXT",
-              "tokenCount": 15
+              "tokenCount": 24
             }
-          ],
-          "thoughtsTokenCount": 45
+          ]
         },
         "modelVersion": "gemini-2.5-flash",
-        "createTime": "2025-10-23T06:56:25.801186Z",
-        "responseId": "mdH5aKLzMMqZptQPrcWIuQM"
+        "createTime": "2025-11-03T19:52:56.654104Z",
+        "responseId": "GAgJaZj2J4jK5OMPiMqt0Qg"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 1.129055042s
+    duration: 714.085958ms

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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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,13 +25,13 @@ interactions:
     proto_major: 2
     proto_minor: 0
     content_length: -1

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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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Γ‘! (Oh-lah!)"
+                  "text": "OlΓ‘!"
                 }
               ]
             },
             "finishReason": "STOP",
-            "avgLogprobs": -1.2647225516183036
+            "avgLogprobs": -2.3644888401031494
           }
         ],
         "usageMetadata": {
           "promptTokenCount": 9,
-          "candidatesTokenCount": 7,
-          "totalTokenCount": 43,
+          "candidatesTokenCount": 2,
+          "totalTokenCount": 38,
           "trafficType": "ON_DEMAND",
           "promptTokensDetails": [
             {
@@ -53,18 +53,18 @@ interactions:
           "candidatesTokensDetails": [
             {
               "modality": "TEXT",
-              "tokenCount": 7
+              "tokenCount": 2
             }
           ],
           "thoughtsTokenCount": 27
         },
         "modelVersion": "gemini-2.5-flash",
-        "createTime": "2025-10-23T06:56:18.469078Z",
-        "responseId": "ktH5aNbQHOn1ptQPkf36wAU"
+        "createTime": "2025-11-03T19:52:49.131611Z",
+        "responseId": "EQgJaZuECPfyptQPiO7F0Qw"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 1.883201042s
+    duration: 1.398007208s

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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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Γ‘!\"}]},\"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"
+    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-11-03T19:52:50.051639Z\",\"responseId\": \"EggJabeTA8_PptQPo-GH8QQ\"}\r\n\r\n"
     headers:
       Content-Type:
       - text/event-stream
     status: 200 OK
     code: 200
-    duration: 838.164042ms
+    duration: 1.190780917s

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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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": "CsICAePx/14z2/Y1LwOZuOEfW+8h7yERSI5lsHY/AqynX6oLR1OiF3GZPJApHAIv7Z1RJZJszK371HXJVUnVWQIM3RW5uHNhwqD5iiMhJKgEkC5R5b4LC4EzCzHSQKGXEuFEJKUhIjy36IZKGS8aChOGVs4Cx1g+wgYICstMVtF2Ny86IuYHKfE+KL9BAc6TYN8d5yQySsuPRmPKCHTMC5q/ZaL5muk+Y+2KBMNOb2pI0tM3JiJyl3m/iYn9ENTMOCtPW8WVnR/43SCjF8ECpJH4Ot19VC0DQarwkgj6G1Hb/kw+kypGLm+SXsjWB/nnfOrvjbysSPNKPWL2GJtjTI1aMt6VOE4m8FPTlOQXze4jr3XeiHcylNOoRvWF9t8hesLdmy8xnyKrwSKCH+nAn21yTHPhoYgc69k5gquSB7jztgU/mQ=="
+                  "thoughtSignature": "CqoCAePx/17/8Q8KZZMun2Jh8nZkCjH+u0w5GCukRd4aSFxz4PI0YFXB/lvok+cVkxL3Fv0ZrP45+NDbGDDT+4Gf7lNe21zmmu3xQWaXmR+/EaYhuaHiFj8icU2IzVr0ra22AJ2SQFJNMB5g5Uu1TSJsYD1IkrB4NnkyudqlctBE1400PoB9wOzxM5kNtWseTLDw0a3XPgh0sV82nkHOyt8ogFkqNwIovTrvqQ+9HB0bTGqYk5U2XikPiCRzjJ9/g3CRzydE5eg6oLn7E5qR4WD25xOcHBki9RxITWSglwG3tYYDI8s/UG7eNc6aDiX72LL8xwEQMwOT6DQUzQanoQC7nlIqnHXas2eiq1zCkS7O6HGfuuXtcz0euBKxndi/3ESgzzQGKY8rCa065Q=="
                 }
               ]
             },
             "finishReason": "STOP",
-            "avgLogprobs": -2.8889617919921875
+            "avgLogprobs": -1.3909281730651855
           }
         ],
         "usageMetadata": {
           "promptTokenCount": 28,
           "candidatesTokenCount": 5,
-          "totalTokenCount": 101,
+          "totalTokenCount": 96,
           "trafficType": "ON_DEMAND",
           "promptTokensDetails": [
             {
@@ -62,18 +62,18 @@ interactions:
               "tokenCount": 5
             }
           ],
-          "thoughtsTokenCount": 68
+          "thoughtsTokenCount": 63
         },
         "modelVersion": "gemini-2.5-flash",
-        "createTime": "2025-10-23T06:56:20.673204Z",
-        "responseId": "lNH5aLSLKbHEptQP-Ob28Ak"
+        "createTime": "2025-11-03T19:52:51.509145Z",
+        "responseId": "EwgJadmJH9nEptQP9fCJyQY"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 835.350042ms
+    duration: 1.300916167s
 - id: 1
   request:
     proto: HTTP/1.1
@@ -87,7 +87,7 @@ interactions:
       Content-Type:
       - application/json
       User-Agent:
-      - google-genai-sdk/1.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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:
@@ -109,7 +109,7 @@ interactions:
               ]
             },
             "finishReason": "STOP",
-            "avgLogprobs": -0.048118614233457126
+            "avgLogprobs": -0.052264484075399548
           }
         ],
         "usageMetadata": {
@@ -131,12 +131,12 @@ interactions:
           ]
         },
         "modelVersion": "gemini-2.5-flash",
-        "createTime": "2025-10-23T06:56:21.509020Z",
-        "responseId": "ldH5aNyIH6D5ptQPsI7YiQ0"
+        "createTime": "2025-11-03T19:52:52.815110Z",
+        "responseId": "FAgJaYbgMe2iptQP__zTsAs"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 1.159554792s
+    duration: 653.623083ms

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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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,13 +25,13 @@ interactions:
     proto_major: 2
     proto_minor: 0
     content_length: -1

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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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
                     }
                   },

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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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,13 +25,13 @@ interactions:
     proto_major: 2
     proto_minor: 0
     content_length: -1

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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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 way to say \"hi\" in Portuguese is:\n\n**Oi**\n\nYou can also use:\n\n**OlΓ‘** (which is like \"hello\")"
+                  "text": "Of course! Here are the most common ways:\n\n*   **Oi** (This is the most common and informal, like \"hi\")\n*   **OlΓ‘** (This is like \"hello\" and can be used in both formal and informal situations)\n\nYou can also combine them with \"how are you?\":\n\n*   **Oi, tudo bem?** (Hi, how are you?)"
                 }
               ]
             },
             "finishReason": "STOP",
-            "avgLogprobs": -2.3780706305252877
+            "avgLogprobs": -1.3811639073383377
           }
         ],
         "usageMetadata": {
           "promptTokenCount": 9,
-          "candidatesTokenCount": 38,
-          "totalTokenCount": 720,
+          "candidatesTokenCount": 83,
+          "totalTokenCount": 811,
           "trafficType": "ON_DEMAND",
           "promptTokensDetails": [
             {
@@ -53,18 +53,18 @@ interactions:
           "candidatesTokensDetails": [
             {
               "modality": "TEXT",
-              "tokenCount": 38
+              "tokenCount": 83
             }
           ],
-          "thoughtsTokenCount": 673
+          "thoughtsTokenCount": 719
         },
         "modelVersion": "gemini-2.5-pro",
-        "createTime": "2025-10-23T06:56:29.134156Z",
-        "responseId": "ndH5aIyYCLHEptQP-Ob28Ak"
+        "createTime": "2025-11-03T19:52:59.997761Z",
+        "responseId": "GwgJaYHzPNnEptQP9fCJyQY"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 7.471405083s
+    duration: 9.378146209s

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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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

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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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": "CsQDAePx/16BSTox7w915NWGeZDiCcadqyQOruFo69gjDNj2kp4g8LWDvvqodBi8WkgyhBQCwvQFUOs/UuJDUgabzKp22DWPBpri/c9PH56m7Ss1siHb9d0ETRVWu5d4+Z3cU1iu1/OJy8a4zskJICrRSg8WU8euc2C1qPSHsM0KoFDMPNCluTO4+/BKef19qKEByzGP126OHQPcL498iUIB3dq9suqF4inMw0wQ81J5Cn4+68ckU2fMbvPQpKqmZfzF0y68MwvPH0RWhl1CWiOeIC0tzI/flCWNQJKAB2q+RoK5D3zr1gFQ8QP/cfwet6VW16ajcnmYH7F9Df4/H01iV/aQ5A9M5IRBcwed97whvZraqQFefMQNSru4PeiXygp0cYYbrMQ3+5fntpqhIviNg7oxexnd5jcZhaNZOYD4OIJt6+CPkZXzBtzc9BE9UwCcnJzWRyvHSgDH7zl/xudo8/p4KleUVaD+rzO3f54UtOAV/zd+Fd8qyoqAb2BpLS8czoKP9KVCnFbNizZgno7oTgi8dUkgAtPNUzL4SbDrgNQTKkNDzpfKd8OOmvxo3YVgrXGSeI1fonHIOGf0eMmmzvd+AUY="
+                  "thoughtSignature": "CowEAePx/16C696DNWj4PuxMNS0zO6v+tdCJF1yJnn07eZuEPLPnvQ6p+oyw3hrynhBTBfnV4DLp94IKgX2qrApBR+CmZ3tqxhvwAG3luoBPWFlXTHfTGClpOrLI3Un76DOTzl3LCtmclum3o8kXE4V5PmRCeO2WXfLnwdy/hxs86ksrxyN6Y5edf1q/9tfu4PIJU+DpsJ7dNO6VZ5Lg0+FHxmVbXJq6Gpe/0FlwCXqolzyPeKMfhcTFUQtjr99pmS4rHWLDIF2ftwUBWzZembLj24OF+vWikxaWRcojZ5rh3KTluf+czMQWbGmmZUOsuRiOd84J/n1HDkqJ9RRGXSOrbiHpRasvNaMbLG6ufvkPSKm++DYe+tVmx40dwbr7hStfhAgKyNcBjRctIj9lHFlX1jczygVAxsv+6DK6UjEgZNWKtzkecZTzJWCzwLoQqpa56DD9eiMvq2Btfw47SxRkRTbQTOyJvPGVPBqaJksU2qOOprUdCqVCcxbJJfcFcVrTRiz1TNVTs89U1JiWm71RBJqXQBgLYYfryqSJ6E6lAlejy+7nc0q6YPleHC+4K3XyL2I5Q5HUwoEjEHnMCYAe+J68ztkjRablCHICIWJI08O+Ii9hgF9wIEkoZlA2A3deHYWfDh1mMjdZEZ2IibwroGaRaSq6AOJUyfWL9GgJb3/OnNWhpw6MlLV0Ol4="
                 }
               ]
             },
             "finishReason": "STOP",
-            "avgLogprobs": -1.9075927734375
+            "avgLogprobs": -0.95030345916748049
           }
         ],
         "usageMetadata": {
           "promptTokenCount": 28,
           "candidatesTokenCount": 5,
-          "totalTokenCount": 128,
+          "totalTokenCount": 155,
           "trafficType": "ON_DEMAND",
           "promptTokensDetails": [
             {
@@ -62,18 +62,18 @@ interactions:
               "tokenCount": 5
             }
           ],
-          "thoughtsTokenCount": 95
+          "thoughtsTokenCount": 122
         },
         "modelVersion": "gemini-2.5-pro",
-        "createTime": "2025-10-23T06:56:46.277788Z",
-        "responseId": "rtH5aJz6EOn1ptQPkf36wAU"
+        "createTime": "2025-11-03T19:53:18.064499Z",
+        "responseId": "LggJafP3A62G0ekP9tjQmAk"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 1.957397917s
+    duration: 2.300412708s
 - id: 1
   request:
     proto: HTTP/1.1
@@ -87,7 +87,7 @@ interactions:
       Content-Type:
       - application/json
       User-Agent:
-      - google-genai-sdk/1.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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 C.\n"
+                  "text": "The weather in Florence, Italy is 40 degrees Celsius. \n"
                 }
               ]
             },
             "finishReason": "STOP",
-            "avgLogprobs": -0.1211475684092595
+            "avgLogprobs": -0.077328896522521978
           }
         ],
         "usageMetadata": {
           "promptTokenCount": 38,
-          "candidatesTokenCount": 13,
-          "totalTokenCount": 51,
+          "candidatesTokenCount": 15,
+          "totalTokenCount": 53,
           "trafficType": "ON_DEMAND",
           "promptTokensDetails": [
             {
@@ -126,17 +126,17 @@ interactions:
           "candidatesTokensDetails": [
             {
               "modality": "TEXT",
-              "tokenCount": 13
+              "tokenCount": 15
             }
           ]
         },
         "modelVersion": "gemini-2.5-pro",
-        "createTime": "2025-10-23T06:56:48.759113Z",
-        "responseId": "sNH5aMmqLsHDptQPtJigwQc"
+        "createTime": "2025-11-03T19:53:20.397608Z",
+        "responseId": "MAgJaaiiGNGE0ekPn_2gsAo"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 1.759973041s
+    duration: 1.349412417s

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.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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

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.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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

providertests/testdata/TestGoogleThinking/gemini-2.5-flash/thinking.yaml πŸ”—

@@ -14,7 +14,7 @@ interactions:
       Content-Type:
       - application/json
       User-Agent:
-      - google-genai-sdk/1.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent
     method: POST
   response:
@@ -30,7 +30,7 @@ interactions:
             "content": {
               "parts": [
                 {
-                  "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",
+                  "text": "**Processing a Weather Inquiry**\n\nOkay, so someone's asking for the weather. Specifically, they want to know the conditions in \"Florence, Italy\". Right, I get it. The `weather` tool is the perfect resource for this. I need to make sure I supply it with the correct `location` parameter. Let me see, that's straightforward enough: \"Florence, Italy\" needs to be passed directly to the `weather` tool as the `location`. That should be all it takes to get them the weather information they're looking for. Easy peasy.\n",
                   "thought": true
                 },
                 {
@@ -40,7 +40,7 @@ interactions:
                       "location": "Florence, Italy"
                     }
                   },
-                  "thoughtSignature": "CqcCAdHtim+w7Zjxo3b6l9LJXbVvkFXVwAc85VHZldttwHx3G4FKSfN61k8WbpQjZArax2N/4C5HtNmYKM7mkzpmqxmR8wiJ9+o5QuG+L6EB6/gs3p0cnJR0tYrt0e/N6uvVasA8wF0DK1GehZ4WPRR6XbQ1fx66s1t2Pi4y0ri70XEa6QgE+TxaGDVg6KOm73GCVVp2IifpSorSF0hmgLboLqPHL5IVgWXbGnr9+0t25KqY04v01BAK04QY3Lmdr4Xr+jxjoCBeCSL7xS/K8zPTl94QtwdWiNqsqK/X5IcGDcz7rlLOLkv76IurHs9+JfPtAcGjZgWO5ZyW5Mf31O8cW4O/9QDYwRTSuBfmY3/dPjUj0Ijk2tHVJkqmmCZ5xe2M7UOWxdV2Kg=="
+                  "thoughtSignature": "CvYBAdHtim+r4pwvSzMD/Aa47oeAg6vLs//D5qB7buLxjadu+G2D8/R0OG5BbKoIl9STM65l/6ETZA5NxOxaKyEQmKQK9Wg319kKYLoWyA0vVr2lOa+yEDCNHam2FzEUpS/+5xL/AcTIuk7LGTdGdzf306tz8cOGvt5grdEIzl3G5xAaT/YIp/0mboeKkLS5gMRFibvX+q7/QuI49iNfzO6UPD3O4il9yeue8JsN1zjuVP7O0qbThAiMKQaFBJ/7XzRTwPY6mlKCaYS/SWB3vo3Vd/5eeUOZj1WQymKNt9WQHeGjOChZEBRdoyUTsIJNULD3rwuDgim+"
                 }
               ],
               "role": "model"
@@ -53,24 +53,24 @@ interactions:
         "usageMetadata": {
           "promptTokenCount": 54,
           "candidatesTokenCount": 15,
-          "totalTokenCount": 131,
+          "totalTokenCount": 120,
           "promptTokensDetails": [
             {
               "modality": "TEXT",
               "tokenCount": 54
             }
           ],
-          "thoughtsTokenCount": 62
+          "thoughtsTokenCount": 51
         },
         "modelVersion": "gemini-2.5-flash",
-        "responseId": "jtn5aJa6OuayvdIPornA0Q4"
+        "responseId": "UwgJaZTvAoidz7IPpOCG6QY"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 2.3995905s
+    duration: 2.398826334s
 - id: 1
   request:
     proto: HTTP/1.1
@@ -84,7 +84,7 @@ interactions:
       Content-Type:
       - application/json
       User-Agent:
-      - google-genai-sdk/1.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent
     method: POST
   response:
@@ -100,7 +100,7 @@ interactions:
             "content": {
               "parts": [
                 {
-                  "text": "The weather in Florence, Italy is 40 degrees Celsius."
+                  "text": "The weather in Florence, Italy is 40 C."
                 }
               ],
               "role": "model"
@@ -111,8 +111,8 @@ interactions:
         ],
         "usageMetadata": {
           "promptTokenCount": 84,
-          "candidatesTokenCount": 13,
-          "totalTokenCount": 97,
+          "candidatesTokenCount": 12,
+          "totalTokenCount": 96,
           "promptTokensDetails": [
             {
               "modality": "TEXT",
@@ -121,11 +121,11 @@ interactions:
           ]
         },
         "modelVersion": "gemini-2.5-flash",
-        "responseId": "j9n5aPLXJ5uP28oPi-aP0QE"
+        "responseId": "UwgJaYDyOaThz7IP97CwgAc"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 506.190917ms
+    duration: 952.694ms

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.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:streamGenerateContent?alt=sse
     method: POST
   response:
@@ -25,13 +25,13 @@ interactions:
     proto_major: 2
     proto_minor: 0
     content_length: -1

providertests/testdata/TestGoogleThinking/gemini-2.5-pro/thinking.yaml πŸ”—

@@ -14,7 +14,7 @@ interactions:
       Content-Type:
       - application/json
       User-Agent:
-      - google-genai-sdk/1.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     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 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",
+                  "text": "**Thinking about Weather in Florence**\n\nOkay, so I'm trying to figure out the weather in Florence, Italy. That immediately makes me think of my `weather.get_weather` function. It's the perfect tool for this task. I know it's designed to give me the current conditions, and that's precisely what I'm after. Now, the `get_weather` function, like any good API call, needs specific parameters to work. In this case, I need to provide it with a `location`. Luckily, the user has given me exactly what I need: \"Florence, Italy\". That's perfect. Time to feed that into the function and get some weather data!\n",
                   "thought": true
                 },
                 {
@@ -40,7 +40,7 @@ interactions:
                       "location": "Florence, Italy"
                     }
                   },
-                  "thoughtSignature": "Cp4CAdHtim8JgCsNhv84SCzZ8bo/kRaAn5bY0cEQ0mfo7nl3GCS7sRlN2T7G4P/Epnwc7/9wbdFzcvcdaqNgWk1flXACXm4QluykEizpys7U+TyP8I2vaUUDIl4Tii0yBZNwjaJxmYp0yb5E9LjpsuEFolG0Ao2vqoJar/0XgY5bzViogURnnUHqVzP2euy5PJEdAd+rOqz1hnK4lCumsNfF5vrkx8aeyGL99C1Eu1/ZETTU7TSnVht+z+4qlysMOlhx4ko0anJ5MWzjewwrZBFkMPgzzw0zVmsHZg9d4t0Hnhmk6Ft7Ge6JOhvI54NgL8MkiviZNvIYT6iHNRqSd71uYeCdCdiw9UJCwASXvbRIv/ktz6OZKrlGld61RP1BXw=="
+                  "thoughtSignature": "CpUCAdHtim9UGVogupwPjEF0fV0+J6hlvZgmWKm2F8vODxdWDQn0sHeqH52T3A7eVFc3qq1mgbgKexwBwUY+LaJS6qmkEp/BQp+YhKn+KkADS5m9uSkVYtQHrSpr6w1PXOeZHKL9S4fda1Tw3wp486PgTNd0UI4P0XI0aJOWzT6QY4Zq54e7xt2Ju7+hocGRFBPS9nZbMajRNZW5rgelw9MWeLAed0Kl+7gxL931NKSOf7pN2VJR8QYo8V5bSy7NKSE12qFRb0HeHJW62RSO9CVDzjljtN8mFMgEdmAJOYZ902x19NzAZRTLs+/shIW1llcXc2kEllhblFKzRoKpFRI65l4iLIjS6HhG5zyqthmp9c6girWfRQ=="
                 }
               ],
               "role": "model"
@@ -53,24 +53,24 @@ interactions:
         "usageMetadata": {
           "promptTokenCount": 54,
           "candidatesTokenCount": 15,
-          "totalTokenCount": 135,
+          "totalTokenCount": 133,
           "promptTokensDetails": [
             {
               "modality": "TEXT",
               "tokenCount": 54
             }
           ],
-          "thoughtsTokenCount": 66
+          "thoughtsTokenCount": 64
         },
         "modelVersion": "gemini-2.5-pro",
-        "responseId": "29n5aPKhFJrivdIPhYnAuQE"
+        "responseId": "WggJafeCDKugz7IPnKO9kQk"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 3.824523542s
+    duration: 3.181730208s
 - id: 1
   request:
     proto: HTTP/1.1
@@ -84,7 +84,7 @@ interactions:
       Content-Type:
       - application/json
       User-Agent:
-      - google-genai-sdk/1.29.0 gl-go/go1.25.1
+      - google-genai-sdk/1.33.0 gl-go/go1.25.0
     url: https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-pro:generateContent
     method: POST
   response:
@@ -121,11 +121,11 @@ interactions:
           ]
         },
         "modelVersion": "gemini-2.5-pro",
-        "responseId": "3Nn5aMLPIMahxN8P5c69gQc"
+        "responseId": "XAgJafLaKoiFz7IPguH2iA4"
       }
     headers:
       Content-Type:
       - application/json; charset=UTF-8
     status: 200 OK
     code: 200
-    duration: 1.228113333s
+    duration: 2.508655625s