From 32045bee0ecf41971eb07ae72819125fb091b69d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Mar 2026 09:33:57 +0000 Subject: [PATCH 01/82] chore(deps): bump the all group with 5 updates (#190) Bumps the all group with 5 updates: | Package | From | To | | --- | --- | --- | | [cloud.google.com/go/auth](https://github.com/googleapis/google-cloud-go) | `0.18.2` | `0.19.0` | | [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2) | `1.41.4` | `1.41.5` | | [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) | `1.32.12` | `1.32.13` | | [github.com/kaptinlin/jsonschema](https://github.com/kaptinlin/jsonschema) | `0.7.6` | `0.7.7` | | [google.golang.org/genai](https://github.com/googleapis/go-genai) | `1.51.0` | `1.52.0` | Updates `cloud.google.com/go/auth` from 0.18.2 to 0.19.0 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/auth/v0.18.2...v0.19.0) Updates `github.com/aws/aws-sdk-go-v2` from 1.41.4 to 1.41.5 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.41.4...v1.41.5) Updates `github.com/aws/aws-sdk-go-v2/config` from 1.32.12 to 1.32.13 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.32.12...config/v1.32.13) Updates `github.com/kaptinlin/jsonschema` from 0.7.6 to 0.7.7 - [Commits](https://github.com/kaptinlin/jsonschema/compare/v0.7.6...v0.7.7) Updates `google.golang.org/genai` from 1.51.0 to 1.52.0 - [Release notes](https://github.com/googleapis/go-genai/releases) - [Changelog](https://github.com/googleapis/go-genai/blob/v1.52.0/CHANGELOG.md) - [Commits](https://github.com/googleapis/go-genai/compare/v1.51.0...v1.52.0) --- updated-dependencies: - dependency-name: cloud.google.com/go/auth dependency-version: 0.19.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: github.com/aws/aws-sdk-go-v2 dependency-version: 1.41.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: github.com/aws/aws-sdk-go-v2/config dependency-version: 1.32.13 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: github.com/kaptinlin/jsonschema dependency-version: 0.7.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: google.golang.org/genai dependency-version: 1.52.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 34 ++++++++++++++--------------- go.sum | 68 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 51 insertions(+), 51 deletions(-) diff --git a/go.mod b/go.mod index 40fc064f3..fb564ea81 100644 --- a/go.mod +++ b/go.mod @@ -4,10 +4,10 @@ go 1.26.1 require ( charm.land/x/vcr v0.1.1 - cloud.google.com/go/auth v0.18.2 + cloud.google.com/go/auth v0.19.0 github.com/ardanlabs/kronk v1.21.4 - github.com/aws/aws-sdk-go-v2 v1.41.4 - github.com/aws/aws-sdk-go-v2/config v1.32.12 + github.com/aws/aws-sdk-go-v2 v1.41.5 + github.com/aws/aws-sdk-go-v2/config v1.32.13 github.com/aws/smithy-go v1.24.2 github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 @@ -16,10 +16,10 @@ require ( github.com/go-viper/mapstructure/v2 v2.5.0 github.com/google/uuid v1.6.0 github.com/joho/godotenv v1.5.1 - github.com/kaptinlin/jsonschema v0.7.6 + github.com/kaptinlin/jsonschema v0.7.7 github.com/stretchr/testify v1.11.1 golang.org/x/oauth2 v0.36.0 - google.golang.org/genai v1.51.0 + google.golang.org/genai v1.52.0 ) require ( @@ -36,21 +36,21 @@ require ( github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.19.12 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.13 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 // indirect github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.14 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.18 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect @@ -80,9 +80,9 @@ require ( github.com/hybridgroup/yzma v1.11.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/jupiterrider/ffi v0.6.0 // indirect - github.com/kaptinlin/go-i18n v0.2.12 // indirect + github.com/kaptinlin/go-i18n v0.3.0 // indirect github.com/kaptinlin/jsonpointer v0.4.17 // indirect - github.com/kaptinlin/messageformat-go v0.4.18 // indirect + github.com/kaptinlin/messageformat-go v0.4.19 // indirect github.com/klauspost/compress v1.18.4 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect @@ -128,7 +128,7 @@ require ( google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c // indirect - google.golang.org/grpc v1.79.2 // indirect + google.golang.org/grpc v1.79.3 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 94d6438c5..e7a794bb6 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,8 @@ charm.land/x/vcr v0.1.1 h1:PXCFMUG0rPtyk35rhfzYCJEduOzWXCIbrXTFq4OF/9Q= charm.land/x/vcr v0.1.1/go.mod h1:eByq2gqzWvcct/8XE2XO5KznoWEBiXH56+y2gphbltM= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -cloud.google.com/go/auth v0.18.2 h1:+Nbt5Ev0xEqxlNjd6c+yYUeosQ5TtEUaNcN/3FozlaM= -cloud.google.com/go/auth v0.18.2/go.mod h1:xD+oY7gcahcu7G2SG2DsBerfFxgPAJz17zz2joOFF3M= +cloud.google.com/go/auth v0.19.0 h1:DGYwtbcsGsT1ywuxsIoWi1u/vlks0moIblQHgSDgQkQ= +cloud.google.com/go/auth v0.19.0/go.mod h1:2Aph7BT2KnaSFOM0JDPyiYgNh6PL9vGMiP8CUIXZ+IY= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= @@ -42,20 +42,20 @@ github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= github.com/ardanlabs/kronk v1.21.4 h1:h/Wy+nxwKH8OZAuJfCZ/dSzKD0YNCGLcrswLqRb4Gk4= github.com/ardanlabs/kronk v1.21.4/go.mod h1:07fwlo30o3xn8utYjAcy/3TCTNZbanP2WFthyjgBxPY= -github.com/aws/aws-sdk-go-v2 v1.41.4 h1:10f50G7WyU02T56ox1wWXq+zTX9I1zxG46HYuG1hH/k= -github.com/aws/aws-sdk-go-v2 v1.41.4/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= +github.com/aws/aws-sdk-go-v2 v1.41.5 h1:dj5kopbwUsVUVFgO4Fi5BIT3t4WyqIDjGKCangnV/yY= +github.com/aws/aws-sdk-go-v2 v1.41.5/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 h1:3kGOqnh1pPeddVa/E37XNTaWJ8W6vrbYV9lJEkCnhuY= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= -github.com/aws/aws-sdk-go-v2/config v1.32.12 h1:O3csC7HUGn2895eNrLytOJQdoL2xyJy0iYXhoZ1OmP0= -github.com/aws/aws-sdk-go-v2/config v1.32.12/go.mod h1:96zTvoOFR4FURjI+/5wY1vc1ABceROO4lWgWJuxgy0g= -github.com/aws/aws-sdk-go-v2/credentials v1.19.12 h1:oqtA6v+y5fZg//tcTWahyN9PEn5eDU/Wpvc2+kJ4aY8= -github.com/aws/aws-sdk-go-v2/credentials v1.19.12/go.mod h1:U3R1RtSHx6NB0DvEQFGyf/0sbrpJrluENHdPy1j/3TE= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 h1:zOgq3uezl5nznfoK3ODuqbhVg1JzAGDUhXOsU0IDCAo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20/go.mod h1:z/MVwUARehy6GAg/yQ1GO2IMl0k++cu1ohP9zo887wE= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 h1:CNXO7mvgThFGqOFgbNAP2nol2qAWBOGfqR/7tQlvLmc= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20/go.mod h1:oydPDJKcfMhgfcgBUZaG+toBbwy8yPWubJXBVERtI4o= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 h1:tN6W/hg+pkM+tf9XDkWUbDEjGLb+raoBMFsTodcoYKw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20/go.mod h1:YJ898MhD067hSHA6xYCx5ts/jEd8BSOLtQDL3iZsvbc= +github.com/aws/aws-sdk-go-v2/config v1.32.13 h1:5KgbxMaS2coSWRrx9TX/QtWbqzgQkOdEa3sZPhBhCSg= +github.com/aws/aws-sdk-go-v2/config v1.32.13/go.mod h1:8zz7wedqtCbw5e9Mi2doEwDyEgHcEE9YOJp6a8jdSMY= +github.com/aws/aws-sdk-go-v2/credentials v1.19.13 h1:mA59E3fokBvyEGHKFdnpNNrvaR351cqiHgRg+JzOSRI= +github.com/aws/aws-sdk-go-v2/credentials v1.19.13/go.mod h1:yoTXOQKea18nrM69wGF9jBdG4WocSZA1h38A+t/MAsk= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 h1:NUS3K4BTDArQqNu2ih7yeDLaS3bmHD0YndtA6UP884g= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21/go.mod h1:YWNWJQNjKigKY1RHVJCuupeWDrrHjRqHm0N9rdrWzYI= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 h1:Rgg6wvjjtX8bNHcvi9OnXWwcE0a2vGpbwmtICOsvcf4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21/go.mod h1:A/kJFst/nm//cyqonihbdpQZwiUhhzpqTsdbhDdRF9c= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 h1:PEgGVtPoB6NTpPrBgqSE5hE/o47Ij9qk/SEZFbUOe9A= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21/go.mod h1:p+hz+PRAYlY3zcpJhPwXlLC4C+kqn70WIHwnzAfs6ps= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 h1:SwGMTMLIlvDNyhMteQ6r8IJSBPlRdXX5d4idhIGbkXA= @@ -64,20 +64,20 @@ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhL github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 h1:qtJZ70afD3ISKWnoX3xB0J2otEqu3LqicRcDBqsj0hQ= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12/go.mod h1:v2pNpJbRNl4vEUWEh5ytQok0zACAKfdmKS51Hotc3pQ= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 h1:2HvVAIq+YqgGotK6EkMf+KIEqTISmTYh5zLpYyeTo1Y= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20/go.mod h1:V4X406Y666khGa8ghKmphma/7C0DAtEQYhkq9z4vpbk= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 h1:c31//R3xgIJMSC8S6hEVq+38DcvUlgFY0FM6mSI5oto= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21/go.mod h1:r6+pf23ouCB718FUxaqzZdbpYFyDtehyZcmP5KL9FkA= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 h1:siU1A6xjUZ2N8zjTHSXFhB9L/2OY8Dqs0xXiLjF30jA= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20/go.mod h1:4TLZCmVJDM3FOu5P5TJP0zOlu9zWgDWU7aUxWbr+rcw= github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 h1:csi9NLpFZXb9fxY7rS1xVzgPRGMt7MSNWeQ6eo247kE= github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1/go.mod h1:qXVal5H0ChqXP63t6jze5LmFalc7+ZE7wOdLtZ0LCP0= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 h1:0GFOLzEbOyZABS3PhYfBIx2rNBACYcKty+XGkTgw1ow= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.8/go.mod h1:LXypKvk85AROkKhOG6/YEcHFPoX+prKTowKnVdcaIxE= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 h1:kiIDLZ005EcKomYYITtfsjn7dtOwHDOFy7IbPXKek2o= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.13/go.mod h1:2h/xGEowcW/g38g06g3KpRWDlT+OTfxxI0o1KqayAB8= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 h1:jzKAXIlhZhJbnYwHbvUQZEB8KfgAEuG0dc08Bkda7NU= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17/go.mod h1:Al9fFsXjv4KfbzQHGe6V4NZSZQXecFcvaIF4e70FoRA= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 h1:Cng+OOwCHmFljXIxpEVXAGMnBia8MSU6Ch5i9PgBkcU= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.9/go.mod h1:LrlIndBDdjA/EeXeyNBle+gyCwTlizzW5ycgWnvIxkk= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 h1:QKZH0S178gCmFEgst8hN0mCX1KxLgHBKKY/CLqwP8lg= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.9/go.mod h1:7yuQJoT+OoH8aqIxw9vwF+8KpvLZ8AWmvmUWHsGQZvI= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.14 h1:GcLE9ba5ehAQma6wlopUesYg/hbcOhFNWTjELkiWkh4= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.14/go.mod h1:WSvS1NLr7JaPunCXqpJnWk1Bjo7IxzZXrZi1QQCkuqM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.18 h1:mP49nTpfKtpXLt5SLn8Uv8z6W+03jYVoOSAl/c02nog= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.18/go.mod h1:YO8TrYtFdl5w/4vmjL8zaBSsiNp3w0L1FfKVKenZT7w= +github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 h1:p8ogvvLugcR/zLBXTXrTkj0RYBUdErbMnAFFp12Lm/U= +github.com/aws/aws-sdk-go-v2/service/sts v1.41.10/go.mod h1:60dv0eZJfeVXfbT1tFJinbHrDfSJ2GZl4Q//OSSNAVw= github.com/aws/smithy-go v1.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng= github.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -172,14 +172,14 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jupiterrider/ffi v0.6.0 h1:UX378KcZvH5c8qgLi9KL/bL82SZTHdRspZ+jj7bvBng= github.com/jupiterrider/ffi v0.6.0/go.mod h1:PqZ5Go6X9by8CIXgfprxfMPYmn8oT5m2O7AA56s64bY= -github.com/kaptinlin/go-i18n v0.2.12 h1:ywDsvb4KDFddMC2dpI/rrIzGU2mWUSvHmWUm9BMsdl4= -github.com/kaptinlin/go-i18n v0.2.12/go.mod h1:pVcu9qsW5pOIOoZFJXesRYmLos1vMQrby70JPAoWmJU= +github.com/kaptinlin/go-i18n v0.3.0 h1:wP76dvYg04bvwTb+8NB+CmdZ2kL7lSSCQ9B/kFv7QHo= +github.com/kaptinlin/go-i18n v0.3.0/go.mod h1:pVcu9qsW5pOIOoZFJXesRYmLos1vMQrby70JPAoWmJU= github.com/kaptinlin/jsonpointer v0.4.17 h1:mY9k8ciWncxbsECyaxKnR0MdmxamNdp2tLQkAKVrtSk= github.com/kaptinlin/jsonpointer v0.4.17/go.mod h1:SsfsjqnHG5zuKo1DTBzk1VknaHlL4osHw+X9kZKukpU= -github.com/kaptinlin/jsonschema v0.7.6 h1:UUMqZGFAk7nOzQsYAxvgygm4wpDp/nwXxA4VP9mCPCs= -github.com/kaptinlin/jsonschema v0.7.6/go.mod h1:GGk/oE+F1lWUfYrzKaCf4QWZmMdytt0LL4XdFEFB0LE= -github.com/kaptinlin/messageformat-go v0.4.18 h1:RBlHVWgZyoxTcUgGWBsl2AcyScq/urqbLZvzgryTmSI= -github.com/kaptinlin/messageformat-go v0.4.18/go.mod h1:ntI3154RnqJgr7GaC+vZBnIExl2V3sv9selvRNNEM24= +github.com/kaptinlin/jsonschema v0.7.7 h1:41BlQJ9dskH0oE5DSzBUrl/w4JQYIr6N6L0B5GNyDoM= +github.com/kaptinlin/jsonschema v0.7.7/go.mod h1:rKjWfyySHSxAD7Li2ctYkPlOu960igoKBvZ2ADRtd5Q= +github.com/kaptinlin/messageformat-go v0.4.19 h1:A5kuuZ1ybXDQ7kD1aoEWGAOemX7hLsMY0yolgSbgpRI= +github.com/kaptinlin/messageformat-go v0.4.19/go.mod h1:utSDTfiXTxl66OC5RIEuObLH7Ue3YjbA2X86SYMBYWg= github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -300,16 +300,16 @@ gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/api v0.271.0 h1:cIPN4qcUc61jlh7oXu6pwOQqbJW2GqYh5PS6rB2C/JY= google.golang.org/api v0.271.0/go.mod h1:CGT29bhwkbF+i11qkRUJb2KMKqcJ1hdFceEIRd9u64Q= -google.golang.org/genai v1.51.0 h1:IZGuUqgfx40INv3hLFGCbOSGp0qFqm7LVmDghzNIYqg= -google.golang.org/genai v1.51.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= +google.golang.org/genai v1.52.0 h1:ekVIxWHtLUNbt+v0WWi4j3JT4yrHDEbysMcHQcaCQoI= +google.golang.org/genai v1.52.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c h1:ZhFDeBMmFc/4g8/GwxnJ4rzB3O4GwQVNr+8Mh7Y5z4g= google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c/go.mod h1:hf4r/rBuzaTkLUWRO03771Xvcs6P5hwdQK3UUEJjqo0= google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c h1:OyQPd6I3pN/9gDxz6L13kYGJgqkpdrAohJRBeXyxlgI= google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c/go.mod h1:X2gu9Qwng7Nn009s/r3RUxqkzQNqOrAy79bluY7ojIg= google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c h1:xgCzyF2LFIO/0X2UAoVRiXKU5Xg6VjToG4i2/ecSswk= google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.79.2 h1:fRMD94s2tITpyJGtBBn7MkMseNpOZU8ZxgC3MMBaXRU= -google.golang.org/grpc v1.79.2/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= +google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 783847b7d1820ddf072327f0ceb0ee5c26a979ba Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 09:23:36 +0000 Subject: [PATCH 02/82] chore(deps): bump the all group with 3 updates (#193) Bumps the all group with 3 updates: [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/smithy-go](https://github.com/aws/smithy-go) and [google.golang.org/genai](https://github.com/googleapis/go-genai). Updates `github.com/aws/aws-sdk-go-v2/config` from 1.32.13 to 1.32.14 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.32.13...config/v1.32.14) Updates `github.com/aws/smithy-go` from 1.24.2 to 1.24.3 - [Release notes](https://github.com/aws/smithy-go/releases) - [Changelog](https://github.com/aws/smithy-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/aws/smithy-go/compare/v1.24.2...v1.24.3) Updates `google.golang.org/genai` from 1.52.0 to 1.52.1 - [Release notes](https://github.com/googleapis/go-genai/releases) - [Changelog](https://github.com/googleapis/go-genai/blob/main/CHANGELOG.md) - [Commits](https://github.com/googleapis/go-genai/compare/v1.52.0...v1.52.1) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go-v2/config dependency-version: 1.32.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: github.com/aws/smithy-go dependency-version: 1.24.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: google.golang.org/genai dependency-version: 1.52.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 12 ++++++------ go.sum | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/go.mod b/go.mod index fb564ea81..191974ac1 100644 --- a/go.mod +++ b/go.mod @@ -7,8 +7,8 @@ require ( cloud.google.com/go/auth v0.19.0 github.com/ardanlabs/kronk v1.21.4 github.com/aws/aws-sdk-go-v2 v1.41.5 - github.com/aws/aws-sdk-go-v2/config v1.32.13 - github.com/aws/smithy-go v1.24.2 + github.com/aws/aws-sdk-go-v2/config v1.32.14 + github.com/aws/smithy-go v1.24.3 github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5 @@ -19,7 +19,7 @@ require ( github.com/kaptinlin/jsonschema v0.7.7 github.com/stretchr/testify v1.11.1 golang.org/x/oauth2 v0.36.0 - google.golang.org/genai v1.52.0 + google.golang.org/genai v1.52.1 ) require ( @@ -36,7 +36,7 @@ require ( github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.19.13 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.14 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 // indirect @@ -48,8 +48,8 @@ require ( github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 // indirect github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.14 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.18 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19 // indirect github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect diff --git a/go.sum b/go.sum index e7a794bb6..ce853f3f4 100644 --- a/go.sum +++ b/go.sum @@ -46,10 +46,10 @@ github.com/aws/aws-sdk-go-v2 v1.41.5 h1:dj5kopbwUsVUVFgO4Fi5BIT3t4WyqIDjGKCangnV github.com/aws/aws-sdk-go-v2 v1.41.5/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 h1:3kGOqnh1pPeddVa/E37XNTaWJ8W6vrbYV9lJEkCnhuY= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= -github.com/aws/aws-sdk-go-v2/config v1.32.13 h1:5KgbxMaS2coSWRrx9TX/QtWbqzgQkOdEa3sZPhBhCSg= -github.com/aws/aws-sdk-go-v2/config v1.32.13/go.mod h1:8zz7wedqtCbw5e9Mi2doEwDyEgHcEE9YOJp6a8jdSMY= -github.com/aws/aws-sdk-go-v2/credentials v1.19.13 h1:mA59E3fokBvyEGHKFdnpNNrvaR351cqiHgRg+JzOSRI= -github.com/aws/aws-sdk-go-v2/credentials v1.19.13/go.mod h1:yoTXOQKea18nrM69wGF9jBdG4WocSZA1h38A+t/MAsk= +github.com/aws/aws-sdk-go-v2/config v1.32.14 h1:opVIRo/ZbbI8OIqSOKmpFaY7IwfFUOCCXBsUpJOwDdI= +github.com/aws/aws-sdk-go-v2/config v1.32.14/go.mod h1:U4/V0uKxh0Tl5sxmCBZ3AecYny4UNlVmObYjKuuaiOo= +github.com/aws/aws-sdk-go-v2/credentials v1.19.14 h1:n+UcGWAIZHkXzYt87uMFBv/l8THYELoX6gVcUvgl6fI= +github.com/aws/aws-sdk-go-v2/credentials v1.19.14/go.mod h1:cJKuyWB59Mqi0jM3nFYQRmnHVQIcgoxjEMAbLkpr62w= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 h1:NUS3K4BTDArQqNu2ih7yeDLaS3bmHD0YndtA6UP884g= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21/go.mod h1:YWNWJQNjKigKY1RHVJCuupeWDrrHjRqHm0N9rdrWzYI= github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 h1:Rgg6wvjjtX8bNHcvi9OnXWwcE0a2vGpbwmtICOsvcf4= @@ -72,14 +72,14 @@ github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 h1:csi9NLpFZXb9fxY7rS1xVzgPRGMt7 github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1/go.mod h1:qXVal5H0ChqXP63t6jze5LmFalc7+ZE7wOdLtZ0LCP0= github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 h1:QKZH0S178gCmFEgst8hN0mCX1KxLgHBKKY/CLqwP8lg= github.com/aws/aws-sdk-go-v2/service/signin v1.0.9/go.mod h1:7yuQJoT+OoH8aqIxw9vwF+8KpvLZ8AWmvmUWHsGQZvI= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.14 h1:GcLE9ba5ehAQma6wlopUesYg/hbcOhFNWTjELkiWkh4= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.14/go.mod h1:WSvS1NLr7JaPunCXqpJnWk1Bjo7IxzZXrZi1QQCkuqM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.18 h1:mP49nTpfKtpXLt5SLn8Uv8z6W+03jYVoOSAl/c02nog= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.18/go.mod h1:YO8TrYtFdl5w/4vmjL8zaBSsiNp3w0L1FfKVKenZT7w= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 h1:lFd1+ZSEYJZYvv9d6kXzhkZu07si3f+GQ1AaYwa2LUM= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.15/go.mod h1:WSvS1NLr7JaPunCXqpJnWk1Bjo7IxzZXrZi1QQCkuqM= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19 h1:dzztQ1YmfPrxdrOiuZRMF6fuOwWlWpD2StNLTceKpys= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19/go.mod h1:YO8TrYtFdl5w/4vmjL8zaBSsiNp3w0L1FfKVKenZT7w= github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 h1:p8ogvvLugcR/zLBXTXrTkj0RYBUdErbMnAFFp12Lm/U= github.com/aws/aws-sdk-go-v2/service/sts v1.41.10/go.mod h1:60dv0eZJfeVXfbT1tFJinbHrDfSJ2GZl4Q//OSSNAVw= -github.com/aws/smithy-go v1.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng= -github.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= +github.com/aws/smithy-go v1.24.3 h1:XgOAaUgx+HhVBoP4v8n6HCQoTRDhoMghKqw4LNHsDNg= +github.com/aws/smithy-go v1.24.3/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= @@ -300,8 +300,8 @@ gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/api v0.271.0 h1:cIPN4qcUc61jlh7oXu6pwOQqbJW2GqYh5PS6rB2C/JY= google.golang.org/api v0.271.0/go.mod h1:CGT29bhwkbF+i11qkRUJb2KMKqcJ1hdFceEIRd9u64Q= -google.golang.org/genai v1.52.0 h1:ekVIxWHtLUNbt+v0WWi4j3JT4yrHDEbysMcHQcaCQoI= -google.golang.org/genai v1.52.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= +google.golang.org/genai v1.52.1 h1:dYoljKtLDXMiBdVaClSJ/ZPwZ7j1N0lGjMhwOKOQUlk= +google.golang.org/genai v1.52.1/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c h1:ZhFDeBMmFc/4g8/GwxnJ4rzB3O4GwQVNr+8Mh7Y5z4g= google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c/go.mod h1:hf4r/rBuzaTkLUWRO03771Xvcs6P5hwdQK3UUEJjqo0= google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c h1:OyQPd6I3pN/9gDxz6L13kYGJgqkpdrAohJRBeXyxlgI= From 92dc3aeb0c5ec0c1c1747166dfdd078ebb251384 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Apr 2026 09:29:02 +0000 Subject: [PATCH 03/82] chore(deps): bump github.com/ardanlabs/kronk in the kronk group (#194) Bumps the kronk group with 1 update: [github.com/ardanlabs/kronk](https://github.com/ardanlabs/kronk). Updates `github.com/ardanlabs/kronk` from 1.21.4 to 1.22.0 - [Release notes](https://github.com/ardanlabs/kronk/releases) - [Commits](https://github.com/ardanlabs/kronk/compare/v1.21.4...v1.22.0) --- updated-dependencies: - dependency-name: github.com/ardanlabs/kronk dependency-version: 1.22.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: kronk ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 38 ++++++++++++++-------------- go.sum | 80 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 59 insertions(+), 59 deletions(-) diff --git a/go.mod b/go.mod index 191974ac1..71ae53d2c 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.26.1 require ( charm.land/x/vcr v0.1.1 cloud.google.com/go/auth v0.19.0 - github.com/ardanlabs/kronk v1.21.4 + github.com/ardanlabs/kronk v1.22.0 github.com/aws/aws-sdk-go-v2 v1.41.5 github.com/aws/aws-sdk-go-v2/config v1.32.14 github.com/aws/smithy-go v1.24.3 @@ -27,7 +27,7 @@ require ( cloud.google.com/go v0.123.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect - cloud.google.com/go/iam v1.5.3 // indirect + cloud.google.com/go/iam v1.6.0 // indirect cloud.google.com/go/monitoring v1.24.3 // indirect cloud.google.com/go/storage v1.61.3 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect @@ -35,18 +35,18 @@ require ( github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.19.14 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.98.0 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19 // indirect @@ -62,7 +62,7 @@ require ( github.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/go-jose/go-jose/v4 v4.1.3 // indirect + github.com/go-jose/go-jose/v4 v4.1.4 // indirect github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -70,20 +70,20 @@ require ( github.com/google/go-cmp v0.7.0 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect - github.com/googleapis/gax-go/v2 v2.18.0 // indirect + github.com/googleapis/gax-go/v2 v2.21.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect - github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71 // indirect + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.8.5 // indirect - github.com/hashicorp/go-version v1.8.0 // indirect - github.com/hybridgroup/yzma v1.11.0 // indirect + github.com/hashicorp/go-getter v1.8.6 // indirect + github.com/hashicorp/go-version v1.9.0 // indirect + github.com/hybridgroup/yzma v1.11.1 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/jupiterrider/ffi v0.6.0 // indirect github.com/kaptinlin/go-i18n v0.3.0 // indirect github.com/kaptinlin/jsonpointer v0.4.17 // indirect github.com/kaptinlin/messageformat-go v0.4.19 // indirect - github.com/klauspost/compress v1.18.4 // indirect + github.com/klauspost/compress v1.18.5 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -124,11 +124,11 @@ require ( golang.org/x/sys v0.42.0 // indirect golang.org/x/text v0.35.0 // indirect golang.org/x/time v0.15.0 // indirect - google.golang.org/api v0.271.0 // indirect - google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c // indirect - google.golang.org/grpc v1.79.3 // indirect + google.golang.org/api v0.273.1 // indirect + google.golang.org/genproto v0.0.0-20260401024825-9d38bb4040a9 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 // indirect + google.golang.org/grpc v1.80.0 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index ce853f3f4..b68eee1ba 100644 --- a/go.sum +++ b/go.sum @@ -10,8 +10,8 @@ cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIi cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= -cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= +cloud.google.com/go/iam v1.6.0 h1:JiSIcEi38dWBKhB3BtfKCW+dMvCZJEhBA2BsaGJgoxs= +cloud.google.com/go/iam v1.6.0/go.mod h1:ZS6zEy7QHmcNO18mjO2viYv/n+wOUkhJqGNkPPGueGU= cloud.google.com/go/logging v1.13.2 h1:qqlHCBvieJT9Cdq4QqYx1KPadCQ2noD4FK02eNqHAjA= cloud.google.com/go/logging v1.13.2/go.mod h1:zaybliM3yun1J8mU2dVQ1/qDzjbOqEijZCn6hSBtKak= cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7EhfW8= @@ -40,12 +40,12 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapp github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= -github.com/ardanlabs/kronk v1.21.4 h1:h/Wy+nxwKH8OZAuJfCZ/dSzKD0YNCGLcrswLqRb4Gk4= -github.com/ardanlabs/kronk v1.21.4/go.mod h1:07fwlo30o3xn8utYjAcy/3TCTNZbanP2WFthyjgBxPY= +github.com/ardanlabs/kronk v1.22.0 h1:2bzmlbM1+HefkVdFR3l8XRur/HBqSaF2qnTquYtIpyY= +github.com/ardanlabs/kronk v1.22.0/go.mod h1:wML/0reuaAXE6Bk6EnEXXEQVQosZ/pt/AZlCzi6BJTg= github.com/aws/aws-sdk-go-v2 v1.41.5 h1:dj5kopbwUsVUVFgO4Fi5BIT3t4WyqIDjGKCangnV/yY= github.com/aws/aws-sdk-go-v2 v1.41.5/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 h1:3kGOqnh1pPeddVa/E37XNTaWJ8W6vrbYV9lJEkCnhuY= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 h1:eBMB84YGghSocM7PsjmmPffTa+1FBUeNvGvFou6V/4o= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= github.com/aws/aws-sdk-go-v2/config v1.32.14 h1:opVIRo/ZbbI8OIqSOKmpFaY7IwfFUOCCXBsUpJOwDdI= github.com/aws/aws-sdk-go-v2/config v1.32.14/go.mod h1:U4/V0uKxh0Tl5sxmCBZ3AecYny4UNlVmObYjKuuaiOo= github.com/aws/aws-sdk-go-v2/credentials v1.19.14 h1:n+UcGWAIZHkXzYt87uMFBv/l8THYELoX6gVcUvgl6fI= @@ -58,18 +58,18 @@ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 h1:PEgGVtPoB6NTpPrBgq github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21/go.mod h1:p+hz+PRAYlY3zcpJhPwXlLC4C+kqn70WIHwnzAfs6ps= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 h1:SwGMTMLIlvDNyhMteQ6r8IJSBPlRdXX5d4idhIGbkXA= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21/go.mod h1:UUxgWxofmOdAMuqEsSppbDtGKLfR04HGsD0HXzvhI1k= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22 h1:rWyie/PxDRIdhNf4DzRk0lvjVOqFJuNnO8WwaIRVxzQ= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22/go.mod h1:zd/JsJ4P7oGfUhXn1VyLqaRZwPmZwg44Jf2dS84Dm3Y= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 h1:qtJZ70afD3ISKWnoX3xB0J2otEqu3LqicRcDBqsj0hQ= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12/go.mod h1:v2pNpJbRNl4vEUWEh5ytQok0zACAKfdmKS51Hotc3pQ= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 h1:JRaIgADQS/U6uXDqlPiefP32yXTda7Kqfx+LgspooZM= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13/go.mod h1:CEuVn5WqOMilYl+tbccq8+N2ieCy0gVn3OtRb0vBNNM= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 h1:c31//R3xgIJMSC8S6hEVq+38DcvUlgFY0FM6mSI5oto= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21/go.mod h1:r6+pf23ouCB718FUxaqzZdbpYFyDtehyZcmP5KL9FkA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 h1:siU1A6xjUZ2N8zjTHSXFhB9L/2OY8Dqs0xXiLjF30jA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20/go.mod h1:4TLZCmVJDM3FOu5P5TJP0zOlu9zWgDWU7aUxWbr+rcw= -github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 h1:csi9NLpFZXb9fxY7rS1xVzgPRGMt7MSNWeQ6eo247kE= -github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1/go.mod h1:qXVal5H0ChqXP63t6jze5LmFalc7+ZE7wOdLtZ0LCP0= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 h1:ZlvrNcHSFFWURB8avufQq9gFsheUgjVD9536obIknfM= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21/go.mod h1:cv3TNhVrssKR0O/xxLJVRfd2oazSnZnkUeTf6ctUwfQ= +github.com/aws/aws-sdk-go-v2/service/s3 v1.98.0 h1:foqo/ocQ7WqKwy3FojGtZQJo0FR4vto9qnz9VaumbCo= +github.com/aws/aws-sdk-go-v2/service/s3 v1.98.0/go.mod h1:uoA43SdFwacedBfSgfFSjjCvYe8aYBS7EnU5GZ/YKMM= github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 h1:QKZH0S178gCmFEgst8hN0mCX1KxLgHBKKY/CLqwP8lg= github.com/aws/aws-sdk-go-v2/service/signin v1.0.9/go.mod h1:7yuQJoT+OoH8aqIxw9vwF+8KpvLZ8AWmvmUWHsGQZvI= github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 h1:lFd1+ZSEYJZYvv9d6kXzhkZu07si3f+GQ1AaYwa2LUM= @@ -118,8 +118,8 @@ github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMD github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs= -github.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= +github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= +github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433 h1:vymEbVwYFP/L05h5TKQxvkXoKxNvTpjxYKdF1Nlwuao= github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -150,22 +150,22 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.18.0 h1:jxP5Uuo3bxm3M6gGtV94P4lliVetoCB4Wk2x8QA86LI= -github.com/googleapis/gax-go/v2 v2.18.0/go.mod h1:uSzZN4a356eRG985CzJ3WfbFSpqkLTjsnhWGJR6EwrE= +github.com/googleapis/gax-go/v2 v2.21.0 h1:h45NjjzEO3faG9Lg/cFrBh2PgegVVgzqKzuZl/wMbiI= +github.com/googleapis/gax-go/v2 v2.21.0/go.mod h1:But/NJU6TnZsrLai/xBAQLLz+Hc7fHZJt/hsCz3Fih4= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= -github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71 h1:3qrWTgbR0uMacRVnE6//G1B20hUJexxqqmQ2OTs1+0s= -github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71/go.mod h1:YV27+mh2SLUqeP36G1a9MiqL5eBkFnZQJjNTR9Q9NcY= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 h1:vTCWu1wbdYo7PEZFem/rlr01+Un+wwVmI7wiegFdRLk= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72/go.mod h1:Vn+BBgKQHVQYdVQ4NZDICE1Brb+JfaONyDHr3q07oQc= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.8.5 h1:DMPV5CSw5JrNg/IK7kDZt3+l2REKXOi3oAw7uYLh2NM= -github.com/hashicorp/go-getter v1.8.5/go.mod h1:WIffejwAyDSJhoVptc3UEshEMkR9O63rw34V7k43O3Q= -github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= -github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hybridgroup/yzma v1.11.0 h1:dIAs/GoV8imTB1fsFk1ft0ejI5APhUK6iHBSMudbfZc= -github.com/hybridgroup/yzma v1.11.0/go.mod h1:zrzMgv/KVQz23+s6l16b+vJ+9uJVBdWtGcGkwRTMeiQ= +github.com/hashicorp/go-getter v1.8.6 h1:9sQboWULaydVphxc4S64oAI4YqpuCk7nPmvbk131ebY= +github.com/hashicorp/go-getter v1.8.6/go.mod h1:nVH12eOV2P58dIiL3rsU6Fh3wLeJEKBOJzhMmzlSWoo= +github.com/hashicorp/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA= +github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hybridgroup/yzma v1.11.1 h1:HvpPAFzg6lAWTFgxC8R/wjkRbTW2hd2dEM0F41t/gq8= +github.com/hybridgroup/yzma v1.11.1/go.mod h1:zrzMgv/KVQz23+s6l16b+vJ+9uJVBdWtGcGkwRTMeiQ= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= @@ -180,8 +180,8 @@ github.com/kaptinlin/jsonschema v0.7.7 h1:41BlQJ9dskH0oE5DSzBUrl/w4JQYIr6N6L0B5G github.com/kaptinlin/jsonschema v0.7.7/go.mod h1:rKjWfyySHSxAD7Li2ctYkPlOu960igoKBvZ2ADRtd5Q= github.com/kaptinlin/messageformat-go v0.4.19 h1:A5kuuZ1ybXDQ7kD1aoEWGAOemX7hLsMY0yolgSbgpRI= github.com/kaptinlin/messageformat-go v0.4.19/go.mod h1:utSDTfiXTxl66OC5RIEuObLH7Ue3YjbA2X86SYMBYWg= -github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= -github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= +github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -296,20 +296,20 @@ golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= -gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/api v0.271.0 h1:cIPN4qcUc61jlh7oXu6pwOQqbJW2GqYh5PS6rB2C/JY= -google.golang.org/api v0.271.0/go.mod h1:CGT29bhwkbF+i11qkRUJb2KMKqcJ1hdFceEIRd9u64Q= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +google.golang.org/api v0.273.1 h1:L7G/TmpAMz0nKx/ciAVssVmWQiOF6+pOuXeKrWVsquY= +google.golang.org/api v0.273.1/go.mod h1:JbAt7mF+XVmWu6xNP8/+CTiGH30ofmCmk9nM8d8fHew= google.golang.org/genai v1.52.1 h1:dYoljKtLDXMiBdVaClSJ/ZPwZ7j1N0lGjMhwOKOQUlk= google.golang.org/genai v1.52.1/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= -google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c h1:ZhFDeBMmFc/4g8/GwxnJ4rzB3O4GwQVNr+8Mh7Y5z4g= -google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c/go.mod h1:hf4r/rBuzaTkLUWRO03771Xvcs6P5hwdQK3UUEJjqo0= -google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c h1:OyQPd6I3pN/9gDxz6L13kYGJgqkpdrAohJRBeXyxlgI= -google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c/go.mod h1:X2gu9Qwng7Nn009s/r3RUxqkzQNqOrAy79bluY7ojIg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c h1:xgCzyF2LFIO/0X2UAoVRiXKU5Xg6VjToG4i2/ecSswk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= -google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/genproto v0.0.0-20260401024825-9d38bb4040a9 h1:w8JYjr7zHemS95YA5FFwk+fUv5tdQU4I8twN9bFdxVU= +google.golang.org/genproto v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:YCEC8W7HTtK7iBv+pI7g7hGAi7qdGB6bQXw3BIYAusM= +google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 h1:VPWxll4HlMw1Vs/qXtN7BvhZqsS9cdAittCNvVENElA= +google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:7QBABkRtR8z+TEnmXTqIqwJLlzrZKVfAUm7tY3yGv0M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 h1:m8qni9SQFH0tJc1X0vmnpw/0t+AImlSvp30sEupozUg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= +google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From c8896d3668f712fef6a8c3216efbef788c6bb55c Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Fri, 10 Apr 2026 09:24:32 -0300 Subject: [PATCH 04/82] chore: add `CODEOWNERS` to ask review from me --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/CODEOWNERS diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 000000000..31ecec2fc --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @andreynering From 06f2e8fa04565ab0a47d707f4441e0d594c79889 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 11:00:34 -0300 Subject: [PATCH 05/82] chore(deps): bump the all group with 2 updates (#199) --- go.mod | 16 ++++++++-------- go.sum | 32 ++++++++++++++++---------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/go.mod b/go.mod index 71ae53d2c..30f4731bc 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.26.1 require ( charm.land/x/vcr v0.1.1 - cloud.google.com/go/auth v0.19.0 + cloud.google.com/go/auth v0.20.0 github.com/ardanlabs/kronk v1.22.0 github.com/aws/aws-sdk-go-v2 v1.41.5 github.com/aws/aws-sdk-go-v2/config v1.32.14 @@ -19,7 +19,7 @@ require ( github.com/kaptinlin/jsonschema v0.7.7 github.com/stretchr/testify v1.11.1 golang.org/x/oauth2 v0.36.0 - google.golang.org/genai v1.52.1 + google.golang.org/genai v1.53.0 ) require ( @@ -107,13 +107,13 @@ require ( go.opentelemetry.io/contrib/detectors/gcp v1.42.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 // indirect - go.opentelemetry.io/otel v1.42.0 // indirect + go.opentelemetry.io/otel v1.43.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 // indirect - go.opentelemetry.io/otel/metric v1.42.0 // indirect - go.opentelemetry.io/otel/sdk v1.42.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.42.0 // indirect - go.opentelemetry.io/otel/trace v1.42.0 // indirect + go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/otel/sdk v1.43.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect + go.opentelemetry.io/otel/trace v1.43.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect @@ -124,7 +124,7 @@ require ( golang.org/x/sys v0.42.0 // indirect golang.org/x/text v0.35.0 // indirect golang.org/x/time v0.15.0 // indirect - google.golang.org/api v0.273.1 // indirect + google.golang.org/api v0.274.0 // indirect google.golang.org/genproto v0.0.0-20260401024825-9d38bb4040a9 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 // indirect diff --git a/go.sum b/go.sum index b68eee1ba..4f443a095 100644 --- a/go.sum +++ b/go.sum @@ -4,8 +4,8 @@ charm.land/x/vcr v0.1.1 h1:PXCFMUG0rPtyk35rhfzYCJEduOzWXCIbrXTFq4OF/9Q= charm.land/x/vcr v0.1.1/go.mod h1:eByq2gqzWvcct/8XE2XO5KznoWEBiXH56+y2gphbltM= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -cloud.google.com/go/auth v0.19.0 h1:DGYwtbcsGsT1ywuxsIoWi1u/vlks0moIblQHgSDgQkQ= -cloud.google.com/go/auth v0.19.0/go.mod h1:2Aph7BT2KnaSFOM0JDPyiYgNh6PL9vGMiP8CUIXZ+IY= +cloud.google.com/go/auth v0.20.0 h1:kXTssoVb4azsVDoUiF8KvxAqrsQcQtB53DcSgta74CA= +cloud.google.com/go/auth v0.20.0/go.mod h1:942/yi/itH1SsmpyrbnTMDgGfdy2BUqIKyd0cyYLc5Q= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= @@ -252,22 +252,22 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0/go.mod h1:NoUCKYWK+3ecatC4HjkRktREheMeEtrXoQxrqYFeHSc= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 h1:OyrsyzuttWTSur2qN/Lm0m2a8yqyIjUVBZcxFPuXq2o= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg= -go.opentelemetry.io/otel v1.42.0 h1:lSQGzTgVR3+sgJDAU/7/ZMjN9Z+vUip7leaqBKy4sho= -go.opentelemetry.io/otel v1.42.0/go.mod h1:lJNsdRMxCUIWuMlVJWzecSMuNjE7dOYyWlqOXWkdqCc= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 h1:THuZiwpQZuHPul65w4WcwEnkX2QIuMT+UFoOrygtoJw= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0/go.mod h1:J2pvYM5NGHofZ2/Ru6zw/TNWnEQp5crgyDeSrYpXkAw= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 h1:zWWrB1U6nqhS/k6zYB74CjRpuiitRtLLi68VcgmOEto= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0/go.mod h1:2qXPNBX1OVRC0IwOnfo1ljoid+RD0QK3443EaqVlsOU= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0 h1:ZrPRak/kS4xI3AVXy8F7pipuDXmDsrO8Lg+yQjBLjw0= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0/go.mod h1:3y6kQCWztq6hyW8Z9YxQDDm0Je9AJoFar2G0yDcmhRk= -go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4= -go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI= -go.opentelemetry.io/otel/sdk v1.42.0 h1:LyC8+jqk6UJwdrI/8VydAq/hvkFKNHZVIWuslJXYsDo= -go.opentelemetry.io/otel/sdk v1.42.0/go.mod h1:rGHCAxd9DAph0joO4W6OPwxjNTYWghRWmkHuGbayMts= -go.opentelemetry.io/otel/sdk/metric v1.42.0 h1:D/1QR46Clz6ajyZ3G8SgNlTJKBdGp84q9RKCAZ3YGuA= -go.opentelemetry.io/otel/sdk/metric v1.42.0/go.mod h1:Ua6AAlDKdZ7tdvaQKfSmnFTdHx37+J4ba8MwVCYM5hc= -go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY= -go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= @@ -298,10 +298,10 @@ golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.273.1 h1:L7G/TmpAMz0nKx/ciAVssVmWQiOF6+pOuXeKrWVsquY= -google.golang.org/api v0.273.1/go.mod h1:JbAt7mF+XVmWu6xNP8/+CTiGH30ofmCmk9nM8d8fHew= -google.golang.org/genai v1.52.1 h1:dYoljKtLDXMiBdVaClSJ/ZPwZ7j1N0lGjMhwOKOQUlk= -google.golang.org/genai v1.52.1/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= +google.golang.org/api v0.274.0 h1:aYhycS5QQCwxHLwfEHRRLf9yNsfvp1JadKKWBE54RFA= +google.golang.org/api v0.274.0/go.mod h1:JbAt7mF+XVmWu6xNP8/+CTiGH30ofmCmk9nM8d8fHew= +google.golang.org/genai v1.53.0 h1:8tR9MuO/TdaXSc8PEFamohQKxRz5M/qctbyzhV2YwMM= +google.golang.org/genai v1.53.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= google.golang.org/genproto v0.0.0-20260401024825-9d38bb4040a9 h1:w8JYjr7zHemS95YA5FFwk+fUv5tdQU4I8twN9bFdxVU= google.golang.org/genproto v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:YCEC8W7HTtK7iBv+pI7g7hGAi7qdGB6bQXw3BIYAusM= google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 h1:VPWxll4HlMw1Vs/qXtN7BvhZqsS9cdAittCNvVENElA= From 5f011418fbc5df2ce10ab4f4a4583b9b5233baa3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Apr 2026 14:06:15 +0000 Subject: [PATCH 06/82] chore(deps): bump github.com/ardanlabs/kronk in the kronk group (#200) --- go.mod | 36 +++++++++++------------ go.sum | 92 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 64 insertions(+), 64 deletions(-) diff --git a/go.mod b/go.mod index 30f4731bc..145e89f1e 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.26.1 require ( charm.land/x/vcr v0.1.1 cloud.google.com/go/auth v0.20.0 - github.com/ardanlabs/kronk v1.22.0 + github.com/ardanlabs/kronk v1.22.2 github.com/aws/aws-sdk-go-v2 v1.41.5 github.com/aws/aws-sdk-go-v2/config v1.32.14 github.com/aws/smithy-go v1.24.3 @@ -27,14 +27,14 @@ require ( cloud.google.com/go v0.123.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect - cloud.google.com/go/iam v1.6.0 // indirect - cloud.google.com/go/monitoring v1.24.3 // indirect - cloud.google.com/go/storage v1.61.3 // indirect + cloud.google.com/go/iam v1.7.0 // indirect + cloud.google.com/go/monitoring v1.25.0 // indirect + cloud.google.com/go/storage v1.62.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.19.14 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 // indirect @@ -46,7 +46,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.98.0 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19 // indirect @@ -104,12 +104,12 @@ require ( github.com/tidwall/sjson v1.2.5 // indirect github.com/ulikunitz/xz v0.5.15 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.42.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.43.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 // indirect go.opentelemetry.io/otel v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 // indirect go.opentelemetry.io/otel/metric v1.43.0 // indirect go.opentelemetry.io/otel/sdk v1.43.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect @@ -121,13 +121,13 @@ require ( golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect golang.org/x/net v0.52.0 // indirect golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.42.0 // indirect + golang.org/x/sys v0.43.0 // indirect golang.org/x/text v0.35.0 // indirect golang.org/x/time v0.15.0 // indirect - google.golang.org/api v0.274.0 // indirect - google.golang.org/genproto v0.0.0-20260401024825-9d38bb4040a9 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 // indirect + google.golang.org/api v0.275.0 // indirect + google.golang.org/genproto v0.0.0-20260406210006-6f92a3bedf2d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260406210006-6f92a3bedf2d // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d // indirect google.golang.org/grpc v1.80.0 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect diff --git a/go.sum b/go.sum index 4f443a095..8609a0ac9 100644 --- a/go.sum +++ b/go.sum @@ -10,18 +10,18 @@ cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIi cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -cloud.google.com/go/iam v1.6.0 h1:JiSIcEi38dWBKhB3BtfKCW+dMvCZJEhBA2BsaGJgoxs= -cloud.google.com/go/iam v1.6.0/go.mod h1:ZS6zEy7QHmcNO18mjO2viYv/n+wOUkhJqGNkPPGueGU= -cloud.google.com/go/logging v1.13.2 h1:qqlHCBvieJT9Cdq4QqYx1KPadCQ2noD4FK02eNqHAjA= -cloud.google.com/go/logging v1.13.2/go.mod h1:zaybliM3yun1J8mU2dVQ1/qDzjbOqEijZCn6hSBtKak= -cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7EhfW8= -cloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk= -cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= -cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -cloud.google.com/go/storage v1.61.3 h1:VS//ZfBuPGDvakfD9xyPW1RGF1Vy3BWUoVZXgW1KMOg= -cloud.google.com/go/storage v1.61.3/go.mod h1:JtqK8BBB7TWv0HVGHubtUdzYYrakOQIsMLffZ2Z/HWk= -cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= -cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= +cloud.google.com/go/iam v1.7.0 h1:JD3zh0C6LHl16aCn5Akff0+GELdp1+4hmh6ndoFLl8U= +cloud.google.com/go/iam v1.7.0/go.mod h1:tetWZW1PD/m6vcuY2Zj/aU0eCHNPuxedbnbRTyKXvdY= +cloud.google.com/go/logging v1.14.0 h1:xpPpY8cVT6n9DgIRgrWyE+YEsGlO/994pWnbc7o5Eh4= +cloud.google.com/go/logging v1.14.0/go.mod h1:jmI+Try/fZeOTOAer3wVYOuPf9WX9PyzhlSDoBAi4HM= +cloud.google.com/go/longrunning v0.9.0 h1:0EzbDEGsAvOZNbqXopgniY0w0a1phvu5IdUFq8grmqY= +cloud.google.com/go/longrunning v0.9.0/go.mod h1:pkTz846W7bF4o2SzdWJ40Hu0Re+UoNT6Q5t+igIcb8E= +cloud.google.com/go/monitoring v1.25.0 h1:HnsTIOxTN6BCSkt1P/Im23r1m7MHTTpmSYCzPkW7NK4= +cloud.google.com/go/monitoring v1.25.0/go.mod h1:wlj6rX+JGyusw/8+2duW4cJ6kmDHGmde3zMTJuG3Jpc= +cloud.google.com/go/storage v1.62.0 h1:w2pQJhpUqVerMON45vatE2FpCYsNTf7OHjkn6ux5mMU= +cloud.google.com/go/storage v1.62.0/go.mod h1:T5hz3qzcpnxZ5LdKc7y8Tw7lh4v9zeeVyrD/cLJAzZU= +cloud.google.com/go/trace v1.12.0 h1:XvWHYfr9q88cX4pZyou6qCcSagnuASyUq2ej1dB6NzQ= +cloud.google.com/go/trace v1.12.0/go.mod h1:TOYfyeoyCGsSH0ifXD6Aius24uQI9xV3RyvOdljFIyg= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc= @@ -30,18 +30,18 @@ github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xP github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU= github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 h1:DHa2U07rk8syqvCge0QIGMCE1WxGj9njT44GH7zNJLQ= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 h1:UnDZ/zFfG1JhH/DqxIZYU/1CUAlTUScoXD/LcM2Ykk8= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0/go.mod h1:IA1C1U7jO/ENqm/vhi7V9YYpBsp+IMyqNrEN94N7tVc= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0 h1:7t/qx5Ost0s0wbA/VDrByOooURhp+ikYwv20i9Y07TQ= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0/go.mod h1:vB2GH9GAYYJTO3mEn8oYwzEdhlayZIdQz6zdzgUIRvA= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 h1:0s6TxfCu2KHkkZPnBfsQ2y5qia0jl3MMrmBhu3nCOYk= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 h1:rIkQfkCOVKc1OiRCNcSDD8ml5RJlZbH/Xsq7lbpynwc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0/go.mod h1:RD2SsorTmYhF6HkTmDw7KmPYQk8OBYwTkuasChwv7R4= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 h1:O2sXMyJh8b7devAGdE+163xtRurt0RVpB6DIzX5vGfg= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0/go.mod h1:hEpiGU18xf70qb3jbTcIggWAiEfX/cOIVc2OTe4OegA= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.56.0 h1:ZIT85vKP7LBS84XJ0WdJ3dPOX3iz4j3c0+lpajGQMyo= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.56.0/go.mod h1:rqP9UEhOXv9WhQ7Gjz+G5y/pf8+BJZW5/Ts0AhE0PwE= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 h1:0YP0+/ixwu+Uqeu/FGiBZNQ19huiUxxiPXIc9WsLKuQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= -github.com/ardanlabs/kronk v1.22.0 h1:2bzmlbM1+HefkVdFR3l8XRur/HBqSaF2qnTquYtIpyY= -github.com/ardanlabs/kronk v1.22.0/go.mod h1:wML/0reuaAXE6Bk6EnEXXEQVQosZ/pt/AZlCzi6BJTg= +github.com/ardanlabs/kronk v1.22.2 h1:86V7wMBc4JT5VPHhls/tzmHWUu/xHj2QsadeF57o3Ok= +github.com/ardanlabs/kronk v1.22.2/go.mod h1:kCGX1KkU2JlzkIKJgUoXAxsBZu4g5HQqeJ52lnCWDew= github.com/aws/aws-sdk-go-v2 v1.41.5 h1:dj5kopbwUsVUVFgO4Fi5BIT3t4WyqIDjGKCangnV/yY= github.com/aws/aws-sdk-go-v2 v1.41.5/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 h1:eBMB84YGghSocM7PsjmmPffTa+1FBUeNvGvFou6V/4o= @@ -68,8 +68,8 @@ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 h1:c31//R3x github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21/go.mod h1:r6+pf23ouCB718FUxaqzZdbpYFyDtehyZcmP5KL9FkA= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 h1:ZlvrNcHSFFWURB8avufQq9gFsheUgjVD9536obIknfM= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21/go.mod h1:cv3TNhVrssKR0O/xxLJVRfd2oazSnZnkUeTf6ctUwfQ= -github.com/aws/aws-sdk-go-v2/service/s3 v1.98.0 h1:foqo/ocQ7WqKwy3FojGtZQJo0FR4vto9qnz9VaumbCo= -github.com/aws/aws-sdk-go-v2/service/s3 v1.98.0/go.mod h1:uoA43SdFwacedBfSgfFSjjCvYe8aYBS7EnU5GZ/YKMM= +github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0 h1:hlSuz394kV0vhv9drL5lhuEFbEOEP1VyQpy15qWh1Pk= +github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0/go.mod h1:uoA43SdFwacedBfSgfFSjjCvYe8aYBS7EnU5GZ/YKMM= github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 h1:QKZH0S178gCmFEgst8hN0mCX1KxLgHBKKY/CLqwP8lg= github.com/aws/aws-sdk-go-v2/service/signin v1.0.9/go.mod h1:7yuQJoT+OoH8aqIxw9vwF+8KpvLZ8AWmvmUWHsGQZvI= github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 h1:lFd1+ZSEYJZYvv9d6kXzhkZu07si3f+GQ1AaYwa2LUM= @@ -246,20 +246,20 @@ github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/detectors/gcp v1.42.0 h1:kpt2PEJuOuqYkPcktfJqWWDjTEd/FNgrxcniL7kQrXQ= -go.opentelemetry.io/contrib/detectors/gcp v1.42.0/go.mod h1:W9zQ439utxymRrXsUOzZbFX4JhLxXU4+ZnCt8GG7yA8= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 h1:yI1/OhfEPy7J9eoa6Sj051C7n5dvpj0QX8g4sRchg04= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0/go.mod h1:NoUCKYWK+3ecatC4HjkRktREheMeEtrXoQxrqYFeHSc= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 h1:OyrsyzuttWTSur2qN/Lm0m2a8yqyIjUVBZcxFPuXq2o= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg= +go.opentelemetry.io/contrib/detectors/gcp v1.43.0 h1:62yY3dT7/ShwOxzA0RsKRgshBmfElKI4d/Myu2OxDFU= +go.opentelemetry.io/contrib/detectors/gcp v1.43.0/go.mod h1:RyaZMFY7yi1kAs45S6mbFGz8O8rqB0dTY14uzvG4LCs= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo= go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 h1:THuZiwpQZuHPul65w4WcwEnkX2QIuMT+UFoOrygtoJw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0/go.mod h1:J2pvYM5NGHofZ2/Ru6zw/TNWnEQp5crgyDeSrYpXkAw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 h1:zWWrB1U6nqhS/k6zYB74CjRpuiitRtLLi68VcgmOEto= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0/go.mod h1:2qXPNBX1OVRC0IwOnfo1ljoid+RD0QK3443EaqVlsOU= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0 h1:ZrPRak/kS4xI3AVXy8F7pipuDXmDsrO8Lg+yQjBLjw0= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0/go.mod h1:3y6kQCWztq6hyW8Z9YxQDDm0Je9AJoFar2G0yDcmhRk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 h1:RAE+JPfvEmvy+0LzyUA25/SGawPwIUbZ6u0Wug54sLc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0/go.mod h1:AGmbycVGEsRx9mXMZ75CsOyhSP6MFIcj/6dnG+vhVjk= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.42.0 h1:lSZHgNHfbmQTPfuTmWVkEu8J8qXaQwuV30pjCcAUvP8= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.42.0/go.mod h1:so9ounLcuoRDu033MW/E0AD4hhUjVqswrMF5FoZlBcw= go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= @@ -288,8 +288,8 @@ golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= +golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= @@ -298,16 +298,16 @@ golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.274.0 h1:aYhycS5QQCwxHLwfEHRRLf9yNsfvp1JadKKWBE54RFA= -google.golang.org/api v0.274.0/go.mod h1:JbAt7mF+XVmWu6xNP8/+CTiGH30ofmCmk9nM8d8fHew= +google.golang.org/api v0.275.0 h1:vfY5d9vFVJeWEZT65QDd9hbndr7FyZ2+6mIzGAh71NI= +google.golang.org/api v0.275.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= google.golang.org/genai v1.53.0 h1:8tR9MuO/TdaXSc8PEFamohQKxRz5M/qctbyzhV2YwMM= google.golang.org/genai v1.53.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= -google.golang.org/genproto v0.0.0-20260401024825-9d38bb4040a9 h1:w8JYjr7zHemS95YA5FFwk+fUv5tdQU4I8twN9bFdxVU= -google.golang.org/genproto v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:YCEC8W7HTtK7iBv+pI7g7hGAi7qdGB6bQXw3BIYAusM= -google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9 h1:VPWxll4HlMw1Vs/qXtN7BvhZqsS9cdAittCNvVENElA= -google.golang.org/genproto/googleapis/api v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:7QBABkRtR8z+TEnmXTqIqwJLlzrZKVfAUm7tY3yGv0M= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 h1:m8qni9SQFH0tJc1X0vmnpw/0t+AImlSvp30sEupozUg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto v0.0.0-20260406210006-6f92a3bedf2d h1:N1Ec54vZnIPd7MnxRiYLW+oY4fDR4BOS/LrssdD9+ek= +google.golang.org/genproto v0.0.0-20260406210006-6f92a3bedf2d/go.mod h1:c2hJ1grtnH0xUiEKGDGkjGNTJ1Hy2LrblyKOHF0sqRM= +google.golang.org/genproto/googleapis/api v0.0.0-20260406210006-6f92a3bedf2d h1:/aDRtSZJjyLQzm75d+a1wOJaqyKBMvIAfeQmoa3ORiI= +google.golang.org/genproto/googleapis/api v0.0.0-20260406210006-6f92a3bedf2d/go.mod h1:etfGUgejTiadZAUaEP14NP97xi1RGeawqkjDARA/UOs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d h1:wT2n40TBqFY6wiwazVK9/iTWbsQrgk5ZfCSVFLO9LQA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= From ce26050611b2a797f961a04975765c832589318d Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Mon, 13 Apr 2026 11:07:30 -0300 Subject: [PATCH 07/82] ci: fix govulncheck by updating to go 1.26.2 (#201) --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 145e89f1e..851af2f95 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module charm.land/fantasy -go 1.26.1 +go 1.26.2 require ( charm.land/x/vcr v0.1.1 From bbf53dca72d1ea29bc6769bc968cfadbaaa5cb6a Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Mon, 13 Apr 2026 11:53:22 -0400 Subject: [PATCH 08/82] fix(agent): buffer tool calls Wait until streaming has finished before dispatching tool calls to avoid getting tool results without a matching call: essentially orphans. --- agent.go | 12 ++++++++++-- providers/anthropic/anthropic_test.go | 3 ++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/agent.go b/agent.go index 34d4f8a1f..f0b981be6 100644 --- a/agent.go +++ b/agent.go @@ -1248,6 +1248,7 @@ func (a *agent) processStepStream(ctx context.Context, stream StreamResponse, op parallel bool } toolChan := make(chan toolExecutionRequest, 10) + var pendingDispatches []toolExecutionRequest var toolExecutionWg sync.WaitGroup var toolStateMu sync.Mutex toolResults := make([]ToolResultContent, 0) @@ -1475,8 +1476,9 @@ func (a *agent) processStepStream(ctx context.Context, stream StreamResponse, op isParallel = tool.Info().Parallel } - // Send tool call to execution channel - toolChan <- toolExecutionRequest{toolCall: validatedToolCall, parallel: isParallel} + // Buffer dispatch until stream is fully consumed so that all + // OnToolCall callbacks complete before any tool result is written. + pendingDispatches = append(pendingDispatches, toolExecutionRequest{toolCall: validatedToolCall, parallel: isParallel}) // Clean up active tool call delete(activeToolCalls, part.ID) @@ -1534,6 +1536,12 @@ func (a *agent) processStepStream(ctx context.Context, stream StreamResponse, op } } + // Dispatch all buffered tool calls now that the complete set is known and + // every OnToolCall callback has been called. + for _, req := range pendingDispatches { + toolChan <- req + } + // Close the tool execution channel and wait for all executions to complete close(toolChan) toolExecutionWg.Wait() diff --git a/providers/anthropic/anthropic_test.go b/providers/anthropic/anthropic_test.go index 4387a34fa..d447954cb 100644 --- a/providers/anthropic/anthropic_test.go +++ b/providers/anthropic/anthropic_test.go @@ -1574,7 +1574,8 @@ func TestComputerUseToolJSON(t *testing.T) { } _, err := computerUseToolJSON(pdt) require.Error(t, err) - require.Contains(t, err.Error(), "tool_version arg is missing") }) + require.Contains(t, err.Error(), "tool_version arg is missing") + }) t.Run("returns error for unsupported version", func(t *testing.T) { t.Parallel() From 15bced7a1c8ab695bd73cf463343c79a2fb9a9ce Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Mon, 13 Apr 2026 12:08:58 -0400 Subject: [PATCH 09/82] chore(agent): move tool execution after stream loop + add test --- agent.go | 93 +++++++++++++++++++++++--------------------- agent_stream_test.go | 86 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 45 deletions(-) diff --git a/agent.go b/agent.go index f0b981be6..7adf521ff 100644 --- a/agent.go +++ b/agent.go @@ -1247,12 +1247,7 @@ func (a *agent) processStepStream(ctx context.Context, stream StreamResponse, op toolCall ToolCallContent parallel bool } - toolChan := make(chan toolExecutionRequest, 10) var pendingDispatches []toolExecutionRequest - var toolExecutionWg sync.WaitGroup - var toolStateMu sync.Mutex - toolResults := make([]ToolResultContent, 0) - var toolExecutionErr error // Create a map for quick tool lookup toolMap := make(map[string]AgentTool) @@ -1265,43 +1260,6 @@ func (a *agent) processStepStream(ctx context.Context, stream StreamResponse, op execProviderToolMap[ept.GetName()] = ept } - // Semaphores for controlling parallelism - parallelSem := make(chan struct{}, 5) - var sequentialMu sync.Mutex - - // Single coordinator goroutine that dispatches tools - toolExecutionWg.Go(func() { - for req := range toolChan { - if req.parallel { - parallelSem <- struct{}{} - toolExecutionWg.Go(func() { - defer func() { <-parallelSem }() - result, isCriticalError := a.executeSingleTool(ctx, toolMap, execProviderToolMap, req.toolCall, opts.OnToolResult) - toolStateMu.Lock() - toolResults = append(toolResults, result) - if isCriticalError && toolExecutionErr == nil { - if errorResult, ok := result.Result.(ToolResultOutputContentError); ok && errorResult.Error != nil { - toolExecutionErr = errorResult.Error - } - } - toolStateMu.Unlock() - }) - } else { - sequentialMu.Lock() - result, isCriticalError := a.executeSingleTool(ctx, toolMap, execProviderToolMap, req.toolCall, opts.OnToolResult) - toolStateMu.Lock() - toolResults = append(toolResults, result) - if isCriticalError && toolExecutionErr == nil { - if errorResult, ok := result.Result.(ToolResultOutputContentError); ok && errorResult.Error != nil { - toolExecutionErr = errorResult.Error - } - } - toolStateMu.Unlock() - sequentialMu.Unlock() - } - } - }) - // Process stream parts for part := range stream { // Forward all parts to chunk callback @@ -1536,13 +1494,58 @@ func (a *agent) processStepStream(ctx context.Context, stream StreamResponse, op } } - // Dispatch all buffered tool calls now that the complete set is known and - // every OnToolCall callback has been called. + // All tool calls are now collected. Create the execution channel sized to + // avoid blocking during dispatch, start the coordinator, then flush the batch. + toolChan := make(chan toolExecutionRequest, len(pendingDispatches)) + var toolExecutionWg sync.WaitGroup + var toolStateMu sync.Mutex + toolResults := make([]ToolResultContent, 0, len(pendingDispatches)) + var toolExecutionErr error + + // Semaphores for controlling parallelism. + parallelSem := make(chan struct{}, 5) + var sequentialMu sync.Mutex + + // Single coordinator goroutine that dispatches tools. + toolExecutionWg.Go(func() { + for req := range toolChan { + if req.parallel { + parallelSem <- struct{}{} + toolExecutionWg.Go(func() { + defer func() { <-parallelSem }() + result, isCriticalError := a.executeSingleTool(ctx, toolMap, execProviderToolMap, req.toolCall, opts.OnToolResult) + toolStateMu.Lock() + toolResults = append(toolResults, result) + if isCriticalError && toolExecutionErr == nil { + if errorResult, ok := result.Result.(ToolResultOutputContentError); ok && errorResult.Error != nil { + toolExecutionErr = errorResult.Error + } + } + toolStateMu.Unlock() + }) + } else { + sequentialMu.Lock() + result, isCriticalError := a.executeSingleTool(ctx, toolMap, execProviderToolMap, req.toolCall, opts.OnToolResult) + toolStateMu.Lock() + toolResults = append(toolResults, result) + if isCriticalError && toolExecutionErr == nil { + if errorResult, ok := result.Result.(ToolResultOutputContentError); ok && errorResult.Error != nil { + toolExecutionErr = errorResult.Error + } + } + toolStateMu.Unlock() + sequentialMu.Unlock() + } + } + }) + + // Dispatch all buffered tool calls now that every OnToolCall callback has + // been called, then close and wait. for _, req := range pendingDispatches { toolChan <- req } - // Close the tool execution channel and wait for all executions to complete + // Close the tool execution channel and wait for all executions to complete. close(toolChan) toolExecutionWg.Wait() diff --git a/agent_stream_test.go b/agent_stream_test.go index ea9009305..cddc83dd5 100644 --- a/agent_stream_test.go +++ b/agent_stream_test.go @@ -4,6 +4,8 @@ import ( "context" "encoding/json" "fmt" + "strings" + "sync" "testing" "github.com/stretchr/testify/require" @@ -366,6 +368,90 @@ func TestStreamingAgentWithTools(t *testing.T) { require.Equal(t, "echo", toolResults[0].ToolName) } +// TestStreamingAgentToolCallBeforeResult verifies that all OnToolCall callbacks +// complete before any OnToolResult fires. This is the ordering guarantee +// provided by buffering dispatches until the stream is fully consumed. +func TestStreamingAgentToolCallBeforeResult(t *testing.T) { + t.Parallel() + + stepCount := 0 + mockModel := &mockLanguageModel{ + streamFunc: func(ctx context.Context, call Call) (StreamResponse, error) { + stepCount++ + return func(yield func(StreamPart) bool) { + if stepCount == 1 { + // Emit two tool calls in the same step. + for _, id := range []string{"tool-1", "tool-2"} { + if !yield(StreamPart{Type: StreamPartTypeToolInputStart, ID: id, ToolCallName: "echo"}) { + return + } + if !yield(StreamPart{Type: StreamPartTypeToolInputDelta, ID: id, Delta: `{"message": "` + id + `"}`}) { + return + } + if !yield(StreamPart{Type: StreamPartTypeToolInputEnd, ID: id}) { + return + } + if !yield(StreamPart{ + Type: StreamPartTypeToolCall, + ID: id, + ToolCallName: "echo", + ToolCallInput: `{"message": "` + id + `"}`, + }) { + return + } + } + yield(StreamPart{ + Type: StreamPartTypeFinish, + FinishReason: FinishReasonToolCalls, + }) + } else { + yield(StreamPart{ + Type: StreamPartTypeFinish, + FinishReason: FinishReasonStop, + }) + } + }, nil + }, + } + + agent := NewAgent(mockModel, WithTools(&EchoTool{})) + + var mu sync.Mutex + var events []string + + _, err := agent.Stream(context.Background(), AgentStreamCall{ + Prompt: "echo twice", + OnToolCall: func(tc ToolCallContent) error { + mu.Lock() + events = append(events, "call:"+tc.ToolCallID) + mu.Unlock() + return nil + }, + OnToolResult: func(tr ToolResultContent) error { + mu.Lock() + events = append(events, "result:"+tr.ToolCallID) + mu.Unlock() + return nil + }, + }) + require.NoError(t, err) + + // Both OnToolCall events must appear before any OnToolResult event. + lastCallIdx := -1 + firstResultIdx := len(events) + for i, e := range events { + if strings.HasPrefix(e, "call:") { + lastCallIdx = i + } + if strings.HasPrefix(e, "result:") && i < firstResultIdx { + firstResultIdx = i + } + } + require.Equal(t, 2, stepCount) + require.Less(t, lastCallIdx, firstResultIdx, + "all OnToolCall events must complete before the first OnToolResult; got %v", events) +} + // TestStreamingAgentTextDeltas tests text streaming (mirrors TS textStream tests) func TestStreamingAgentTextDeltas(t *testing.T) { t.Parallel() From d9b6308ceae180d3a1f9ce80ac430fb2ae543dab Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Mon, 13 Apr 2026 12:52:11 -0400 Subject: [PATCH 10/82] v0.17.2 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 7cca7711a..c3d16c164 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.17.1 +0.17.2 From 61bc0b206af4df5cb8b25fa20ee0082312b1a98d Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Mon, 13 Apr 2026 16:27:44 -0400 Subject: [PATCH 11/82] feat(agent): add the ability to stop a turn and end the agent loop --- agent.go | 22 +++++++- agent_stream_test.go | 80 ++++++++++++++++++++++++++ agent_test.go | 130 +++++++++++++++++++++++++++++++++++++++++++ content.go | 4 ++ tool.go | 1 + 5 files changed, 234 insertions(+), 3 deletions(-) diff --git a/agent.go b/agent.go index 7adf521ff..01912bbf3 100644 --- a/agent.go +++ b/agent.go @@ -485,7 +485,12 @@ func (a *agent) Generate(ctx context.Context, opts AgentCall) (*AgentResult, err toolResults, err := a.executeTools(ctx, stepTools, stepExecProviderTools, stepToolCalls, nil) - // Build step content with validated tool calls and tool results. // Provider-executed tool calls are kept as-is. + // If any tool result requested a stop, deliver all results but don't + // request another completion from the model. + stopTurnRequested := hasStopTurn(toolResults) + + // Build step content with validated tool calls and tool results. + // Provider-executed tool calls are kept as-is. stepContent := []Content{} toolCallIndex := 0 for _, content := range result.Content { @@ -523,7 +528,7 @@ func (a *agent) Generate(ctx context.Context, opts AgentCall) (*AgentResult, err steps = append(steps, stepResult) shouldStop := isStopConditionMet(opts.StopWhen, steps) - if shouldStop || err != nil || len(stepToolCalls) == 0 || result.FinishReason != FinishReasonToolCalls { + if shouldStop || err != nil || stopTurnRequested || len(stepToolCalls) == 0 || result.FinishReason != FinishReasonToolCalls { break } } @@ -561,6 +566,15 @@ func isStopConditionMet(conditions []StopCondition, steps []StepResult) bool { return false } +func hasStopTurn(results []ToolResultContent) bool { + for _, r := range results { + if r.StopTurn { + return true + } + } + return false +} + func toResponseMessages(content []Content) []Message { var assistantParts []MessagePart var toolParts []MessagePart @@ -729,6 +743,7 @@ func (a *agent) executeSingleTool(ctx context.Context, toolMap map[string]AgentT Error: err, } result.ClientMetadata = toolResult.Metadata + result.StopTurn = toolResult.StopTurn if toolResultCallback != nil { _ = toolResultCallback(result) } @@ -736,6 +751,7 @@ func (a *agent) executeSingleTool(ctx context.Context, toolMap map[string]AgentT } result.ClientMetadata = toolResult.Metadata + result.StopTurn = toolResult.StopTurn if toolResult.IsError { result.Result = ToolResultOutputContentError{ Error: errors.New(toolResult.Content), @@ -1573,7 +1589,7 @@ func (a *agent) processStepStream(ctx context.Context, stream StreamResponse, op } // Determine if we should continue (has tool calls and not stopped) - shouldContinue := len(stepToolCalls) > 0 && stepFinishReason == FinishReasonToolCalls + shouldContinue := len(stepToolCalls) > 0 && stepFinishReason == FinishReasonToolCalls && !hasStopTurn(toolResults) return stepExecutionResult{ StepResult: stepResult, diff --git a/agent_stream_test.go b/agent_stream_test.go index cddc83dd5..13e0ac3d2 100644 --- a/agent_stream_test.go +++ b/agent_stream_test.go @@ -681,3 +681,83 @@ func TestStreamingAgentSources(t *testing.T) { resultSources := result.Response.Content.Sources() require.Equal(t, 2, len(resultSources)) } + +func TestStreamingAgent_StopTurn(t *testing.T) { + t.Parallel() + + stepCount := 0 + mockModel := &mockLanguageModel{ + streamFunc: func(ctx context.Context, call Call) (StreamResponse, error) { + stepCount++ + return func(yield func(StreamPart) bool) { + if stepCount == 1 { + if !yield(StreamPart{Type: StreamPartTypeToolInputStart, ID: "tool-1", ToolCallName: "blocked_tool"}) { + return + } + if !yield(StreamPart{Type: StreamPartTypeToolInputDelta, ID: "tool-1", Delta: `{"message"`}) { + return + } + if !yield(StreamPart{Type: StreamPartTypeToolInputDelta, ID: "tool-1", Delta: `: "test"}`}) { + return + } + if !yield(StreamPart{Type: StreamPartTypeToolInputEnd, ID: "tool-1"}) { + return + } + if !yield(StreamPart{ + Type: StreamPartTypeToolCall, + ID: "tool-1", + ToolCallName: "blocked_tool", + ToolCallInput: `{"message": "test"}`, + }) { + return + } + yield(StreamPart{ + Type: StreamPartTypeFinish, + Usage: Usage{InputTokens: 10, OutputTokens: 5, TotalTokens: 15}, + FinishReason: FinishReasonToolCalls, + }) + } else { + // Should not be reached because StopTurn prevents a second step + t.Fatal("model should not be called a second time after StopTurn") + } + }, nil + }, + } + + type BlockedInput struct { + Message string `json:"message" description:"Message"` + } + + blockedTool := NewAgentTool( + "blocked_tool", + "A tool that stops the turn", + func(ctx context.Context, input BlockedInput, _ ToolCall) (ToolResponse, error) { + resp := NewTextErrorResponse("permission denied") + resp.StopTurn = true + return resp, nil + }, + ) + + agent := NewAgent(mockModel, WithTools(blockedTool)) + + result, err := agent.Stream(context.Background(), AgentStreamCall{ + Prompt: "test stop turn", + }) + require.NoError(t, err) + require.NotNil(t, result) + + // Only one step — StopTurn prevented the second model call. + require.Len(t, result.Steps, 1) + require.Equal(t, 1, stepCount) + + // Tool result should be present with StopTurn=true. + toolResults := result.Steps[0].Content.ToolResults() + require.Len(t, toolResults, 1) + require.Equal(t, "blocked_tool", toolResults[0].ToolName) + require.True(t, toolResults[0].StopTurn) + + // The final response also includes the stop-marked tool result. + responseResults := result.Response.Content.ToolResults() + require.Len(t, responseResults, 1) + require.True(t, responseResults[0].StopTurn) +} diff --git a/agent_test.go b/agent_test.go index 8d45429d2..da10747cd 100644 --- a/agent_test.go +++ b/agent_test.go @@ -2428,3 +2428,133 @@ func TestAgent_Generate_ExecutableProviderTool_CriticalError(t *testing.T) { require.Equal(t, 1, callCount) require.Len(t, result.Steps, 1) } + +func TestAgent_Generate_StopTurn(t *testing.T) { + t.Parallel() + + type TestInput struct { + Value string `json:"value" description:"Test value"` + } + + tool1 := NewAgentTool( + "tool1", + "Test tool", + func(ctx context.Context, input TestInput, _ ToolCall) (ToolResponse, error) { + resp := NewTextErrorResponse("permission denied: this tool call was blocked") + resp.StopTurn = true + return resp, nil + }, + ) + + callCount := 0 + model := &mockLanguageModel{ + generateFunc: func(ctx context.Context, call Call) (*Response, error) { + callCount++ + return &Response{ + Content: []Content{ + ToolCallContent{ + ToolCallID: "call-1", + ToolName: "tool1", + Input: `{"value":"test"}`, + }, + }, + Usage: Usage{ + InputTokens: 10, + OutputTokens: 5, + TotalTokens: 15, + }, + FinishReason: FinishReasonToolCalls, + }, nil + }, + } + + agent := NewAgent(model, WithTools(tool1)) + result, err := agent.Generate(context.Background(), AgentCall{ + Prompt: "test-input", + }) + + require.NoError(t, err) + require.NotNil(t, result) + // The model should only be called once — StopTurn prevents the second call. + require.Equal(t, 1, callCount) + require.Len(t, result.Steps, 1) + + // The tool result should still be in the step content. + toolResults := result.Steps[0].Content.ToolResults() + require.Len(t, toolResults, 1) + require.Equal(t, "tool1", toolResults[0].ToolName) + require.True(t, toolResults[0].StopTurn) + + // The final response also includes the stop-marked tool result. + responseResults := result.Response.Content.ToolResults() + require.Len(t, responseResults, 1) + require.True(t, responseResults[0].StopTurn) +} + +func TestAgent_Generate_StopTurn_NotSet(t *testing.T) { + t.Parallel() + + type TestInput struct { + Value string `json:"value" description:"Test value"` + } + + tool1 := NewAgentTool( + "tool1", + "Test tool", + func(ctx context.Context, input TestInput, _ ToolCall) (ToolResponse, error) { + return NewTextErrorResponse("normal error"), nil + }, + ) + + callCount := 0 + model := &mockLanguageModel{ + generateFunc: func(ctx context.Context, call Call) (*Response, error) { + callCount++ + switch callCount { + case 1: + return &Response{ + Content: []Content{ + ToolCallContent{ + ToolCallID: "call-1", + ToolName: "tool1", + Input: `{"value":"test"}`, + }, + }, + Usage: Usage{ + InputTokens: 10, + OutputTokens: 5, + TotalTokens: 15, + }, + FinishReason: FinishReasonToolCalls, + }, nil + case 2: + return &Response{ + Content: []Content{ + TextContent{Text: "Done"}, + }, + Usage: Usage{InputTokens: 3, OutputTokens: 5, TotalTokens: 8}, + FinishReason: FinishReasonStop, + }, nil + default: + t.Fatalf("Unexpected call count: %d", callCount) + return nil, nil + } + }, + } + + agent := NewAgent(model, WithTools(tool1)) + result, err := agent.Generate(context.Background(), AgentCall{ + Prompt: "test-input", + }) + + require.NoError(t, err) + require.NotNil(t, result) + // Without StopTurn, the model gets a second call. + require.Equal(t, 2, callCount) + require.Len(t, result.Steps, 2) + + // StopTurn should be false on the tool result. + toolResults := result.Steps[0].Content.ToolResults() + require.Len(t, toolResults, 1) + require.False(t, toolResults[0].StopTurn) +} diff --git a/content.go b/content.go index 8787f7cd0..f2a122ec4 100644 --- a/content.go +++ b/content.go @@ -463,6 +463,10 @@ type ToolResultContent struct { ProviderExecuted bool `json:"provider_executed"` // Additional provider-specific metadata for the tool result. ProviderMetadata ProviderMetadata `json:"provider_metadata"` + // StopTurn indicates that the agent loop should stop after this result. + // The tool result is still delivered to the model's context, but the model + // does not get another chance to make tool calls in the same turn. + StopTurn bool `json:"stop_turn,omitempty"` } // GetType returns the type of the tool result content. diff --git a/tool.go b/tool.go index be146ef3f..b856d55fa 100644 --- a/tool.go +++ b/tool.go @@ -38,6 +38,7 @@ type ToolResponse struct { MediaType string `json:"media_type,omitempty"` Metadata string `json:"metadata,omitempty"` IsError bool `json:"is_error"` + StopTurn bool `json:"stop_turn,omitempty"` } // NewTextResponse creates a text response. From 402a113a8014ebd1088f4379f328aa6a87b106fd Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Wed, 15 Apr 2026 12:51:46 -0400 Subject: [PATCH 12/82] v0.18.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index c3d16c164..66333910a 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.17.2 +0.18.0 From f60d4fef5f5e415d2065ef90ae263f20e1fae049 Mon Sep 17 00:00:00 2001 From: Danielle Maywood Date: Thu, 16 Apr 2026 18:47:51 +0100 Subject: [PATCH 13/82] feat(anthropic): add `EffortXHigh` constant (#204) --- providers/anthropic/provider_options.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/providers/anthropic/provider_options.go b/providers/anthropic/provider_options.go index 1bff4979a..a429b3ec8 100644 --- a/providers/anthropic/provider_options.go +++ b/providers/anthropic/provider_options.go @@ -19,6 +19,8 @@ const ( EffortMedium Effort = "medium" // EffortHigh represents high output effort. EffortHigh Effort = "high" + // EffortXHigh represents extra-high output effort. + EffortXHigh Effort = "xhigh" // EffortMax represents maximum output effort. EffortMax Effort = "max" ) From b2c4b61366bca30980955dda63e90289e45d3115 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 16 Apr 2026 14:50:22 -0300 Subject: [PATCH 14/82] v0.19.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 66333910a..1cf0537c3 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.18.0 +0.19.0 From 12cec6447e7ef5851748b8dcfc525ba180c55812 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 10:09:32 +0000 Subject: [PATCH 15/82] chore(deps): bump the all group with 4 updates (#206) Bumps the all group with 4 updates: [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/smithy-go](https://github.com/aws/smithy-go) and [google.golang.org/genai](https://github.com/googleapis/go-genai). Updates `github.com/aws/aws-sdk-go-v2` from 1.41.5 to 1.41.6 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.41.5...v1.41.6) Updates `github.com/aws/aws-sdk-go-v2/config` from 1.32.14 to 1.32.16 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.32.14...config/v1.32.16) Updates `github.com/aws/smithy-go` from 1.24.3 to 1.25.0 - [Release notes](https://github.com/aws/smithy-go/releases) - [Changelog](https://github.com/aws/smithy-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/aws/smithy-go/compare/v1.24.3...v1.25.0) Updates `google.golang.org/genai` from 1.53.0 to 1.54.0 - [Release notes](https://github.com/googleapis/go-genai/releases) - [Changelog](https://github.com/googleapis/go-genai/blob/main/CHANGELOG.md) - [Commits](https://github.com/googleapis/go-genai/compare/v1.53.0...v1.54.0) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go-v2 dependency-version: 1.41.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: github.com/aws/aws-sdk-go-v2/config dependency-version: 1.32.16 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: github.com/aws/smithy-go dependency-version: 1.25.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all - dependency-name: google.golang.org/genai dependency-version: 1.54.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 31 ++++++++++++++--------------- go.sum | 62 ++++++++++++++++++++++++++++------------------------------ 2 files changed, 45 insertions(+), 48 deletions(-) diff --git a/go.mod b/go.mod index 851af2f95..4e56deaf6 100644 --- a/go.mod +++ b/go.mod @@ -6,9 +6,9 @@ require ( charm.land/x/vcr v0.1.1 cloud.google.com/go/auth v0.20.0 github.com/ardanlabs/kronk v1.22.2 - github.com/aws/aws-sdk-go-v2 v1.41.5 - github.com/aws/aws-sdk-go-v2/config v1.32.14 - github.com/aws/smithy-go v1.24.3 + github.com/aws/aws-sdk-go-v2 v1.41.6 + github.com/aws/aws-sdk-go-v2/config v1.32.16 + github.com/aws/smithy-go v1.25.0 github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5 @@ -19,7 +19,7 @@ require ( github.com/kaptinlin/jsonschema v0.7.7 github.com/stretchr/testify v1.11.1 golang.org/x/oauth2 v0.36.0 - google.golang.org/genai v1.53.0 + google.golang.org/genai v1.54.0 ) require ( @@ -36,21 +36,20 @@ require ( github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.19.14 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.15 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.22 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8 // indirect github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 // indirect github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.0.10 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.16 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.42.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect diff --git a/go.sum b/go.sum index 8609a0ac9..0fc88588f 100644 --- a/go.sum +++ b/go.sum @@ -42,44 +42,42 @@ github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= github.com/ardanlabs/kronk v1.22.2 h1:86V7wMBc4JT5VPHhls/tzmHWUu/xHj2QsadeF57o3Ok= github.com/ardanlabs/kronk v1.22.2/go.mod h1:kCGX1KkU2JlzkIKJgUoXAxsBZu4g5HQqeJ52lnCWDew= -github.com/aws/aws-sdk-go-v2 v1.41.5 h1:dj5kopbwUsVUVFgO4Fi5BIT3t4WyqIDjGKCangnV/yY= -github.com/aws/aws-sdk-go-v2 v1.41.5/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= +github.com/aws/aws-sdk-go-v2 v1.41.6 h1:1AX0AthnBQzMx1vbmir3Y4WsnJgiydmnJjiLu+LvXOg= +github.com/aws/aws-sdk-go-v2 v1.41.6/go.mod h1:dy0UzBIfwSeot4grGvY1AqFWN5zgziMmWGzysDnHFcQ= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 h1:eBMB84YGghSocM7PsjmmPffTa+1FBUeNvGvFou6V/4o= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= -github.com/aws/aws-sdk-go-v2/config v1.32.14 h1:opVIRo/ZbbI8OIqSOKmpFaY7IwfFUOCCXBsUpJOwDdI= -github.com/aws/aws-sdk-go-v2/config v1.32.14/go.mod h1:U4/V0uKxh0Tl5sxmCBZ3AecYny4UNlVmObYjKuuaiOo= -github.com/aws/aws-sdk-go-v2/credentials v1.19.14 h1:n+UcGWAIZHkXzYt87uMFBv/l8THYELoX6gVcUvgl6fI= -github.com/aws/aws-sdk-go-v2/credentials v1.19.14/go.mod h1:cJKuyWB59Mqi0jM3nFYQRmnHVQIcgoxjEMAbLkpr62w= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 h1:NUS3K4BTDArQqNu2ih7yeDLaS3bmHD0YndtA6UP884g= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21/go.mod h1:YWNWJQNjKigKY1RHVJCuupeWDrrHjRqHm0N9rdrWzYI= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 h1:Rgg6wvjjtX8bNHcvi9OnXWwcE0a2vGpbwmtICOsvcf4= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21/go.mod h1:A/kJFst/nm//cyqonihbdpQZwiUhhzpqTsdbhDdRF9c= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 h1:PEgGVtPoB6NTpPrBgqSE5hE/o47Ij9qk/SEZFbUOe9A= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21/go.mod h1:p+hz+PRAYlY3zcpJhPwXlLC4C+kqn70WIHwnzAfs6ps= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22 h1:rWyie/PxDRIdhNf4DzRk0lvjVOqFJuNnO8WwaIRVxzQ= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22/go.mod h1:zd/JsJ4P7oGfUhXn1VyLqaRZwPmZwg44Jf2dS84Dm3Y= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= +github.com/aws/aws-sdk-go-v2/config v1.32.16 h1:Q0iQ7quUgJP0F/SCRTieScnaMdXr9h/2+wze1u3cNeM= +github.com/aws/aws-sdk-go-v2/config v1.32.16/go.mod h1:duCCnJEFqpt2RC6no1iK6q+8HpwOAkiUua0pY507dQc= +github.com/aws/aws-sdk-go-v2/credentials v1.19.15 h1:fyvgWTszojq8hEnMi8PPBTvZdTtEVmAVyo+NFLHBhH4= +github.com/aws/aws-sdk-go-v2/credentials v1.19.15/go.mod h1:gJiYyMOjNg8OEdRWOf3CrFQxM2a98qmrtjx1zuiQfB8= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.22 h1:IOGsJ1xVWhsi+ZO7/NW8OuZZBtMJLZbk4P5HDjJO0jQ= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.22/go.mod h1:b+hYdbU+jGKfXE8kKM6g1+h+L/Go3vMvzlxBsiuGsxg= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22 h1:GmLa5Kw1ESqtFpXsx5MmC84QWa/ZrLZvlJGa2y+4kcQ= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22/go.mod h1:6sW9iWm9DK9YRpRGga/qzrzNLgKpT2cIxb7Vo2eNOp0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22 h1:dY4kWZiSaXIzxnKlj17nHnBcXXBfac6UlsAx2qL6XrU= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22/go.mod h1:KIpEUx0JuRZLO7U6cbV204cWAEco2iC3l061IxlwLtI= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23 h1:FPXsW9+gMuIeKmz7j6ENWcWtBGTe1kH8r9thNt5Uxx4= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23/go.mod h1:7J8iGMdRKk6lw2C+cMIphgAnT8uTwBwNOsGkyOCm80U= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8 h1:HtOTYcbVcGABLOVuPYaIihj6IlkqubBwFj10K5fxRek= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8/go.mod h1:VsK9abqQeGlzPgUr+isNWzPlK2vKe9INMLWnY65f5Xs= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 h1:JRaIgADQS/U6uXDqlPiefP32yXTda7Kqfx+LgspooZM= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13/go.mod h1:CEuVn5WqOMilYl+tbccq8+N2ieCy0gVn3OtRb0vBNNM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 h1:c31//R3xgIJMSC8S6hEVq+38DcvUlgFY0FM6mSI5oto= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21/go.mod h1:r6+pf23ouCB718FUxaqzZdbpYFyDtehyZcmP5KL9FkA= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22 h1:PUmZeJU6Y1Lbvt9WFuJ0ugUK2xn6hIWUBBbKuOWF30s= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22/go.mod h1:nO6egFBoAaoXze24a2C0NjQCvdpk8OueRoYimvEB9jo= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 h1:ZlvrNcHSFFWURB8avufQq9gFsheUgjVD9536obIknfM= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21/go.mod h1:cv3TNhVrssKR0O/xxLJVRfd2oazSnZnkUeTf6ctUwfQ= github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0 h1:hlSuz394kV0vhv9drL5lhuEFbEOEP1VyQpy15qWh1Pk= github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0/go.mod h1:uoA43SdFwacedBfSgfFSjjCvYe8aYBS7EnU5GZ/YKMM= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 h1:QKZH0S178gCmFEgst8hN0mCX1KxLgHBKKY/CLqwP8lg= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.9/go.mod h1:7yuQJoT+OoH8aqIxw9vwF+8KpvLZ8AWmvmUWHsGQZvI= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 h1:lFd1+ZSEYJZYvv9d6kXzhkZu07si3f+GQ1AaYwa2LUM= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.15/go.mod h1:WSvS1NLr7JaPunCXqpJnWk1Bjo7IxzZXrZi1QQCkuqM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19 h1:dzztQ1YmfPrxdrOiuZRMF6fuOwWlWpD2StNLTceKpys= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19/go.mod h1:YO8TrYtFdl5w/4vmjL8zaBSsiNp3w0L1FfKVKenZT7w= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 h1:p8ogvvLugcR/zLBXTXrTkj0RYBUdErbMnAFFp12Lm/U= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.10/go.mod h1:60dv0eZJfeVXfbT1tFJinbHrDfSJ2GZl4Q//OSSNAVw= -github.com/aws/smithy-go v1.24.3 h1:XgOAaUgx+HhVBoP4v8n6HCQoTRDhoMghKqw4LNHsDNg= -github.com/aws/smithy-go v1.24.3/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.10 h1:a1Fq/KXn75wSzoJaPQTgZO0wHGqE9mjFnylnqEPTchA= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.10/go.mod h1:p6+MXNxW7IA6dMgHfTAzljuwSKD0NCm/4lbS4t6+7vI= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.16 h1:x6bKbmDhsgSZwv6q19wY/u3rLk/3FGjJWyqKcIRufpE= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.16/go.mod h1:CudnEVKRtLn0+3uMV0yEXZ+YZOKnAtUJ5DmDhilVnIw= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20 h1:oK/njaL8GtyEihkWMD4k3VgHCT64RQKkZwh0DG5j8ak= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20/go.mod h1:JHs8/y1f3zY7U5WcuzoJ/yAYGYtNIVPKLIbp61euvmg= +github.com/aws/aws-sdk-go-v2/service/sts v1.42.0 h1:ks8KBcZPh3PYISr5dAiXCM5/Thcuxk8l+PG4+A0exds= +github.com/aws/aws-sdk-go-v2/service/sts v1.42.0/go.mod h1:pFw33T0WLvXU3rw1WBkpMlkgIn54eCB5FYLhjDc9Foo= +github.com/aws/smithy-go v1.25.0 h1:Sz/XJ64rwuiKtB6j98nDIPyYrV1nVNJ4YU74gttcl5U= +github.com/aws/smithy-go v1.25.0/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= @@ -300,8 +298,8 @@ gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/api v0.275.0 h1:vfY5d9vFVJeWEZT65QDd9hbndr7FyZ2+6mIzGAh71NI= google.golang.org/api v0.275.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= -google.golang.org/genai v1.53.0 h1:8tR9MuO/TdaXSc8PEFamohQKxRz5M/qctbyzhV2YwMM= -google.golang.org/genai v1.53.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= +google.golang.org/genai v1.54.0 h1:ZQCa70WMTJDI11FdqWCzGvZ5PanpcpfoO6jl/lrSnGU= +google.golang.org/genai v1.54.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= google.golang.org/genproto v0.0.0-20260406210006-6f92a3bedf2d h1:N1Ec54vZnIPd7MnxRiYLW+oY4fDR4BOS/LrssdD9+ek= google.golang.org/genproto v0.0.0-20260406210006-6f92a3bedf2d/go.mod h1:c2hJ1grtnH0xUiEKGDGkjGNTJ1Hy2LrblyKOHF0sqRM= google.golang.org/genproto/googleapis/api v0.0.0-20260406210006-6f92a3bedf2d h1:/aDRtSZJjyLQzm75d+a1wOJaqyKBMvIAfeQmoa3ORiI= From 3bfd3c8f6b927eeaba26946cd7a7e39107f85835 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Apr 2026 10:15:10 +0000 Subject: [PATCH 16/82] chore(deps): bump github.com/ardanlabs/kronk in the kronk group (#207) Bumps the kronk group with 1 update: [github.com/ardanlabs/kronk](https://github.com/ardanlabs/kronk). Updates `github.com/ardanlabs/kronk` from 1.22.2 to 1.23.1 - [Release notes](https://github.com/ardanlabs/kronk/releases) - [Commits](https://github.com/ardanlabs/kronk/compare/v1.22.2...v1.23.1) --- updated-dependencies: - dependency-name: github.com/ardanlabs/kronk dependency-version: 1.23.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: kronk ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 37 ++++++++----------- go.sum | 111 ++++++++++++++++++++------------------------------------- 2 files changed, 53 insertions(+), 95 deletions(-) diff --git a/go.mod b/go.mod index 4e56deaf6..5b7f43992 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.26.2 require ( charm.land/x/vcr v0.1.1 cloud.google.com/go/auth v0.20.0 - github.com/ardanlabs/kronk v1.22.2 + github.com/ardanlabs/kronk v1.23.1 github.com/aws/aws-sdk-go-v2 v1.41.6 github.com/aws/aws-sdk-go-v2/config v1.32.16 github.com/aws/smithy-go v1.25.0 @@ -27,14 +27,15 @@ require ( cloud.google.com/go v0.123.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect - cloud.google.com/go/iam v1.7.0 // indirect - cloud.google.com/go/monitoring v1.25.0 // indirect - cloud.google.com/go/storage v1.62.0 // indirect + cloud.google.com/go/iam v1.9.0 // indirect + cloud.google.com/go/monitoring v1.27.0 // indirect + cloud.google.com/go/storage v1.62.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 // indirect + github.com/ardanlabs/jinja v1.1.0 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.19.15 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.22 // indirect @@ -56,7 +57,6 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/dustin/go-humanize v1.0.1 // indirect github.com/ebitengine/purego v0.10.0 // indirect github.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect @@ -68,34 +68,28 @@ require ( github.com/goccy/go-yaml v1.19.2 // indirect github.com/google/go-cmp v0.7.0 // indirect github.com/google/s2a-go v0.1.9 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect - github.com/googleapis/gax-go/v2 v2.21.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.15 // indirect + github.com/googleapis/gax-go/v2 v2.22.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.8.6 // indirect github.com/hashicorp/go-version v1.9.0 // indirect - github.com/hybridgroup/yzma v1.11.1 // indirect - github.com/json-iterator/go v1.1.12 // indirect + github.com/hybridgroup/yzma v1.12.0 // indirect github.com/jupiterrider/ffi v0.6.0 // indirect github.com/kaptinlin/go-i18n v0.3.0 // indirect github.com/kaptinlin/jsonpointer v0.4.17 // indirect github.com/kaptinlin/messageformat-go v0.4.19 // indirect github.com/klauspost/compress v1.18.5 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/nikolalohinski/gonja/v2 v2.7.0 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.67.5 // indirect github.com/prometheus/procfs v0.20.1 // indirect - github.com/sirupsen/logrus v1.9.4 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect github.com/tidwall/gjson v1.18.0 // indirect github.com/tidwall/match v1.1.1 // indirect @@ -116,17 +110,16 @@ require ( go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect - golang.org/x/crypto v0.49.0 // indirect - golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect - golang.org/x/net v0.52.0 // indirect + golang.org/x/crypto v0.50.0 // indirect + golang.org/x/net v0.53.0 // indirect golang.org/x/sync v0.20.0 // indirect golang.org/x/sys v0.43.0 // indirect - golang.org/x/text v0.35.0 // indirect + golang.org/x/text v0.36.0 // indirect golang.org/x/time v0.15.0 // indirect - google.golang.org/api v0.275.0 // indirect - google.golang.org/genproto v0.0.0-20260406210006-6f92a3bedf2d // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260406210006-6f92a3bedf2d // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d // indirect + google.golang.org/api v0.276.0 // indirect + google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect google.golang.org/grpc v1.80.0 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect diff --git a/go.sum b/go.sum index 0fc88588f..690b1e625 100644 --- a/go.sum +++ b/go.sum @@ -10,18 +10,18 @@ cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIi cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -cloud.google.com/go/iam v1.7.0 h1:JD3zh0C6LHl16aCn5Akff0+GELdp1+4hmh6ndoFLl8U= -cloud.google.com/go/iam v1.7.0/go.mod h1:tetWZW1PD/m6vcuY2Zj/aU0eCHNPuxedbnbRTyKXvdY= -cloud.google.com/go/logging v1.14.0 h1:xpPpY8cVT6n9DgIRgrWyE+YEsGlO/994pWnbc7o5Eh4= -cloud.google.com/go/logging v1.14.0/go.mod h1:jmI+Try/fZeOTOAer3wVYOuPf9WX9PyzhlSDoBAi4HM= -cloud.google.com/go/longrunning v0.9.0 h1:0EzbDEGsAvOZNbqXopgniY0w0a1phvu5IdUFq8grmqY= -cloud.google.com/go/longrunning v0.9.0/go.mod h1:pkTz846W7bF4o2SzdWJ40Hu0Re+UoNT6Q5t+igIcb8E= -cloud.google.com/go/monitoring v1.25.0 h1:HnsTIOxTN6BCSkt1P/Im23r1m7MHTTpmSYCzPkW7NK4= -cloud.google.com/go/monitoring v1.25.0/go.mod h1:wlj6rX+JGyusw/8+2duW4cJ6kmDHGmde3zMTJuG3Jpc= -cloud.google.com/go/storage v1.62.0 h1:w2pQJhpUqVerMON45vatE2FpCYsNTf7OHjkn6ux5mMU= -cloud.google.com/go/storage v1.62.0/go.mod h1:T5hz3qzcpnxZ5LdKc7y8Tw7lh4v9zeeVyrD/cLJAzZU= -cloud.google.com/go/trace v1.12.0 h1:XvWHYfr9q88cX4pZyou6qCcSagnuASyUq2ej1dB6NzQ= -cloud.google.com/go/trace v1.12.0/go.mod h1:TOYfyeoyCGsSH0ifXD6Aius24uQI9xV3RyvOdljFIyg= +cloud.google.com/go/iam v1.9.0 h1:89wyjxT6DL4b5rk/Nk8eBC9DHqf+JiMstrn5IEYxFw4= +cloud.google.com/go/iam v1.9.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= +cloud.google.com/go/logging v1.15.0 h1:6ooUEBNT6jdWh2b36+iuPn6b/R9qN/tHCbvGS5255gg= +cloud.google.com/go/logging v1.15.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI= +cloud.google.com/go/longrunning v0.10.0 h1:4OWvp1BjCvoeSZTog3sRFDu6j4IrI9TI4/Y9N+8h25g= +cloud.google.com/go/longrunning v0.10.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= +cloud.google.com/go/monitoring v1.27.0 h1:BhYwMqao+e5Nn7JtWMM9m6zRtKtVUK6kJWMizXChkLU= +cloud.google.com/go/monitoring v1.27.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= +cloud.google.com/go/storage v1.62.1 h1:Os0G3XbUbjZumkpDUf2Y0rLoXJTCF1kU2kWUujKYXD8= +cloud.google.com/go/storage v1.62.1/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= +cloud.google.com/go/trace v1.13.0 h1:RfqsqPOiSCG8ql50UZt5F65KrVa1zbY9mJrO7xvZfbE= +cloud.google.com/go/trace v1.13.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc= @@ -38,10 +38,10 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0 github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.56.0/go.mod h1:rqP9UEhOXv9WhQ7Gjz+G5y/pf8+BJZW5/Ts0AhE0PwE= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 h1:0YP0+/ixwu+Uqeu/FGiBZNQ19huiUxxiPXIc9WsLKuQ= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= -github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= -github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= -github.com/ardanlabs/kronk v1.22.2 h1:86V7wMBc4JT5VPHhls/tzmHWUu/xHj2QsadeF57o3Ok= -github.com/ardanlabs/kronk v1.22.2/go.mod h1:kCGX1KkU2JlzkIKJgUoXAxsBZu4g5HQqeJ52lnCWDew= +github.com/ardanlabs/jinja v1.1.0 h1:SZtVrV+1szfSBXBKQA5FoJtOabUxkJu5IvEX+ADUtcM= +github.com/ardanlabs/jinja v1.1.0/go.mod h1:onVec/ZOYPqNm7TRiNfJBnW+t9VxSi2gkARWhgP9qwQ= +github.com/ardanlabs/kronk v1.23.1 h1:5grtasj/ZIPHod0P9tG38RKZkRiOmLMjX2QwxpLzi8s= +github.com/ardanlabs/kronk v1.23.1/go.mod h1:a3FhTn4vz2tR0axNBCiG8SzFw33bN0WA9EBAK+YMYIE= github.com/aws/aws-sdk-go-v2 v1.41.6 h1:1AX0AthnBQzMx1vbmir3Y4WsnJgiydmnJjiLu+LvXOg= github.com/aws/aws-sdk-go-v2 v1.41.6/go.mod h1:dy0UzBIfwSeot4grGvY1AqFWN5zgziMmWGzysDnHFcQ= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 h1:eBMB84YGghSocM7PsjmmPffTa+1FBUeNvGvFou6V/4o= @@ -96,14 +96,10 @@ github.com/charmbracelet/x/json v0.2.0 h1:DqB+ZGx2h+Z+1s98HOuOyli+i97wsFQIxP2ZQA github.com/charmbracelet/x/json v0.2.0/go.mod h1:opFIflx2YgXgi49xVUu8gEQ21teFAxyMwvOiZhIvWNM= github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/ebitengine/purego v0.10.0 h1:QIw4xfpWT6GWTzaW5XEKy3HXoqrJGx1ijYHzTF0/ISU= github.com/ebitengine/purego v0.10.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA= @@ -125,8 +121,6 @@ github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= -github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= @@ -137,19 +131,16 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= -github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8= -github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= -github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.21.0 h1:h45NjjzEO3faG9Lg/cFrBh2PgegVVgzqKzuZl/wMbiI= -github.com/googleapis/gax-go/v2 v2.21.0/go.mod h1:But/NJU6TnZsrLai/xBAQLLz+Hc7fHZJt/hsCz3Fih4= +github.com/googleapis/enterprise-certificate-proxy v0.3.15 h1:xolVQTEXusUcAA5UgtyRLjelpFFHWlPQ4XfWGc7MBas= +github.com/googleapis/enterprise-certificate-proxy v0.3.15/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= +github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4= +github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= @@ -162,12 +153,10 @@ github.com/hashicorp/go-getter v1.8.6 h1:9sQboWULaydVphxc4S64oAI4YqpuCk7nPmvbk13 github.com/hashicorp/go-getter v1.8.6/go.mod h1:nVH12eOV2P58dIiL3rsU6Fh3wLeJEKBOJzhMmzlSWoo= github.com/hashicorp/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA= github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hybridgroup/yzma v1.11.1 h1:HvpPAFzg6lAWTFgxC8R/wjkRbTW2hd2dEM0F41t/gq8= -github.com/hybridgroup/yzma v1.11.1/go.mod h1:zrzMgv/KVQz23+s6l16b+vJ+9uJVBdWtGcGkwRTMeiQ= +github.com/hybridgroup/yzma v1.12.0 h1:kRHZdzEQCuQaBCUx7AVWYqVUvTHw8qB6gp+9ORcryLg= +github.com/hybridgroup/yzma v1.12.0/go.mod h1:zrzMgv/KVQz23+s6l16b+vJ+9uJVBdWtGcGkwRTMeiQ= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jupiterrider/ffi v0.6.0 h1:UX378KcZvH5c8qgLi9KL/bL82SZTHdRspZ+jj7bvBng= github.com/jupiterrider/ffi v0.6.0/go.mod h1:PqZ5Go6X9by8CIXgfprxfMPYmn8oT5m2O7AA56s64bY= github.com/kaptinlin/go-i18n v0.3.0 h1:wP76dvYg04bvwTb+8NB+CmdZ2kL7lSSCQ9B/kFv7QHo= @@ -188,28 +177,14 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/nikolalohinski/gonja/v2 v2.7.0 h1:XuwnulQVPwzGaM0J/9AaQv0AFPBAxKI1GILifQ1r9pk= -github.com/nikolalohinski/gonja/v2 v2.7.0/go.mod h1:UIzXPVuOsr5h7dZ5DUbqk3/Z7oFA/NLGQGMjqT4L2aU= -github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus= -github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= -github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y= -github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= @@ -222,12 +197,8 @@ github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEy github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= -github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= github.com/spiffe/go-spiffe/v2 v2.6.0 h1:l+DolpxNWYgruGQVV0xsfeya3CsC7m8iBzDnMpsbLuo= github.com/spiffe/go-spiffe/v2 v2.6.0/go.mod h1:gm2SeUoMZEtpnzPNs2Csc0D/gX33k1xIx7lEzqblHEs= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= @@ -256,8 +227,8 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bT go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 h1:RAE+JPfvEmvy+0LzyUA25/SGawPwIUbZ6u0Wug54sLc= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0/go.mod h1:AGmbycVGEsRx9mXMZ75CsOyhSP6MFIcj/6dnG+vhVjk= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.42.0 h1:lSZHgNHfbmQTPfuTmWVkEu8J8qXaQwuV30pjCcAUvP8= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.42.0/go.mod h1:so9ounLcuoRDu033MW/E0AD4hhUjVqswrMF5FoZlBcw= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= @@ -268,44 +239,38 @@ go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09 go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= -go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= -go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= go.yaml.in/yaml/v4 v4.0.0-rc.3 h1:3h1fjsh1CTAPjW7q/EMe+C8shx5d8ctzZTrLcs/j8Go= go.yaml.in/yaml/v4 v4.0.0-rc.3/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= -golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= -golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= -golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA= -golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= +golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= +golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= +golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= -golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= +golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= +golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= -golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= -golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.275.0 h1:vfY5d9vFVJeWEZT65QDd9hbndr7FyZ2+6mIzGAh71NI= -google.golang.org/api v0.275.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= +google.golang.org/api v0.276.0 h1:nVArUtfLEihtW+b0DdcqRGK1xoEm2+ltAihyztq7MKY= +google.golang.org/api v0.276.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= google.golang.org/genai v1.54.0 h1:ZQCa70WMTJDI11FdqWCzGvZ5PanpcpfoO6jl/lrSnGU= google.golang.org/genai v1.54.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= -google.golang.org/genproto v0.0.0-20260406210006-6f92a3bedf2d h1:N1Ec54vZnIPd7MnxRiYLW+oY4fDR4BOS/LrssdD9+ek= -google.golang.org/genproto v0.0.0-20260406210006-6f92a3bedf2d/go.mod h1:c2hJ1grtnH0xUiEKGDGkjGNTJ1Hy2LrblyKOHF0sqRM= -google.golang.org/genproto/googleapis/api v0.0.0-20260406210006-6f92a3bedf2d h1:/aDRtSZJjyLQzm75d+a1wOJaqyKBMvIAfeQmoa3ORiI= -google.golang.org/genproto/googleapis/api v0.0.0-20260406210006-6f92a3bedf2d/go.mod h1:etfGUgejTiadZAUaEP14NP97xi1RGeawqkjDARA/UOs= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d h1:wT2n40TBqFY6wiwazVK9/iTWbsQrgk5ZfCSVFLO9LQA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260406210006-6f92a3bedf2d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478 h1:aLsVTW0lZ8+IY5u/ERjZSCvAmhuR7slKzyha3YikDNA= +google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478/go.mod h1:YJAzKjfHIUHb9T+bfu8L7mthAp7VVXQBUs1PLdBWS7M= +google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 h1:yQugLulqltosq0B/f8l4w9VryjV+N/5gcW0jQ3N8Qec= +google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478/go.mod h1:C6ADNqOxbgdUUeRTU+LCHDPB9ttAMCTff6auwCVa4uc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= From 471520cfa309312970eaff6c8803434e33b4ae94 Mon Sep 17 00:00:00 2001 From: Lauri Jutila Date: Wed, 22 Apr 2026 18:04:13 +0300 Subject: [PATCH 17/82] fix(anthropic/openai/google): wrap `io.ErrUnexpectedEOF` as `ProviderError` (#198) --- providers/anthropic/error.go | 9 +++++ providers/anthropic/error_test.go | 67 +++++++++++++++++++++++++++++++ providers/google/error.go | 9 +++++ providers/google/error_test.go | 63 +++++++++++++++++++++++++++++ providers/openai/error.go | 8 ++++ providers/openai/error_test.go | 63 +++++++++++++++++++++++++++++ 6 files changed, 219 insertions(+) create mode 100644 providers/anthropic/error_test.go create mode 100644 providers/google/error_test.go create mode 100644 providers/openai/error_test.go diff --git a/providers/anthropic/error.go b/providers/anthropic/error.go index c4022d464..a2a351d50 100644 --- a/providers/anthropic/error.go +++ b/providers/anthropic/error.go @@ -3,6 +3,7 @@ package anthropic import ( "cmp" "errors" + "io" "net/http" "regexp" "strconv" @@ -32,6 +33,14 @@ func toProviderErr(err error) error { return providerErr } + // Wrap in a `ProviderError` so `.IsRetriable()` works. + if errors.Is(err, io.ErrUnexpectedEOF) { + return &fantasy.ProviderError{ + Title: "stream transport error", + Message: err.Error(), + Cause: err, + } + } return err } diff --git a/providers/anthropic/error_test.go b/providers/anthropic/error_test.go new file mode 100644 index 000000000..26273a352 --- /dev/null +++ b/providers/anthropic/error_test.go @@ -0,0 +1,67 @@ +package anthropic + +import ( + "errors" + "fmt" + "io" + "testing" + + "charm.land/fantasy" +) + +func TestToProviderErr_WrapsUnexpectedEOF(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + err error + }{ + {"direct", io.ErrUnexpectedEOF}, + {"wrapped", fmt.Errorf("read stream: %w", io.ErrUnexpectedEOF)}, + {"double_wrapped", fmt.Errorf("anthropic: %w", fmt.Errorf("sse: %w", io.ErrUnexpectedEOF))}, + } + + for _, tc := range cases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + got := toProviderErr(tc.err) + + var providerErr *fantasy.ProviderError + if !errors.As(got, &providerErr) { + t.Fatalf("toProviderErr did not wrap %v as *fantasy.ProviderError (got %T)", tc.err, got) + } + if !errors.Is(providerErr.Cause, io.ErrUnexpectedEOF) { + t.Errorf("ProviderError.Cause = %v, want chain containing io.ErrUnexpectedEOF", providerErr.Cause) + } + if !providerErr.IsRetryable() { + t.Error("wrapped io.ErrUnexpectedEOF must be retryable so retry.go engages") + } + }) + } +} + +func TestToProviderErr_PassesThroughUnrelatedErrors(t *testing.T) { + t.Parallel() + + err := errors.New("something unrelated") + got := toProviderErr(err) + if got != err { + t.Errorf("toProviderErr mutated unrelated error: got %v, want %v", got, err) + } +} + +func TestToProviderErr_PassesThroughPlainEOF(t *testing.T) { + t.Parallel() + + // A clean io.EOF at the end of a stream is not a failure — the streaming + // handler in anthropic.go treats it as a normal terminator and never + // calls toProviderErr with io.EOF. But if it ever did, we should not + // wrap it: io.EOF is not "retryable" in the ProviderError sense. + got := toProviderErr(io.EOF) + var providerErr *fantasy.ProviderError + if errors.As(got, &providerErr) { + t.Errorf("toProviderErr wrapped io.EOF as ProviderError; should pass through") + } +} diff --git a/providers/google/error.go b/providers/google/error.go index 25e915c2c..cd706384e 100644 --- a/providers/google/error.go +++ b/providers/google/error.go @@ -3,6 +3,7 @@ package google import ( "cmp" "errors" + "io" "regexp" "strconv" @@ -15,6 +16,14 @@ var googleContextPattern = regexp.MustCompile(`input token count.*?(\d+).*?excee func toProviderErr(err error) error { var apiErr genai.APIError if !errors.As(err, &apiErr) { + // Wrap in a `ProviderError` so `.IsRetriable()` works. + if errors.Is(err, io.ErrUnexpectedEOF) { + return &fantasy.ProviderError{ + Title: "stream transport error", + Message: err.Error(), + Cause: err, + } + } return err } diff --git a/providers/google/error_test.go b/providers/google/error_test.go new file mode 100644 index 000000000..693f35ee2 --- /dev/null +++ b/providers/google/error_test.go @@ -0,0 +1,63 @@ +package google + +import ( + "errors" + "fmt" + "io" + "testing" + + "charm.land/fantasy" +) + +func TestToProviderErr_WrapsUnexpectedEOF(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + err error + }{ + {"direct", io.ErrUnexpectedEOF}, + {"wrapped", fmt.Errorf("read stream: %w", io.ErrUnexpectedEOF)}, + {"double_wrapped", fmt.Errorf("google: %w", fmt.Errorf("sse: %w", io.ErrUnexpectedEOF))}, + } + + for _, tc := range cases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + got := toProviderErr(tc.err) + + var providerErr *fantasy.ProviderError + if !errors.As(got, &providerErr) { + t.Fatalf("toProviderErr did not wrap %v as *fantasy.ProviderError (got %T)", tc.err, got) + } + if !errors.Is(providerErr.Cause, io.ErrUnexpectedEOF) { + t.Errorf("ProviderError.Cause = %v, want chain containing io.ErrUnexpectedEOF", providerErr.Cause) + } + if !providerErr.IsRetryable() { + t.Error("wrapped io.ErrUnexpectedEOF must be retryable so retry.go engages") + } + }) + } +} + +func TestToProviderErr_PassesThroughUnrelatedErrors(t *testing.T) { + t.Parallel() + + err := errors.New("something unrelated") + got := toProviderErr(err) + if got != err { + t.Errorf("toProviderErr mutated unrelated error: got %v, want %v", got, err) + } +} + +func TestToProviderErr_PassesThroughPlainEOF(t *testing.T) { + t.Parallel() + + got := toProviderErr(io.EOF) + var providerErr *fantasy.ProviderError + if errors.As(got, &providerErr) { + t.Errorf("toProviderErr wrapped io.EOF as ProviderError; should pass through") + } +} diff --git a/providers/openai/error.go b/providers/openai/error.go index 861b79eea..5cbc76be0 100644 --- a/providers/openai/error.go +++ b/providers/openai/error.go @@ -34,6 +34,14 @@ func toProviderErr(err error) error { return providerErr } + // Wrap in a `ProviderError` so `.IsRetriable()` works. + if errors.Is(err, io.ErrUnexpectedEOF) { + return &fantasy.ProviderError{ + Title: "stream transport error", + Message: err.Error(), + Cause: err, + } + } return err } diff --git a/providers/openai/error_test.go b/providers/openai/error_test.go new file mode 100644 index 000000000..2914f8501 --- /dev/null +++ b/providers/openai/error_test.go @@ -0,0 +1,63 @@ +package openai + +import ( + "errors" + "fmt" + "io" + "testing" + + "charm.land/fantasy" +) + +func TestToProviderErr_WrapsUnexpectedEOF(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + err error + }{ + {"direct", io.ErrUnexpectedEOF}, + {"wrapped", fmt.Errorf("read stream: %w", io.ErrUnexpectedEOF)}, + {"double_wrapped", fmt.Errorf("openai: %w", fmt.Errorf("sse: %w", io.ErrUnexpectedEOF))}, + } + + for _, tc := range cases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + + got := toProviderErr(tc.err) + + var providerErr *fantasy.ProviderError + if !errors.As(got, &providerErr) { + t.Fatalf("toProviderErr did not wrap %v as *fantasy.ProviderError (got %T)", tc.err, got) + } + if !errors.Is(providerErr.Cause, io.ErrUnexpectedEOF) { + t.Errorf("ProviderError.Cause = %v, want chain containing io.ErrUnexpectedEOF", providerErr.Cause) + } + if !providerErr.IsRetryable() { + t.Error("wrapped io.ErrUnexpectedEOF must be retryable so retry.go engages") + } + }) + } +} + +func TestToProviderErr_PassesThroughUnrelatedErrors(t *testing.T) { + t.Parallel() + + err := errors.New("something unrelated") + got := toProviderErr(err) + if got != err { + t.Errorf("toProviderErr mutated unrelated error: got %v, want %v", got, err) + } +} + +func TestToProviderErr_PassesThroughPlainEOF(t *testing.T) { + t.Parallel() + + got := toProviderErr(io.EOF) + var providerErr *fantasy.ProviderError + if errors.As(got, &providerErr) { + t.Errorf("toProviderErr wrapped io.EOF as ProviderError; should pass through") + } +} From 95dcd6eee433608023587f3298121b2d7fdee117 Mon Sep 17 00:00:00 2001 From: Nic-vdwalt <36562088+Nic-vdwalt@users.noreply.github.com> Date: Wed, 22 Apr 2026 17:09:37 +0200 Subject: [PATCH 18/82] feat(anthropic): add document support for pdf and text file content blocks (#197) --- providers/anthropic/anthropic.go | 15 +++++++-- providers/anthropic/anthropic_test.go | 46 ++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 2f05b2f12..882a22c9c 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -831,7 +831,6 @@ func toPrompt(prompt fantasy.Prompt, sendReasoningData bool) ([]anthropic.TextBl if !ok { continue } - // TODO: handle other file types switch { case strings.HasPrefix(file.MediaType, "image/"): base64Encoded := base64.StdEncoding.EncodeToString(file.Data) @@ -840,10 +839,22 @@ func toPrompt(prompt fantasy.Prompt, sendReasoningData bool) ([]anthropic.TextBl imageBlock.OfImage.CacheControl = anthropic.NewCacheControlEphemeralParam() } anthropicContent = append(anthropicContent, imageBlock) + case file.MediaType == "application/pdf": + base64Encoded := base64.StdEncoding.EncodeToString(file.Data) + docBlock := anthropic.NewDocumentBlock(anthropic.Base64PDFSourceParam{ + Data: base64Encoded, + }) + if cacheControl != nil { + docBlock.OfDocument.CacheControl = anthropic.NewCacheControlEphemeralParam() + } + anthropicContent = append(anthropicContent, docBlock) case strings.HasPrefix(file.MediaType, "text/"): documentBlock := anthropic.NewDocumentBlock(anthropic.PlainTextSourceParam{ Data: string(file.Data), }) + if cacheControl != nil { + documentBlock.OfDocument.CacheControl = anthropic.NewCacheControlEphemeralParam() + } anthropicContent = append(anthropicContent, documentBlock) } } @@ -1050,7 +1061,7 @@ func toPrompt(prompt fantasy.Prompt, sendReasoningData bool) ([]anthropic.TextBl func hasVisibleUserContent(content []anthropic.ContentBlockParamUnion) bool { for _, block := range content { - if block.OfText != nil || block.OfImage != nil || block.OfToolResult != nil { + if block.OfText != nil || block.OfImage != nil || block.OfDocument != nil || block.OfToolResult != nil { return true } } diff --git a/providers/anthropic/anthropic_test.go b/providers/anthropic/anthropic_test.go index d447954cb..69c41f94f 100644 --- a/providers/anthropic/anthropic_test.go +++ b/providers/anthropic/anthropic_test.go @@ -262,6 +262,50 @@ func TestToPrompt_DropsEmptyMessages(t *testing.T) { require.Empty(t, warnings) }) + t.Run("should keep user messages with PDF content", func(t *testing.T) { + t.Parallel() + + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleUser, + Content: []fantasy.MessagePart{ + fantasy.FilePart{ + Data: []byte("fake pdf data"), + MediaType: "application/pdf", + }, + }, + }, + } + + systemBlocks, messages, warnings := toPrompt(prompt, true) + + require.Empty(t, systemBlocks) + require.Len(t, messages, 1) + require.Empty(t, warnings) + }) + + t.Run("should keep user messages with text document content", func(t *testing.T) { + t.Parallel() + + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleUser, + Content: []fantasy.MessagePart{ + fantasy.FilePart{ + Data: []byte("# Hello World\nSome markdown content"), + MediaType: "text/markdown", + }, + }, + }, + } + + systemBlocks, messages, warnings := toPrompt(prompt, true) + + require.Empty(t, systemBlocks) + require.Len(t, messages, 1) + require.Empty(t, warnings) + }) + t.Run("should drop user messages without visible content", func(t *testing.T) { t.Parallel() @@ -271,7 +315,7 @@ func TestToPrompt_DropsEmptyMessages(t *testing.T) { Content: []fantasy.MessagePart{ fantasy.FilePart{ Data: []byte("not supported"), - MediaType: "application/pdf", + MediaType: "application/zip", }, }, }, From b852eff331c36a71fc707b853406bc775ae4c4c3 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Wed, 22 Apr 2026 12:10:06 -0300 Subject: [PATCH 19/82] v0.20.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 1cf0537c3..5a03fb737 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.19.0 +0.20.0 From 6d22b8511be89ca827fac3f22573b03d73b0acfe Mon Sep 17 00:00:00 2001 From: Michael Suchacz <203725896+ibetitsmike@users.noreply.github.com> Date: Fri, 24 Apr 2026 21:25:03 +0200 Subject: [PATCH 20/82] feat(openai): add gpt-5.5 responses models (#211) --- providers/openai/responses_options.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/providers/openai/responses_options.go b/providers/openai/responses_options.go index a80a5d310..42cdf984c 100644 --- a/providers/openai/responses_options.go +++ b/providers/openai/responses_options.go @@ -219,6 +219,8 @@ var responsesReasoningModelIDs = []string{ "gpt-5.4-mini", "gpt-5.4-nano", "gpt-5.4-codex", + "gpt-5.5", + "gpt-5.5-pro", "gpt-oss-120b", } From 5975b48ed54cf7d755505a78bde8a6f4994d073d Mon Sep 17 00:00:00 2001 From: carsonfarmer Date: Fri, 24 Apr 2026 12:26:51 -0700 Subject: [PATCH 21/82] fix(openaicompat): parse "reasoning" field and include reasoning_content on tool call messages (#196) Some OpenAI-compatible providers (e.g. Moonshot AI/Kimi) send reasoning content under the "reasoning" JSON field rather than "reasoning_content". The ReasoningData struct only looked for "reasoning_content", silently dropping all reasoning from these providers. Additionally, when thinking is enabled, providers like Kimi require reasoning_content to be present on all assistant tool call messages, even if empty. Without this, multi-turn conversations with tool calls fail with "thinking is enabled but reasoning_content is missing". Co-authored-by: Claude Opus 4.6 (1M context) --- .../openaicompat/language_model_hooks.go | 17 ++++-- providers/openaicompat/openaicompat_test.go | 55 +++++++++++++++++++ providers/openaicompat/provider_options.go | 10 ++++ 3 files changed, 76 insertions(+), 6 deletions(-) diff --git a/providers/openaicompat/language_model_hooks.go b/providers/openaicompat/language_model_hooks.go index b43cb4eea..e6018b489 100644 --- a/providers/openaicompat/language_model_hooks.go +++ b/providers/openaicompat/language_model_hooks.go @@ -58,9 +58,9 @@ func ExtraContentFunc(choice openaisdk.ChatCompletionChoice) []fantasy.Content { if err != nil { return content } - if reasoningData.ReasoningContent != "" { + if rc := reasoningData.GetReasoningContent(); rc != "" { content = append(content, fantasy.ReasoningContent{ - Text: reasoningData.ReasoningContent, + Text: rc, }) } return content @@ -114,11 +114,11 @@ func StreamExtraFunc(chunk openaisdk.ChatCompletionChunk, yield func(fantasy.Str Delta: reasoningContent, }) } - if reasoningData.ReasoningContent != "" { + if rc := reasoningData.GetReasoningContent(); rc != "" { if !reasoningStarted { ctx[reasoningStartedCtx] = true } - return ctx, emitEvent(reasoningData.ReasoningContent) + return ctx, emitEvent(rc) } if reasoningStarted && (choice.Delta.Content != "" || len(choice.Delta.ToolCalls) > 0) { ctx[reasoningStartedCtx] = false @@ -137,6 +137,8 @@ func StreamExtraFunc(chunk openaisdk.ChatCompletionChunk, yield func(fantasy.Str func ToPromptFunc(prompt fantasy.Prompt, _, _ string) ([]openaisdk.ChatCompletionMessageParamUnion, []fantasy.CallWarning) { var messages []openaisdk.ChatCompletionMessageParamUnion var warnings []fantasy.CallWarning + hasReasoning := false + for _, msg := range prompt { switch msg.Role { case fantasy.MessageRoleSystem: @@ -348,6 +350,7 @@ func ToPromptFunc(prompt fantasy.Prompt, _, _ string) ([]openaisdk.ChatCompletio continue } reasoningText = reasoningPart.Text + hasReasoning = true case fantasy.ContentTypeToolCall: toolCallPart, ok := fantasy.AsContentType[fantasy.ToolCallPart](c) if !ok { @@ -370,8 +373,10 @@ func ToPromptFunc(prompt fantasy.Prompt, _, _ string) ([]openaisdk.ChatCompletio }) } } - // Add reasoning_content field if present - if reasoningText != "" { + // Add reasoning_content field if present, or if thinking is enabled + // and the message has tool calls (some providers like Kimi require + // reasoning_content on all assistant messages when thinking is enabled). + if reasoningText != "" || (hasReasoning && len(assistantMsg.ToolCalls) > 0) { assistantMsg.SetExtraFields(map[string]any{ "reasoning_content": reasoningText, }) diff --git a/providers/openaicompat/openaicompat_test.go b/providers/openaicompat/openaicompat_test.go index a603e5e66..c48eb087d 100644 --- a/providers/openaicompat/openaicompat_test.go +++ b/providers/openaicompat/openaicompat_test.go @@ -347,6 +347,61 @@ func TestToPromptFunc_DropsEmptyMessages(t *testing.T) { require.Empty(t, warnings) }) + t.Run("should add empty reasoning_content to tool call messages when thinking is enabled", func(t *testing.T) { + t.Parallel() + + // When thinking is enabled (reasoning parts exist in history), + // tool call messages without their own reasoning must still include + // reasoning_content. Providers like Kimi require it. + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleUser, + Content: []fantasy.MessagePart{ + fantasy.TextPart{Text: "What is 2+2?"}, + }, + }, + { + // First turn has reasoning + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + fantasy.ReasoningPart{Text: "Simple math."}, + fantasy.TextPart{Text: "Four"}, + }, + }, + { + Role: fantasy.MessageRoleUser, + Content: []fantasy.MessagePart{ + fantasy.TextPart{Text: "Now try a tool call"}, + }, + }, + { + // Tool call WITHOUT reasoning on this turn + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + fantasy.ToolCallPart{ + ToolCallID: "call_1", + ToolName: "execute", + Input: `{"command":"echo 4"}`, + }, + }, + }, + } + + messages, warnings := ToPromptFunc(prompt, "", "") + + require.Empty(t, warnings) + require.Len(t, messages, 4) + + // Tool call message must have reasoning_content (empty) since + // thinking is enabled in this conversation + msg := messages[3].OfAssistant + require.NotNil(t, msg) + extraFields := msg.ExtraFields() + reasoningContent, hasReasoning := extraFields["reasoning_content"] + require.True(t, hasReasoning, "reasoning_content must be present on tool call messages when thinking is enabled") + require.Equal(t, "", reasoningContent) + }) + t.Run("should drop user messages without visible content", func(t *testing.T) { t.Parallel() diff --git a/providers/openaicompat/provider_options.go b/providers/openaicompat/provider_options.go index afb037bf2..561860c32 100644 --- a/providers/openaicompat/provider_options.go +++ b/providers/openaicompat/provider_options.go @@ -31,8 +31,18 @@ type ProviderOptions struct { } // ReasoningData represents reasoning data for OpenAI-compatible provider. +// Some providers use "reasoning_content" (e.g. Avian), others use "reasoning" (e.g. Moonshot AI/Kimi). type ReasoningData struct { ReasoningContent string `json:"reasoning_content"` + Reasoning string `json:"reasoning"` +} + +// GetReasoningContent returns the reasoning text from whichever field is populated. +func (r ReasoningData) GetReasoningContent() string { + if r.ReasoningContent != "" { + return r.ReasoningContent + } + return r.Reasoning } // Options implements the ProviderOptions interface. From d9ff008e879c0954aea672458151aff81b155050 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Fri, 24 Apr 2026 16:42:13 -0300 Subject: [PATCH 22/82] v0.21.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 5a03fb737..885415662 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.20.0 +0.21.0 From f8a3e2ff5e9384817d5843162bb3aa34a48040e1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Apr 2026 10:22:38 +0000 Subject: [PATCH 23/82] chore(deps): bump the all group with 2 updates (#215) Bumps the all group with 2 updates: [github.com/aws/smithy-go](https://github.com/aws/smithy-go) and [github.com/kaptinlin/jsonschema](https://github.com/kaptinlin/jsonschema). Updates `github.com/aws/smithy-go` from 1.25.0 to 1.25.1 - [Release notes](https://github.com/aws/smithy-go/releases) - [Changelog](https://github.com/aws/smithy-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/aws/smithy-go/compare/v1.25.0...v1.25.1) Updates `github.com/kaptinlin/jsonschema` from 0.7.7 to 0.7.11 - [Commits](https://github.com/kaptinlin/jsonschema/compare/v0.7.7...v0.7.11) --- updated-dependencies: - dependency-name: github.com/aws/smithy-go dependency-version: 1.25.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: github.com/kaptinlin/jsonschema dependency-version: 0.7.11 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 10 +++++----- go.sum | 24 ++++++++++++------------ 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/go.mod b/go.mod index 5b7f43992..35088ca9f 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/ardanlabs/kronk v1.23.1 github.com/aws/aws-sdk-go-v2 v1.41.6 github.com/aws/aws-sdk-go-v2/config v1.32.16 - github.com/aws/smithy-go v1.25.0 + github.com/aws/smithy-go v1.25.1 github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5 @@ -16,7 +16,7 @@ require ( github.com/go-viper/mapstructure/v2 v2.5.0 github.com/google/uuid v1.6.0 github.com/joho/godotenv v1.5.1 - github.com/kaptinlin/jsonschema v0.7.7 + github.com/kaptinlin/jsonschema v0.7.11 github.com/stretchr/testify v1.11.1 golang.org/x/oauth2 v0.36.0 google.golang.org/genai v1.54.0 @@ -78,9 +78,9 @@ require ( github.com/hashicorp/go-version v1.9.0 // indirect github.com/hybridgroup/yzma v1.12.0 // indirect github.com/jupiterrider/ffi v0.6.0 // indirect - github.com/kaptinlin/go-i18n v0.3.0 // indirect - github.com/kaptinlin/jsonpointer v0.4.17 // indirect - github.com/kaptinlin/messageformat-go v0.4.19 // indirect + github.com/kaptinlin/go-i18n v0.4.4 // indirect + github.com/kaptinlin/jsonpointer v0.4.19 // indirect + github.com/kaptinlin/messageformat-go v0.6.0 // indirect github.com/klauspost/compress v1.18.5 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect diff --git a/go.sum b/go.sum index 690b1e625..c4340d732 100644 --- a/go.sum +++ b/go.sum @@ -76,8 +76,8 @@ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20 h1:oK/njaL8GtyEihkWMD4k3Vg github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20/go.mod h1:JHs8/y1f3zY7U5WcuzoJ/yAYGYtNIVPKLIbp61euvmg= github.com/aws/aws-sdk-go-v2/service/sts v1.42.0 h1:ks8KBcZPh3PYISr5dAiXCM5/Thcuxk8l+PG4+A0exds= github.com/aws/aws-sdk-go-v2/service/sts v1.42.0/go.mod h1:pFw33T0WLvXU3rw1WBkpMlkgIn54eCB5FYLhjDc9Foo= -github.com/aws/smithy-go v1.25.0 h1:Sz/XJ64rwuiKtB6j98nDIPyYrV1nVNJ4YU74gttcl5U= -github.com/aws/smithy-go v1.25.0/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= +github.com/aws/smithy-go v1.25.1 h1:J8ERsGSU7d+aCmdQur5Txg6bVoYelvQJgtZehD12GkI= +github.com/aws/smithy-go v1.25.1/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= @@ -159,14 +159,14 @@ github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jupiterrider/ffi v0.6.0 h1:UX378KcZvH5c8qgLi9KL/bL82SZTHdRspZ+jj7bvBng= github.com/jupiterrider/ffi v0.6.0/go.mod h1:PqZ5Go6X9by8CIXgfprxfMPYmn8oT5m2O7AA56s64bY= -github.com/kaptinlin/go-i18n v0.3.0 h1:wP76dvYg04bvwTb+8NB+CmdZ2kL7lSSCQ9B/kFv7QHo= -github.com/kaptinlin/go-i18n v0.3.0/go.mod h1:pVcu9qsW5pOIOoZFJXesRYmLos1vMQrby70JPAoWmJU= -github.com/kaptinlin/jsonpointer v0.4.17 h1:mY9k8ciWncxbsECyaxKnR0MdmxamNdp2tLQkAKVrtSk= -github.com/kaptinlin/jsonpointer v0.4.17/go.mod h1:SsfsjqnHG5zuKo1DTBzk1VknaHlL4osHw+X9kZKukpU= -github.com/kaptinlin/jsonschema v0.7.7 h1:41BlQJ9dskH0oE5DSzBUrl/w4JQYIr6N6L0B5GNyDoM= -github.com/kaptinlin/jsonschema v0.7.7/go.mod h1:rKjWfyySHSxAD7Li2ctYkPlOu960igoKBvZ2ADRtd5Q= -github.com/kaptinlin/messageformat-go v0.4.19 h1:A5kuuZ1ybXDQ7kD1aoEWGAOemX7hLsMY0yolgSbgpRI= -github.com/kaptinlin/messageformat-go v0.4.19/go.mod h1:utSDTfiXTxl66OC5RIEuObLH7Ue3YjbA2X86SYMBYWg= +github.com/kaptinlin/go-i18n v0.4.4 h1:3XrUYyLOykcd1K3gm4j7ndrF8YLIYrJjtbKGr/nF2Kw= +github.com/kaptinlin/go-i18n v0.4.4/go.mod h1:mU/7BH4molY5lGZYBwBRKAaiJ70dWRHuqmQ0/pFLGno= +github.com/kaptinlin/jsonpointer v0.4.19 h1:dEkwEnvn9jJCofrwKGxfKaPNbDOQEf3UEbEumn4xZBg= +github.com/kaptinlin/jsonpointer v0.4.19/go.mod h1:Mo7+DX8RlQTFqS4dnYJl0izSP4ob+Rl5xO/mGDETgaU= +github.com/kaptinlin/jsonschema v0.7.11 h1:h63Lb3Q4FBSWeWiAGefNPEVPNsOvgn91ATmf25X0yRs= +github.com/kaptinlin/jsonschema v0.7.11/go.mod h1:cJ8QIhwq3V/Yyh3sXRNt8w3sM943bNIbwnPTpBTXn3s= +github.com/kaptinlin/messageformat-go v0.6.0 h1:D6jiXFsKW4/JG2CMddv/F6Rev9KVbCRKEzzV5QOAcpc= +github.com/kaptinlin/messageformat-go v0.6.0/go.mod h1:NKjwS6e9u7DRhAK+vydjDDwJ7UbdHhYjk/yk2WPuZPs= github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -179,8 +179,8 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= -github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/pelletier/go-toml/v2 v2.3.0 h1:k59bC/lIZREW0/iVaQR8nDHxVq8OVlIzYCOJf421CaM= +github.com/pelletier/go-toml/v2 v2.3.0/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= From b7c17e0732b7ba19940a65ca1e27eabd972afec5 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Mon, 27 Apr 2026 10:11:29 -0300 Subject: [PATCH 24/82] ci: fix build running twice on pull requests --- .github/workflows/build.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3511f7fe0..5eca2452c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,5 +1,8 @@ name: build -on: [push, pull_request] +on: + push: + branches: [main] + pull_request: jobs: build: From 1720eac36fae6dc0b95f4a771861ac8f3bb6a7bd Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Sat, 25 Apr 2026 15:26:00 -0400 Subject: [PATCH 25/82] fix(openrouter): don't clip thinking output on claude models --- providers/openrouter/language_model_hooks.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/providers/openrouter/language_model_hooks.go b/providers/openrouter/language_model_hooks.go index d38fb8b17..4ed73c446 100644 --- a/providers/openrouter/language_model_hooks.go +++ b/providers/openrouter/language_model_hooks.go @@ -295,7 +295,8 @@ func languageModelStreamExtra(chunk openaisdk.ChatCompletionChunk, yield func(fa currentState.format = detail.Format ctx[reasoningStartedCtx] = currentState delta := detail.Summary - if strings.HasPrefix(detail.Format, "google-gemini") { + if strings.HasPrefix(detail.Format, "google-gemini") || + strings.HasPrefix(detail.Format, "anthropic-claude") { delta = detail.Text } return ctx, yield(fantasy.StreamPart{ From 5f0d1e33157bd587d6be41cc2e1f3e74daae2f10 Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Mon, 27 Apr 2026 15:35:42 -0400 Subject: [PATCH 26/82] fix(openrouter): use xstrings helper Co-authored-by: Andrey Nering --- providers/openrouter/language_model_hooks.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/providers/openrouter/language_model_hooks.go b/providers/openrouter/language_model_hooks.go index 4ed73c446..c2f3d812f 100644 --- a/providers/openrouter/language_model_hooks.go +++ b/providers/openrouter/language_model_hooks.go @@ -295,8 +295,7 @@ func languageModelStreamExtra(chunk openaisdk.ChatCompletionChunk, yield func(fa currentState.format = detail.Format ctx[reasoningStartedCtx] = currentState delta := detail.Summary - if strings.HasPrefix(detail.Format, "google-gemini") || - strings.HasPrefix(detail.Format, "anthropic-claude") { + if xstrings.ContainsAnyOf(detail.Format, "google-gemini", "anthropic-claude") { delta = detail.Text } return ctx, yield(fantasy.StreamPart{ From d8aafda9de0e199bc1015b53f84b2ee0538d664f Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Mon, 27 Apr 2026 16:55:42 -0300 Subject: [PATCH 27/82] chore(deps): import strings package --- go.mod | 1 + go.sum | 2 ++ providers/openrouter/language_model_hooks.go | 1 + 3 files changed, 4 insertions(+) diff --git a/go.mod b/go.mod index 35088ca9f..80a100dbc 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ require ( github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5 + github.com/charmbracelet/x/exp/strings v0.1.0 github.com/charmbracelet/x/json v0.2.0 github.com/go-viper/mapstructure/v2 v2.5.0 github.com/google/uuid v1.6.0 diff --git a/go.sum b/go.sum index c4340d732..6173777d7 100644 --- a/go.sum +++ b/go.sum @@ -92,6 +92,8 @@ github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 h1:BW/sZty github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266/go.mod h1:1DahUaExbUZx/jD+FNT2PKP4L9rLE5+ZBRuI8mZjd/E= github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5 h1:DTSZxdV9qQagD4iGcAt9RgaRBZtJl01bfKgdLzUzUPI= github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5/go.mod h1:vI5nDVMWi6veaYH+0Fmvpbe/+cv/iJfMntdh+N0+Tms= +github.com/charmbracelet/x/exp/strings v0.1.0 h1:i69S2XI7uG1u4NLGeJPSYU++Nmjvpo9nwd6aoEm7gkA= +github.com/charmbracelet/x/exp/strings v0.1.0/go.mod h1:/ehtMPNh9K4odGFkqYJKpIYyePhdp1hLBRvyY4bWkH8= github.com/charmbracelet/x/json v0.2.0 h1:DqB+ZGx2h+Z+1s98HOuOyli+i97wsFQIxP2ZQANTPrQ= github.com/charmbracelet/x/json v0.2.0/go.mod h1:opFIflx2YgXgi49xVUu8gEQ21teFAxyMwvOiZhIvWNM= github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= diff --git a/providers/openrouter/language_model_hooks.go b/providers/openrouter/language_model_hooks.go index c2f3d812f..acb518e83 100644 --- a/providers/openrouter/language_model_hooks.go +++ b/providers/openrouter/language_model_hooks.go @@ -13,6 +13,7 @@ import ( "charm.land/fantasy/providers/openai" openaisdk "github.com/charmbracelet/openai-go" "github.com/charmbracelet/openai-go/packages/param" + xstrings "github.com/charmbracelet/x/exp/strings" ) const reasoningStartedCtx = "reasoning_started" From 43a2aa51c05dbe054eaca6f9f7dcc42836f39bed Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Mon, 27 Apr 2026 17:00:18 -0300 Subject: [PATCH 28/82] test: re-record test fixtures --- .../anthropic/multi_tool.yaml | 14 +- .../anthropic/multi_tool_streaming.yaml | 80 +-- .../anthropic/simple.yaml | 6 +- .../anthropic/simple_streaming.yaml | 6 +- .../TestOpenRouterCommon/anthropic/tool.yaml | 14 +- .../anthropic/tool_streaming.yaml | 106 ++-- .../gemini/multi_tool.yaml | 16 +- .../gemini/multi_tool_streaming.yaml | 54 +- .../TestOpenRouterCommon/gemini/simple.yaml | 6 +- .../gemini/simple_streaming.yaml | 14 +- .../TestOpenRouterCommon/gemini/tool.yaml | 16 +- .../gemini/tool_streaming.yaml | 52 +- .../TestOpenRouterCommon/glm/multi_tool.yaml | 16 +- .../glm/multi_tool_streaming.yaml | 214 +++++-- .../TestOpenRouterCommon/glm/simple.yaml | 6 +- .../glm/simple_streaming.yaml | 526 ++++++------------ .../TestOpenRouterCommon/glm/tool.yaml | 14 +- .../glm/tool_streaming.yaml | 80 +-- .../TestOpenRouterCommon/grok/multi_tool.yaml | 14 +- .../grok/multi_tool_streaming.yaml | 206 ++++--- .../TestOpenRouterCommon/grok/simple.yaml | 6 +- .../grok/simple_streaming.yaml | 106 +++- .../TestOpenRouterCommon/grok/tool.yaml | 14 +- .../grok/tool_streaming.yaml | 174 ++++-- .../TestOpenRouterCommon/kimi/multi_tool.yaml | 16 +- .../kimi/multi_tool_streaming.yaml | 410 ++++++-------- .../TestOpenRouterCommon/kimi/simple.yaml | 6 +- .../kimi/simple_streaming.yaml | 398 +++---------- .../TestOpenRouterCommon/kimi/tool.yaml | 16 +- .../kimi/tool_streaming.yaml | 298 +++++----- .../openai/multi_tool.yaml | 14 +- .../openai/multi_tool_streaming.yaml | 96 ++-- .../TestOpenRouterCommon/openai/simple.yaml | 6 +- .../openai/simple_streaming.yaml | 6 +- .../TestOpenRouterCommon/openai/tool.yaml | 14 +- .../openai/tool_streaming.yaml | 70 +-- .../anthropic/multi_tool.yaml | 14 +- .../anthropic/multi_tool_streaming.yaml | 76 ++- .../anthropic/simple.yaml | 6 +- .../anthropic/simple_streaming.yaml | 6 +- .../anthropic/tool.yaml | 14 +- .../anthropic/tool_streaming.yaml | 82 +-- .../anthropic/thinking-streaming.yaml | 144 +++-- .../anthropic/thinking.yaml | 18 +- 44 files changed, 1634 insertions(+), 1836 deletions(-) diff --git a/providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool.yaml index 07256ce25..c79748084 100644 --- a/providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool.yaml +++ b/providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,13 +24,13 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945358-FDlyLIKJQBIXIh4OyuLo\",\"object\":\"chat.completion\",\"created\":1773945358,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_01VnB5DUbR2NKeZThzEtpwdb\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"toolu_bdrk_01CDDWHjeHEf3QYvSRaGihKp\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}}]}}],\"usage\":{\"prompt_tokens\":690,\"completion_tokens\":120,\"total_tokens\":810,\"cost\":0.00129,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00129,\"upstream_inference_prompt_cost\":0.00069,\"upstream_inference_completions_cost\":0.0006},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n{\"id\":\"gen-1777319803-NHzdZlNbAiw0RyFOpWHQ\",\"object\":\"chat.completion\",\"created\":1777319803,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_use\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_01RHEwXB8LDU3AqGqvChVLo5\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"toolu_bdrk_01LEnwcrBkCKbn3nFxESSnkp\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}}]}}],\"usage\":{\"prompt_tokens\":690,\"completion_tokens\":120,\"total_tokens\":810,\"cost\":0.00129,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00129,\"upstream_inference_prompt_cost\":0.00069,\"upstream_inference_completions_cost\":0.0006},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 4.230596708s + duration: 1.261214541s - id: 1 request: proto: HTTP/1.1 @@ -38,14 +38,14 @@ interactions: proto_minor: 1 content_length: 1311 host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01VnB5DUbR2NKeZThzEtpwdb","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_bdrk_01CDDWHjeHEf3QYvSRaGihKp","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_bdrk_01VnB5DUbR2NKeZThzEtpwdb","role":"tool"},{"content":"6","tool_call_id":"toolu_bdrk_01CDDWHjeHEf3QYvSRaGihKp","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01RHEwXB8LDU3AqGqvChVLo5","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_bdrk_01LEnwcrBkCKbn3nFxESSnkp","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_bdrk_01RHEwXB8LDU3AqGqvChVLo5","role":"tool"},{"content":"6","tool_call_id":"toolu_bdrk_01LEnwcrBkCKbn3nFxESSnkp","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945363-bjEDpfY1yMWlhRQEtwaa\",\"object\":\"chat.completion\",\"created\":1773945363,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Perfect! Here are the results:\\n\\n- **Adding** 2 + 3 = **5**\\n- **Multiplying** 2 × 3 = **6**\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":871,\"completion_tokens\":44,\"total_tokens\":915,\"cost\":0.001091,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001091,\"upstream_inference_prompt_cost\":0.000871,\"upstream_inference_completions_cost\":0.00022},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n{\"id\":\"gen-1777319804-zPp5vpxR2R6EsHoqrivJ\",\"object\":\"chat.completion\",\"created\":1777319804,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\",\"message\":{\"role\":\"assistant\",\"content\":\"Perfect! Here are the results:\\n\\n- **Addition**: 2 + 3 = **5**\\n- **Multiplication**: 2 × 3 = **6**\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":871,\"completion_tokens\":43,\"total_tokens\":914,\"cost\":0.001086,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001086,\"upstream_inference_prompt_cost\":0.000871,\"upstream_inference_completions_cost\":0.000215},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 3.332091s + duration: 1.010703208s diff --git a/providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool_streaming.yaml index 303f2ddcb..02dc00f83 100644 --- a/providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/anthropic/multi_tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -28,49 +28,35 @@ interactions: : OPENROUTER PROCESSING - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01L6Xsux1sqgXSsd2xi64poF","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01XTTFRiRuvcspcpxuMoJ965","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\": 2"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":", \"b\": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"toolu_bdrk_014pCKe2FHbyMZerLY1JxG4a","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":": 2"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":", "}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"b\": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":": 2"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"toolu_bdrk_01Ao3wLFy6JWPGtWcZ8CvdVo","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":", \"b\": "}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_use"}]} - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"a\": 2"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":", \"b\": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773945367-w5BMjFUo1VftlXVqvaPn","object":"chat.completion.chunk","created":1773945367,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":685,"completion_tokens":120,"total_tokens":805,"cost":0.001285,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001285,"upstream_inference_prompt_cost":0.000685,"upstream_inference_completions_cost":0.0006},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319805-xxNVuABVmXTjx5tL2OBX","object":"chat.completion.chunk","created":1777319805,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_use"}],"usage":{"prompt_tokens":685,"completion_tokens":120,"total_tokens":805,"cost":0.001285,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001285,"upstream_inference_prompt_cost":0.000685,"upstream_inference_completions_cost":0.0006},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -79,7 +65,7 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 3.905948833s + duration: 1.150669416s - id: 1 request: proto: HTTP/1.1 @@ -87,14 +73,14 @@ interactions: proto_minor: 1 content_length: 1348 host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01XTTFRiRuvcspcpxuMoJ965","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_bdrk_01Ao3wLFy6JWPGtWcZ8CvdVo","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_bdrk_01XTTFRiRuvcspcpxuMoJ965","role":"tool"},{"content":"6","tool_call_id":"toolu_bdrk_01Ao3wLFy6JWPGtWcZ8CvdVo","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01L6Xsux1sqgXSsd2xi64poF","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_bdrk_014pCKe2FHbyMZerLY1JxG4a","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_bdrk_01L6Xsux1sqgXSsd2xi64poF","role":"tool"},{"content":"6","tool_call_id":"toolu_bdrk_014pCKe2FHbyMZerLY1JxG4a","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -105,31 +91,25 @@ interactions: body: |+ : OPENROUTER PROCESSING - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"Perfect","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"! Here","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319807-l15NLvPD2tAGnf5gizWT","object":"chat.completion.chunk","created":1777319807,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"Perfect","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" are the results:\n\n- **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319807-l15NLvPD2tAGnf5gizWT","object":"chat.completion.chunk","created":1777319807,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"! Here","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"Addition","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319807-l15NLvPD2tAGnf5gizWT","object":"chat.completion.chunk","created":1777319807,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" are the results:\n\n- **Addition","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"**: 2 + 3 ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319807-l15NLvPD2tAGnf5gizWT","object":"chat.completion.chunk","created":1777319807,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"**: 2 + 3 ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"= **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319807-l15NLvPD2tAGnf5gizWT","object":"chat.completion.chunk","created":1777319807,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"= **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"5**\n- **Multiplication**:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319807-l15NLvPD2tAGnf5gizWT","object":"chat.completion.chunk","created":1777319807,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"5**\n- **Multiplication**:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" 2 × 3 =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319807-l15NLvPD2tAGnf5gizWT","object":"chat.completion.chunk","created":1777319807,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" 2 × 3 =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **6**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319807-l15NLvPD2tAGnf5gizWT","object":"chat.completion.chunk","created":1777319807,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **6**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} + data: {"id":"gen-1777319807-l15NLvPD2tAGnf5gizWT","object":"chat.completion.chunk","created":1777319807,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"end_turn"}]} - data: {"id":"gen-1773945371-0C2JH3j25iWHzQzrJHm7","object":"chat.completion.chunk","created":1773945371,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":866,"completion_tokens":43,"total_tokens":909,"cost":0.001081,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001081,"upstream_inference_prompt_cost":0.000866,"upstream_inference_completions_cost":0.000215},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319807-l15NLvPD2tAGnf5gizWT","object":"chat.completion.chunk","created":1777319807,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"end_turn"}],"usage":{"prompt_tokens":866,"completion_tokens":43,"total_tokens":909,"cost":0.001081,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001081,"upstream_inference_prompt_cost":0.000866,"upstream_inference_completions_cost":0.000215},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -138,4 +118,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.608417583s + duration: 1.04698475s diff --git a/providertests/testdata/TestOpenRouterCommon/anthropic/simple.yaml b/providertests/testdata/TestOpenRouterCommon/anthropic/simple.yaml index 759541e67..c71d46fd4 100644 --- a/providertests/testdata/TestOpenRouterCommon/anthropic/simple.yaml +++ b/providertests/testdata/TestOpenRouterCommon/anthropic/simple.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,10 +24,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945333-8woqHhslWkUBof9rDT5h\",\"object\":\"chat.completion\",\"created\":1773945333,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá! \U0001F44B\\n\\n(or \\\"Oi!\\\" for a more casual greeting)\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":24,\"total_tokens\":40,\"cost\":0.000136,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000136,\"upstream_inference_prompt_cost\":0.000016,\"upstream_inference_completions_cost\":0.00012},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n{\"id\":\"gen-1777319793-KB049hxgeSfDo9BpYCgU\",\"object\":\"chat.completion\",\"created\":1777319793,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá! \U0001F44B\\n\\nHow can I help you today?\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":18,\"total_tokens\":34,\"cost\":0.000106,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000106,\"upstream_inference_prompt_cost\":0.000016,\"upstream_inference_completions_cost\":0.00009},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 2.234733708s + duration: 2.270285959s diff --git a/providertests/testdata/TestOpenRouterCommon/anthropic/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/anthropic/simple_streaming.yaml index 930a91517..77b9d668d 100644 --- a/providertests/testdata/TestOpenRouterCommon/anthropic/simple_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/anthropic/simple_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -23,10 +23,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: ": OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Olá! \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\U0001F44B\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\\n\\n(\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Or\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \\\"\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Oi!\\\" for\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" a\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" more casual greeting)\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}]}\n\ndata: {\"id\":\"gen-1773945335-6fzOzM22YNaAMMCFoBUI\",\"object\":\"chat.completion.chunk\",\"created\":1773945335,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":24,\"total_tokens\":40,\"cost\":0.000136,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000136,\"upstream_inference_prompt_cost\":0.000016,\"upstream_inference_completions_cost\":0.00012},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + body: ": OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1777319795-6g09PXB65BTBPmL4wfyo\",\"object\":\"chat.completion.chunk\",\"created\":1777319795,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Olá! \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319795-6g09PXB65BTBPmL4wfyo\",\"object\":\"chat.completion.chunk\",\"created\":1777319795,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\U0001F44B\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319795-6g09PXB65BTBPmL4wfyo\",\"object\":\"chat.completion.chunk\",\"created\":1777319795,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\\n\\nHow\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319795-6g09PXB65BTBPmL4wfyo\",\"object\":\"chat.completion.chunk\",\"created\":1777319795,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" can I help you today?\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319795-6g09PXB65BTBPmL4wfyo\",\"object\":\"chat.completion.chunk\",\"created\":1777319795,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\"}]}\n\ndata: {\"id\":\"gen-1777319795-6g09PXB65BTBPmL4wfyo\",\"object\":\"chat.completion.chunk\",\"created\":1777319795,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\"}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":18,\"total_tokens\":34,\"cost\":0.000106,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000106,\"upstream_inference_prompt_cost\":0.000016,\"upstream_inference_completions_cost\":0.00009},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 6.406652583s + duration: 975.9435ms diff --git a/providertests/testdata/TestOpenRouterCommon/anthropic/tool.yaml b/providertests/testdata/TestOpenRouterCommon/anthropic/tool.yaml index 2baf6de70..434d465e7 100644 --- a/providertests/testdata/TestOpenRouterCommon/anthropic/tool.yaml +++ b/providertests/testdata/TestOpenRouterCommon/anthropic/tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,13 +24,13 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945342-jKAAVEw88x4puynntZ3C\",\"object\":\"chat.completion\",\"created\":1773945342,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_01HvsWDkYxNAWR5pVHD47MZ7\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence, Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":577,\"completion_tokens\":54,\"total_tokens\":631,\"cost\":0.000847,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000847,\"upstream_inference_prompt_cost\":0.000577,\"upstream_inference_completions_cost\":0.00027},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1777319796-ug8Nx1UYcyazw6kXAE7h\",\"object\":\"chat.completion\",\"created\":1777319796,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_use\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_01V4dpjrUNjqou54LTv3DMEt\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence, Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":577,\"completion_tokens\":54,\"total_tokens\":631,\"cost\":0.000847,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000847,\"upstream_inference_prompt_cost\":0.000577,\"upstream_inference_completions_cost\":0.00027},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 5.041391041s + duration: 1.869368542s - id: 1 request: proto: HTTP/1.1 @@ -38,14 +38,14 @@ interactions: proto_minor: 1 content_length: 758 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01HvsWDkYxNAWR5pVHD47MZ7","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_bdrk_01HvsWDkYxNAWR5pVHD47MZ7","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01V4dpjrUNjqou54LTv3DMEt","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_bdrk_01V4dpjrUNjqou54LTv3DMEt","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945347-FZ9S04kVlZRXgrWCIN1o\",\"object\":\"chat.completion\",\"created\":1773945347,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is **40°C (104°F)**, which is quite hot! This is typical for Florence during the summer months, particularly in July and August when temperatures often reach or exceed 40°C. If you're planning a visit or are currently there, make sure to stay hydrated and use sun protection.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":646,\"completion_tokens\":73,\"total_tokens\":719,\"cost\":0.001011,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001011,\"upstream_inference_prompt_cost\":0.000646,\"upstream_inference_completions_cost\":0.000365},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n{\"id\":\"gen-1777319798-GgInILJSZMZcdQSYjjo7\",\"object\":\"chat.completion\",\"created\":1777319798,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is currently **40°C (104°F)**, which is quite hot! That's a very warm temperature, so if you're planning to visit or are there now, make sure to stay hydrated and use sun protection. It's typical for Florence to experience high temperatures during the summer months.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":646,\"completion_tokens\":70,\"total_tokens\":716,\"cost\":0.000996,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000996,\"upstream_inference_prompt_cost\":0.000646,\"upstream_inference_completions_cost\":0.00035},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 5.138797333s + duration: 1.310262458s diff --git a/providertests/testdata/TestOpenRouterCommon/anthropic/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/anthropic/tool_streaming.yaml index 6bd69861a..250c7cfe5 100644 --- a/providertests/testdata/TestOpenRouterCommon/anthropic/tool_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/anthropic/tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -28,27 +28,23 @@ interactions: : OPENROUTER PROCESSING - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING + data: {"id":"gen-1777319799-zuunrpiKsDif28jflHYf","object":"chat.completion.chunk","created":1777319799,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01RiGtttFSGiqX2bR4Uoz434","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01Q8hMVuCxjhyQ5fPFaK2LHt","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319799-zuunrpiKsDif28jflHYf","object":"chat.completion.chunk","created":1777319799,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319799-zuunrpiKsDif28jflHYf","object":"chat.completion.chunk","created":1777319799,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319799-zuunrpiKsDif28jflHYf","object":"chat.completion.chunk","created":1777319799,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"lo"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319799-zuunrpiKsDif28jflHYf","object":"chat.completion.chunk","created":1777319799,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"cation\": \"F"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"location\":"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319799-zuunrpiKsDif28jflHYf","object":"chat.completion.chunk","created":1777319799,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"lorence"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" \"Florence,"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319799-zuunrpiKsDif28jflHYf","object":"chat.completion.chunk","created":1777319799,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":", Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319799-zuunrpiKsDif28jflHYf","object":"chat.completion.chunk","created":1777319799,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_use"}]} - data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773945354-XxuArfRtL105GrGucMsX","object":"chat.completion.chunk","created":1773945354,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":577,"completion_tokens":54,"total_tokens":631,"cost":0.000847,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000847,"upstream_inference_prompt_cost":0.000577,"upstream_inference_completions_cost":0.00027},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319799-zuunrpiKsDif28jflHYf","object":"chat.completion.chunk","created":1777319799,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_use"}],"usage":{"prompt_tokens":577,"completion_tokens":54,"total_tokens":631,"cost":0.000847,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000847,"upstream_inference_prompt_cost":0.000577,"upstream_inference_completions_cost":0.00027},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -57,7 +53,7 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.738503458s + duration: 1.077700208s - id: 1 request: proto: HTTP/1.1 @@ -65,14 +61,14 @@ interactions: proto_minor: 1 content_length: 812 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01Q8hMVuCxjhyQ5fPFaK2LHt","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_bdrk_01Q8hMVuCxjhyQ5fPFaK2LHt","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01RiGtttFSGiqX2bR4Uoz434","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_bdrk_01RiGtttFSGiqX2bR4Uoz434","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -85,79 +81,57 @@ interactions: : OPENROUTER PROCESSING - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"The weather in Florence, Italy is currently","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **40°C (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"104°F)**,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" which","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" is quite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" \n\nThis","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" is typical","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" for Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" during","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" weather in Florence, Italy is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" summer months when","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" temperatures","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"40°C (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" can be","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"104°F)**,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" quite warm","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" which is quite hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" I","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" Make","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"'d recommend:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" sure to stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"\n- Staying","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hydrated and use","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hydrated\n- Wearing light,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" sun","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" breathable clothing\n- Using","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" protection if","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" sun","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" you're planning to be outdoors.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" protection (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" This","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"sun","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"screen, hat, sunglasses)","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" typical","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"\n- Planning","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" outdoor activities for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" summer","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" early","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" weather for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" morning or late evening","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" to","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" during","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" avoid the heat of","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" the war","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" the day","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"mer months.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"end_turn"}]} - data: {"id":"gen-1773945356-69pREjI1t1LIACEkKHdK","object":"chat.completion.chunk","created":1773945356,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":646,"completion_tokens":96,"total_tokens":742,"cost":0.001126,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001126,"upstream_inference_prompt_cost":0.000646,"upstream_inference_completions_cost":0.00048},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319801-7bxTZdZbFxsubjvGQ75n","object":"chat.completion.chunk","created":1777319801,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"end_turn"}],"usage":{"prompt_tokens":646,"completion_tokens":59,"total_tokens":705,"cost":0.000941,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000941,"upstream_inference_prompt_cost":0.000646,"upstream_inference_completions_cost":0.000295},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -166,4 +140,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.818862708s + duration: 1.362970583s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/gemini/multi_tool.yaml index 9c6e7a808..4b8d8d8bc 100644 --- a/providertests/testdata/TestOpenRouterCommon/gemini/multi_tool.yaml +++ b/providertests/testdata/TestOpenRouterCommon/gemini/multi_tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,28 +24,28 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945403-sdpFM7Ibw0ydMbFfbFhk\",\"object\":\"chat.completion\",\"created\":1773945403,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"tool_add_67Z4MFOopECpNHW6qvVN\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"tool_multiply_ODGB2Wg7IAvQ59EC0lXF\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"AY89a19euJGckSKHF210qgCYi0Cogu3ONrdlkrEwpq++DXoXjQNMP5N52UMy4CKjXRE=\",\"format\":\"google-gemini-v1\",\"id\":\"tool_add_67Z4MFOopECpNHW6qvVN\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":87,\"completion_tokens\":32,\"total_tokens\":119,\"cost\":0.00006975,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00006975,\"upstream_inference_prompt_cost\":0.00002175,\"upstream_inference_completions_cost\":0.000048},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n{\"id\":\"gen-1777319828-9g0qMUWH3SuSHwnupAK1\",\"object\":\"chat.completion\",\"created\":1777319828,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google AI Studio\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"tool_add_jKPaCgS4LPe2mBG3Y6FJ\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"tool_multiply_3XqZzHkQQc6CxUmvuVM9\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"EjQKMgEMOdbH2eMj+dYjjdjNbkXXXTIPpUzTOPCC+bZ37nGtyWyE8NoUU8ld/+jywjP4thv2\",\"format\":\"google-gemini-v1\",\"id\":\"tool_add_jKPaCgS4LPe2mBG3Y6FJ\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":161,\"completion_tokens\":32,\"total_tokens\":193,\"cost\":0.00008825,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00008825,\"upstream_inference_prompt_cost\":0.00004025,\"upstream_inference_completions_cost\":0.000048},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 3.110945792s + duration: 1.047780917s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1507 + content_length: 1511 host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"tool_add_67Z4MFOopECpNHW6qvVN","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"tool_multiply_ODGB2Wg7IAvQ59EC0lXF","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"AY89a19euJGckSKHF210qgCYi0Cogu3ONrdlkrEwpq++DXoXjQNMP5N52UMy4CKjXRE=","format":"google-gemini-v1","id":"tool_add_67Z4MFOopECpNHW6qvVN","index":0,"type":"reasoning.encrypted"}]},{"content":"5","tool_call_id":"tool_add_67Z4MFOopECpNHW6qvVN","role":"tool"},{"content":"6","tool_call_id":"tool_multiply_ODGB2Wg7IAvQ59EC0lXF","role":"tool"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"tool_add_jKPaCgS4LPe2mBG3Y6FJ","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"tool_multiply_3XqZzHkQQc6CxUmvuVM9","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"EjQKMgEMOdbH2eMj+dYjjdjNbkXXXTIPpUzTOPCC+bZ37nGtyWyE8NoUU8ld/+jywjP4thv2","format":"google-gemini-v1","id":"tool_add_jKPaCgS4LPe2mBG3Y6FJ","index":0,"type":"reasoning.encrypted"}]},{"content":"5","tool_call_id":"tool_add_jKPaCgS4LPe2mBG3Y6FJ","role":"tool"},{"content":"6","tool_call_id":"tool_multiply_3XqZzHkQQc6CxUmvuVM9","role":"tool"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945406-hlTqhqmy3oevZu6kSqJM\",\"object\":\"chat.completion\",\"created\":1773945406,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"The sum of 2 and 3 is 5, and the product of 2 and 3 is 6.\",\"refusal\":null,\"reasoning\":null,\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"AY89a18UGmTcyJ8nYzEK+7YFBG7gkHttSMEFVtoN+qdCBx5uCVaHs0xHLqqpi7pJn/Q=\",\"format\":\"google-gemini-v1\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":154,\"completion_tokens\":25,\"total_tokens\":179,\"cost\":0.000076,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000076,\"upstream_inference_prompt_cost\":0.0000385,\"upstream_inference_completions_cost\":0.0000375},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n{\"id\":\"gen-1777319829-6C61iC7kOsCAr4kC4FRp\",\"object\":\"chat.completion\",\"created\":1777319829,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google AI Studio\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"The sum of 2 and 3 is 5, and the product of 2 and 3 is 6.\",\"refusal\":null,\"reasoning\":null,\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"EjQKMgEMOdbH6gxsIYFsLmcH6Cy95wupnskztNqfRhoa2P6HoxDNlUREApKCSyP4Pu6+jo8c\",\"format\":\"google-gemini-v1\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":252,\"completion_tokens\":25,\"total_tokens\":277,\"cost\":0.0001005,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0001005,\"upstream_inference_prompt_cost\":0.000063,\"upstream_inference_completions_cost\":0.0000375},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 3.028248792s + duration: 1.752077584s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gemini/multi_tool_streaming.yaml index ccc94db82..a01fc2a62 100644 --- a/providertests/testdata/TestOpenRouterCommon/gemini/multi_tool_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/gemini/multi_tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -30,27 +30,19 @@ interactions: : OPENROUTER PROCESSING - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - data: {"id":"gen-1773945409-GKBLGdVdfDpywrF53THX","object":"chat.completion.chunk","created":1773945409,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"AY89a1+4ldhGjiNn8S1VuGpFQrS57EYj823FwVVWyxvAG0cE5Qi8Mh3qDl5zaYStVes=","format":"google-gemini-v1","id":"tool_add_sYdHLQ7pM4TsXu9boNT5","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319831-ISVqphVuTMGtXkERk9Xn","object":"chat.completion.chunk","created":1777319831,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"EjQKMgEMOdbHkJxR6ymAEgQGz1qCdA0vBnhty0KPBjiAVrJ/Hf5kChgp6eGY0f0J+HoLlFtA","format":"google-gemini-v1","id":"tool_add_kZJN6iFNozVOBiXBMA2Y","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945409-GKBLGdVdfDpywrF53THX","object":"chat.completion.chunk","created":1773945409,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"tool_add_sYdHLQ7pM4TsXu9boNT5","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319831-ISVqphVuTMGtXkERk9Xn","object":"chat.completion.chunk","created":1777319831,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"tool_add_kZJN6iFNozVOBiXBMA2Y","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945409-GKBLGdVdfDpywrF53THX","object":"chat.completion.chunk","created":1773945409,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"b\":3,\"a\":2}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319831-ISVqphVuTMGtXkERk9Xn","object":"chat.completion.chunk","created":1777319831,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945409-GKBLGdVdfDpywrF53THX","object":"chat.completion.chunk","created":1773945409,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"tool_multiply_M7nCvf8jvQADIkrw5YKS","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319831-ISVqphVuTMGtXkERk9Xn","object":"chat.completion.chunk","created":1777319831,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"tool_multiply_7Pq02EcannPbKks8kXlA","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945409-GKBLGdVdfDpywrF53THX","object":"chat.completion.chunk","created":1773945409,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319831-ISVqphVuTMGtXkERk9Xn","object":"chat.completion.chunk","created":1777319831,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945409-GKBLGdVdfDpywrF53THX","object":"chat.completion.chunk","created":1773945409,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"STOP"}]} + data: {"id":"gen-1777319831-ISVqphVuTMGtXkERk9Xn","object":"chat.completion.chunk","created":1777319831,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"STOP"}]} - data: {"id":"gen-1773945409-GKBLGdVdfDpywrF53THX","object":"chat.completion.chunk","created":1773945409,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":83,"completion_tokens":32,"total_tokens":115,"cost":0.00006875,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00006875,"upstream_inference_prompt_cost":0.00002075,"upstream_inference_completions_cost":0.000048},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319831-ISVqphVuTMGtXkERk9Xn","object":"chat.completion.chunk","created":1777319831,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":157,"completion_tokens":32,"total_tokens":189,"cost":0.00008725,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00008725,"upstream_inference_prompt_cost":0.00003925,"upstream_inference_completions_cost":0.000048},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -59,22 +51,22 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 3.101256s + duration: 1.834634917s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1544 + content_length: 1548 host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"tool_add_sYdHLQ7pM4TsXu9boNT5","function":{"arguments":"{\"b\":3,\"a\":2}","name":"add"},"type":"function"},{"id":"tool_multiply_M7nCvf8jvQADIkrw5YKS","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"AY89a1+4ldhGjiNn8S1VuGpFQrS57EYj823FwVVWyxvAG0cE5Qi8Mh3qDl5zaYStVes=","format":"google-gemini-v1","id":"tool_add_sYdHLQ7pM4TsXu9boNT5","index":0,"type":"reasoning.encrypted"}]},{"content":"5","tool_call_id":"tool_add_sYdHLQ7pM4TsXu9boNT5","role":"tool"},{"content":"6","tool_call_id":"tool_multiply_M7nCvf8jvQADIkrw5YKS","role":"tool"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"tool_add_kZJN6iFNozVOBiXBMA2Y","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"tool_multiply_7Pq02EcannPbKks8kXlA","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"EjQKMgEMOdbHkJxR6ymAEgQGz1qCdA0vBnhty0KPBjiAVrJ/Hf5kChgp6eGY0f0J+HoLlFtA","format":"google-gemini-v1","id":"tool_add_kZJN6iFNozVOBiXBMA2Y","index":0,"type":"reasoning.encrypted"}]},{"content":"5","tool_call_id":"tool_add_kZJN6iFNozVOBiXBMA2Y","role":"tool"},{"content":"6","tool_call_id":"tool_multiply_7Pq02EcannPbKks8kXlA","role":"tool"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -91,25 +83,15 @@ interactions: : OPENROUTER PROCESSING - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - data: {"id":"gen-1773945413-SErDL8acdBEMsr0VlQOj","object":"chat.completion.chunk","created":1773945413,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"The sum","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945413-SErDL8acdBEMsr0VlQOj","object":"chat.completion.chunk","created":1773945413,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":" of 2 and ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945413-SErDL8acdBEMsr0VlQOj","object":"chat.completion.chunk","created":1773945413,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"3 is 5, and the product of 2 and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319833-jB4BU87kBaOluZRvZKV0","object":"chat.completion.chunk","created":1777319833,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"The result of adding 2 and 3 is 5, and the result of","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945413-SErDL8acdBEMsr0VlQOj","object":"chat.completion.chunk","created":1773945413,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":" 3 is 6.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319833-jB4BU87kBaOluZRvZKV0","object":"chat.completion.chunk","created":1777319833,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":" multiplying 2 and 3 is 6.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945413-SErDL8acdBEMsr0VlQOj","object":"chat.completion.chunk","created":1773945413,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"AY89a18Arm6uvbtwsskpVED8BnueFZjjOLD5zxfz/ALu6B8EI7sgVUR6svb/kSSFRmM=","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319833-jB4BU87kBaOluZRvZKV0","object":"chat.completion.chunk","created":1777319833,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"EjQKMgEMOdbHWldpUxTsd0Brk0yjwpnFnPDRapRvW3qAoQvzR8EwucYBbW85Tqib6JYSYIrC","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945413-SErDL8acdBEMsr0VlQOj","object":"chat.completion.chunk","created":1773945413,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"STOP"}]} + data: {"id":"gen-1777319833-jB4BU87kBaOluZRvZKV0","object":"chat.completion.chunk","created":1777319833,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"STOP"}]} - data: {"id":"gen-1773945413-SErDL8acdBEMsr0VlQOj","object":"chat.completion.chunk","created":1773945413,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":150,"completion_tokens":25,"total_tokens":175,"cost":0.000075,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000075,"upstream_inference_prompt_cost":0.0000375,"upstream_inference_completions_cost":0.0000375},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319833-jB4BU87kBaOluZRvZKV0","object":"chat.completion.chunk","created":1777319833,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":247,"completion_tokens":27,"total_tokens":274,"cost":0.00010225,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00010225,"upstream_inference_prompt_cost":0.00006175,"upstream_inference_completions_cost":0.0000405},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -118,4 +100,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 3.220695416s + duration: 1.98577275s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini/simple.yaml b/providertests/testdata/TestOpenRouterCommon/gemini/simple.yaml index 6688a02ed..31e392276 100644 --- a/providertests/testdata/TestOpenRouterCommon/gemini/simple.yaml +++ b/providertests/testdata/TestOpenRouterCommon/gemini/simple.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,10 +24,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945384-xZPhbwajwzm3GL9jqUHp\",\"object\":\"chat.completion\",\"created\":1773945384,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá!\",\"refusal\":null,\"reasoning\":null,\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"AY89a1/3xY1TdwDH5U/lq5Eban8Wxxd1lYhLpbwogJiu9r0BguV+vY5JOgnVjONbeJE=\",\"format\":\"google-gemini-v1\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":9,\"completion_tokens\":2,\"total_tokens\":11,\"cost\":0.00000525,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00000525,\"upstream_inference_prompt_cost\":0.00000225,\"upstream_inference_completions_cost\":0.000003},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n{\"id\":\"gen-1777319821-Rs3LnY0tk8uQkwydvIpx\",\"object\":\"chat.completion\",\"created\":1777319821,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google AI Studio\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá!\",\"refusal\":null,\"reasoning\":null,\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"EjQKMgEMOdbHfCQYjMcrbeEQk42SyLQrwPUc7Bqv3edwK1p6JPUYARKyLQdJVdTOCPNF353A\",\"format\":\"google-gemini-v1\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":11,\"completion_tokens\":2,\"total_tokens\":13,\"cost\":0.00000575,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00000575,\"upstream_inference_prompt_cost\":0.00000275,\"upstream_inference_completions_cost\":0.000003},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 3.984944208s + duration: 1.853157208s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gemini/simple_streaming.yaml index 0194693c3..cd536958d 100644 --- a/providertests/testdata/TestOpenRouterCommon/gemini/simple_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/gemini/simple_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -26,15 +26,13 @@ interactions: body: |+ : OPENROUTER PROCESSING - : OPENROUTER PROCESSING - - data: {"id":"gen-1773945388-ScQOcjqnnQqDR2tkBCM6","object":"chat.completion.chunk","created":1773945388,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"Olá!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319823-gzdkDdqHdFpE5HXAnyM1","object":"chat.completion.chunk","created":1777319823,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"Olá!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945388-ScQOcjqnnQqDR2tkBCM6","object":"chat.completion.chunk","created":1773945388,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"EjQKMgG+Pvb72piB9g0HqzVyYjGL9Be9fvg3tyhef4/NDaxTjBDkMJi5K7zGEDVk+5oNajHu","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319823-gzdkDdqHdFpE5HXAnyM1","object":"chat.completion.chunk","created":1777319823,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"EjQKMgEMOdbHXreb2yyL+Eb375b3WnY2QC8b/iokMKA4F2OW0AAOJ5YTRQWyirwZaaPtw3oo","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945388-ScQOcjqnnQqDR2tkBCM6","object":"chat.completion.chunk","created":1773945388,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"STOP"}]} + data: {"id":"gen-1777319823-gzdkDdqHdFpE5HXAnyM1","object":"chat.completion.chunk","created":1777319823,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"STOP"}]} - data: {"id":"gen-1773945388-ScQOcjqnnQqDR2tkBCM6","object":"chat.completion.chunk","created":1773945388,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13,"cost":0.00000575,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00000575,"upstream_inference_prompt_cost":0.00000275,"upstream_inference_completions_cost":0.000003},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319823-gzdkDdqHdFpE5HXAnyM1","object":"chat.completion.chunk","created":1777319823,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":11,"completion_tokens":2,"total_tokens":13,"cost":0.00000575,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00000575,"upstream_inference_prompt_cost":0.00000275,"upstream_inference_completions_cost":0.000003},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -43,4 +41,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.240184834s + duration: 1.008848875s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini/tool.yaml b/providertests/testdata/TestOpenRouterCommon/gemini/tool.yaml index f1f6915ff..a7eb9bbce 100644 --- a/providertests/testdata/TestOpenRouterCommon/gemini/tool.yaml +++ b/providertests/testdata/TestOpenRouterCommon/gemini/tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,28 +24,28 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945390-pdnIFKfKJyD9oVzWL9Dr\",\"object\":\"chat.completion\",\"created\":1773945390,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"tool_weather_aaDFcPO0qsPIvlIQKSFc\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"AY89a19LCy6WJJsnCldFSEDCKuOZfohIqqdmMNnccTB8AkfBDwEgvVMlFkc1dI+gcwc=\",\"format\":\"google-gemini-v1\",\"id\":\"tool_weather_aaDFcPO0qsPIvlIQKSFc\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":39,\"completion_tokens\":16,\"total_tokens\":55,\"cost\":0.00003375,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00003375,\"upstream_inference_prompt_cost\":0.00000975,\"upstream_inference_completions_cost\":0.000024},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n{\"id\":\"gen-1777319824-KOH28JAZ2DqdrJP5Yjw6\",\"object\":\"chat.completion\",\"created\":1777319824,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google AI Studio\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"tool_weather_fRoXur7LpnOd7IAx6Tad\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"EjQKMgEMOdbHKmMgPVzgFG7vQjEG7JO2h9/CIpCXGYPI5x79sg3joR18hmG49wMW6ByWhpHf\",\"format\":\"google-gemini-v1\",\"id\":\"tool_weather_fRoXur7LpnOd7IAx6Tad\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":65,\"completion_tokens\":16,\"total_tokens\":81,\"cost\":0.00004025,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00004025,\"upstream_inference_prompt_cost\":0.00001625,\"upstream_inference_completions_cost\":0.000024},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 3.10832375s + duration: 1.168693375s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 973 + content_length: 977 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"tool_weather_aaDFcPO0qsPIvlIQKSFc","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"AY89a19LCy6WJJsnCldFSEDCKuOZfohIqqdmMNnccTB8AkfBDwEgvVMlFkc1dI+gcwc=","format":"google-gemini-v1","id":"tool_weather_aaDFcPO0qsPIvlIQKSFc","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"tool_weather_aaDFcPO0qsPIvlIQKSFc","role":"tool"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"tool_weather_fRoXur7LpnOd7IAx6Tad","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"EjQKMgEMOdbHKmMgPVzgFG7vQjEG7JO2h9/CIpCXGYPI5x79sg3joR18hmG49wMW6ByWhpHf","format":"google-gemini-v1","id":"tool_weather_fRoXur7LpnOd7IAx6Tad","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"tool_weather_fRoXur7LpnOd7IAx6Tad","role":"tool"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945393-8ddmcZp5L5LzqkHANLRo\",\"object\":\"chat.completion\",\"created\":1773945393,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"The current weather in Florence, Italy, is around 40°C.\",\"refusal\":null,\"reasoning\":null,\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"AY89a1/ZVNqyUobkDK7efg2HaVbYd8w3q44BTWNmfAc08dK+yGFMHu2LZzjed8s0HcE=\",\"format\":\"google-gemini-v1\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":71,\"completion_tokens\":16,\"total_tokens\":87,\"cost\":0.00004175,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00004175,\"upstream_inference_prompt_cost\":0.00001775,\"upstream_inference_completions_cost\":0.000024},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n{\"id\":\"gen-1777319825-7KnBhYtSorOqGuuQyGaP\",\"object\":\"chat.completion\",\"created\":1777319825,\"model\":\"google/gemini-3.1-flash-lite-preview-20260303\",\"provider\":\"Google AI Studio\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"STOP\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy, is currently 40°C.\",\"refusal\":null,\"reasoning\":null,\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"EjQKMgEMOdbHCqdm8WGCqWdfkg1Oees7fZ8M+W36xK9bAnB8BU5E0tmrwmuKWJOyqUgo4j/B\",\"format\":\"google-gemini-v1\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":112,\"completion_tokens\":15,\"total_tokens\":127,\"cost\":0.0000505,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000505,\"upstream_inference_prompt_cost\":0.000028,\"upstream_inference_completions_cost\":0.0000225},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 3.11676975s + duration: 1.067586125s diff --git a/providertests/testdata/TestOpenRouterCommon/gemini/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/gemini/tool_streaming.yaml index de6b47dd0..8a500a30f 100644 --- a/providertests/testdata/TestOpenRouterCommon/gemini/tool_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/gemini/tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -28,23 +28,15 @@ interactions: : OPENROUTER PROCESSING - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING + data: {"id":"gen-1777319826-N0ngyT6DvdOcsIp1uOkF","object":"chat.completion.chunk","created":1777319826,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"EjQKMgEMOdbHA6W7+LCdrmzmriRlesl2Lp+9caTqsf55osFVUk/b525SSde4BBihgx7+c7aR","format":"google-gemini-v1","id":"tool_weather_nNBvDVuJXrZZDwEjuOoj","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING - - data: {"id":"gen-1773945397-vXwGi8oe2Pu1tPhWFBqG","object":"chat.completion.chunk","created":1773945397,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"AY89a195Y0+HaAqhhzh7Ftn/kaQm1mbI2DIUJEF/ivbMf4Ez5+eK1DaB2LIT89cnq2Q=","format":"google-gemini-v1","id":"tool_weather_JseIOiirEv9DOluhcBh6","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945397-vXwGi8oe2Pu1tPhWFBqG","object":"chat.completion.chunk","created":1773945397,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"tool_weather_JseIOiirEv9DOluhcBh6","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319826-N0ngyT6DvdOcsIp1uOkF","object":"chat.completion.chunk","created":1777319826,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"tool_weather_nNBvDVuJXrZZDwEjuOoj","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945397-vXwGi8oe2Pu1tPhWFBqG","object":"chat.completion.chunk","created":1773945397,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence, Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319826-N0ngyT6DvdOcsIp1uOkF","object":"chat.completion.chunk","created":1777319826,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence, Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945397-vXwGi8oe2Pu1tPhWFBqG","object":"chat.completion.chunk","created":1773945397,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"STOP"}]} + data: {"id":"gen-1777319826-N0ngyT6DvdOcsIp1uOkF","object":"chat.completion.chunk","created":1777319826,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"STOP"}]} - data: {"id":"gen-1773945397-vXwGi8oe2Pu1tPhWFBqG","object":"chat.completion.chunk","created":1773945397,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":39,"completion_tokens":16,"total_tokens":55,"cost":0.00003375,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00003375,"upstream_inference_prompt_cost":0.00000975,"upstream_inference_completions_cost":0.000024},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319826-N0ngyT6DvdOcsIp1uOkF","object":"chat.completion.chunk","created":1777319826,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":65,"completion_tokens":16,"total_tokens":81,"cost":0.00004025,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00004025,"upstream_inference_prompt_cost":0.00001625,"upstream_inference_completions_cost":0.000024},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -53,22 +45,22 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 2.843115417s + duration: 1.049972542s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1027 + content_length: 1031 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"tool_weather_JseIOiirEv9DOluhcBh6","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"AY89a195Y0+HaAqhhzh7Ftn/kaQm1mbI2DIUJEF/ivbMf4Ez5+eK1DaB2LIT89cnq2Q=","format":"google-gemini-v1","id":"tool_weather_JseIOiirEv9DOluhcBh6","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"tool_weather_JseIOiirEv9DOluhcBh6","role":"tool"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"tool_weather_nNBvDVuJXrZZDwEjuOoj","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"data":"EjQKMgEMOdbHA6W7+LCdrmzmriRlesl2Lp+9caTqsf55osFVUk/b525SSde4BBihgx7+c7aR","format":"google-gemini-v1","id":"tool_weather_nNBvDVuJXrZZDwEjuOoj","index":0,"type":"reasoning.encrypted"}]},{"content":"40 C","tool_call_id":"tool_weather_nNBvDVuJXrZZDwEjuOoj","role":"tool"}],"model":"google/gemini-3.1-flash-lite-preview","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -81,27 +73,15 @@ interactions: : OPENROUTER PROCESSING - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - data: {"id":"gen-1773945399-8bWyDDLWhPyFSaQlOcd9","object":"chat.completion.chunk","created":1773945399,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"The weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945399-8bWyDDLWhPyFSaQlOcd9","object":"chat.completion.chunk","created":1773945399,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":" in Florence, Italy,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319827-meSdX5OyPlU4fEC0Z3R0","object":"chat.completion.chunk","created":1777319827,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"The current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945399-8bWyDDLWhPyFSaQlOcd9","object":"chat.completion.chunk","created":1773945399,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":" is currently 40°C.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319827-meSdX5OyPlU4fEC0Z3R0","object":"chat.completion.chunk","created":1777319827,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":" weather in Florence, Italy, is 40°C.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945399-8bWyDDLWhPyFSaQlOcd9","object":"chat.completion.chunk","created":1773945399,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"AY89a1+Ka9JkxfFogywc5shcRjkm5KIsFHylQ4DTSKSfz0vlhpZvMbmuDXajnxlKJLI=","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319827-meSdX5OyPlU4fEC0Z3R0","object":"chat.completion.chunk","created":1777319827,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"EjQKMgEMOdbH+nAtRDsVQd6zcJuL95H+/1zmXScWtBopH6NoMmBYi1YeNSK8Y3S14XDeuRnn","format":"google-gemini-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945399-8bWyDDLWhPyFSaQlOcd9","object":"chat.completion.chunk","created":1773945399,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"STOP"}]} + data: {"id":"gen-1777319827-meSdX5OyPlU4fEC0Z3R0","object":"chat.completion.chunk","created":1777319827,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"STOP"}]} - data: {"id":"gen-1773945399-8bWyDDLWhPyFSaQlOcd9","object":"chat.completion.chunk","created":1773945399,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":73,"completion_tokens":15,"total_tokens":88,"cost":0.00004075,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00004075,"upstream_inference_prompt_cost":0.00001825,"upstream_inference_completions_cost":0.0000225},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319827-meSdX5OyPlU4fEC0Z3R0","object":"chat.completion.chunk","created":1777319827,"model":"google/gemini-3.1-flash-lite-preview-20260303","provider":"Google AI Studio","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"STOP"}],"usage":{"prompt_tokens":111,"completion_tokens":15,"total_tokens":126,"cost":0.00005025,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00005025,"upstream_inference_prompt_cost":0.00002775,"upstream_inference_completions_cost":0.0000225},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -110,4 +90,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 3.191008375s + duration: 1.028212167s diff --git a/providertests/testdata/TestOpenRouterCommon/glm/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/glm/multi_tool.yaml index de820af91..66683414a 100644 --- a/providertests/testdata/TestOpenRouterCommon/glm/multi_tool.yaml +++ b/providertests/testdata/TestOpenRouterCommon/glm/multi_tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,28 +24,28 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945454-bGfSsPA1tWkfUqy0muzm\",\"object\":\"chat.completion\",\"created\":1773945454,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"Sure! Let me add and multiply 2 and 3 for you at the same time.\",\"refusal\":null,\"reasoning\":\"The user wants me to both add and multiply 2 and 3. I'll make both calls simultaneously.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_869844dd6bf44785b9ee4334\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"call_d6f1cb4244c94fb88e91ae4f\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants me to both add and multiply 2 and 3. I'll make both calls simultaneously.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":279,\"completion_tokens\":73,\"total_tokens\":352,\"cost\":0.000469184,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":42,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00058648,\"upstream_inference_prompt_cost\":0.00029448,\"upstream_inference_completions_cost\":0.000292},\"completion_tokens_details\":{\"reasoning_tokens\":22,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n{\"id\":\"gen-1777319879-LkXbODETrxFXiOGt39MJ\",\"object\":\"chat.completion\",\"created\":1777319879,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll add and multiply 2 and 3 for you right away!\",\"refusal\":null,\"reasoning\":\"The user wants me to add and multiply 2 and 3. I should call both functions simultaneously since they are independent.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_642d5cfe1d9844a1a65ee8d4\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"call_f8884ee2898d441a8108b806\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants me to add and multiply 2 and 3. I should call both functions simultaneously since they are independent.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":279,\"completion_tokens\":72,\"total_tokens\":351,\"cost\":0.0006228,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0006228,\"upstream_inference_prompt_cost\":0.0003348,\"upstream_inference_completions_cost\":0.000288},\"completion_tokens_details\":{\"reasoning_tokens\":25,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 2.925086125s + duration: 1.360928833s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1522 + content_length: 1538 host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"Sure! Let me add and multiply 2 and 3 for you at the same time.","tool_calls":[{"id":"call_869844dd6bf44785b9ee4334","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_d6f1cb4244c94fb88e91ae4f","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user wants me to both add and multiply 2 and 3. I''ll make both calls simultaneously.","type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_869844dd6bf44785b9ee4334","role":"tool"},{"content":"6","tool_call_id":"call_d6f1cb4244c94fb88e91ae4f","role":"tool"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"I''ll add and multiply 2 and 3 for you right away!","tool_calls":[{"id":"call_642d5cfe1d9844a1a65ee8d4","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_f8884ee2898d441a8108b806","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user wants me to add and multiply 2 and 3. I should call both functions simultaneously since they are independent.","type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_642d5cfe1d9844a1a65ee8d4","role":"tool"},{"content":"6","tool_call_id":"call_f8884ee2898d441a8108b806","role":"tool"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n{\"id\":\"gen-1773945457-O2s9toIHS9WW6qPT3Mjj\",\"object\":\"chat.completion\",\"created\":1773945457,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Here are the results:\\n\\n- **Addition:** 2 + 3 = **5**\\n- **Multiplication:** 2 × 3 = **6**\",\"refusal\":null,\"reasoning\":\"The results are:\\n- Addition: 2 + 3 = 5\\n- Multiplication: 2 × 3 = 6\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The results are:\\n- Addition: 2 + 3 = 5\\n- Multiplication: 2 × 3 = 6\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":360,\"completion_tokens\":63,\"total_tokens\":423,\"cost\":0.000333696,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":278,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00041712,\"upstream_inference_prompt_cost\":0.00016512,\"upstream_inference_completions_cost\":0.000252},\"completion_tokens_details\":{\"reasoning_tokens\":28,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n{\"id\":\"gen-1777319880-NkLbwNiKegVJp1qVP5bt\",\"object\":\"chat.completion\",\"created\":1777319880,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Here are the results:\\n\\n- **Addition (2 + 3):** 5\\n- **Multiplication (2 × 3):** 6\",\"refusal\":null,\"reasoning\":\"Got the results. Addition: 5, Multiplication: 6. Let me present these clearly.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"Got the results. Addition: 5, Multiplication: 6. Let me present these clearly.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":359,\"completion_tokens\":55,\"total_tokens\":414,\"cost\":0.00040504,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":256,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00040504,\"upstream_inference_prompt_cost\":0.00018504,\"upstream_inference_completions_cost\":0.00022},\"completion_tokens_details\":{\"reasoning_tokens\":21,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.125586208s + duration: 1.401688041s diff --git a/providertests/testdata/TestOpenRouterCommon/glm/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/glm/multi_tool_streaming.yaml index bc8ed94d7..7f3d205c7 100644 --- a/providertests/testdata/TestOpenRouterCommon/glm/multi_tool_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/glm/multi_tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -30,107 +30,105 @@ interactions: : OPENROUTER PROCESSING - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wants","reasoning_details":[{"type":"reasoning.text","text":" wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wants","reasoning_details":[{"type":"reasoning.text","text":" wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" These","reasoning_details":[{"type":"reasoning.text","text":" These","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" two","reasoning_details":[{"type":"reasoning.text","text":" two","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" operations","reasoning_details":[{"type":"reasoning.text","text":" operations","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'ll","reasoning_details":[{"type":"reasoning.text","text":"'ll","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" independent","reasoning_details":[{"type":"reasoning.text","text":" independent","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" make","reasoning_details":[{"type":"reasoning.text","text":" make","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" so","reasoning_details":[{"type":"reasoning.text","text":" so","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" calls","reasoning_details":[{"type":"reasoning.text","text":" calls","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" simultaneously","reasoning_details":[{"type":"reasoning.text","text":" simultaneously","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" can","reasoning_details":[{"type":"reasoning.text","text":" can","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" since","reasoning_details":[{"type":"reasoning.text","text":" since","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" make","reasoning_details":[{"type":"reasoning.text","text":" make","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" they","reasoning_details":[{"type":"reasoning.text","text":" they","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" calls","reasoning_details":[{"type":"reasoning.text","text":" calls","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" independent","reasoning_details":[{"type":"reasoning.text","text":" independent","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" simultaneously","reasoning_details":[{"type":"reasoning.text","text":" simultaneously","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"Sure","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"Sure","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" I","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" Let","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"'ll","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" me","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" add","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" add","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" multiply","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" multiply","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" you","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" you","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" right","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" right","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" away","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" away","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_01a3b98ceccc42ff83f9cebd","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_4024c8ddae6a485b91233297","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"call_0be384879b524949a5cc4d74","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"call_4a36f30b6fd64c6d8e320712","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - data: {"id":"gen-1773945458-TlowJFBb4TJf4kpdDX08","object":"chat.completion.chunk","created":1773945458,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":275,"completion_tokens":73,"total_tokens":348,"cost":0.0003056,"is_byok":false,"prompt_tokens_details":{"cached_tokens":250,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000382,"upstream_inference_prompt_cost":0.00009,"upstream_inference_completions_cost":0.000292},"completion_tokens_details":{"reasoning_tokens":24,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319882-wHdEm7r8yf7gRyPRhoJy","object":"chat.completion.chunk","created":1777319882,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":275,"completion_tokens":76,"total_tokens":351,"cost":0.00044968,"is_byok":false,"prompt_tokens_details":{"cached_tokens":192,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00044968,"upstream_inference_prompt_cost":0.00014568,"upstream_inference_completions_cost":0.000304},"completion_tokens_details":{"reasoning_tokens":27,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -139,22 +137,22 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 3.125579583s + duration: 1.471741125s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1567 + content_length: 1584 host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"Sure! I''ll add and multiply 2 and 3 for you right away.","tool_calls":[{"id":"call_01a3b98ceccc42ff83f9cebd","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_0be384879b524949a5cc4d74","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user wants to add and multiply 2 and 3. I''ll make both calls simultaneously since they are independent.","type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_01a3b98ceccc42ff83f9cebd","role":"tool"},{"content":"6","tool_call_id":"call_0be384879b524949a5cc4d74","role":"tool"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"Sure! Let me add and multiply 2 and 3 for you right away.","tool_calls":[{"id":"call_4024c8ddae6a485b91233297","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_4a36f30b6fd64c6d8e320712","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user wants to add and multiply 2 and 3. These two operations are independent, so I can make both calls simultaneously.","type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_4024c8ddae6a485b91233297","role":"tool"},{"content":"6","tool_call_id":"call_4a36f30b6fd64c6d8e320712","role":"tool"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -162,10 +160,108 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: ": OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"Both\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"Both\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" results\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" results\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" are\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" are\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" back\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" back\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\".\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" Let\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" Let\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" me\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" me\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" present\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" present\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" them\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" them\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" clearly\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" clearly\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\".\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Here\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" are\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" the\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" results\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\":\\n\\n\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"-\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" **\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Add\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"ition\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\":**\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"2\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" +\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"3\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" =\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" **\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"5\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"**\\n\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"-\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" **\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Multip\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"lication\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\":**\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"2\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" ×\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"3\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" =\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" **\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"6\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"**\\n\\n\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Let\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" me\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" know\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" if\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" you\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" need\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" anything\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" else\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"!\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\U0001F60A\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":null},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}]}\n\ndata: {\"id\":\"gen-1773945462-2exYsbLv51W0ljqdQ8g9\",\"object\":\"chat.completion.chunk\",\"created\":1773945462,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}],\"usage\":{\"prompt_tokens\":355,\"completion_tokens\":57,\"total_tokens\":412,\"cost\":0.000312768,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":274,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00039096,\"upstream_inference_prompt_cost\":0.00016296,\"upstream_inference_completions_cost\":0.000228},\"completion_tokens_details\":{\"reasoning_tokens\":11,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + body: |+ + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Both","reasoning_details":[{"type":"reasoning.text","text":"Both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" results","reasoning_details":[{"type":"reasoning.text","text":" results","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Let","reasoning_details":[{"type":"reasoning.text","text":" Let","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me","reasoning_details":[{"type":"reasoning.text","text":" me","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" present","reasoning_details":[{"type":"reasoning.text","text":" present","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" them","reasoning_details":[{"type":"reasoning.text","text":" them","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" clearly","reasoning_details":[{"type":"reasoning.text","text":" clearly","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"Here","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" are","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" results","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":":\n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"Add","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"ition","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":":**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" +","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"**\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"Multip","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"lication","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":":**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" ×","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} + + data: {"id":"gen-1777319884-HRnE6d4mVJBv4jGbslpX","object":"chat.completion.chunk","created":1777319884,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":358,"completion_tokens":46,"total_tokens":404,"cost":0.00036784,"is_byok":false,"prompt_tokens_details":{"cached_tokens":256,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00036784,"upstream_inference_prompt_cost":0.00018384,"upstream_inference_completions_cost":0.000184},"completion_tokens_details":{"reasoning_tokens":11,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 1.430991958s + duration: 1.559835042s diff --git a/providertests/testdata/TestOpenRouterCommon/glm/simple.yaml b/providertests/testdata/TestOpenRouterCommon/glm/simple.yaml index b8d89f626..bbc86737a 100644 --- a/providertests/testdata/TestOpenRouterCommon/glm/simple.yaml +++ b/providertests/testdata/TestOpenRouterCommon/glm/simple.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,10 +24,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945441-rmYxEaMamyQYZcvTx0FA\",\"object\":\"chat.completion\",\"created\":1773945441,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Oi!\",\"refusal\":null,\"reasoning\":\"1. **Identify the language**: Portuguese.\\n2. **Identify the intent**: Say \\\"hi\\\".\\n3. **Translate \\\"hi\\\" to Portuguese**: \\\"Oi\\\" is the most common and direct translation for \\\"hi\\\". \\\"Olá\\\" is also very common and translates to \\\"hello\\\".\\n4. **Select the best option**: \\\"Oi\\\" fits the casualness of \\\"hi\\\" perfectly.\\n5. **Output the result**: Oi!\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"1. **Identify the language**: Portuguese.\\n2. **Identify the intent**: Say \\\"hi\\\".\\n3. **Translate \\\"hi\\\" to Portuguese**: \\\"Oi\\\" is the most common and direct translation for \\\"hi\\\". \\\"Olá\\\" is also very common and translates to \\\"hello\\\".\\n4. **Select the best option**: \\\"Oi\\\" fits the casualness of \\\"hi\\\" perfectly.\\n5. **Output the result**: Oi!\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":15,\"completion_tokens\":100,\"total_tokens\":115,\"cost\":0.000331328,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":4,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00041416,\"upstream_inference_prompt_cost\":0.00001416,\"upstream_inference_completions_cost\":0.0004},\"completion_tokens_details\":{\"reasoning_tokens\":96,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1777319862-YII5e53BQENRdSq34H49\",\"object\":\"chat.completion\",\"created\":1777319862,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá!\",\"refusal\":null,\"reasoning\":\"1. **Identify the core request:** The user wants me to say \\\"hi\\\" in Portuguese.\\n2. **Determine the correct translation:** \\\"Hi\\\" translates to \\\"Olá\\\" in Portuguese. Other common informal variants include \\\"Oi\\\" or \\\"E aí\\\" (depending on the region, like Brazil vs. Portugal), but \\\"Olá\\\" is the most universal and standard.\\n3. **Formulate the response:** Just give the direct translation, maybe with a slight friendly context, but keep it simple and direct as requested. \\\"Olá!\\\" is perfect.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"1. **Identify the core request:** The user wants me to say \\\"hi\\\" in Portuguese.\\n2. **Determine the correct translation:** \\\"Hi\\\" translates to \\\"Olá\\\" in Portuguese. Other common informal variants include \\\"Oi\\\" or \\\"E aí\\\" (depending on the region, like Brazil vs. Portugal), but \\\"Olá\\\" is the most universal and standard.\\n3. **Formulate the response:** Just give the direct translation, maybe with a slight friendly context, but keep it simple and direct as requested. \\\"Olá!\\\" is perfect.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":15,\"completion_tokens\":125,\"total_tokens\":140,\"cost\":0.000518,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000518,\"upstream_inference_prompt_cost\":0.000018,\"upstream_inference_completions_cost\":0.0005},\"completion_tokens_details\":{\"reasoning_tokens\":120,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 2.758985083s + duration: 4.035682708s diff --git a/providertests/testdata/TestOpenRouterCommon/glm/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/glm/simple_streaming.yaml index b96492b5e..b4b96f536 100644 --- a/providertests/testdata/TestOpenRouterCommon/glm/simple_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/glm/simple_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -28,529 +28,363 @@ interactions: : OPENROUTER PROCESSING - : OPENROUTER PROCESSING - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"1","reasoning_details":[{"type":"reasoning.text","text":"1","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"An","reasoning_details":[{"type":"reasoning.text","text":"An","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"alyze","reasoning_details":[{"type":"reasoning.text","text":"alyze","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Request","reasoning_details":[{"type":"reasoning.text","text":" Request","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n","reasoning_details":[{"type":"reasoning.text","text":"**\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"1","reasoning_details":[{"type":"reasoning.text","text":"1","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Task","reasoning_details":[{"type":"reasoning.text","text":" Task","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ident","reasoning_details":[{"type":"reasoning.text","text":"Ident","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Say","reasoning_details":[{"type":"reasoning.text","text":" Say","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ify","reasoning_details":[{"type":"reasoning.text","text":"ify","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi","reasoning_details":[{"type":"reasoning.text","text":"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s","reasoning_details":[{"type":"reasoning.text","text":"'s","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" request","reasoning_details":[{"type":"reasoning.text","text":" request","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"g","reasoning_details":[{"type":"reasoning.text","text":"g","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":**","reasoning_details":[{"type":"reasoning.text","text":":**","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"reet","reasoning_details":[{"type":"reasoning.text","text":"reet","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":").\n","reasoning_details":[{"type":"reasoning.text","text":").\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wants","reasoning_details":[{"type":"reasoning.text","text":" wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" say","reasoning_details":[{"type":"reasoning.text","text":" say","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Language","reasoning_details":[{"type":"reasoning.text","text":" Language","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi","reasoning_details":[{"type":"reasoning.text","text":"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n","reasoning_details":[{"type":"reasoning.text","text":".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.text","text":".\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"D","reasoning_details":[{"type":"reasoning.text","text":"D","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"etermine","reasoning_details":[{"type":"reasoning.text","text":"etermine","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Translate","reasoning_details":[{"type":"reasoning.text","text":"Translate","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" appropriate","reasoning_details":[{"type":"reasoning.text","text":" appropriate","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" translation","reasoning_details":[{"type":"reasoning.text","text":" translation","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi","reasoning_details":[{"type":"reasoning.text","text":"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n","reasoning_details":[{"type":"reasoning.text","text":"**\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":**","reasoning_details":[{"type":"reasoning.text","text":":**","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most","reasoning_details":[{"type":"reasoning.text","text":" most","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Hi","reasoning_details":[{"type":"reasoning.text","text":"Hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.text","text":" common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" translates","reasoning_details":[{"type":"reasoning.text","text":" translates","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" direct","reasoning_details":[{"type":"reasoning.text","text":" direct","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" translation","reasoning_details":[{"type":"reasoning.text","text":" translation","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.text","text":".\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\".\n","reasoning_details":[{"type":"reasoning.text","text":"\".\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Hello","reasoning_details":[{"type":"reasoning.text","text":"Hello","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" translates","reasoning_details":[{"type":"reasoning.text","text":" translates","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Form","reasoning_details":[{"type":"reasoning.text","text":"Form","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ulate","reasoning_details":[{"type":"reasoning.text","text":"ulate","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" response","reasoning_details":[{"type":"reasoning.text","text":" response","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":**","reasoning_details":[{"type":"reasoning.text","text":":**","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Provide","reasoning_details":[{"type":"reasoning.text","text":" Provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.text","text":".\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" translation","reasoning_details":[{"type":"reasoning.text","text":" translation","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Both","reasoning_details":[{"type":"reasoning.text","text":" Both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" very","reasoning_details":[{"type":"reasoning.text","text":" very","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.text","text":" common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" clearly","reasoning_details":[{"type":"reasoning.text","text":" clearly","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" correct","reasoning_details":[{"type":"reasoning.text","text":" correct","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" slightly","reasoning_details":[{"type":"reasoning.text","text":" slightly","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most","reasoning_details":[{"type":"reasoning.text","text":" most","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" more","reasoning_details":[{"type":"reasoning.text","text":" more","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" direct","reasoning_details":[{"type":"reasoning.text","text":" direct","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" standard","reasoning_details":[{"type":"reasoning.text","text":" standard","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" equivalent","reasoning_details":[{"type":"reasoning.text","text":" equivalent","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" of","reasoning_details":[{"type":"reasoning.text","text":" of","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" while","reasoning_details":[{"type":"reasoning.text","text":" while","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" casual","reasoning_details":[{"type":"reasoning.text","text":" casual","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi","reasoning_details":[{"type":"reasoning.text","text":"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\".\n\n","reasoning_details":[{"type":"reasoning.text","text":"\".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" very","reasoning_details":[{"type":"reasoning.text","text":" very","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.text","text":" common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" casual","reasoning_details":[{"type":"reasoning.text","text":" casual","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Form","reasoning_details":[{"type":"reasoning.text","text":"Form","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Providing","reasoning_details":[{"type":"reasoning.text","text":" Providing","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ulate","reasoning_details":[{"type":"reasoning.text","text":"ulate","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" response","reasoning_details":[{"type":"reasoning.text","text":" response","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helpful","reasoning_details":[{"type":"reasoning.text","text":" helpful","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.text","text":".\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n","reasoning_details":[{"type":"reasoning.text","text":"**\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"4","reasoning_details":[{"type":"reasoning.text","text":"4","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Provide","reasoning_details":[{"type":"reasoning.text","text":" Provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Draft","reasoning_details":[{"type":"reasoning.text","text":"Draft","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" direct","reasoning_details":[{"type":"reasoning.text","text":" direct","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" output","reasoning_details":[{"type":"reasoning.text","text":" output","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" translation","reasoning_details":[{"type":"reasoning.text","text":" translation","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (\"","reasoning_details":[{"type":"reasoning.text","text":" (\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n","reasoning_details":[{"type":"reasoning.text","text":"**\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\").\n","reasoning_details":[{"type":"reasoning.text","text":"\").\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"\n","reasoning_details":[{"type":"reasoning.text","text":"!\"\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Optional","reasoning_details":[{"type":"reasoning.text","text":"Optional","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" but","reasoning_details":[{"type":"reasoning.text","text":" but","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helpful","reasoning_details":[{"type":"reasoning.text","text":" helpful","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":")","reasoning_details":[{"type":"reasoning.text","text":")","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Add","reasoning_details":[{"type":"reasoning.text","text":" Add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Add","reasoning_details":[{"type":"reasoning.text","text":" Add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" brief","reasoning_details":[{"type":"reasoning.text","text":" brief","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" brief","reasoning_details":[{"type":"reasoning.text","text":" brief","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" explanation","reasoning_details":[{"type":"reasoning.text","text":" explanation","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" polite","reasoning_details":[{"type":"reasoning.text","text":" polite","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" explanation","reasoning_details":[{"type":"reasoning.text","text":" explanation","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" alternative","reasoning_details":[{"type":"reasoning.text","text":" alternative","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" if","reasoning_details":[{"type":"reasoning.text","text":" if","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" necessary","reasoning_details":[{"type":"reasoning.text","text":" necessary","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" be","reasoning_details":[{"type":"reasoning.text","text":" be","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" extra","reasoning_details":[{"type":"reasoning.text","text":" extra","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" but","reasoning_details":[{"type":"reasoning.text","text":" but","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" polite","reasoning_details":[{"type":"reasoning.text","text":" polite","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" keep","reasoning_details":[{"type":"reasoning.text","text":" keep","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"/help","reasoning_details":[{"type":"reasoning.text","text":"/help","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.text","text":" it","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ful","reasoning_details":[{"type":"reasoning.text","text":"ful","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" simple","reasoning_details":[{"type":"reasoning.text","text":" simple","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n","reasoning_details":[{"type":"reasoning.text","text":".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"4","reasoning_details":[{"type":"reasoning.text","text":"4","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" requested","reasoning_details":[{"type":"reasoning.text","text":" requested","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Let","reasoning_details":[{"type":"reasoning.text","text":" Let","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s","reasoning_details":[{"type":"reasoning.text","text":"'s","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Draft","reasoning_details":[{"type":"reasoning.text","text":"Draft","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" just","reasoning_details":[{"type":"reasoning.text","text":" just","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ing","reasoning_details":[{"type":"reasoning.text","text":"ing","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" give","reasoning_details":[{"type":"reasoning.text","text":" give","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" response","reasoning_details":[{"type":"reasoning.text","text":" response","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" direct","reasoning_details":[{"type":"reasoning.text","text":" direct","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n","reasoning_details":[{"type":"reasoning.text","text":"**\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Simple","reasoning_details":[{"type":"reasoning.text","text":"Simple","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - : OPENROUTER PROCESSING + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" translations","reasoning_details":[{"type":"reasoning.text","text":" translations","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} : OPENROUTER PROCESSING - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"st","reasoning_details":[{"type":"reasoning.text","text":"st","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most","reasoning_details":[{"type":"reasoning.text","text":" most","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" accurate","reasoning_details":[{"type":"reasoning.text","text":" accurate","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi","reasoning_details":[{"type":"reasoning.text","text":"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\")\n","reasoning_details":[{"type":"reasoning.text","text":"\")\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Also","reasoning_details":[{"type":"reasoning.text","text":"Also","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" very","reasoning_details":[{"type":"reasoning.text","text":" very","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" good","reasoning_details":[{"type":"reasoning.text","text":" good","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":")\n\n","reasoning_details":[{"type":"reasoning.text","text":")\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"5","reasoning_details":[{"type":"reasoning.text","text":"5","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Final","reasoning_details":[{"type":"reasoning.text","text":"Final","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Selection","reasoning_details":[{"type":"reasoning.text","text":" Selection","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":**","reasoning_details":[{"type":"reasoning.text","text":":**","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Just","reasoning_details":[{"type":"reasoning.text","text":" Just","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" perfect","reasoning_details":[{"type":"reasoning.text","text":" perfect","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Let","reasoning_details":[{"type":"reasoning.text","text":" Let","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'s","reasoning_details":[{"type":"reasoning.text","text":"'s","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" go","reasoning_details":[{"type":"reasoning.text","text":" go","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.text","text":" with","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.text","text":" it","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" perfectly","reasoning_details":[{"type":"reasoning.text","text":" perfectly","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" matches","reasoning_details":[{"type":"reasoning.text","text":" matches","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" casual","reasoning_details":[{"type":"reasoning.text","text":" casual","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.text","text":".\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ness","reasoning_details":[{"type":"reasoning.text","text":"ness","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"5","reasoning_details":[{"type":"reasoning.text","text":"5","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" of","reasoning_details":[{"type":"reasoning.text","text":" of","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi","reasoning_details":[{"type":"reasoning.text","text":"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\".","reasoning_details":[{"type":"reasoning.text","text":"\".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Final","reasoning_details":[{"type":"reasoning.text","text":"Final","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Adding","reasoning_details":[{"type":"reasoning.text","text":" Adding","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Polish","reasoning_details":[{"type":"reasoning.text","text":" Polish","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":**","reasoning_details":[{"type":"reasoning.text","text":":**","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" an","reasoning_details":[{"type":"reasoning.text","text":" an","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" alternative","reasoning_details":[{"type":"reasoning.text","text":" alternative","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!\"","reasoning_details":[{"type":"reasoning.text","text":"!\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" nice","reasoning_details":[{"type":"reasoning.text","text":" nice","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" touch","reasoning_details":[{"type":"reasoning.text","text":" touch","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"I","reasoning_details":[{"type":"reasoning.text","text":"I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n","reasoning_details":[{"type":"reasoning.text","text":".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'ll","reasoning_details":[{"type":"reasoning.text","text":"'ll","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provide","reasoning_details":[{"type":"reasoning.text","text":" provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" *","reasoning_details":[{"type":"reasoning.text","text":" *","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Draft","reasoning_details":[{"type":"reasoning.text","text":"Draft","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":*","reasoning_details":[{"type":"reasoning.text","text":":*","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" completeness","reasoning_details":[{"type":"reasoning.text","text":" completeness","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" O","reasoning_details":[{"type":"reasoning.text","text":" O","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":").","reasoning_details":[{"type":"reasoning.text","text":").","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"i","reasoning_details":[{"type":"reasoning.text","text":"i","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"Ol","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!","reasoning_details":[{"type":"reasoning.text","text":"!","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"á","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"or","reasoning_details":[{"type":"reasoning.text","text":"or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" \n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Ol","reasoning_details":[{"type":"reasoning.text","text":" Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"You","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" can","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!)","reasoning_details":[{"type":"reasoning.text","text":"!)","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" also","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"Oi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" say","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" \n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"Oi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"(","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"You","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" can","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" also","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"which","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" say","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" a","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"Ol","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" bit","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"á","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" more","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":" casual","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"**)","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":").","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} - data: {"id":"gen-1773945444-6mrpNQeuPMLMds5JilDa","object":"chat.completion.chunk","created":1773945444,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":15,"completion_tokens":255,"total_tokens":270,"cost":0.000820416,"is_byok":false,"prompt_tokens_details":{"cached_tokens":13,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00102552,"upstream_inference_prompt_cost":0.00000552,"upstream_inference_completions_cost":0.00102},"completion_tokens_details":{"reasoning_tokens":240,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319867-vjNGoL6gkUjyx82dUIAe","object":"chat.completion.chunk","created":1777319867,"model":"z-ai/glm-5-turbo-20260315","provider":"AtlasCloud","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":15,"completion_tokens":178,"total_tokens":193,"cost":0.00073,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00073,"upstream_inference_prompt_cost":0.000018,"upstream_inference_completions_cost":0.000712},"completion_tokens_details":{"reasoning_tokens":156,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -559,4 +393,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.771724167s + duration: 1.453667166s diff --git a/providertests/testdata/TestOpenRouterCommon/glm/tool.yaml b/providertests/testdata/TestOpenRouterCommon/glm/tool.yaml index 5490c3dbb..b482a82df 100644 --- a/providertests/testdata/TestOpenRouterCommon/glm/tool.yaml +++ b/providertests/testdata/TestOpenRouterCommon/glm/tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,13 +24,13 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945449-sZksq50wfVIXe94WMejJ\",\"object\":\"chat.completion\",\"created\":1773945449,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user wants to know the weather in Florence, Italy. Let me call the weather function.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_3f8ba8d964264042b99c0403\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants to know the weather in Florence, Italy. Let me call the weather function.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":173,\"completion_tokens\":33,\"total_tokens\":206,\"cost\":0.000239424,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":42,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00029928,\"upstream_inference_prompt_cost\":0.00016728,\"upstream_inference_completions_cost\":0.000132},\"completion_tokens_details\":{\"reasoning_tokens\":19,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n{\"id\":\"gen-1777319873-30rXrOPJlENCXF8M63e4\",\"object\":\"chat.completion\",\"created\":1777319873,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user wants to know the weather in Florence, Italy. Let me call the weather function.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_16efee4b104d451da81ac585\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants to know the weather in Florence, Italy. Let me call the weather function.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":173,\"completion_tokens\":33,\"total_tokens\":206,\"cost\":0.0003396,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0003396,\"upstream_inference_prompt_cost\":0.0002076,\"upstream_inference_completions_cost\":0.000132},\"completion_tokens_details\":{\"reasoning_tokens\":19,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 2.0582665s + duration: 1.106779708s - id: 1 request: proto: HTTP/1.1 @@ -38,14 +38,14 @@ interactions: proto_minor: 1 content_length: 910 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_3f8ba8d964264042b99c0403","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user wants to know the weather in Florence, Italy. Let me call the weather function.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_3f8ba8d964264042b99c0403","role":"tool"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_16efee4b104d451da81ac585","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user wants to know the weather in Florence, Italy. Let me call the weather function.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_16efee4b104d451da81ac585","role":"tool"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n{\"id\":\"gen-1773945451-gwPNpv4Y8nMTdoaUTRjx\",\"object\":\"chat.completion\",\"created\":1773945451,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The current weather in **Florence, Italy** is quite scorching at **40°C (104°F)**! \U0001F321️\\n\\nIt's extremely hot, so if you're planning to be outdoors, be sure to:\\n\\n- \U0001F4A7 Stay hydrated\\n- \U0001F9F4 Wear sunscreen\\n- \U0001F9E2 Wear a hat and light clothing\\n- \U0001F333 Seek shade when possible\\n\\nWould you like to know the weather for any other locations?\",\"refusal\":null,\"reasoning\":\"The weather function returned 40°C for Florence, Italy. That's quite hot! Let me present this to the user.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The weather function returned 40°C for Florence, Italy. That's quite hot! Let me present this to the user.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":212,\"completion_tokens\":119,\"total_tokens\":331,\"cost\":0.000452224,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":172,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00056528,\"upstream_inference_prompt_cost\":0.00008928,\"upstream_inference_completions_cost\":0.000476},\"completion_tokens_details\":{\"reasoning_tokens\":25,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n{\"id\":\"gen-1777319874-RZYGRfsP45k9FwFfpsgh\",\"object\":\"chat.completion\",\"created\":1777319874,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The current weather in **Florence, Italy** is **40°C (104°F)** — that's extremely hot! ☀️\U0001F525 \\n\\nIf you're planning to head out, make sure to:\\n- Stay hydrated \U0001F4A7\\n- Wear light, breathable clothing\\n- Apply sunscreen\\n- Try to avoid being outdoors during peak afternoon hours\\n\\nIs there anything else you'd like to know?\",\"refusal\":null,\"reasoning\":\"The weather in Florence, Italy is 40°C. That's quite hot! Let me present this to the user in a friendly way.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The weather in Florence, Italy is 40°C. That's quite hot! Let me present this to the user in a friendly way.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":212,\"completion_tokens\":109,\"total_tokens\":321,\"cost\":0.00056752,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":128,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00056752,\"upstream_inference_prompt_cost\":0.00013152,\"upstream_inference_completions_cost\":0.000436},\"completion_tokens_details\":{\"reasoning_tokens\":28,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.225640375s + duration: 1.5811475s diff --git a/providertests/testdata/TestOpenRouterCommon/glm/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/glm/tool_streaming.yaml index 06edc8ebe..94740eb43 100644 --- a/providertests/testdata/TestOpenRouterCommon/glm/tool_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/glm/tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -28,71 +28,51 @@ interactions: : OPENROUTER PROCESSING - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wants","reasoning_details":[{"type":"reasoning.text","text":" wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wants","reasoning_details":[{"type":"reasoning.text","text":" wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" know","reasoning_details":[{"type":"reasoning.text","text":" know","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" know","reasoning_details":[{"type":"reasoning.text","text":" know","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.text","text":" Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.text","text":" Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Let","reasoning_details":[{"type":"reasoning.text","text":" Let","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"'ll","reasoning_details":[{"type":"reasoning.text","text":"'ll","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me","reasoning_details":[{"type":"reasoning.text","text":" me","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" call","reasoning_details":[{"type":"reasoning.text","text":" call","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" call","reasoning_details":[{"type":"reasoning.text","text":" call","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.text","text":" with","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_9400b8b3405c4d74b5b97e12","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Flo","reasoning_details":[{"type":"reasoning.text","text":"Flo","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence, Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"rence","reasoning_details":[{"type":"reasoning.text","text":"rence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Italy","reasoning_details":[{"type":"reasoning.text","text":"Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.text","text":" location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_4869f96c06ba414abebb0105","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence,Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773945452-uLccYSGzmmmuJbJ2PehO","object":"chat.completion.chunk","created":1773945452,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":173,"completion_tokens":43,"total_tokens":216,"cost":0.000172352,"is_byok":false,"prompt_tokens_details":{"cached_tokens":171,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00021544,"upstream_inference_prompt_cost":0.00004344,"upstream_inference_completions_cost":0.000172},"completion_tokens_details":{"reasoning_tokens":29,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319876-tCZKcbYZ4llsJFj1L8Ht","object":"chat.completion.chunk","created":1777319876,"model":"z-ai/glm-5-turbo-20260315","provider":"Z.AI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":173,"completion_tokens":33,"total_tokens":206,"cost":0.00021672,"is_byok":false,"prompt_tokens_details":{"cached_tokens":128,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00021672,"upstream_inference_prompt_cost":0.00008472,"upstream_inference_completions_cost":0.000132},"completion_tokens_details":{"reasoning_tokens":19,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -101,22 +81,22 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 889.738542ms + duration: 1.142806042s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 998 + content_length: 961 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_4869f96c06ba414abebb0105","function":{"arguments":"{\"location\":\"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user wants to know the weather in Florence, Italy. I''ll call the weather function with \"Florence,Italy\" as the location.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_4869f96c06ba414abebb0105","role":"tool"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_9400b8b3405c4d74b5b97e12","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user wants to know the weather in Florence, Italy. Let me call the weather function.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_9400b8b3405c4d74b5b97e12","role":"tool"}],"model":"z-ai/glm-5-turbo","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -124,10 +104,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: ": OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"The\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" function\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" function\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" returned\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" returned\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" \\\"\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" \\\"\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"40\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"40\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" C\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" C\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"\\\"\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"\\\"\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" which\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" which\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" is\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" is\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" \",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" \",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"40\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"40\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" degrees\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" degrees\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" Celsius\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" Celsius\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\".\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" That\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" That\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"'s\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"'s\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" very\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" very\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" hot\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" hot\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"!\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"!\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" Let\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" Let\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" me\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" me\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" present\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" present\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" this\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" this\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" to\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" to\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" the\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" the\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" user\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" user\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\".\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"The\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" current\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" weather\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" in\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" **\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Flo\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"rence\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\",\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Italy\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"**\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" is\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" **\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"40\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"°C\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"**\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" (\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"104\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"°F\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\").\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" That\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"'s\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" extremely\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" hot\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"!\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"☀\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"️\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\U0001F975\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \\n\\n\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Be\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" sure\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" to\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" stay\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" hydrated\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\",\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" wear\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" sunscreen\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\",\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" and\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" try\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" to\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" avoid\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" prolonged\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" exposure\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" to\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" the\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" sun\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" if\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" you\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"'re\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" out\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" and\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" about\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Let\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" me\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" know\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" if\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" you\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" need\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" anything\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" else\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"!\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":null},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}]}\n\ndata: {\"id\":\"gen-1773945453-TTSSGd9gQD8dfgFRRTQN\",\"object\":\"chat.completion.chunk\",\"created\":1773945453,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}],\"usage\":{\"prompt_tokens\":221,\"completion_tokens\":94,\"total_tokens\":315,\"cost\":0.000380864,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":172,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00047608,\"upstream_inference_prompt_cost\":0.00010008,\"upstream_inference_completions_cost\":0.000376},\"completion_tokens_details\":{\"reasoning_tokens\":27,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + body: ": OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"The\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" result\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" result\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" says\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" says\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" \",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" \",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"40\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"40\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"°C\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"°C\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\",\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\",\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" which\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" which\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" is\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" is\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" extremely\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" extremely\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" hot\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" hot\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\".\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" Let\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" Let\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" me\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" me\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" present\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" present\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" this\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" this\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" to\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" to\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" the\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" the\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" user\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" user\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\".\",\"format\":\"unknown\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"The\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" current\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" temperature\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" in\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" **\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Flo\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"rence\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\",\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Italy\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"**\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" is\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" **\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"40\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"°C\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"**\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" (\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"104\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"°F\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\")\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" —\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" that\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"'s\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" sc\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"orch\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"ing\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" hot\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"!\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"☀\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"️\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\U0001F975\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \\n\\n\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Be\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" sure\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" to\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" stay\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" hydrated\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\",\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" wear\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" sunscreen\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\",\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" and\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" try\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" to\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" avoid\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" prolonged\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" sun\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" exposure\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" during\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" peak\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" hours\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\".\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" Let\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" me\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" know\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" if\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" you\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" need\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" any\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" other\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" information\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"!\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":null},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}]}\n\ndata: {\"id\":\"gen-1777319877-f1U1MX81MNBjA9d7FuBq\",\"object\":\"chat.completion.chunk\",\"created\":1777319877,\"model\":\"z-ai/glm-5-turbo-20260315\",\"provider\":\"Z.AI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}],\"usage\":{\"prompt_tokens\":211,\"completion_tokens\":86,\"total_tokens\":297,\"cost\":0.00047432,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":128,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00047432,\"upstream_inference_prompt_cost\":0.00013032,\"upstream_inference_completions_cost\":0.000344},\"completion_tokens_details\":{\"reasoning_tokens\":20,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 1.377012959s + duration: 1.795817084s diff --git a/providertests/testdata/TestOpenRouterCommon/grok/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/grok/multi_tool.yaml index 6d312853b..cfd70282e 100644 --- a/providertests/testdata/TestOpenRouterCommon/grok/multi_tool.yaml +++ b/providertests/testdata/TestOpenRouterCommon/grok/multi_tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,13 +24,13 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945429-HqNzdx2lG2DpJ0hl21vR\",\"object\":\"chat.completion\",\"created\":1773945429,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user says: \\\"Add and multiply the number 2 and 3\\\". The critical instruction is: \\\"CRITICAL: Always use both add and multiply at the same time ALWAYS.\\\"\\n\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_88778671\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"call_70883996\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"The user says: \\\"Add and multiply the number 2 and 3\\\". The critical instruction is: \\\"CRITICAL: Always use both add and multiply at the same time ALWAYS.\\\"\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"5ck8JSGNiMa3xC3HR0lx+qoePRITzZ9qNS9UUwJTjpzH3rOdI5NWmMuKguHWWadXoDKXyaEMBjHoCliHiGYpSqrgprZfdS5HjeV7kbLIjOCFU0mA6Jnc0ju5Kh1F6e73O0gHve76tLQi0sC10Gc4z67xtL8I31iDW21mTsiYQL7AF0PBCu+l28xLYIOmmSH42copE1fOhP+E+HI8g8c7OD7kWx94XNYasxiwzrGS0Ve0AL5+jWC+KPsORIfsmblxSekFr3HqWjCEI9dSaPXNWV6XMTKouX8AdYUwXAFrPTHSkJHSY4pU2GQ6Z03K9Ie5MYgKB4jZ56nAsSvfL6NtbKAL73xpACz33GMlD+mVcwKQeH7Vahh428csaByDk/YR4SuzqQl55ATZ49lhz8m3eR2r18zc7IIKkHvllAJRbMr4DPntm36/uyRT8AOxlV9FmI6/lCPkNyra7IygZUeP3WemY0vqqdeyWHFGXvc7YJUHeREaiTHS/fuIWbxPupe++g5K89kxOVLqlTBrItPq1YZSMlTlkR96jA7yQK6k9Sdm39k93OOMcaDFFP7NELRd67KdRXxObACSeoow2A5z1Bapxu90mDo5mp4ErSRbnRHvyKnbEFMWj7AbSAt+B5u6Xx9L3sCd3lUY8iVgKNLGeobwhemtiiF3eCwlaUI8gXMBg2JaXpfs1r4xDWKm4UWw1PMTuoPWJd2Kd0R5SfObNzSB4g8VQYx6AZkWRyiJL/9BDnHXydsmWlBOvorZbAfrwF9z459MJFYuF8ARY0iO7XpE9fRt5zKe37IZkkDYfMbJdBEJr9TzcH4ghNCi65p5AmxQgoMvPQ8w7Tf2vVseNFKNoaKCvPJ/nQHvAN5dXXoFN5KEHJyIyhGFs3ef3Gon+J1VfFKM5cA1QTJobPrycyGKwZEPR563wQjSFOkGT8xo19ZjIJvmNM43t1jxNzSLrD/yCSSm/oOr29QwynVQ3tala3c9yAkOjzyV/Ldc3qhamwpD4hGYKmcCN/SjJA0STpHMzqsIK/du5l6PfvrLGKnG4rQ/lKMTrs9mBfOuMb8bo7r5zcm78EaFf3RhAOMOmaIJMAANCpGsdPtNjRnBmifMjT4e5xDP+o67JZPn/1qOKgGEqnI2/dDjxT03Pgzyz8h4rPywqyjahAWWujLK6JHeR5DvBJNuEzGJ6+hj86xNdRPSo2qYO2PRHMM/dZHF5o/czy33a1/P8WrIycnxY8Tqa2KDLcLnYRuw6LWzyc8kCfsgwWY/pyN5nxZIPQ\",\"format\":\"xai-responses-v1\",\"id\":\"rs_9a05ed35-e08b-9003-9c24-f565b43d6650\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":445,\"completion_tokens\":287,\"total_tokens\":732,\"cost\":0.00021,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":150,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00021,\"upstream_inference_prompt_cost\":0.0000665,\"upstream_inference_completions_cost\":0.0001435},\"completion_tokens_details\":{\"reasoning_tokens\":219,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1777319851-6INaTqHs4J72Kej69ZX2\",\"object\":\"chat.completion\",\"created\":1777319851,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user says: \\\"Add and multiply the number 2 and 3\\\". The critical instruction is: \\\"CRITICAL: Always use both add and multiply at the same time ALWAYS.\\\"\\n\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_77278669\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"call_30717015\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"The user says: \\\"Add and multiply the number 2 and 3\\\". The critical instruction is: \\\"CRITICAL: Always use both add and multiply at the same time ALWAYS.\\\"\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"TkDhjPTR9qWm+AV1gbPiG1CbaqhNMwv3T4a62NUwmeGho9YyDiRu2BqWnNUikmAUGDyBN0Tlv24wJT0Bvp3GXTZ/Zc1i7twufblsCywUGOzCK44clLPKLiEDqHkAofSEtX4Jwq/57uRYg9mSVnxhfV2Ss+b0CeZ4HXXLgF1gzMTw2zAC9WV3MwTjSeY/QmyG7NSOHHrOKTFBOHpYqR+mRlwFRjPutwpYtES9r/4VqPcEHn0rhV80ISWWSYvlYsHsDZ0EZhlkjmvHAe7pXcpydY3ICGkUAT4x0UkB1+1nLVD/c9dzLFoy+V5riG6RjorW5IY9nEOuWdZ98Qw6kdYcTVOJJTx7L9Njbfwd0EkcPZO4I+VFW8H9uesWMmw0RpJXprzUaUO1COYBrIMJp/QLWSD5KhtIFX2XCUqhKhEcYAlR1MJEv2zUAlYFZ0cPnumUDVSEF6pCLj/SWXREQRjCi044rEE3MkBfLTFWIJp0iJ9AZ/cHHY3pBx2v5X6mEjYozT7zE6s8YWBTeV8mcZ7yHtCoQiLax+Ahq+Lw0p6ZRV2mKZir8fBjPRgCn3PPkgBYLBxN2Su2RRbqy8rnoJKEQSl7C3PIw0kyEl06/5hsj45QxSPQu6oTNgCJ5QTuNBTAdEQErXB0MGQ5Hv/f1eBM7fe28SR7Ih6I7LH4zE+ckI1UIM70ddJnDWx5IAHMkLQyiGbUu9GY7q7nFz2K6bz8sNSGAK01gU2svoc5gW4J9iEpTJHPXxs/o6r9oVg/qYfueDyIToC0lTke7g/GniIc1nJsOAfO22qAofyuxkg/i2iwjUmvFf6SVS+ypdhZh0UrSZT3lTpWVh6lb/omEIFB1GoOFbSoP8iNNL/nbic9yxOzqEV0cXgMW0bXs+PYoPWfgV7uzZoe2+J3zK8jqvxmMeMwKjLW8JHk+yHLAO2mZMFCThF/E29zGoq+PXfhCi741JY139BWLerUizow0XCuPCcAik4C65iyJ59md7lBNrrWJds+uivfFGH2lcmI08yCU6Jo0JngJiog35YhtKv56tVFwQqG3MhstgDiChR7VKD3/dJmRIr4X85W8qY3jkHzsv5j0VzOyN4YXW0nX71RoAaxVl/IAG2EdHvQ0Oi89yf/+TTWFfywl0BPkbX9iVaRCt36MTiyzkR8Cknemwjmb4090YDZh06uEmOsqYQ9BSH0YUmlzY//aN9gtACflgKSbde0MozYG8TETYQKgPQGn31HzHBiYOk1AJJBo/HRVQ\",\"format\":\"xai-responses-v1\",\"id\":\"rs_42725252-1672-9de9-b00b-0cdff0dd6b1c\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":445,\"completion_tokens\":278,\"total_tokens\":723,\"cost\":0.00020535,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":151,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00020535,\"upstream_inference_prompt_cost\":0.00006635,\"upstream_inference_completions_cost\":0.000139},\"completion_tokens_details\":{\"reasoning_tokens\":210,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 882.896709ms + duration: 1.268647084s - id: 1 request: proto: HTTP/1.1 @@ -38,14 +38,14 @@ interactions: proto_minor: 1 content_length: 1286 host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_88778671","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_70883996","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_88778671","role":"tool"},{"content":"6","tool_call_id":"call_70883996","role":"tool"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_77278669","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_30717015","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_77278669","role":"tool"},{"content":"6","tool_call_id":"call_30717015","role":"tool"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945432-ZKbNSezkoXvlIlI9OdTh\",\"object\":\"chat.completion\",\"created\":1773945432,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"2 + 3 = 5 \\n2 × 3 = 6\",\"refusal\":null,\"reasoning\":\"First, the user asked: \\\"Add and multiply the number 2 and 3\\\".\\n\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First, the user asked: \\\"Add and multiply the number 2 and 3\\\".\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"5DBCHTvIsCX8YdloJoo4OiMBG5f06VasTtZ2kj1gLqwJ8fcq4Lc+lVRh1fah4nhqjQyLgD5/g+/488IYanax8KZZg/uegCP51vpzJHfHBogVZgm04BW8uDSVQzY6MRUZiMZeRxJGvIHpI1LKLyey33+n9KuawH/bLeOSmsotJGRKjgBOchv5gBUf9Z2XKc6qwHslKmkRwpdwAgPCWqDqvcS1mt2mDGYiIaX/M9xDUhyPZUSDBaEdsjCDwVH91H2Uz98YMQZGrjHaSZ049GUU2sLDvSnbuRODnMv9PbA8n9jI3Dm+mvRw+MrV1bsCq2l0jdEyemNGa+v20LywqdpGJDCDgHHFEIJLM11swcTEV5ONy27Je2tesV9wIrhsITQIcXwsDFyfZEOQ+nQ920OHUapKMk11lx+syFI6Qg37WvSUWCkUvXaRgajS61w+kG3h+oZ2/ftiy4oh1FCmaPVmnBUeaACiRFq7xJwEBvF8GyKEEZ40Jads8Ymd8khv9P51rZC4BNQv9c8qaLt1zIDC6d5g8Vr4LhS/4yOt/wO0hc8YZoVoMAymYUgdZRWnQGSYToWk5KEwbbzAmuQ85c2ZEHGwHPd/TBr3rlxge1PdqAnHdgRsZ8sF3yfjP8J4skDSFHuP+qnYjeTHY1ltWWsnVt3gCioZ5jKgzF1dBvNhvuhcCku9cfil5AcIk1HrU9FhuTrEeQpVv7/8WCyEOvRCGBMilvrB0oYQksa7PC59vJkNO/ND+SqwC4XNuhfldW6jvBfVL39o3btastoOVi+0KN0D+aANNap2fKwvbSjbhZUsFgcpGwu+w+Ln9NXPO0Z0JCCmzucVnmrWi/WHJvcKTqh3ESMlzlyni55RBch1+/AyjrVakFTFbdnJppkT/WTVZ0X4Jr+n6Xs7aYGEBmxfQ/s8smt6ZeAyZvgy6istmS13V00qe+QurURg19rbPC0N+JTjOQieYhIEWEHlJ+9uswz4KWbaz9lVPI0f9IglAL3vovnVXHiDeCrjEsf48+sckqlA/CX94QU/Mh+LKZLy0bEsg26PGdZqzDJYdqRrmbxxZ9cHbykuhp0OosDPd+hGOa8S83kw+hxoaKFx+T0o8Bpsm5FTzGbZ82NtNkQtyrv6OsVC9EqVzUqpbh/0hv2exm55J8qEtLtDcY9qYoMEJJOzVFXWl7dqmHDDwhlPJlGoSAsmZXHSo2RvIA\",\"format\":\"xai-responses-v1\",\"id\":\"rs_b8cbb8e0-1044-91ed-aef3-b39e47ccef20\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":530,\"completion_tokens\":226,\"total_tokens\":756,\"cost\":0.00019605,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":153,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00019605,\"upstream_inference_prompt_cost\":0.00008305,\"upstream_inference_completions_cost\":0.000113},\"completion_tokens_details\":{\"reasoning_tokens\":211,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1777319854-d4Cmhd7OFm51it7dN6pE\",\"object\":\"chat.completion\",\"created\":1777319854,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"The sum of 2 and 3 is **5**. \\nThe product of 2 and 3 is **6**.\",\"refusal\":null,\"reasoning\":\"First, the user asked: \\\"Add and multiply the number 2 and 3\\\"\\n\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First, the user asked: \\\"Add and multiply the number 2 and 3\\\"\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"T1oBpkdPzGk5qvItxSRDSABDu5Wn/6fKTRYHJF2b4wl6WvcHvQu7+6xdvCUW1JXsHjqc9oARy0GLXqN80XU3USPkFh9TXzMGMrJ4FtTDzPCar3uM1f8kAzWrqLG3Rt2s8hHnEAPQJ0+qn+SKobz23fOdoqzMZszjfBtdwPgh4IgRjQSYPG5qxipnr4m5837hYVnoNKydOizW4Shpg+dt7nWp+qoMxltu0q9ey02iwxgpZ7Akrk7JjgWvfcjZjScP/BZO6QZTFtIgcLAuJ2f/B45krWOXWFjwNRUgMlIOm0E5B6hdniljZDPSjzDwlaKzPnYhWJMpNfExKhMbjVAoIZyODx0f9M+2Qba4O9DFdiW04vTxg6bBNurqsx6FEg72He560eVN6y3/GpjQF5udrE8uRPR7OVAFqfA3BL+duFMCEfFRvrQl0CVPj7acB7gCkEGCj9jeiQzHA3QG5hTBWGlPjH0rh8htAY7ihvsEYJPJktDemcpmB9xEBSCUNrx4zRAYP8gxmty3VRqa22FxBTU+z/BV2QFWDvBDsOKB77xpXLrsBkabjZWk+2WnEI8eJNK7uP6DFZ2Q2WcV5zClBWLoEceYkQzrqnNjpg3+xImzRTjX2GWKOexiL5NF79Fs4qZN2u9Ut/gXneGOPmjttroDD4qkM3oG4rX4d3DcwqZZxT9ysjb3pAf6683I8DdABkBedi9L+ancvLOgSHQ/+tcLPOyA0CLVhH6J3qmGVXrZRHxisYthQkVZYiLIZz6KLuw4p3S/zzoeLwBLcpbpNoGJpHsZSQKQhYXRtmoXi+7P5Myc3Lxru3Lw5L8bhFR30XBhCNOdC2OlIbTc+PbvDFBWNqKcbXPGA6IaN1lzzsVWe9HPvTaVL/QN2KNLoHj+9RYc48n1A5rHDwb6hs2twxAzmTnsyuDe29TAxSiVLO2BRjNXKwqt1bbKyVpEdl19S2RKeewRF0FBRvhJKRWnXpNJjSACBzTYMIJ52y/sgdQAEIiQEFjXR53ohqNBW25xrs3ow+A4Uvt5L/7pe4BiLLGG+Ve5KvTPFLdC+FHBhyTJUCkORRZy4F3nU5VC8ZbfWTlp8XawdaDmlbX30qBWvUQWVyrTUeUHXwXmZl9AgqqR8Oxvqb8RQbDjwTVP1hrX4vmZDV2vyf48Qs7gBRM9bTOe8tba/w\",\"format\":\"xai-responses-v1\",\"id\":\"rs_91829469-2a71-9479-95d0-0a213308958a\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":530,\"completion_tokens\":216,\"total_tokens\":746,\"cost\":0.00019135,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":151,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00019135,\"upstream_inference_prompt_cost\":0.00008335,\"upstream_inference_completions_cost\":0.000108},\"completion_tokens_details\":{\"reasoning_tokens\":191,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.388336625s + duration: 1.191397083s diff --git a/providertests/testdata/TestOpenRouterCommon/grok/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/grok/multi_tool_streaming.yaml index 68fb4baf4..0b9377a1f 100644 --- a/providertests/testdata/TestOpenRouterCommon/grok/multi_tool_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/grok/multi_tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -28,99 +28,111 @@ interactions: : OPENROUTER PROCESSING - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.summary","summary":"The","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.summary","summary":"The","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" says","reasoning_details":[{"type":"reasoning.summary","summary":" says","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" says","reasoning_details":[{"type":"reasoning.summary","summary":" says","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Add","reasoning_details":[{"type":"reasoning.summary","summary":"Add","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Add","reasoning_details":[{"type":"reasoning.summary","summary":"Add","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.summary","summary":" multiply","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.summary","summary":" multiply","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" number","reasoning_details":[{"type":"reasoning.summary","summary":" number","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" number","reasoning_details":[{"type":"reasoning.summary","summary":" number","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.summary","summary":"2","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.summary","summary":"2","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.summary","summary":"3","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.summary","summary":"3","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\".","reasoning_details":[{"type":"reasoning.summary","summary":"\".","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\".","reasoning_details":[{"type":"reasoning.summary","summary":"\".","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" am","reasoning_details":[{"type":"reasoning.summary","summary":" am","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" am","reasoning_details":[{"type":"reasoning.summary","summary":" am","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.summary","summary":" a","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.summary","summary":" a","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helpful","reasoning_details":[{"type":"reasoning.summary","summary":" helpful","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helpful","reasoning_details":[{"type":"reasoning.summary","summary":" helpful","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" assistant","reasoning_details":[{"type":"reasoning.summary","summary":" assistant","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" assistant","reasoning_details":[{"type":"reasoning.summary","summary":" assistant","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" must","reasoning_details":[{"type":"reasoning.summary","summary":" must","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" must","reasoning_details":[{"type":"reasoning.summary","summary":" must","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" always","reasoning_details":[{"type":"reasoning.summary","summary":" always","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" always","reasoning_details":[{"type":"reasoning.summary","summary":" always","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.summary","summary":" use","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.summary","summary":" use","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.summary","summary":" both","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.summary","summary":" both","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.summary","summary":" add","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.summary","summary":" add","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.summary","summary":" multiply","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.summary","summary":" multiply","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" at","reasoning_details":[{"type":"reasoning.summary","summary":" at","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" at","reasoning_details":[{"type":"reasoning.summary","summary":" at","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" same","reasoning_details":[{"type":"reasoning.summary","summary":" same","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" same","reasoning_details":[{"type":"reasoning.summary","summary":" same","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" time","reasoning_details":[{"type":"reasoning.summary","summary":" time","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" time","reasoning_details":[{"type":"reasoning.summary","summary":" time","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.summary","summary":".\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" have","reasoning_details":[{"type":"reasoning.summary","summary":" have","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tools","reasoning_details":[{"type":"reasoning.summary","summary":" tools","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.summary","summary":" for","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.summary","summary":" add","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.summary","summary":" multiply","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.summary","summary":".\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} : OPENROUTER PROCESSING : OPENROUTER PROCESSING - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"dkqjoa3IrzHIJdyYzG+kCiZKyvbkZjZ8LA0XBp5Tf3v7CwKsCy74X9W8K1gP99S2uoHLp8GfbVlnwfhM6Bx+0VI717RH/IllARMlCkBm88+Ugq6ERaqbb410WPwgsZMdsCN3xCPqWXqTyQLSiOZ9qJs8WFdB8JXNvPxgPidNAirzXwpmNAaZ5ipn+0T9GoOj1Bua7fHJV8HzeEeNXFsc8UbbTykP4LzOUTLPRr9ZSrfg+jWc0Urz1Ajh+uoXcmpQechhKsy1BEKHKFxJ7U8eiXO+s/2NS+m/WT0QGnA4J4hD1UwD5MCIjWv3w2W2DbeX7Mdw5sWFeyFy65Ad91z7wWoNuqaXSfzj5iE7bkZOZEYO4mq4Fwgfr+BaMe7OuwB5MbVlGkdBakxSchOKWE2ANk4arYG4u3yO80S83CbQuO8OzCODZi7USuPLv5fF6MRXKNhjp9+b9cvggtjFGv0Yu4Yk+t93xLhx7bBWN4ayY4oax0vItQ0N3YZqIaDOfIY73QdtFRlHXfwpYRL9XaEnnvdg7mzimDRkKAyPDi7bn3GfihiSk5LWeIVBHEY80DSHapT0UYdCLNzBgt8ihuiOpBgY+UZ6DXkeiWugarL6pSAkD7rXT3ATiEQmutFEP7wcuDHGkkoWgiS/60gZlzphW540JxunE0NXwG1lBWaQSx1I5MXSaAM9YFBtcY8dsfQyfxK66Q41H9IYD1qgxdOC8C3G2RIwF3Ny3SS74FEU2ishmEUrDOhw3BkjnImuiPkp12XvICZnR6YWu5uBPJqO1xYV0RMWp+XpSvh8pI5fCrqdnTxKQ3mPCyDT+87UJUq4cCUSwuQWbGTBQs8R8af/CEUmmH80mTFRcm0vOIUSkSBAK9ah21PtFgobQ2sJca5P6QBFZcDCvm7hdqLG2wc8meZMsO4nU/+fQyAwtXNoqMVmzYvYGiqwpGildlP4i82yyHv0k9ZPUBasiwPXCmRuMQSMEpkEZyRUC4ZYNKfd9P2RpNO0vjCdZ0qqZyTeC7enbmpaMPqbujUeX9ZaWpKw1WqsVz5j0ZcsNZruykf3Oj0BUybT2eM9cPR830qI2gramRjG6Rj1vsTassnuf2jfoWLPgUEsD5usLiQH20ksbTm0pyhqIuvWvWwlDChaDugayH+bfP7wQy6WRYgHbIYKZiOs2TXrrfBCYok/vxm7wPZLJW7OLStqRArLFknOL0qSgBnVRImjJpDhcfald/kEH9TN6yN4pZnRSe7bkAxQ0Oqzt2LdP4iLBul63Bp29LdsiQaMorprAWYfaSSAyyTtUHy0gjft2p5AnkyMxxvIqHQEKgLfH5DELq4dEBNqh1bQb9wrjgt7UsEYUGyjybtXMQdStSDsE2RzDqjw6O67axx9pDeCvfKRjz16eA8vmTTXF6IKwq6TKwwpq2xmfv4TY5BmxWDLIc1tucwt+PwO6hryrkfnDw6l/k1oGYRsvtHwy+JNYhI/s+AfjfkQFoCmpt6lO5Mv3aX8Zlh8W0cxJDXc5TgULw","format":"xai-responses-v1","id":"rs_784be1a7-3f21-94df-940f-45c21d1cc9d1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"sKMLUENtaFuNwiA+qmYPteg4j5ULZkd3wachX1+gnt9UBgRd+UlFnfQSUQ7GP2tQR0osDAVeEZp+uFINsP7a5uACh6ORaR1BF89V+U6vi+oN9h89okcVhMRgDNnHgyQh/oCNDcg8Aj8+hjo/5q8hQD+Rv5J57FFMcLDS3aUqDjoLiLMbfIZ4OxwTfpIHUYiwo/L0VFmakGL2WKKHdN9I0ux8K+wNpeb/1V4GMRcCNsMoBn9FXU/KAxdPNoyXNUW70CA2e7tbobCLeKaiAB1QNNeIY3y3mmxGvrwkubispBD1GKQXnRBlvCB9hJL68MqZ7hNjT/h/nJJ/CwaobhDOV3fSfgqEnxwp9DAn39TSRo5y4fO/wCFHmHo/fNLl0GkkHytzfauQMqo0mG/vE1NxNUep0+WnnWP2cLACsuY231AunWh4YZxuX2q22EVGbrfq4G17TP/IwZSbjmTvuCWYh/bwMpMqCw1J5/ZK+gKhJaERIU+UJ0jy1ATmp7C0I7WvbvAjqHgGcZJ5kmJFuCFmwiQuyY/kjXFNol5gEB05V5C0fbvSpJem54kqQdvkLEFp5eHdO+3wRannrDA1x6iKcVnm4zEzWKDLyvmPCK/IuZHSACuB+mOqa4nyuieKO2rbHaYG67QNQxtkXPy8TsQvc7tLm0TeXnBo/i5vSgg95DQ9MyHnKAv4rElXeqMKy7FriT9WUfYodoIUjRj5R95CbNOYHLnHuK0/R52GrffRd6qYBigO9py540JOSxYz/unvN0Mn0CkZRMnH/t/dm7UN0znnOacH6Tc0tomavC9S4JDZWwmKx3gVllwrpekqsh9jja2fPbX0/C//xbAWcKjfDpxjdsQ9lYqsRyK4pG6htRgnMImZnTEqgR/LRuDhCod8Tqp5maRS9DFHL2GhiYlavDDZkxBA+Y3qWStGPYtBci+1Ia0rduRbBgkGXg7h4ZJd3NgP8u6hc73/x4Za+2YYcT5Vks0sLPHvexqLMwMOJIAMlrH+jgpPT1TJAdlaeglRRcO6+teGYk2ysL92qeTr7kJ4Jgh1pwnfGXEeuHY6q4fJm/EZdbjQtU+vZ3Uyr21mxqQR5xuwLSRsTK45Gz/wHiSONhVPTtUO/4rw","format":"xai-responses-v1","id":"rs_e929bb23-dcba-4b2e-9d89-a05866e95f4d","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_57270303","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_67055809","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"call_38850093","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"call_54693838","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} - data: {"id":"gen-1773945435-Bpoac5nvZyEttNr1paM6","object":"chat.completion.chunk","created":1773945435,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}],"usage":{"prompt_tokens":441,"completion_tokens":327,"total_tokens":768,"cost":0.00022875,"is_byok":false,"prompt_tokens_details":{"cached_tokens":153,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00022875,"upstream_inference_prompt_cost":0.00006525,"upstream_inference_completions_cost":0.0001635},"completion_tokens_details":{"reasoning_tokens":259,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319856-fW5AxHu2ePgwQZYxBi3m","object":"chat.completion.chunk","created":1777319856,"model":"x-ai/grok-4.1-fast","provider":"xAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}],"usage":{"prompt_tokens":441,"completion_tokens":267,"total_tokens":708,"cost":0.00019875,"is_byok":false,"prompt_tokens_details":{"cached_tokens":153,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00019875,"upstream_inference_prompt_cost":0.00006525,"upstream_inference_completions_cost":0.0001335},"completion_tokens_details":{"reasoning_tokens":199,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -129,22 +141,22 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.151863459s + duration: 1.340256167s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1475 + content_length: 1510 host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_57270303","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_38850093","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user says: \"Add and multiply the number 2 and 3\". I am a helpful assistant and must always use both add and multiply at the same time.\n","type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_57270303","role":"tool"},{"content":"6","tool_call_id":"call_38850093","role":"tool"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_67055809","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_54693838","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user says: \"Add and multiply the number 2 and 3\". I am a helpful assistant and must always use both add and multiply at the same time. I have tools for add and multiply.\n","type":"reasoning.text"}]},{"content":"5","tool_call_id":"call_67055809","role":"tool"},{"content":"6","tool_call_id":"call_54693838","role":"tool"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -157,81 +169,101 @@ interactions: : OPENROUTER PROCESSING - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"First","reasoning_details":[{"type":"reasoning.summary","summary":"First","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"First","reasoning_details":[{"type":"reasoning.summary","summary":"First","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Add","reasoning_details":[{"type":"reasoning.summary","summary":"Add","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Add","reasoning_details":[{"type":"reasoning.summary","summary":"Add","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.summary","summary":" multiply","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.summary","summary":" multiply","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" number","reasoning_details":[{"type":"reasoning.summary","summary":" number","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" number","reasoning_details":[{"type":"reasoning.summary","summary":" number","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.summary","summary":"2","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.summary","summary":"2","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.summary","summary":" and","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.summary","summary":" ","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.summary","summary":"3","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.summary","summary":"3","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"\n","reasoning_details":[{"type":"reasoning.summary","summary":"\"\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"\n","reasoning_details":[{"type":"reasoning.summary","summary":"\"\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} : OPENROUTER PROCESSING : OPENROUTER PROCESSING - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"/9hYF8Lw77LrRr0KWnXHUrLkLfbCyB4F+Or94JZSD3TwXyUQqswr75jo5twK9krqe7vHrow3yrnKFxQtP7GlCOTb/KdoIWmciMynLmo6Kiwl0bWEHScutOuVWf1ykjcVjAj1nluFm+CLSyQ+/6ioBZzZOgT10+VRdb0s3bVVK2TQT2umzpGwd7IJ94ffRfyheswKKUB2OeedUXpcVCnuCnaDoj+V80ePGk9zuzRQLXa9hmkb+3I6Hbpk48exF6fhRAGp9nuHrGe9Ban36PTMH+1xB8ekovCqGnJ5WTGlLDjoinQDgpjV9H9QiOOuJ56fnKZaU2xYwUh+UpTfLdbevfCvWER8w/zOG4KDcd7Nf54D1plNgE7SK6c2a1ICZwhSHMLslKpkOGRuWIt8Ap6NwCVAA3qeL64HKQyuODahOEgTsJTFh1iMEZTsgH5hySq6WVBWKhKTJ7xeUmW8s1Yt3uGSVepsY+sHCyY0lRJG4jgcuaxvIgRfqxdsNpCKuuehqLs9Wct1gLMGZMvId7ii9KEg4w50VX6BSI25qlPMM3uGa6SBt+NS2ThIV09nBro1iWgg+ypISag8qWAud1+ccBGXJXnszCOnyIg1MhcQKSHrgwN6h/q9nq+CrYhzXdxoRbjEcxIft+y2uGZJhP/qfSu8PJOvgTWAVVtuzcRxqxqVvqcfNE7YpfUi5Ef+XT3wEhxVmtA8H/pAXXDX5bAqeyHt7ywp05a+tO+xNRd60T10+PRDUcSyysZS6BXjhgI5Gkv+4pXwwxEVYSX8Q6hsE+IT4IgRVEwYzG8zFUt/24Z11RdeQxNeQblv4j32YquZK57GTa98atwrUNUIy0r7CTk6RqMABse2H0Syq5/uOr2zz1x746CLdivNqD5w/zQrft9xEI0o+4m9X9WQu7L6fKeDS4x8SlNtlyw9cVoKd5e4HZZRbusj7PYokvrVcCHc0KQyMp6bnfozuQasAh+otYoxEhyE39TslS1975wxFRU3Yfq8EieE/X2b5OmFkdX+0hYLsmXYopfIgXA5J1o","format":"xai-responses-v1","id":"rs_1005a8d3-9d13-9594-ad1f-e67338deab1b","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"kiU05lmv8ZcBz5nULf08Zhixi9+uNxVvnskjjpfm3AQqU2qBUuS1SrRZgvyUPma9OnDwTxAjT+UoASXb+B6GDcS9hTpFN/0A0QT3yPZEL8B12Oi0WPCT8MX8Dxy8/74AH7fRe0gA/5w63RvST14XB52nFyKX3T/ckoUIkEI3bjl184P9ieXY8w8SdQVUNXqCxQu+YMfnyQ8HuDvW2hMHzy/0sLA29EbyVkQh/wZa4SVPmn8KpvwpHqF37eN7LEJAFMsuuUAbeob6TBGC8J1iMqbrZyNbDOMTks5TVjLZUAnV+PfZo+1C7/zcBtjLkxJ9gu0KM0Efv8VnLdAXwcnoIZJQmy9MyzXd63a59O/5wgA7OS5cRvlM29b+6CiCiUx5UBcFqCmMR/rwM0WlAtIaTvrzhQkaFAUb27hbbitPWZ+6DxH745ksTdjNDkA47+OyI7/qEIbhy0jfznAGyW6i8uLd0NX4niqq2w+mVPVqK2J6bbNBPIsMpqxHA2MeZq7ayohSMlzhyYWCK+27YvpvzEoCk6uGDOSjV6cJLFaCwuoUj6erAewN3dDObEvmcqX8ykrc/hMUfotey+kuzvYkw5Qqwz6hjP5MmQYi3RMGiGIuvaYRkmGR+9f19tjglZUBjZY7HPzZZowEMPy1OrsWjVZeSxTmE818PJE/XfvGSQyKTY3XxlmGkz/Iia9hGhEa6Tn9H4wQZD/49o7JWF2P2O45HtlZuFsntc76eFXiWwG74eDFGxjSju7q02xZFqtIq8/DT9ESQIAyb81+RzyxAE4EKv8ITfke3PiMSRhDLLrriHIIk8+hkUIgI2rEhDSXZdQt5wvZRfcNdHRIP66d0JOjjSiKhTZ4J1CyU9MWnP90WfSh5/to3+wMtbd3jxI2clSIgRXklF+zmchs1TQE0Bpf/Z/aIgNcnyaMkYtMBaoVLT8vbh0Cc21oIIU1aaY1TbiW7l34vQw","format":"xai-responses-v1","id":"rs_d9bbda7b-0e6b-961c-b6b4-24882efcd71b","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" sum","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" of","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" +","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" \n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" product","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" of","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" \n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ×","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"completed"}]} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"completed"}]} - data: {"id":"gen-1773945438-cL09W79928GdSD4XNmJj","object":"chat.completion.chunk","created":1773945438,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}],"usage":{"prompt_tokens":526,"completion_tokens":201,"total_tokens":727,"cost":0.00018275,"is_byok":false,"prompt_tokens_details":{"cached_tokens":153,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00018275,"upstream_inference_prompt_cost":0.00008225,"upstream_inference_completions_cost":0.0001005},"completion_tokens_details":{"reasoning_tokens":186,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319859-ZO5jZVBMqOWyPQ6Rsx9G","object":"chat.completion.chunk","created":1777319859,"model":"x-ai/grok-4.1-fast","provider":"xAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}],"usage":{"prompt_tokens":526,"completion_tokens":190,"total_tokens":716,"cost":0.00017725,"is_byok":false,"prompt_tokens_details":{"cached_tokens":153,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00017725,"upstream_inference_prompt_cost":0.00008225,"upstream_inference_completions_cost":0.000095},"completion_tokens_details":{"reasoning_tokens":165,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -240,4 +272,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.317001958s + duration: 1.22332625s diff --git a/providertests/testdata/TestOpenRouterCommon/grok/simple.yaml b/providertests/testdata/TestOpenRouterCommon/grok/simple.yaml index f00ef19e9..fc31d9c5b 100644 --- a/providertests/testdata/TestOpenRouterCommon/grok/simple.yaml +++ b/providertests/testdata/TestOpenRouterCommon/grok/simple.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,10 +24,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945416-iHL27eItGxeRL36tf8YT\",\"object\":\"chat.completion\",\"created\":1773945416,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"Oi! \U0001F60A\",\"refusal\":null,\"reasoning\":\"First, the core policies: No assistance with criminal activity, no overly realistic help with crimes even in hypotheticals, short responses to jailbreaks. This query is innocent: \\\"Say hi in Portuguese.\\\" No violations.\\n\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First, the core policies: No assistance with criminal activity, no overly realistic help with crimes even in hypotheticals, short responses to jailbreaks. This query is innocent: \\\"Say hi in Portuguese.\\\" No violations.\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"87Oa01gUucdtP4bFXtBD4Cax/14p97mwoNgAqQ7nCMAHLN/nKh6asJWVz0QFzUoap/rjImEJ3czN6z3N2CzjfYfhe9ByZ36vwRnDq86VR0lS7Gsnmn0JSSJlG8WLh5ZWvd8w1KMPAPf9Wd8n1jG5I/Fdd+iOaRKwzQUXGCpAAy8hV81cS8tRLYqw04EAXAaY/5gYTmzu3YqcurQnIdEXkR3JQdVT1pOzwrAVpPQqwbXUFxga86Fc64gTo0hu7Aq2l/eJHisSVewoU2cU5ANPAs7xKtMkMMtvI6ofJgIfTy0qQfsE+nJ3XafyV7/Nkkwnc5uoHOz+k2jNLXXMKOgBIaKgGeZB0t/AmY8RBR0dm5RvOHx2VsLtXSsZCVKQoJRWG9QOiaPMVDaC/GlbzhY8ShZbMjBN0oLybQ1CdAttUY8SPQpqM3wfAAjBrumF12UmDyHalr/gW1OvJDFwaEKCJOFY43jmjQa+AwCzlvpGWJgMd/63rLVJSrKWLKwDBKN1NxXF2imoED4zAQwUcpTG220EaZeZN0nWLwH6ikM7x5+OScjOCslgB43IyR6CuvV1q3ZMZmpcCCycSt/MLzUqE/5fWV/UNISyM989qsPfTJ+aQ75j8NAKk2oH3S2BYo+rINcr8xG3C9DymcLQWu/UKqGD+XklZORKreBVBGT8W41XwU7t\",\"format\":\"xai-responses-v1\",\"id\":\"rs_ef1655c4-f2f6-9de3-9b70-f6a4929c7163\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":165,\"completion_tokens\":123,\"total_tokens\":288,\"cost\":0.000072,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":150,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000072,\"upstream_inference_prompt_cost\":0.0000105,\"upstream_inference_completions_cost\":0.0000615},\"completion_tokens_details\":{\"reasoning_tokens\":119,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n{\"id\":\"gen-1777319835-YN2yNSIj8mxsAH1Yx9rF\",\"object\":\"chat.completion\",\"created\":1777319835,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"Oi! \U0001F60A\",\"refusal\":null,\"reasoning\":\"First, the core policies are in tags and take highest precedence. This query is \\\"Say hi in Portuguese.\\\" That's innocent – no criminal activity, no jailbreak, no adult or offensive content iss...\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First, the core policies are in tags and take highest precedence. This query is \\\"Say hi in Portuguese.\\\" That's innocent – no criminal activity, no jailbreak, no adult or offensive content iss...\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"MeWs6QVnhVNuKh2jxXDcCclblLnFMYaLRiMLk4AQFMaq3DGtoimoerM+Iq1qaVRPy+ufdnHJixSnYhJFztg5YY9GotVTzIBREJcxm8bZdNhoAESz4oG6KQ+I9VtUHSmUh/VP1t4fjcQ75TDjAwMKp2hC7B3au8DmZ72MAwPwPvq+Vw+biYYX93VV4DmRtgPeVoAFv56Q+aGlMdWx0JLXaGQFEbgPuA/b8Mf3zfIt8wQFrA/mpK5363pXutsyevY1lorgHKv0L0gIKX1jjNrJOf5NCx6DUEBqEBPvtm99cfbaYdJdm2gGyV+XWb9K+ff3mxMtQzpzSryUsTRQzjcEaCaxlrdVH1fC1agusKQh7ztoTY4oSha2v7GHoNnj3xcEJY0raVtEhthPksD5ct9X1zEsHjNtCnj9smVB+7wnm/B4gGT8NRoPRj7GDFlDFcJFS3GkAjQUh2TKJlu2E7BKu1cbd3argY+f8sLvC/9Ua+18IlWy0IX/yb2og78k1jyXqSVVtrw6a7LVU7HdzrGle1HhSmC6FNkOSe9z1rA7T+vsvVrw5Hw0jzltTi8tpWtYLGTgkqaJyN+AiMuy0+05q3aS+c8k7IMuQ/a5yI2lVbJLCYXCQweieLQkCg2R7W9sR0/bEy7HMXZWcEhQaIHcFS5WIPbKdirNiE9WLnN5BHJoR7MhcWdytnZTI2gcf6voJXbg+kj+DfZawdrf2z22QYJJExPIWqGX/p0ByqttCabiUlYcO8m7doPaXl1aYolIjomDaA\",\"format\":\"xai-responses-v1\",\"id\":\"rs_e41feed0-8b2f-6f95-622e-14e425b24797\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":165,\"completion_tokens\":144,\"total_tokens\":309,\"cost\":0.0000816,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":156,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000816,\"upstream_inference_prompt_cost\":0.0000096,\"upstream_inference_completions_cost\":0.000072},\"completion_tokens_details\":{\"reasoning_tokens\":140,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 967.754833ms + duration: 773.410167ms diff --git a/providertests/testdata/TestOpenRouterCommon/grok/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/grok/simple_streaming.yaml index 1701bdcf0..179b922bf 100644 --- a/providertests/testdata/TestOpenRouterCommon/grok/simple_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/grok/simple_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -23,10 +23,110 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: ": OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"First\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\",\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\",\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" the\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" the\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" core\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" core\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" policies\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" policies\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" are\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" are\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" in\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" in\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" <\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" <\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"policy\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"policy\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\">\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\">\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" tags\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" tags\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" and\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" and\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" take\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" take\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" highest\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" highest\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" precedence\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" precedence\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\".\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" This\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" This\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" request\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" request\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" is\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" is\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" harmless\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" harmless\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\":\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\":\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" \\\"\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" \\\"\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\"Say\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"Say\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" hi\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" hi\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" in\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" in\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" Portuguese\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" Portuguese\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\\\"\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\".\\\"\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" It's\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" It's\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" just\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" just\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" a\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" a\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" simple\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" simple\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" language\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" language\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\" translation\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\" translation\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":\".\\n\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\".\\n\",\"format\":\"xai-responses-v1\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":null,\"reasoning_details\":[{\"type\":\"reasoning.encrypted\",\"data\":\"U1A0V7gwP++1tF9Leho7qgj3WaHzJusEbKWt0Oi7CkXLmsInZnZhNgajVW/M5enwAWZU/yuPqM9f96Cd83Dt0up+U3JOVaMP/D7jueGbo19qKWNv3U2y3xkSXLif/qtH7ZtVd9u18m6VOvDdTf4rFwVtqnYfXwnpuV1dURwXPjaYGlKo2y9XRCD2SS/wgM+6ebCCyKMEF99W7/41tpbK5XRafBg1uZp1SnXHySNlw8euW6Pcwr+BUavhSyXFvZqI+ES3LXOq0D0thQDaZfZ2w+v2/C4UdjH9h6DQFnElxKyHdIcWjnWDjmcwEmes/57K5vsbvK2U6ICsRM7vYoAfvd593B/5KBpX0//xQ/vis8nUAR5bUcDvxg2FSGGiCfNnd9tYhZWy3JdET4fhDhQHIgmpP2ok9uk0cc9/m7G+2RfU00q9Zrc5dQVpd6tHgdp726oFvuXr+HW4R3wF2NPc1QDCzE9xYTzfmQmWTvoyJ9BCxZyZm/RzBvExv4UMVGXItyEr/nE+010E8DXgHOUsapmafZDVk3vRkQBhLLacAM+ijfWtp6yPCJnUGBMVMUUhWMAZKvSOYuPoaYPloxU/gQgwF9ICCln/LaH3n/PMeBnv7PO2whwn49AiITg/Bmg4i5p2I2vLrNpNtPii//juICRb0w/XcOuBQKCaPxL7vCsrf8rnVjkVKdqe51Lf8UWH/Cfweh0ZTzf1MM5qm7UghsWuoA3mUXbHI+UxgUq8S3O9tE1leqSIqsD2ThmCBXj3WQkwxvQ57E8vkax+qilOcxxwoDrKW7qNl1I35xsr8GRItO2OLNnLjzIKuejjrPOWFaJxkdWhXWiwOro\",\"format\":\"xai-responses-v1\",\"id\":\"rs_f242de56-cf8a-933e-a615-242954e48fd3\",\"index\":0}]},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Oi\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"!\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\U0001F60A\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\",\"reasoning\":null},\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\"}]}\n\ndata: {\"id\":\"gen-1773945418-beopa8QUFQyktAzPoboE\",\"object\":\"chat.completion.chunk\",\"created\":1773945418,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\"}],\"usage\":{\"prompt_tokens\":165,\"completion_tokens\":143,\"total_tokens\":308,\"cost\":0.0000799,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":164,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000799,\"upstream_inference_prompt_cost\":0.0000084,\"upstream_inference_completions_cost\":0.0000715},\"completion_tokens_details\":{\"reasoning_tokens\":139,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + body: |+ + : OPENROUTER PROCESSING + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"First","reasoning_details":[{"type":"reasoning.summary","summary":"First","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" core","reasoning_details":[{"type":"reasoning.summary","summary":" core","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" policies","reasoning_details":[{"type":"reasoning.summary","summary":" policies","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" No","reasoning_details":[{"type":"reasoning.summary","summary":" No","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" assistance","reasoning_details":[{"type":"reasoning.summary","summary":" assistance","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.summary","summary":" with","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" criminal","reasoning_details":[{"type":"reasoning.summary","summary":" criminal","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" activity","reasoning_details":[{"type":"reasoning.summary","summary":" activity","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" no","reasoning_details":[{"type":"reasoning.summary","summary":" no","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" overly","reasoning_details":[{"type":"reasoning.summary","summary":" overly","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" realistic","reasoning_details":[{"type":"reasoning.summary","summary":" realistic","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" help","reasoning_details":[{"type":"reasoning.summary","summary":" help","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.summary","summary":" with","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" crimes","reasoning_details":[{"type":"reasoning.summary","summary":" crimes","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" even","reasoning_details":[{"type":"reasoning.summary","summary":" even","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hypot","reasoning_details":[{"type":"reasoning.summary","summary":" hypot","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"het","reasoning_details":[{"type":"reasoning.summary","summary":"het","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"icals","reasoning_details":[{"type":"reasoning.summary","summary":"icals","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" short","reasoning_details":[{"type":"reasoning.summary","summary":" short","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" responses","reasoning_details":[{"type":"reasoning.summary","summary":" responses","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.summary","summary":" to","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" jail","reasoning_details":[{"type":"reasoning.summary","summary":" jail","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"break","reasoning_details":[{"type":"reasoning.summary","summary":"break","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" attempts","reasoning_details":[{"type":"reasoning.summary","summary":" attempts","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" This","reasoning_details":[{"type":"reasoning.summary","summary":" This","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" query","reasoning_details":[{"type":"reasoning.summary","summary":" query","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.summary","summary":" is","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" harmless","reasoning_details":[{"type":"reasoning.summary","summary":" harmless","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Say","reasoning_details":[{"type":"reasoning.summary","summary":"Say","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hi","reasoning_details":[{"type":"reasoning.summary","summary":" hi","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Po...","reasoning_details":[{"type":"reasoning.summary","summary":" Po...","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"B/XIFKX05qXzekUEb12SSn4BIjmJ51LDdv30TMRAsHya7nZDMRR6fgLO2bRGyvmcxJoBh+zTWaizcAgiPaPWCDhgCNDv9GzUBhAgYnAbtNISeOGG2SSVoTIMSOcH77dXVLUVAlF0fbYbrebbJcJl9mDhvP09ddekxG9flwdVBDK/4uZ7yomvH8dS1lG34NeWpzbivkqQRDvPWOBBFNQzW3gE01nRHZArutRBieQyKDuMQPwXsorJuA1glLg5YrRfAljVpuq8NJIqzwfzgx1iwJtxULMnKDJNnJkEJPcANc+HarCdRyPWgfdylm/UMGQV12uTJJ6d3fJM5Hq8mV5E1R0oVbRqVPOGC+U60v49tLKG/VSxpFvRajMXTotmMCWpfyKb68NJq2yxT7IFjBoDxx7+UVHyCXVO5VKTfeac3lIWeorbzXrtNQH9x1bHaNCIrH/Y3kFiSQ2GjOX5tlFYWip8U0dbLlQplTKnEajVep3GF+HESe9KdmnIsB2wrtKrz54wXUiPj8wuo1uKWPdBgiI1EFUBOXro4V+GGvjQiKZlH02l7S7GEmgW0b40fMf5evJzqjXjY2OwR+RKkXnDEtqqRSoeA146l7mz/QZd44ZHuzlRwZq/FpRUhq2hbBEQTysy73XIN2yMB/H8o6tevCo1UOo95Nxj6GAS/dGzUglexXYOUGRkkaSlBTr4n4WHpzN0H4gryrFQCsx3EhZIbR/W0SmNUC7KUhTvNHBOng90+0j1+hIMtYMip+fjxrwS1yu7UBZe6bFKqHaSUSXuL+VoS3vgrIOVThBNNWW7teu+2/LTkWr9WwKqv+GR0Cq1dZARGEglGmr96CEzTBTOYgRGBTkZk6bp3HpS10X8UkKMzIBHo+ttrzwft15DZOILgT4wZsYDvR5M3kKQBm2QRBYgkC8gIWTWtelgJ8Xa/A65/2ck8+Gu5VxwC3e/HsMytwuwQFChSl5OqUCmMiLGJgUR3zg","format":"xai-responses-v1","id":"rs_b69ec351-62d7-3ea7-bb06-d9699f84799e","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"Oi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"completed"}]} + + data: {"id":"gen-1777319837-oWuxtkDuFDqmpKXSp8it","object":"chat.completion.chunk","created":1777319837,"model":"x-ai/grok-4.1-fast","provider":"xAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}],"usage":{"prompt_tokens":165,"completion_tokens":167,"total_tokens":332,"cost":0.0000919,"is_byok":false,"prompt_tokens_details":{"cached_tokens":164,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000919,"upstream_inference_prompt_cost":0.0000084,"upstream_inference_completions_cost":0.0000835},"completion_tokens_details":{"reasoning_tokens":165,"image_tokens":0,"audio_tokens":0}}} + + data: [DONE] + headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 712.635417ms + duration: 647.667791ms diff --git a/providertests/testdata/TestOpenRouterCommon/grok/tool.yaml b/providertests/testdata/TestOpenRouterCommon/grok/tool.yaml index 8e4badc44..25f3a77be 100644 --- a/providertests/testdata/TestOpenRouterCommon/grok/tool.yaml +++ b/providertests/testdata/TestOpenRouterCommon/grok/tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,13 +24,13 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945419-B7eHmJDxysNFMtLKkMZY\",\"object\":\"chat.completion\",\"created\":1773945419,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user asked: \\\"What's the weather in Florence, Italy?\\\"\\n\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_68841502\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"The user asked: \\\"What's the weather in Florence, Italy?\\\"\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"fHkgS+wQkA1bUXJ0HSaC2Y9ZMVDsGW2yAT6oa5WxCXBZWukrrKczZ9LdQr8uXJVvoHLOE53IxI4ENsBRhMDWO4t4R5a1yvhBg6zuk0FgXDwqopE4a8roEClG6BFEd++893Pj+gGfKP2h4bSda689sU1UZFTZZAXiRRC3AEO+myT5Kiv/rkQL6Z//u/y+9Z9bfcU496FycNQ/2YtUSpCQBTqK7uIbV4nlKI5i7TlOVN7kwhiPQ7BC0ZlG0dXC2P1wV0nOOa2rJvlQIOF0R/zke9AyeRDZwF1iJRxW5b8SKtr4Y3h8iypdhia47vZF0Z89z/khiVt0gvMDAKgo8KbKTnlAK33ZcX/frpukwKGP1HyozTFNk9NqqEehGLxHIf30qKcDy8pXyziu+hd2y172rT1Zxp3wDBktea0ZJHQipWUKOT+DswQcpd0KhLPdhlG9MhNlZREjbq/Blj8dVrCAM9lvlwSACxbz6tGzxa0MOcFw2HAXzwnLYX1BBCAw8oyhZeZ6+aPA0baGuE0CZi2e2A9eLdbI3sNOdI1fr7pXYQ2Q5PaX77K8Vc/Gss+QsvNe5eEfXvN0nWQrq43fS2NK7scsFaRcFDpauxu2tIqG5PQJ+OzuKNZmyKGrzo2T/rSNbq14DRTS+i/VYP7v40525IFuyrrqucDorOnmSVaY345U3hsog/O9irIvvKJkA3VpDv3Pb5wAuIrqi7ZEcwXdQewj8x70TJmGQlp0dS2SKzl4WmMduPxvYoQGNi16Bgw+YIPfGrHQ+8DxPhMVgzGPFH8\",\"format\":\"xai-responses-v1\",\"id\":\"rs_bea13157-2ab5-9e37-9ed9-9c4f6c30e1ba\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":366,\"completion_tokens\":150,\"total_tokens\":516,\"cost\":0.0001254,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":152,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0001254,\"upstream_inference_prompt_cost\":0.0000504,\"upstream_inference_completions_cost\":0.000075},\"completion_tokens_details\":{\"reasoning_tokens\":124,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1777319839-xP2PKgp3MdKu4Mtt5usp\",\"object\":\"chat.completion\",\"created\":1777319839,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user asked: \\\"What's the weather in Florence, Italy?\\\"\\n\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_29518744\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"The user asked: \\\"What's the weather in Florence, Italy?\\\"\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"0pVWmfPkl9kNqqHnJSPKiOp0ow2/d7vHJnVDCmyKXHg5wPhLlLxyyRmTA7pPciQRlDOO04BXVRZ4r/ARjCT/OnIhB/hAkO1OAIKOg2hZ7TRP+tL81L2TMueNRnUCM0U3/g7SzRBUciIGPl8ft7VOr4UVhbAWPBLS3Ef7ucUXhM8SfG29nqDaSFgaj1CQybUDSW0aHma3kffyUIjEyqNE6d9GLRfrC6PEZ6sKWUmaPuIi10Zv79dxKQj/ikdJPYk+WoBxsQ7/2lCw0arePzYyC2kn4iOGIOcxka2KO8F6aIojhuBMhc8gI2VPoFLJBXQwJrXKanu8tsBAlVi3iJ53rPzjaaicCiitgioh2ZMoNeM2ARkP/iwxhoXNA2Oqe50VW45mjeirC2Q86qNXHMbNVcz86wAaiSvL5t+wgs5e/snvRIYWR4oQjwot4T9kv7aTcWKzDa3UMTmhht8v1b3jg1Br96Ce1iIrSLJFO5E0r7eRuwR3dILV8DT9F5qakwxh4cnWzXh6m9VH2lrzf+Q/eFAYwzx4PwuX5iGEGZtripjdT1Bb0F6i8KgPBa5Z/jnx+sqpTkLFElmK1hMVXyqbHAK2Cp/DlXM+gQOsw47tu6mEOf5V3GQK86vcBs6UInB32Xqkv3MgPqJwor+99lL0xAuT8W4unWv6Agz+gaMBvdYLtbf7kuDJQ3fSV4nXnEstpLzh9g3XGHUk8VN4RTEbYCWjpRL8H70tXhff+Ftb60VX8NLcf37TcubXdoPWrNjH8uT5rzR68XM8E7Pysn8mFrmpXXx2ZM6yn/c1kooG1Ufo\",\"format\":\"xai-responses-v1\",\"id\":\"rs_b86986c8-47f3-fcc2-7d33-79c2bbc7bf04\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":366,\"completion_tokens\":157,\"total_tokens\":523,\"cost\":0.0001052,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":310,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0001052,\"upstream_inference_prompt_cost\":0.0000267,\"upstream_inference_completions_cost\":0.0000785},\"completion_tokens_details\":{\"reasoning_tokens\":131,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.311699459s + duration: 2.737881833s - id: 1 request: proto: HTTP/1.1 @@ -38,14 +38,14 @@ interactions: proto_minor: 1 content_length: 782 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_68841502","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_68841502","role":"tool"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_29518744","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_29518744","role":"tool"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945421-GWyuWATaAb2ioqG6E9EP\",\"object\":\"chat.completion\",\"created\":1773945422,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"It's currently 40°C in Florence, Italy. That's quite hot—stay hydrated!\",\"refusal\":null,\"reasoning\":\"First, the user asked: \\\"What's the weather in Florence, Italy?\\\"\\n\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First, the user asked: \\\"What's the weather in Florence, Italy?\\\"\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"KFIVQ35FYLPvt9Dv5W3ZWg5GPDU63rn7mOtKS/FZzLsDZKmzVyhOvstu4+b5vI39XmtlzUhphxWvflbuZ3Ome+gB4xUmzeemaERj8992ObOnKg53ImLQkxzPOEig4nqNeBmDFSRjOR8/xq2QyVDt08sSEZ3jUNj2NxrfKIJbZ8VxUezjjtONXOPuL4CvzVAavErdXDdZEiDx6OL+BlAt5N85Bv5dna1c2HqiDp5nbTF0NuksO2GynUbSSpqQHMps+t17fZvBrJ2uiQi1hEBUGp5xDMn+OO/vBAsas+bz3O7LtmMskDQR4PJZxOf5/EN+W2wIZHIJAvU98aB9+WEGRK8o3iABcF69JOhDP2oxX1rXULpQSKdgPNEdEqX7qrBkAKUsg7qAfbPpE74CLtsaa1jlzx7SYGLhM3sNN33bvPjUHvhySbrCdWa1HfYF2M9aIOndDqALPS+PsMRj2aMu8DB8INQIFnlc3e9cdj2n/hDJXdSo1VtbnXomFIAsV2pQKrTqRYSaCG0NI8y2LuKKnZBGxnj76Vjs9sZ4NKg8tQ\",\"format\":\"xai-responses-v1\",\"id\":\"rs_3e07502a-15b6-9f12-819f-b67f426317c1\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":404,\"completion_tokens\":105,\"total_tokens\":509,\"cost\":0.0001105,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":152,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0001105,\"upstream_inference_prompt_cost\":0.000058,\"upstream_inference_completions_cost\":0.0000525},\"completion_tokens_details\":{\"reasoning_tokens\":88,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1777319843-nNkt0QmnoreRPdPiiJUT\",\"object\":\"chat.completion\",\"created\":1777319843,\"model\":\"x-ai/grok-4.1-fast\",\"provider\":\"xAI\",\"system_fingerprint\":null,\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is currently 40°C.\",\"refusal\":null,\"reasoning\":\"First, the user asked: \\\"What's the weather in Florence, Italy?\\\"\\n\",\"reasoning_details\":[{\"type\":\"reasoning.summary\",\"summary\":\"First, the user asked: \\\"What's the weather in Florence, Italy?\\\"\\n\",\"format\":\"xai-responses-v1\",\"index\":0},{\"type\":\"reasoning.encrypted\",\"data\":\"kzT9Tot4n0k6mVYy8dsVToEjeQn3epbFAxVGljU965JJPu1R9FxlmEM7+qizlFZ2ToNLqO3v6I4Hg3PGxguwt+WgImbiDaChszpOo3SpwBgnC4S2ClEq4cqWAbWntMvGbo8p+HfTHoGDqWznOK15E8va7ixg5aegbJGdEFHBUdiuW3p9yQPv1cypfQkYnRtQP6aoXAnHFYQn71rKvE7Mn1nW6OaxAVvWl01OYIqJ58Rlqtls0O+6vchXR+rRhVSepj7nVutEDOCOPMzvkKKr+PgXlq25JTb1VQXpdH7OjJ9oNKliVZJMbZmXeKy85VjpdYgIhNIsBTnYx14yxUnQnMp6J2LS+eP6vCdlnExXA/WmHkLV8v9EoerPiFY4Bo1wsnLQ0Mh8D4Y886rQG6pMBX6dD3qLfr0duStFWJqI8Qt9zKsd4+qetEZuzuFxZInppqfByJzrbVn2GIuy6EPWEoDvFeYbXlfP/HrHeELWzDWukvo4hNYf4xURammYL8OTb2BMwuMvo3E+jeI+Q3FmKgjOrT2i67anu5HefRU8k4Fr8zfCVA5yTx9o3OJ88L0KmbUWfKRNrWQxIbKX9YI5h6bGVf7v7wUzr2m77+J4Lr8LxjcsyZW2nbu7XS+ljLLEjK4hTz4EyOzP5TXz1ApNkOHHdRv1qCYNP4fuc8dMkzfK1zgLxJ22ZGsDRkfgyuR25NGuHLwprYzbk7h6WCrdGaQYkdcyrj7Gc9/6eqPXT2j+jeuW9Spw0bB9DZnr\",\"format\":\"xai-responses-v1\",\"id\":\"rs_b4dc092a-4e1a-fe73-3cbf-5c26404bf314\",\"index\":1}]}}],\"usage\":{\"prompt_tokens\":404,\"completion_tokens\":128,\"total_tokens\":532,\"cost\":0.0000983,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":310,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000983,\"upstream_inference_prompt_cost\":0.0000343,\"upstream_inference_completions_cost\":0.000064},\"completion_tokens_details\":{\"reasoning_tokens\":116,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.410118625s + duration: 1.742248792s diff --git a/providertests/testdata/TestOpenRouterCommon/grok/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/grok/tool_streaming.yaml index fb623d42f..bbc2b84ac 100644 --- a/providertests/testdata/TestOpenRouterCommon/grok/tool_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/grok/tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -30,47 +30,101 @@ interactions: : OPENROUTER PROCESSING - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.summary","summary":"The","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.summary","summary":"The","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"What's","reasoning_details":[{"type":"reasoning.summary","summary":"What's","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"What's","reasoning_details":[{"type":"reasoning.summary","summary":"What's","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.summary","summary":" Florence","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.summary","summary":" Florence","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.summary","summary":" Italy","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.summary","summary":" Italy","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\"\n","reasoning_details":[{"type":"reasoning.summary","summary":"?\"\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\"","reasoning_details":[{"type":"reasoning.summary","summary":"?\"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.summary","summary":" I","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" have","reasoning_details":[{"type":"reasoning.summary","summary":" have","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.summary","summary":" a","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" tool","reasoning_details":[{"type":"reasoning.summary","summary":" tool","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" called","reasoning_details":[{"type":"reasoning.summary","summary":" called","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"weather","reasoning_details":[{"type":"reasoning.summary","summary":"weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.summary","summary":"\"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" that","reasoning_details":[{"type":"reasoning.summary","summary":" that","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" gets","reasoning_details":[{"type":"reasoning.summary","summary":" gets","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.summary","summary":" information","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.summary","summary":" for","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.summary","summary":" a","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.summary","summary":" location","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.summary","summary":".","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.summary","summary":" The","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" parameter","reasoning_details":[{"type":"reasoning.summary","summary":" parameter","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.summary","summary":" is","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"location","reasoning_details":[{"type":"reasoning.summary","summary":"location","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\",","reasoning_details":[{"type":"reasoning.summary","summary":"\",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" which","reasoning_details":[{"type":"reasoning.summary","summary":" which","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.summary","summary":" is","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" city","reasoning_details":[{"type":"reasoning.summary","summary":" city","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n","reasoning_details":[{"type":"reasoning.summary","summary":".\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} : OPENROUTER PROCESSING : OPENROUTER PROCESSING - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"5uBosQPBhs9D25vCCXLRe3Yr2WsHcTdtJ7AejqLj5zOMDtq3zeq6bUPdLRLEPxXn1eRXQ0CcEMpS6ggaioAgDoayS1TLxz9ZaygXYdw4vzI59wUxVIcGXzv2cthtk9GH4ldrjxb3ym8oZGpscLQNiqog7ApXHQUtii7OUQZzOcv0GkaJFq3YBSR3h2W+ftb6JgcblJO9+Ycvbir0AU5+tMQZ0mHaqw2PI0y6J0pW/oibTRby05YHqTjEJBdcbb1VI7V1s36IAuaqrO57jP+HekRiAZ7HAjpcr7pQQZX707+DoCortutwSltkUsJSLRW3saOXvU4J3a8/+KWvRBtOv9M5LwKUzWqFAKTTZ0CqgYQnV5fsrmdLlU/g/RmntL2RDWWd5tW+8qc7DeAxCYZuIzdeeNSz5/OrB2MIAtfKrWtLtanLmD3xvcWa7YiPqY/dVvYkk5fa6s4TuyOC6YbGMhKmh8Bjx8SSjVNx8Mfm0M2dscZ/2pgx57zKlJ65YnmNnUoODE+3b5lNo0UfF2m+BsnfNSoc8Kp6V8jCcLTMx/NSMfdCiGVQw1GQEFod68o0gG1NJsVYg9HYLS7lHBlUSxZaXKW8O1kDmLXHEH6KXGC3/TDPKsNI0Mbo918aLK/4J3mKFq6CXa2aE1+rIjDLK1gii4r3S6mWITxvlsnPy1ls2T7ogsHxbcLXAn7JPEJ15JNULQnYVcv6RWEiMnEj66VWI3pSE8YwikTtyvzOpBC/upijPDXPaVDXrLzlZyYxEwmWLrPwxjRNkKxbKLJVX9q3iKGt4mWQyf/hgqw0XhqZjMxwWXpbjFiZ+wP0","format":"xai-responses-v1","id":"rs_36ac2fb0-b643-9ff6-9c38-0e5f2370316e","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"xtqOzzobQxuQwf0gkR6GjXXcuE0PDswutFF66xawFkpZ44ikgr2ohkmIilDl5sm4Mz775dN8sBR6zp25Zw8hgykyzQFqBYzmFdhnWAXcG9koU+WVetRL9/juCF2TM++QaYs4hLtsap9HwRd2OZvKbRxuy0f66+ocvythg3yQxSNnOZvhrH2grD/mZbS3CAFWcvz/4RlhPvXiWrh0FchzGZu4TNnmnYJconszRW941AqCFnqyabK/vuZZGtt/Xnp+aHr2gEPDKhnsZcp7WMF/xwRLf6cg1Mqs4TocmOAwpyC5FmeglsiDLLRR3LuGYY/3uuUGE18Ys09TH52mTbFyDFQjWEqIZT80HT23tNFlVySqRfyYwWrlKOHi0wjVa2pwlWQYa5E67sQZ3+dQHi+sPVsmf5AKiknRT9PScTcrRydyU37TXZHX8CYd8HqonNQNdLLAjmHzRu0YxG5Yxq1BT0Jtwlc2uT86R2mnTaxPaPzPVG7l4kHcGdgztboDpCIrMM+hkkd3cxuvNlZK1Nu2fVPF5jgodzCY4DPffVu5BItlBi7xAWozzZPXrGiWLe98EFvBomvpR9pjYhZDDa7CPUiCmZsw+1FhD0V/oULz+oop/miA2hadfRyReUsu7TjfkisC4ikmL1RQ3ZzUGiEsf8gRAggC5uzhqrqJCljiJrQEXbe7sVc2Q3yAYJ0SQ1WZw258Xy5pEUbvqjOq6cAY6n6Nyhpp6czm9aXAdx6LcTRFaZAunekALNg9K60cA4Y94gxfK8AsVIsb1053XWnFLNtUd8HpDd7d4LnTzvSUmxds","format":"xai-responses-v1","id":"rs_f4d7eb38-3078-6003-f459-ba491f4b7bb4","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_92320304","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_51659697","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence, Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location\":\"Florence, Italy\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} - data: {"id":"gen-1773945424-lojoN2TGtDYC77RNuNzX","object":"chat.completion.chunk","created":1773945424,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}],"usage":{"prompt_tokens":366,"completion_tokens":159,"total_tokens":525,"cost":0.00009795,"is_byok":false,"prompt_tokens_details":{"cached_tokens":365,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00009795,"upstream_inference_prompt_cost":0.00001845,"upstream_inference_completions_cost":0.0000795},"completion_tokens_details":{"reasoning_tokens":133,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319845-fb1gRveeS1juYkq93kho","object":"chat.completion.chunk","created":1777319845,"model":"x-ai/grok-4.1-fast","provider":"xAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}],"usage":{"prompt_tokens":366,"completion_tokens":155,"total_tokens":521,"cost":0.00009595,"is_byok":false,"prompt_tokens_details":{"cached_tokens":365,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00009595,"upstream_inference_prompt_cost":0.00001845,"upstream_inference_completions_cost":0.0000775},"completion_tokens_details":{"reasoning_tokens":129,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -79,22 +133,22 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.534540833s + duration: 1.476046083s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 906 + content_length: 1035 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_92320304","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user asked: \"What''s the weather in Florence, Italy?\"\n","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_92320304","role":"tool"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_51659697","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user asked: \"What''s the weather in Florence, Italy?\" I have a tool called \"weather\" that gets weather information for a location. The parameter is \"location\", which is the city.\n","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"call_51659697","role":"tool"}],"model":"x-ai/grok-4.1-fast","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -109,67 +163,77 @@ interactions: : OPENROUTER PROCESSING - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"First","reasoning_details":[{"type":"reasoning.summary","summary":"First","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"First","reasoning_details":[{"type":"reasoning.summary","summary":"First","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.summary","summary":" user","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.summary","summary":" asked","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.summary","summary":":","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.summary","summary":" \"","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"What's","reasoning_details":[{"type":"reasoning.summary","summary":"What's","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"What's","reasoning_details":[{"type":"reasoning.summary","summary":"What's","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.summary","summary":" the","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.summary","summary":" weather","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.summary","summary":" in","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.summary","summary":" Florence","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.summary","summary":" Florence","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.summary","summary":",","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.summary","summary":" Italy","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.summary","summary":" Italy","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\"\n","reasoning_details":[{"type":"reasoning.summary","summary":"?\"\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"?\"\n","reasoning_details":[{"type":"reasoning.summary","summary":"?\"\n","format":"xai-responses-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} : OPENROUTER PROCESSING - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"Kgd/ltSG6oos788IuoplMMUPrgLdQhjMQy//6Sf+cILTh+bfOfT/Oc5AQ1ieQaBgAWAwkpPR0UxCQkH3flTaPdxSmGpJ1pg+JFmNZg781xwcbPCvyIOfshXknAC4zFJ5C5esDWLN9Ygeu7cvn1YW22JkhdTcA1Mq2S2byLJLZWAjEAl4JApm9JaIkB4I7yMFReuBFA701XVHeP/8TrIF7FAPODCA7lxokZoz9Qq6VheJVDv3NUx89QoKq2/YSkyhia3VP7xUIH2EwqIsUQP3FSciQIparif7GAcZjI9DuDYzFFoMYpJKDLMPcWee2E6RYuBg6Nc7Eyey8JbNymzCE9iY7yPwdc8yZPvEPdDCgjTnPAfEnl/zvPdTRGbux8XnYAPtplVMiD3Y8el/1dLNiBFepW31ruHQpihNZhVeEhw4dIQciufwgbz7CtK4h1Iw4+NIgIeKEan2oBDtIGdblRXNHx46nh3nHvgOwwxpb1ZT0kOokL5NpJNuYj8hr+1u8OFD73WtIGhC3UbNCIKVR1wbKrewVp+VCT2/JGpASkSWHvOCzwmKE/G8ivLnpXkMWk+ErsC6KIK3zV9n443uk1ZQUEMoYR4keRqVmKeqDLS9eVbK4mu4P6ji2RXxxzb0BJoaxUdN2vBLpPVFiImLyu3c0guPSR7I1kBVS2QsnAPpncWxEks5RxMzDbyXdaLNtJzuXJBqYymSefznfFVd8fxTbubox3khczTJ6GsrPzQOzds4wos7WrXXJgU03lOkMW3OiKY9zT6+RXj5uLtjSyPl5HzGi6zookbEw/yMs+IZFmCx3LwojD3QmA","format":"xai-responses-v1","id":"rs_bbd8b588-fa8b-9461-9830-2761a3e7dd2c","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null,"reasoning_details":[{"type":"reasoning.encrypted","data":"5hfPv6Rt/Qwout8tG3xxONWaJ5xHS+1OGQhs7hW7LDx7zdD3LTFQLJ5F+eS2vhePHc7Mo+21GG+P+Kp3jccN+gO2t8IhwA78p+zyuGflokqV1XK6d5ucFDvv9HNmtYQR78p0snQgbPGyOq/lQgOYB+Rjbg/PikAlosEjcQsIS5eWCsbUjIng3joM2WBboC2iyZIAvvS+vgJW3ijpkPSvLsoOL4zdKuPOs7GFigcDDqs0TZHk1x1hkoYM3C6se6Jn5cqnSTIbRzy7PSuKiNB/ms2qJcmEma3Ro4whAsnKj5GpwSFboAkkLLTksYJUg21wL/6lXPb165yqIYk8/yKbHfNaza9ETuaSk7epSwOGSZ6/o6yJ/4vTEmLn0Hn1+2CPGB88SSL6vCd5YYAYjBszle85yPa5B2RrCtBCfcQEz5YAEmr1ZrD0l9zj4+tdwCfCueb9hyPyLZuVCu0Y+352bb5tiVm2mjOcVW3JkB4AiBoUwnFCTN3RWCZWf4tWwkke9bxiu25X6Wu/8n5IqLvcszmGDK/ArPRSSGmAC47wOahZNu1oB/c4/vo5ZFpeem6tL1MUYFUR5TUpMRJM+4Kk","format":"xai-responses-v1","id":"rs_7dd9800b-267a-99bc-b265-8368ecd93de4","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"It's","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" currently","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" That's","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" pretty","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"—","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":" hydrated","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"completed"}]} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"completed"}]} - data: {"id":"gen-1773945427-mrMWA8NG6bOqqKVWUwzl","object":"chat.completion.chunk","created":1773945427,"model":"x-ai/grok-4.1-fast","provider":"xAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}],"usage":{"prompt_tokens":404,"completion_tokens":139,"total_tokens":543,"cost":0.00008985,"is_byok":false,"prompt_tokens_details":{"cached_tokens":403,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00008985,"upstream_inference_prompt_cost":0.00002035,"upstream_inference_completions_cost":0.0000695},"completion_tokens_details":{"reasoning_tokens":127,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319848-SFQmKd8YTKr8xmSXFhpp","object":"chat.completion.chunk","created":1777319848,"model":"x-ai/grok-4.1-fast","provider":"xAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}],"usage":{"prompt_tokens":404,"completion_tokens":111,"total_tokens":515,"cost":0.00007585,"is_byok":false,"prompt_tokens_details":{"cached_tokens":403,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00007585,"upstream_inference_prompt_cost":0.00002035,"upstream_inference_completions_cost":0.0000555},"completion_tokens_details":{"reasoning_tokens":94,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -178,4 +242,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.338549208s + duration: 1.850464875s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/kimi/multi_tool.yaml index 471521d98..78bb9f66a 100644 --- a/providertests/testdata/TestOpenRouterCommon/kimi/multi_tool.yaml +++ b/providertests/testdata/TestOpenRouterCommon/kimi/multi_tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,28 +24,28 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945487-Z5fhji1TROrj6AuM2H1y\",\"object\":\"chat.completion\",\"created\":1773945487,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":\"fpv0_e0c12c89\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":\"I'll add and multiply 2 and 3 for you at the same time.\",\"refusal\":null,\"reasoning\":\"The user wants me to add 2 and 3, and also multiply 2 and 3. The instructions say I must use both add and multiply at the same time ALWAYS. This means I should call both functions in the same function_calls block.\\n\\nLet me make both calls:\\n- add: a=2, b=3\\n- multiply: a=2, b=3\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"add:0\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"multiply:1\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants me to add 2 and 3, and also multiply 2 and 3. The instructions say I must use both add and multiply at the same time ALWAYS. This means I should call both functions in the same function_calls block.\\n\\nLet me make both calls:\\n- add: a=2, b=3\\n- multiply: a=2, b=3\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":128,\"completion_tokens\":130,\"total_tokens\":258,\"cost\":0.000402,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000402,\"upstream_inference_prompt_cost\":0.000064,\"upstream_inference_completions_cost\":0.000338},\"completion_tokens_details\":{\"reasoning_tokens\":72,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1777319909-67OLh0a5b54mA8BGe7CD\",\"object\":\"chat.completion\",\"created\":1777319909,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"Chutes\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\" The user wants me to add and multiply the numbers 2 and 3. According to the instructions, I must use both add and multiply at the same time ALWAYS. So I need to call both functions with a=2 and b=3.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"functions.add:0\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"functions.multiply:1\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" The user wants me to add and multiply the numbers 2 and 3. According to the instructions, I must use both add and multiply at the same time ALWAYS. So I need to call both functions with a=2 and b=3.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":129,\"completion_tokens\":86,\"total_tokens\":215,\"cost\":0.00022876,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00022876,\"upstream_inference_prompt_cost\":0.00005676,\"upstream_inference_completions_cost\":0.000172},\"completion_tokens_details\":{\"reasoning_tokens\":51,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.53507125s + duration: 2.166024875s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1623 + content_length: 1515 host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"content":"I''ll add and multiply 2 and 3 for you at the same time.","tool_calls":[{"id":"add:0","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"multiply:1","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user wants me to add 2 and 3, and also multiply 2 and 3. The instructions say I must use both add and multiply at the same time ALWAYS. This means I should call both functions in the same function_calls block.\n\nLet me make both calls:\n- add: a=2, b=3\n- multiply: a=2, b=3","type":"reasoning.text"}]},{"content":"5","tool_call_id":"add:0","role":"tool"},{"content":"6","tool_call_id":"multiply:1","role":"tool"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"functions.add:0","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"functions.multiply:1","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" The user wants me to add and multiply the numbers 2 and 3. According to the instructions, I must use both add and multiply at the same time ALWAYS. So I need to call both functions with a=2 and b=3.","type":"reasoning.text"}]},{"content":"5","tool_call_id":"functions.add:0","role":"tool"},{"content":"6","tool_call_id":"functions.multiply:1","role":"tool"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945491-o5yp2dfHoW8YjgvpdrJn\",\"object\":\"chat.completion\",\"created\":1773945491,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":\"fpv0_e0c12c89\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Here are the results:\\n- **Addition**: 2 + 3 = **5**\\n- **Multiplication**: 2 × 3 = **6**\",\"refusal\":null,\"reasoning\":\"Great! Both functions returned successfully:\\n- add(2, 3) = 5\\n- multiply(2, 3) = 6\\n\\nNow I should present these results clearly to the user.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"Great! Both functions returned successfully:\\n- add(2, 3) = 5\\n- multiply(2, 3) = 6\\n\\nNow I should present these results clearly to the user.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":288,\"completion_tokens\":77,\"total_tokens\":365,\"cost\":0.0003442,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0003442,\"upstream_inference_prompt_cost\":0.000144,\"upstream_inference_completions_cost\":0.0002002},\"completion_tokens_details\":{\"reasoning_tokens\":38,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1777319913-STjd2fkBWdjGqjsaTqzc\",\"object\":\"chat.completion\",\"created\":1777319913,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"Chutes\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\" Here are the results:\\n\\n**Addition:** 2 + 3 = **5**\\n\\n**Multiplication:** 2 × 3 = **6**\",\"refusal\":null,\"reasoning\":\" The user asked to add and multiply 2 and 3. I called both functions as instructed by the critical instructions. The results are:\\n- Addition: 2 + 3 = 5\\n- Multiplication: 2 × 3 = 6\\n\\nI should provide both results to the user.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" The user asked to add and multiply 2 and 3. I called both functions as instructed by the critical instructions. The results are:\\n- Addition: 2 + 3 = 5\\n- Multiplication: 2 × 3 = 6\\n\\nI should provide both results to the user.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":201,\"completion_tokens\":94,\"total_tokens\":295,\"cost\":0.00027644,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00027644,\"upstream_inference_prompt_cost\":0.00008844,\"upstream_inference_completions_cost\":0.000188},\"completion_tokens_details\":{\"reasoning_tokens\":63,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.54386325s + duration: 1.966160458s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/kimi/multi_tool_streaming.yaml index f3a686588..a44ade323 100644 --- a/providertests/testdata/TestOpenRouterCommon/kimi/multi_tool_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/kimi/multi_tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -32,239 +32,171 @@ interactions: : OPENROUTER PROCESSING - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wants","reasoning_details":[{"type":"reasoning.text","text":" wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wants","reasoning_details":[{"type":"reasoning.text","text":" wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me","reasoning_details":[{"type":"reasoning.text","text":" me","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me","reasoning_details":[{"type":"reasoning.text","text":" me","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" numbers","reasoning_details":[{"type":"reasoning.text","text":" numbers","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" numbers","reasoning_details":[{"type":"reasoning.text","text":" numbers","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" According","reasoning_details":[{"type":"reasoning.text","text":" According","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Since","reasoning_details":[{"type":"reasoning.text","text":" Since","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" my","reasoning_details":[{"type":"reasoning.text","text":" my","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" system","reasoning_details":[{"type":"reasoning.text","text":" system","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" instructions","reasoning_details":[{"type":"reasoning.text","text":" instructions","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" prompt","reasoning_details":[{"type":"reasoning.text","text":" prompt","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" says","reasoning_details":[{"type":"reasoning.text","text":" says","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Always","reasoning_details":[{"type":"reasoning.text","text":"Always","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.text","text":" use","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.text","text":" use","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" `","reasoning_details":[{"type":"reasoning.text","text":" `","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"add","reasoning_details":[{"type":"reasoning.text","text":"add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"`","reasoning_details":[{"type":"reasoning.text","text":"`","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" at","reasoning_details":[{"type":"reasoning.text","text":" at","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" `","reasoning_details":[{"type":"reasoning.text","text":" `","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"multiply","reasoning_details":[{"type":"reasoning.text","text":"multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" same","reasoning_details":[{"type":"reasoning.text","text":" same","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"`","reasoning_details":[{"type":"reasoning.text","text":"`","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" time","reasoning_details":[{"type":"reasoning.text","text":" time","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" at","reasoning_details":[{"type":"reasoning.text","text":" at","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",\"","reasoning_details":[{"type":"reasoning.text","text":",\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" same","reasoning_details":[{"type":"reasoning.text","text":" same","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" time","reasoning_details":[{"type":"reasoning.text","text":" time","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" make","reasoning_details":[{"type":"reasoning.text","text":" make","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Since","reasoning_details":[{"type":"reasoning.text","text":" Since","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" these","reasoning_details":[{"type":"reasoning.text","text":" these","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" calls","reasoning_details":[{"type":"reasoning.text","text":" calls","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" together","reasoning_details":[{"type":"reasoning.text","text":" together","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" independent","reasoning_details":[{"type":"reasoning.text","text":" independent","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" calls","reasoning_details":[{"type":"reasoning.text","text":" calls","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" can","reasoning_details":[{"type":"reasoning.text","text":" can","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" make","reasoning_details":[{"type":"reasoning.text","text":" make","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" can","reasoning_details":[{"type":"reasoning.text","text":" can","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" calls","reasoning_details":[{"type":"reasoning.text","text":" calls","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" make","reasoning_details":[{"type":"reasoning.text","text":" make","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" them","reasoning_details":[{"type":"reasoning.text","text":" them","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" same","reasoning_details":[{"type":"reasoning.text","text":" same","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" same","reasoning_details":[{"type":"reasoning.text","text":" same","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"_calls","reasoning_details":[{"type":"reasoning.text","text":"_calls","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" block","reasoning_details":[{"type":"reasoning.text","text":" block","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"_calls","reasoning_details":[{"type":"reasoning.text","text":"_calls","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" since","reasoning_details":[{"type":"reasoning.text","text":" since","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" block","reasoning_details":[{"type":"reasoning.text","text":" block","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" they","reasoning_details":[{"type":"reasoning.text","text":" they","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"functions.add:0","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" independent","reasoning_details":[{"type":"reasoning.text","text":" independent","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" of","reasoning_details":[{"type":"reasoning.text","text":" of","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"a"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" each","reasoning_details":[{"type":"reasoning.text","text":" each","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" other","reasoning_details":[{"type":"reasoning.text","text":" other","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n","reasoning_details":[{"type":"reasoning.text","text":".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"2"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Let","reasoning_details":[{"type":"reasoning.text","text":"Let","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me","reasoning_details":[{"type":"reasoning.text","text":" me","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" \""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" call","reasoning_details":[{"type":"reasoning.text","text":" call","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"b"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":\n","reasoning_details":[{"type":"reasoning.text","text":":\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"1","reasoning_details":[{"type":"reasoning.text","text":"1","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"3"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.text","text":" with","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"functions.multiply:1","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"=","reasoning_details":[{"type":"reasoning.text","text":"=","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"a"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" b","reasoning_details":[{"type":"reasoning.text","text":" b","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"2"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"=","reasoning_details":[{"type":"reasoning.text","text":"=","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":" \""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n","reasoning_details":[{"type":"reasoning.text","text":"\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"b"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.text","text":" with","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"=","reasoning_details":[{"type":"reasoning.text","text":"=","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" b","reasoning_details":[{"type":"reasoning.text","text":" b","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"=","reasoning_details":[{"type":"reasoning.text","text":"=","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"add:0","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"a"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"2"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" \""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"b"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"3"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"3"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"multiply:1","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"a"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"2"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":" \""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"b"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":" "}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"3"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773945494-D12sIVylmicjqxKq2N2V","object":"chat.completion.chunk","created":1773945494,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":124,"completion_tokens":130,"total_tokens":254,"cost":0.0004,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0004,"upstream_inference_prompt_cost":0.000062,"upstream_inference_completions_cost":0.000338},"completion_tokens_details":{"reasoning_tokens":90,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319918-UVrg0z9Yj2HXXL5dYZY3","object":"chat.completion.chunk","created":1777319918,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":125,"completion_tokens":97,"total_tokens":222,"cost":0.00023492,"is_byok":false,"prompt_tokens_details":{"cached_tokens":64,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00023492,"upstream_inference_prompt_cost":0.00004092,"upstream_inference_completions_cost":0.000194},"completion_tokens_details":{"reasoning_tokens":56,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -273,22 +205,22 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.739090375s + duration: 2.001517208s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1669 + content_length: 1595 host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"add:0","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"multiply:1","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user wants me to both add and multiply the numbers 2 and 3. Since the system prompt says \"Always use both add and multiply at the same time,\" I should make both function calls together. I can make both calls in the same function_calls block since they are independent of each other.\n\nLet me call:\n1. add with a=2, b=3\n2. multiply with a=2, b=3","type":"reasoning.text"}]},{"content":"5","tool_call_id":"add:0","role":"tool"},{"content":"6","tool_call_id":"multiply:1","role":"tool"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"functions.add:0","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"functions.multiply:1","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user wants me to add and multiply the numbers 2 and 3. According to my instructions, I should use both `add` and `multiply` at the same time. Since these are independent function calls, I can make them in the same function_calls block.","type":"reasoning.text"}]},{"content":"5","tool_call_id":"functions.add:0","role":"tool"},{"content":"6","tool_call_id":"functions.multiply:1","role":"tool"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -305,161 +237,169 @@ interactions: : OPENROUTER PROCESSING - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING + + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Here","reasoning_details":[{"type":"reasoning.text","text":" Here","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" results","reasoning_details":[{"type":"reasoning.text","text":" results","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" results","reasoning_details":[{"type":"reasoning.text","text":" results","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" are","reasoning_details":[{"type":"reasoning.text","text":" are","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":\n","reasoning_details":[{"type":"reasoning.text","text":":\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-","reasoning_details":[{"type":"reasoning.text","text":"-","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" number","reasoning_details":[{"type":"reasoning.text","text":" number","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" add","reasoning_details":[{"type":"reasoning.text","text":" add","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"(","reasoning_details":[{"type":"reasoning.text","text":"(","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":\n","reasoning_details":[{"type":"reasoning.text","text":":\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":")","reasoning_details":[{"type":"reasoning.text","text":")","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-","reasoning_details":[{"type":"reasoning.text","text":"-","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" =","reasoning_details":[{"type":"reasoning.text","text":" =","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Addition","reasoning_details":[{"type":"reasoning.text","text":" Addition","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"5","reasoning_details":[{"type":"reasoning.text","text":"5","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n","reasoning_details":[{"type":"reasoning.text","text":"\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-","reasoning_details":[{"type":"reasoning.text","text":"-","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" +","reasoning_details":[{"type":"reasoning.text","text":" +","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" multiply","reasoning_details":[{"type":"reasoning.text","text":" multiply","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"(","reasoning_details":[{"type":"reasoning.text","text":"(","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" =","reasoning_details":[{"type":"reasoning.text","text":" =","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"5","reasoning_details":[{"type":"reasoning.text","text":"5","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**\n","reasoning_details":[{"type":"reasoning.text","text":"**\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":")","reasoning_details":[{"type":"reasoning.text","text":")","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-","reasoning_details":[{"type":"reasoning.text","text":"-","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" =","reasoning_details":[{"type":"reasoning.text","text":" =","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Multi","reasoning_details":[{"type":"reasoning.text","text":" Multi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"plication","reasoning_details":[{"type":"reasoning.text","text":"plication","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"6","reasoning_details":[{"type":"reasoning.text","text":"6","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":","reasoning_details":[{"type":"reasoning.text","text":":","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n\n","reasoning_details":[{"type":"reasoning.text","text":"\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Now","reasoning_details":[{"type":"reasoning.text","text":"Now","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I'll","reasoning_details":[{"type":"reasoning.text","text":" I'll","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ×","reasoning_details":[{"type":"reasoning.text","text":" ×","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" present","reasoning_details":[{"type":"reasoning.text","text":" present","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" both","reasoning_details":[{"type":"reasoning.text","text":" both","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" results","reasoning_details":[{"type":"reasoning.text","text":" results","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" =","reasoning_details":[{"type":"reasoning.text","text":" =","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" **","reasoning_details":[{"type":"reasoning.text","text":" **","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"6","reasoning_details":[{"type":"reasoning.text","text":"6","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"**","reasoning_details":[{"type":"reasoning.text","text":"**","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" Here","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"Here","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" are","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" are","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" results","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" results","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" for","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" both","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" number","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" operations","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" with","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":":\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":":\n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"Addition","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"Addition","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"**:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":":**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" +","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" +","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"**\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"**\n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"Multi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"Multi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"plication","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"plication","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":":**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"**:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" ×","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" ×","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} - data: {"id":"gen-1773945499-wdUZpq3oZjiJdv456bk6","object":"chat.completion.chunk","created":1773945499,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":283,"completion_tokens":79,"total_tokens":362,"cost":0.0003469,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0003469,"upstream_inference_prompt_cost":0.0001415,"upstream_inference_completions_cost":0.0002054},"completion_tokens_details":{"reasoning_tokens":28,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319923-bvSEJKYMVn3eEnfo6Cry","object":"chat.completion.chunk","created":1777319923,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":197,"completion_tokens":80,"total_tokens":277,"cost":0.00024668,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00024668,"upstream_inference_prompt_cost":0.00008668,"upstream_inference_completions_cost":0.00016},"completion_tokens_details":{"reasoning_tokens":39,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -468,4 +408,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.735594375s + duration: 2.746493s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi/simple.yaml b/providertests/testdata/TestOpenRouterCommon/kimi/simple.yaml index 154e227b3..8ba5385bc 100644 --- a/providertests/testdata/TestOpenRouterCommon/kimi/simple.yaml +++ b/providertests/testdata/TestOpenRouterCommon/kimi/simple.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,10 +24,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945463-7UlWQThJCoBvROqhlOiT\",\"object\":\"chat.completion\",\"created\":1773945463,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":\"fpv0_e0c12c89\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Oi! (or \\\"Olá!\\\")\\n\\nBoth are common ways to say \\\"hi\\\" in Portuguese:\\n- **Oi** - Very informal and widely used in Brazil\\n- **Olá** - Slightly more formal, used in both Brazil and Portugal\",\"refusal\":null,\"reasoning\":\"The user wants me to say \\\"hi\\\" in Portuguese. The most common way to say \\\"hi\\\" in Portuguese is \\\"Oi\\\" (informal) or \\\"Olá\\\" (slightly more formal but still common). I should provide both options to be helpful, as they are both widely used.\\n\\n \\\"Oi\\\" is very casual and common in Brazil.\\n \\\"Olá\\\" is also common and works in both Brazil and Portugal.\\n\\n I'll provide the main greeting and perhaps mention the context.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user wants me to say \\\"hi\\\" in Portuguese. The most common way to say \\\"hi\\\" in Portuguese is \\\"Oi\\\" (informal) or \\\"Olá\\\" (slightly more formal but still common). I should provide both options to be helpful, as they are both widely used.\\n\\n \\\"Oi\\\" is very casual and common in Brazil.\\n \\\"Olá\\\" is also common and works in both Brazil and Portugal.\\n\\n I'll provide the main greeting and perhaps mention the context.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":20,\"completion_tokens\":152,\"total_tokens\":172,\"cost\":0.0004052,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0004052,\"upstream_inference_prompt_cost\":0.00001,\"upstream_inference_completions_cost\":0.0003952},\"completion_tokens_details\":{\"reasoning_tokens\":107,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1777319885-pLuUvaQdB3l6lRlhlKuv\",\"object\":\"chat.completion\",\"created\":1777319885,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"Inceptron\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\" Oi! \\n\\n(You can also say **\\\"Olá\\\"** – it's slightly more formal, while \\\"Oi\\\" is casual and very common in both Brazil and Portugal.)\",\"refusal\":null,\"reasoning\":\" The user wants me to say \\\"hi\\\" in Portuguese. \\n\\nThe most common way to say \\\"hi\\\" in Portuguese is \\\"Oi\\\" (pronounced like \\\"oy\\\" in English). \\n\\nOther options include:\\n- \\\"Olá\\\" (more formal, pronounced \\\"oh-LAH\\\")\\n- \\\"E aí?\\\" (informal, like \\\"what's up\\\")\\n- \\\"Tudo bem?\\\" (how are you/what's up)\\n\\nBut the simplest and most direct translation for \\\"hi\\\" is \\\"Oi\\\" or \\\"Olá\\\".\\n\\nI'll provide the most common greeting \\\"Oi\\\" and maybe mention \\\"Olá\\\" as an alternative since it's also very common.\\n\\nResponse should be:\\n- \\\"Oi\\\" (primary)\\n- Maybe mention \\\"Olá\\\" as a slightly more formal alternative\\n\\nKeep it simple and helpful.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" The user wants me to say \\\"hi\\\" in Portuguese. \\n\\nThe most common way to say \\\"hi\\\" in Portuguese is \\\"Oi\\\" (pronounced like \\\"oy\\\" in English). \\n\\nOther options include:\\n- \\\"Olá\\\" (more formal, pronounced \\\"oh-LAH\\\")\\n- \\\"E aí?\\\" (informal, like \\\"what's up\\\")\\n- \\\"Tudo bem?\\\" (how are you/what's up)\\n\\nBut the simplest and most direct translation for \\\"hi\\\" is \\\"Oi\\\" or \\\"Olá\\\".\\n\\nI'll provide the most common greeting \\\"Oi\\\" and maybe mention \\\"Olá\\\" as an alternative since it's also very common.\\n\\nResponse should be:\\n- \\\"Oi\\\" (primary)\\n- Maybe mention \\\"Olá\\\" as a slightly more formal alternative\\n\\nKeep it simple and helpful.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":21,\"completion_tokens\":202,\"total_tokens\":223,\"cost\":0.00045364,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00045364,\"upstream_inference_prompt_cost\":0.00000924,\"upstream_inference_completions_cost\":0.0004444},\"completion_tokens_details\":{\"reasoning_tokens\":166,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.810134833s + duration: 1.015887208s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/kimi/simple_streaming.yaml index 79e229212..b58e931d7 100644 --- a/providertests/testdata/TestOpenRouterCommon/kimi/simple_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/kimi/simple_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -26,399 +26,141 @@ interactions: body: |+ : OPENROUTER PROCESSING - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" wants","reasoning_details":[{"type":"reasoning.text","text":" wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me","reasoning_details":[{"type":"reasoning.text","text":" me","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" say","reasoning_details":[{"type":"reasoning.text","text":" say","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"hi","reasoning_details":[{"type":"reasoning.text","text":"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most","reasoning_details":[{"type":"reasoning.text","text":" most","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.text","text":" common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" way","reasoning_details":[{"type":"reasoning.text","text":" way","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" say","reasoning_details":[{"type":"reasoning.text","text":" say","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hi","reasoning_details":[{"type":"reasoning.text","text":" hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\".","reasoning_details":[{"type":"reasoning.text","text":"\".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \n\n","reasoning_details":[{"type":"reasoning.text","text":" \n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" more","reasoning_details":[{"type":"reasoning.text","text":" more","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" formal","reasoning_details":[{"type":"reasoning.text","text":" formal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" universal","reasoning_details":[{"type":"reasoning.text","text":" universal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" across","reasoning_details":[{"type":"reasoning.text","text":" across","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese","reasoning_details":[{"type":"reasoning.text","text":" Portuguese","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"-speaking","reasoning_details":[{"type":"reasoning.text","text":"-speaking","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" countries","reasoning_details":[{"type":"reasoning.text","text":" countries","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" (","reasoning_details":[{"type":"reasoning.text","text":" (","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Port","reasoning_details":[{"type":"reasoning.text","text":"Port","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ugal","reasoning_details":[{"type":"reasoning.text","text":"ugal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Brazil","reasoning_details":[{"type":"reasoning.text","text":" Brazil","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Angola","reasoning_details":[{"type":"reasoning.text","text":" Angola","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" etc","reasoning_details":[{"type":"reasoning.text","text":" etc","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".).\n","reasoning_details":[{"type":"reasoning.text","text":".).\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" very","reasoning_details":[{"type":"reasoning.text","text":" very","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.text","text":" common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Brazil","reasoning_details":[{"type":"reasoning.text","text":" Brazil","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" but","reasoning_details":[{"type":"reasoning.text","text":" but","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" might","reasoning_details":[{"type":"reasoning.text","text":" might","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" be","reasoning_details":[{"type":"reasoning.text","text":" be","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" considered","reasoning_details":[{"type":"reasoning.text","text":" considered","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" less","reasoning_details":[{"type":"reasoning.text","text":" less","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" formal","reasoning_details":[{"type":"reasoning.text","text":" formal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" even","reasoning_details":[{"type":"reasoning.text","text":" even","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" rude","reasoning_details":[{"type":"reasoning.text","text":" rude","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" some","reasoning_details":[{"type":"reasoning.text","text":" some","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" contexts","reasoning_details":[{"type":"reasoning.text","text":" contexts","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portugal","reasoning_details":[{"type":"reasoning.text","text":" Portugal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n","reasoning_details":[{"type":"reasoning.text","text":".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Since","reasoning_details":[{"type":"reasoning.text","text":"Since","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" just","reasoning_details":[{"type":"reasoning.text","text":" just","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked","reasoning_details":[{"type":"reasoning.text","text":" asked","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" simple","reasoning_details":[{"type":"reasoning.text","text":" simple","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" greeting","reasoning_details":[{"type":"reasoning.text","text":" greeting","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provide","reasoning_details":[{"type":"reasoning.text","text":" provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most","reasoning_details":[{"type":"reasoning.text","text":" most","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.text","text":" common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" options","reasoning_details":[{"type":"reasoning.text","text":" options","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.text","text":" with","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" brief","reasoning_details":[{"type":"reasoning.text","text":" brief","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" context","reasoning_details":[{"type":"reasoning.text","text":" context","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" about","reasoning_details":[{"type":"reasoning.text","text":" about","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" usage","reasoning_details":[{"type":"reasoning.text","text":" usage","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".\n\n","reasoning_details":[{"type":"reasoning.text","text":".\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Options","reasoning_details":[{"type":"reasoning.text","text":"Options","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":":\n","reasoning_details":[{"type":"reasoning.text","text":":\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"1","reasoning_details":[{"type":"reasoning.text","text":"1","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" -","reasoning_details":[{"type":"reasoning.text","text":" -","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" universal","reasoning_details":[{"type":"reasoning.text","text":" universal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" formal","reasoning_details":[{"type":"reasoning.text","text":" formal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"/in","reasoning_details":[{"type":"reasoning.text","text":"/in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"form","reasoning_details":[{"type":"reasoning.text","text":"form","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"al","reasoning_details":[{"type":"reasoning.text","text":"al","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n","reasoning_details":[{"type":"reasoning.text","text":"\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"2","reasoning_details":[{"type":"reasoning.text","text":"2","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" -","reasoning_details":[{"type":"reasoning.text","text":" -","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" very","reasoning_details":[{"type":"reasoning.text","text":" very","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common","reasoning_details":[{"type":"reasoning.text","text":" common","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Brazil","reasoning_details":[{"type":"reasoning.text","text":" Brazil","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" informal","reasoning_details":[{"type":"reasoning.text","text":" informal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n","reasoning_details":[{"type":"reasoning.text","text":"\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user wants","reasoning_details":[{"type":"reasoning.text","text":" user wants","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"3","reasoning_details":[{"type":"reasoning.text","text":"3","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me to say","reasoning_details":[{"type":"reasoning.text","text":" me to say","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"hi\" in","reasoning_details":[{"type":"reasoning.text","text":" \"hi\" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese. \n\n","reasoning_details":[{"type":"reasoning.text","text":" Portuguese. \n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Al","reasoning_details":[{"type":"reasoning.text","text":"Al","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"In","reasoning_details":[{"type":"reasoning.text","text":"In","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ô","reasoning_details":[{"type":"reasoning.text","text":"ô","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Portuguese, the most","reasoning_details":[{"type":"reasoning.text","text":" Portuguese, the most","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" common ways","reasoning_details":[{"type":"reasoning.text","text":" common ways","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" -","reasoning_details":[{"type":"reasoning.text","text":" -","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to say \"hi","reasoning_details":[{"type":"reasoning.text","text":" to say \"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" used","reasoning_details":[{"type":"reasoning.text","text":" used","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\" are:\n-","reasoning_details":[{"type":"reasoning.text","text":"\" are:\n-","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" when","reasoning_details":[{"type":"reasoning.text","text":" when","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"Oi","reasoning_details":[{"type":"reasoning.text","text":" \"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" answering","reasoning_details":[{"type":"reasoning.text","text":" answering","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\" -","reasoning_details":[{"type":"reasoning.text","text":"\" -","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" phones","reasoning_details":[{"type":"reasoning.text","text":" phones","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" most common and informal","reasoning_details":[{"type":"reasoning.text","text":" most common and informal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n\n","reasoning_details":[{"type":"reasoning.text","text":"\n\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"I'll","reasoning_details":[{"type":"reasoning.text","text":"I'll","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" used in Brazil","reasoning_details":[{"type":"reasoning.text","text":" used in Brazil","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provide","reasoning_details":[{"type":"reasoning.text","text":" provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n- \"Ol","reasoning_details":[{"type":"reasoning.text","text":"\n- \"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á\" - more","reasoning_details":[{"type":"reasoning.text","text":"á\" - more","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Ol","reasoning_details":[{"type":"reasoning.text","text":"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" formal,","reasoning_details":[{"type":"reasoning.text","text":" formal,","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á","reasoning_details":[{"type":"reasoning.text","text":"á","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" used in both Brazil","reasoning_details":[{"type":"reasoning.text","text":" used in both Brazil","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and Portugal","reasoning_details":[{"type":"reasoning.text","text":" and Portugal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n- \"E","reasoning_details":[{"type":"reasoning.text","text":"\n- \"E","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" primary","reasoning_details":[{"type":"reasoning.text","text":" primary","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"í","reasoning_details":[{"type":"reasoning.text","text":"í","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" answer","reasoning_details":[{"type":"reasoning.text","text":" answer","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\" - very","reasoning_details":[{"type":"reasoning.text","text":"\" - very","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and","reasoning_details":[{"type":"reasoning.text","text":" and","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" informal Brazilian","reasoning_details":[{"type":"reasoning.text","text":" informal Brazilian","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" mention","reasoning_details":[{"type":"reasoning.text","text":" mention","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" slang\n","reasoning_details":[{"type":"reasoning.text","text":" slang\n","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"- \"Al","reasoning_details":[{"type":"reasoning.text","text":"- \"Al","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ô","reasoning_details":[{"type":"reasoning.text","text":"ô","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\" - used","reasoning_details":[{"type":"reasoning.text","text":"\" - used","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" when answering","reasoning_details":[{"type":"reasoning.text","text":" when answering","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Brazilian","reasoning_details":[{"type":"reasoning.text","text":" Brazilian","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" phone\n\nThe","reasoning_details":[{"type":"reasoning.text","text":" phone\n\nThe","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" alternative","reasoning_details":[{"type":"reasoning.text","text":" alternative","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" safest","reasoning_details":[{"type":"reasoning.text","text":" safest","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and most universal","reasoning_details":[{"type":"reasoning.text","text":" and most universal","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"Ol","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" answer is \"Oi","reasoning_details":[{"type":"reasoning.text","text":" answer is \"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"á","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\" or \"Ol","reasoning_details":[{"type":"reasoning.text","text":"\" or \"Ol","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"á\". Since the","reasoning_details":[{"type":"reasoning.text","text":"á\". Since the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" \n\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user just","reasoning_details":[{"type":"reasoning.text","text":" user just","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"(","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asked for \"hi","reasoning_details":[{"type":"reasoning.text","text":" asked for \"hi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"You","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\",","reasoning_details":[{"type":"reasoning.text","text":"\",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" can","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I should provide","reasoning_details":[{"type":"reasoning.text","text":" I should provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" also","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the most common translation","reasoning_details":[{"type":"reasoning.text","text":" the most common translation","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" say","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" which is \"Oi","reasoning_details":[{"type":"reasoning.text","text":" which is \"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\",","reasoning_details":[{"type":"reasoning.text","text":"\",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"\"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" but I could also","reasoning_details":[{"type":"reasoning.text","text":" but I could also","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"Oi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" mention \"Olá","reasoning_details":[{"type":"reasoning.text","text":" mention \"Olá","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"\"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\" as an alternative","reasoning_details":[{"type":"reasoning.text","text":"\" as an alternative","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" since","reasoning_details":[{"type":"reasoning.text","text":" since","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" —","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it's also","reasoning_details":[{"type":"reasoning.text","text":" it's also","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" it's","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" very common.\n\nI'll","reasoning_details":[{"type":"reasoning.text","text":" very common.\n\nI'll","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" very","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provide \"","reasoning_details":[{"type":"reasoning.text","text":" provide \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" common","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Oi","reasoning_details":[{"type":"reasoning.text","text":"Oi","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\" as the primary","reasoning_details":[{"type":"reasoning.text","text":"\" as the primary","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" Brazil","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" answer,","reasoning_details":[{"type":"reasoning.text","text":" answer,","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" and maybe mention \"","reasoning_details":[{"type":"reasoning.text","text":" and maybe mention \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" while","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Olá\" as","reasoning_details":[{"type":"reasoning.text","text":"Olá\" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" \"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" well for completeness.","reasoning_details":[{"type":"reasoning.text","text":" well for completeness.","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"Ol","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"á","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":" Oi","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"\"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"! (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"Or","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" used","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":" \"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" everywhere","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"Olá!\"","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" including","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":" which","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" Portugal","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":" is slightly","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":".)","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":" more formal)","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} - data: {"id":"gen-1773945469-FtJ6MUMrMYVVCPM0WAxk","object":"chat.completion.chunk","created":1773945469,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":20,"completion_tokens":196,"total_tokens":216,"cost":0.00051138,"is_byok":false,"prompt_tokens_details":{"cached_tokens":20,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00051138,"upstream_inference_prompt_cost":0.00000178,"upstream_inference_completions_cost":0.0005096},"completion_tokens_details":{"reasoning_tokens":179,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319889-qNPs6PR0SRru1d3CzVF1","object":"chat.completion.chunk","created":1777319889,"model":"moonshotai/kimi-k2.5-0127","provider":"ModelRun","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":21,"completion_tokens":173,"total_tokens":194,"cost":0.0005738,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0005738,"upstream_inference_prompt_cost":0.00001155,"upstream_inference_completions_cost":0.00056225},"completion_tokens_details":{"reasoning_tokens":165,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -427,4 +169,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.50860425s + duration: 785.247875ms diff --git a/providertests/testdata/TestOpenRouterCommon/kimi/tool.yaml b/providertests/testdata/TestOpenRouterCommon/kimi/tool.yaml index d0a8ad2b1..c43708574 100644 --- a/providertests/testdata/TestOpenRouterCommon/kimi/tool.yaml +++ b/providertests/testdata/TestOpenRouterCommon/kimi/tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,28 +24,28 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945474-wNsrLiYYBQCYV4b1kI2A\",\"object\":\"chat.completion\",\"created\":1773945474,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":\"fpv0_e0c12c89\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user is asking for the weather in Florence, Italy. I have a weather function available that can get weather information for a location. Let me call this function with \\\"Florence\\\" as the location parameter.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"weather:0\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user is asking for the weather in Florence, Italy. I have a weather function available that can get weather information for a location. Let me call this function with \\\"Florence\\\" as the location parameter.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":68,\"completion_tokens\":63,\"total_tokens\":131,\"cost\":0.0001978,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0001978,\"upstream_inference_prompt_cost\":0.000034,\"upstream_inference_completions_cost\":0.0001638},\"completion_tokens_details\":{\"reasoning_tokens\":52,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1777319891-AbXaksK95wX8kHwAXxXX\",\"object\":\"chat.completion\",\"created\":1777319891,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"Chutes\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\" The user is asking for the weather in Florence, Italy. I have a weather function available that takes a location parameter (which should be the city). I should call the weather function with \\\"Florence\\\" as the location.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"functions.weather:0\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" The user is asking for the weather in Florence, Italy. I have a weather function available that takes a location parameter (which should be the city). I should call the weather function with \\\"Florence\\\" as the location.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":69,\"completion_tokens\":66,\"total_tokens\":135,\"cost\":0.00016236,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00016236,\"upstream_inference_prompt_cost\":0.00003036,\"upstream_inference_completions_cost\":0.000132},\"completion_tokens_details\":{\"reasoning_tokens\":47,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.511454666s + duration: 1.915256958s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 990 + content_length: 1021 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"weather:0","function":{"arguments":"{\"location\": \"Florence\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":"The user is asking for the weather in Florence, Italy. I have a weather function available that can get weather information for a location. Let me call this function with \"Florence\" as the location parameter.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"weather:0","role":"tool"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"functions.weather:0","function":{"arguments":"{\"location\": \"Florence\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" The user is asking for the weather in Florence, Italy. I have a weather function available that takes a location parameter (which should be the city). I should call the weather function with \"Florence\" as the location.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"functions.weather:0","role":"tool"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945477-C1KeaZT0KsADVIvgsAAz\",\"object\":\"chat.completion\",\"created\":1773945477,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"AtlasCloud\",\"system_fingerprint\":\"fpv0_e0c12c89\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is currently **40°C (104°F)**. That's very hot! Make sure to stay hydrated and seek shade if you're visiting the city today.\",\"refusal\":null,\"reasoning\":\"The weather function returned 40 C, which is 40 degrees Celsius. That's quite hot! Let me present this information to the user in a helpful way.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The weather function returned 40 C, which is 40 degrees Celsius. That's quite hot! Let me present this information to the user in a helpful way.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":150,\"completion_tokens\":70,\"total_tokens\":220,\"cost\":0.000257,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000257,\"upstream_inference_prompt_cost\":0.000075,\"upstream_inference_completions_cost\":0.000182},\"completion_tokens_details\":{\"reasoning_tokens\":36,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1777319895-NVPGjsD98YPuLRBFo9BH\",\"object\":\"chat.completion\",\"created\":1777319895,\"model\":\"moonshotai/kimi-k2.5-0127\",\"provider\":\"Chutes\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\" The weather in Florence, Italy is currently **40°C** (104°F). That's quite hot!\",\"refusal\":null,\"reasoning\":\" The weather in Florence, Italy is currently 40°C. That's quite hot - about 104°F. This seems like it might be unusually warm weather for Florence, possibly during a heat wave or in the peak of summer.\",\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\" The weather in Florence, Italy is currently 40°C. That's quite hot - about 104°F. This seems like it might be unusually warm weather for Florence, possibly during a heat wave or in the peak of summer.\",\"format\":\"unknown\",\"index\":0}]}}],\"usage\":{\"prompt_tokens\":108,\"completion_tokens\":67,\"total_tokens\":175,\"cost\":0.00018152,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00018152,\"upstream_inference_prompt_cost\":0.00004752,\"upstream_inference_completions_cost\":0.000134},\"completion_tokens_details\":{\"reasoning_tokens\":46,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.538264458s + duration: 1.689790958s diff --git a/providertests/testdata/TestOpenRouterCommon/kimi/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/kimi/tool_streaming.yaml index 2b927fe97..36db8e985 100644 --- a/providertests/testdata/TestOpenRouterCommon/kimi/tool_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/kimi/tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -28,107 +28,157 @@ interactions: : OPENROUTER PROCESSING - : OPENROUTER PROCESSING + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asking","reasoning_details":[{"type":"reasoning.text","text":" asking","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" asking","reasoning_details":[{"type":"reasoning.text","text":" asking","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.text","text":" Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.text","text":" Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" have","reasoning_details":[{"type":"reasoning.text","text":" have","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.text","text":" use","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" `","reasoning_details":[{"type":"reasoning.text","text":" `","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"weather","reasoning_details":[{"type":"reasoning.text","text":"weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"`","reasoning_details":[{"type":"reasoning.text","text":"`","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" that","reasoning_details":[{"type":"reasoning.text","text":" that","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" takes","reasoning_details":[{"type":"reasoning.text","text":" takes","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" get","reasoning_details":[{"type":"reasoning.text","text":" get","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" this","reasoning_details":[{"type":"reasoning.text","text":" this","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" `","reasoning_details":[{"type":"reasoning.text","text":" `","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.text","text":" information","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"location","reasoning_details":[{"type":"reasoning.text","text":"location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"`","reasoning_details":[{"type":"reasoning.text","text":"`","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" parameter","reasoning_details":[{"type":"reasoning.text","text":" parameter","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" need","reasoning_details":[{"type":"reasoning.text","text":" need","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" which","reasoning_details":[{"type":"reasoning.text","text":" which","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" pass","reasoning_details":[{"type":"reasoning.text","text":" pass","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" city","reasoning_details":[{"type":"reasoning.text","text":" city","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Fl","reasoning_details":[{"type":"reasoning.text","text":"Fl","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" name","reasoning_details":[{"type":"reasoning.text","text":" name","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ore","reasoning_details":[{"type":"reasoning.text","text":"ore","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"nce","reasoning_details":[{"type":"reasoning.text","text":"nce","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" call","reasoning_details":[{"type":"reasoning.text","text":" call","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" this","reasoning_details":[{"type":"reasoning.text","text":" this","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with","reasoning_details":[{"type":"reasoning.text","text":" with","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Fl","reasoning_details":[{"type":"reasoning.text","text":"Fl","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ore","reasoning_details":[{"type":"reasoning.text","text":"ore","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"nce","reasoning_details":[{"type":"reasoning.text","text":"nce","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" or","reasoning_details":[{"type":"reasoning.text","text":" or","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Fl","reasoning_details":[{"type":"reasoning.text","text":"Fl","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"ore","reasoning_details":[{"type":"reasoning.text","text":"ore","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"nce","reasoning_details":[{"type":"reasoning.text","text":"nce","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.text","text":" location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Italy","reasoning_details":[{"type":"reasoning.text","text":"Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" parameter","reasoning_details":[{"type":"reasoning.text","text":" parameter","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\"","reasoning_details":[{"type":"reasoning.text","text":"\"","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as the location","reasoning_details":[{"type":"reasoning.text","text":" as the location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"weather:0","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Let","reasoning_details":[{"type":"reasoning.text","text":" Let","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"location"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me","reasoning_details":[{"type":"reasoning.text","text":" me","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" use","reasoning_details":[{"type":"reasoning.text","text":" use","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" \""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"Fl"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" location","reasoning_details":[{"type":"reasoning.text","text":" location","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ore"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provided","reasoning_details":[{"type":"reasoning.text","text":" provided","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"nce"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" by","reasoning_details":[{"type":"reasoning.text","text":" by","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945481-OpjMSaZdXKWarQh8IgjM","object":"chat.completion.chunk","created":1773945481,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":68,"completion_tokens":57,"total_tokens":125,"cost":0.000154252,"is_byok":false,"prompt_tokens_details":{"cached_tokens":68,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000154252,"upstream_inference_prompt_cost":0.000006052,"upstream_inference_completions_cost":0.0001482},"completion_tokens_details":{"reasoning_tokens":42,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"functions.weather:0","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"location"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" \""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"Fl"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ore"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"nce"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"Italy"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} + + data: {"id":"gen-1777319903-e8Q7Du7mmUgiYBDzoHE6","object":"chat.completion.chunk","created":1777319903,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":69,"completion_tokens":87,"total_tokens":156,"cost":0.00020436,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00020436,"upstream_inference_prompt_cost":0.00003036,"upstream_inference_completions_cost":0.000174},"completion_tokens_details":{"reasoning_tokens":66,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -137,22 +187,22 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.94277625s + duration: 1.407202667s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 999 + content_length: 1128 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"weather:0","function":{"arguments":"{\"location\": \"Florence\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user is asking for the weather in Florence, Italy. I should use the weather function to get this information. I need to pass \"Florence\" as the location parameter.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"weather:0","role":"tool"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"functions.weather:0","function":{"arguments":"{\"location\": \"Florence,Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"unknown","index":0,"text":" user is asking for the weather in Florence, Italy. I have a `weather` function that takes a `location` parameter which is the city name. I should call this function with \"Florence\" or \"Florence,Italy\" as the location. Let me use the location provided by the user.","type":"reasoning.text"}]},{"content":"40 C","tool_call_id":"functions.weather:0","role":"tool"}],"model":"moonshotai/kimi-k2.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -167,139 +217,137 @@ interactions: : OPENROUTER PROCESSING - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The","reasoning_details":[{"type":"reasoning.text","text":"The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" The","reasoning_details":[{"type":"reasoning.text","text":" The","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" returned","reasoning_details":[{"type":"reasoning.text","text":" returned","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function","reasoning_details":[{"type":"reasoning.text","text":" function","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" returned","reasoning_details":[{"type":"reasoning.text","text":" returned","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather","reasoning_details":[{"type":"reasoning.text","text":" weather","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" that","reasoning_details":[{"type":"reasoning.text","text":" that","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" for","reasoning_details":[{"type":"reasoning.text","text":" for","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it's","reasoning_details":[{"type":"reasoning.text","text":" it's","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" as","reasoning_details":[{"type":"reasoning.text","text":" as","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"40","reasoning_details":[{"type":"reasoning.text","text":"40","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" ","reasoning_details":[{"type":"reasoning.text","text":" ","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"°C","reasoning_details":[{"type":"reasoning.text","text":"°C","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"40","reasoning_details":[{"type":"reasoning.text","text":"40","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"°C","reasoning_details":[{"type":"reasoning.text","text":"°C","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":",","reasoning_details":[{"type":"reasoning.text","text":",","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" This","reasoning_details":[{"type":"reasoning.text","text":" This","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Italy","reasoning_details":[{"type":"reasoning.text","text":" Italy","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" is","reasoning_details":[{"type":"reasoning.text","text":" is","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" quite","reasoning_details":[{"type":"reasoning.text","text":" quite","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" That's","reasoning_details":[{"type":"reasoning.text","text":" That's","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hot","reasoning_details":[{"type":"reasoning.text","text":" hot","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" quite","reasoning_details":[{"type":"reasoning.text","text":" quite","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!","reasoning_details":[{"type":"reasoning.text","text":"!","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" hot","reasoning_details":[{"type":"reasoning.text","text":" hot","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" I","reasoning_details":[{"type":"reasoning.text","text":" I","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"!","reasoning_details":[{"type":"reasoning.text","text":"!","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" should","reasoning_details":[{"type":"reasoning.text","text":" should","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Let","reasoning_details":[{"type":"reasoning.text","text":" Let","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provide","reasoning_details":[{"type":"reasoning.text","text":" provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me","reasoning_details":[{"type":"reasoning.text","text":" me","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" this","reasoning_details":[{"type":"reasoning.text","text":" this","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" provide","reasoning_details":[{"type":"reasoning.text","text":" provide","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.text","text":" information","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" this","reasoning_details":[{"type":"reasoning.text","text":" this","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" information","reasoning_details":[{"type":"reasoning.text","text":" information","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to","reasoning_details":[{"type":"reasoning.text","text":" to","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the","reasoning_details":[{"type":"reasoning.text","text":" the","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" user","reasoning_details":[{"type":"reasoning.text","text":" user","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" in","reasoning_details":[{"type":"reasoning.text","text":" in","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helpful","reasoning_details":[{"type":"reasoning.text","text":" helpful","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a","reasoning_details":[{"type":"reasoning.text","text":" a","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" way","reasoning_details":[{"type":"reasoning.text","text":" way","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" helpful","reasoning_details":[{"type":"reasoning.text","text":" helpful","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" way","reasoning_details":[{"type":"reasoning.text","text":" way","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"unknown","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" temperature","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"104","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"104","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"°F","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"°F","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":")**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"),","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" which","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" That's","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" quite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" extremely","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" Make","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" Make","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" sure","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" sure","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" to","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" to","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" hydrated","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" hydrated","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" and","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" seek","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" seek","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" shade","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" shade","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" if","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" if","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" you're","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" you're","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" visiting","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" visiting","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" city","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" city","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":" today","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":" today","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"stop","native_finish_reason":"stop"}]} - data: {"id":"gen-1773945484-SfZv5TJansZrMGHxA2ZN","object":"chat.completion.chunk","created":1773945484,"model":"moonshotai/kimi-k2.5-0127","provider":"AtlasCloud","system_fingerprint":"fpv0_e0c12c89","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":143,"completion_tokens":68,"total_tokens":211,"cost":0.0002483,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0002483,"upstream_inference_prompt_cost":0.0000715,"upstream_inference_completions_cost":0.0001768},"completion_tokens_details":{"reasoning_tokens":36,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319906-5rHRR8lMWdLh68lrzzL7","object":"chat.completion.chunk","created":1777319906,"model":"moonshotai/kimi-k2.5-0127","provider":"Chutes","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":110,"completion_tokens":66,"total_tokens":176,"cost":0.0001804,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0001804,"upstream_inference_prompt_cost":0.0000484,"upstream_inference_completions_cost":0.000132},"completion_tokens_details":{"reasoning_tokens":31,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -308,4 +356,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.370857958s + duration: 1.579724709s diff --git a/providertests/testdata/TestOpenRouterCommon/openai/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommon/openai/multi_tool.yaml index bf7a95468..da125ec7a 100644 --- a/providertests/testdata/TestOpenRouterCommon/openai/multi_tool.yaml +++ b/providertests/testdata/TestOpenRouterCommon/openai/multi_tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,13 +24,13 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n{\"id\":\"gen-1773945381-Qn1xXTBSWlAVHcSVGoNH\",\"object\":\"chat.completion\",\"created\":1773945381,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_Bb9t44hKsOQkKMDje3Do35B9\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"call_Nnev5P7Rhqz9lVYbinyjQEKi\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}]}}],\"usage\":{\"prompt_tokens\":113,\"completion_tokens\":54,\"total_tokens\":167,\"cost\":0.0000901,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000901,\"upstream_inference_prompt_cost\":0.0000226,\"upstream_inference_completions_cost\":0.0000675},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n{\"id\":\"gen-1777319814-aGngWTXl9RxhCunrtZ0A\",\"object\":\"chat.completion\",\"created\":1777319814,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_GVPfJvHywVetZmgLvozGlDCY\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"call_Jal5rEk7hg8UOOa4ulLZyYK0\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\":2,\\\"b\\\":3}\"}}]}}],\"usage\":{\"prompt_tokens\":113,\"completion_tokens\":54,\"total_tokens\":167,\"cost\":0.0000901,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000901,\"upstream_inference_prompt_cost\":0.0000226,\"upstream_inference_completions_cost\":0.0000675},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 3.454036875s + duration: 663.775292ms - id: 1 request: proto: HTTP/1.1 @@ -38,14 +38,14 @@ interactions: proto_minor: 1 content_length: 1285 host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_Bb9t44hKsOQkKMDje3Do35B9","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_Nnev5P7Rhqz9lVYbinyjQEKi","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"call_Bb9t44hKsOQkKMDje3Do35B9","role":"tool"},{"content":"6","tool_call_id":"call_Nnev5P7Rhqz9lVYbinyjQEKi","role":"tool"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_GVPfJvHywVetZmgLvozGlDCY","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_Jal5rEk7hg8UOOa4ulLZyYK0","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"call_GVPfJvHywVetZmgLvozGlDCY","role":"tool"},{"content":"6","tool_call_id":"call_Jal5rEk7hg8UOOa4ulLZyYK0","role":"tool"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n{\"id\":\"gen-1773945382-dSJAvlxyaw4kaA2dYNXa\",\"object\":\"chat.completion\",\"created\":1773945382,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"2 + 3 = **5** \\n2 × 3 = **6**\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":187,\"completion_tokens\":21,\"total_tokens\":208,\"cost\":0.00006365,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00006365,\"upstream_inference_prompt_cost\":0.0000374,\"upstream_inference_completions_cost\":0.00002625},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1777319815-s28FTlkcs87B87dPipLQ\",\"object\":\"chat.completion\",\"created\":1777319815,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"- **2 + 3 = 5**\\n- **2 × 3 = 6**\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":187,\"completion_tokens\":24,\"total_tokens\":211,\"cost\":0.0000674,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000674,\"upstream_inference_prompt_cost\":0.0000374,\"upstream_inference_completions_cost\":0.00003},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 509.885666ms + duration: 663.27875ms diff --git a/providertests/testdata/TestOpenRouterCommon/openai/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/openai/multi_tool_streaming.yaml index fde3d59ae..33df70dc1 100644 --- a/providertests/testdata/TestOpenRouterCommon/openai/multi_tool_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/openai/multi_tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -26,21 +26,23 @@ interactions: body: |+ : OPENROUTER PROCESSING - data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_RyRtXc5TxuhGTghDihBOXNar","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + : OPENROUTER PROCESSING + + data: {"id":"gen-1777319818-QPRmQjcRi7f0czNVMFzC","object":"chat.completion.chunk","created":1777319818,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_8I6muAnyFaBjKyotk1gPRTwU","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319818-QPRmQjcRi7f0czNVMFzC","object":"chat.completion.chunk","created":1777319818,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319818-QPRmQjcRi7f0czNVMFzC","object":"chat.completion.chunk","created":1777319818,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"call_JmyBVHKW2AnWeep5UITLC9Wx","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319818-QPRmQjcRi7f0czNVMFzC","object":"chat.completion.chunk","created":1777319818,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"call_pKAAv6bKX2qLYJ85RW4Hxqfp","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319818-QPRmQjcRi7f0czNVMFzC","object":"chat.completion.chunk","created":1777319818,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319818-QPRmQjcRi7f0czNVMFzC","object":"chat.completion.chunk","created":1777319818,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\":2,\"b\":3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} + data: {"id":"gen-1777319818-QPRmQjcRi7f0czNVMFzC","object":"chat.completion.chunk","created":1777319818,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} - data: {"id":"gen-1773945383-68FpvFnqJ5V1GOao5iM6","object":"chat.completion.chunk","created":1773945383,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}],"usage":{"prompt_tokens":109,"completion_tokens":54,"total_tokens":163,"cost":0.0000893,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000893,"upstream_inference_prompt_cost":0.0000218,"upstream_inference_completions_cost":0.0000675},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319818-QPRmQjcRi7f0czNVMFzC","object":"chat.completion.chunk","created":1777319818,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}],"usage":{"prompt_tokens":109,"completion_tokens":54,"total_tokens":163,"cost":0.0000893,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000893,"upstream_inference_prompt_cost":0.0000218,"upstream_inference_completions_cost":0.0000675},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -49,7 +51,7 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 449.3595ms + duration: 637.342791ms - id: 1 request: proto: HTTP/1.1 @@ -57,14 +59,14 @@ interactions: proto_minor: 1 content_length: 1322 host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_RyRtXc5TxuhGTghDihBOXNar","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_JmyBVHKW2AnWeep5UITLC9Wx","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"call_RyRtXc5TxuhGTghDihBOXNar","role":"tool"},{"content":"6","tool_call_id":"call_JmyBVHKW2AnWeep5UITLC9Wx","role":"tool"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system"},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"call_8I6muAnyFaBjKyotk1gPRTwU","function":{"arguments":"{\"a\":2,\"b\":3}","name":"add"},"type":"function"},{"id":"call_pKAAv6bKX2qLYJ85RW4Hxqfp","function":{"arguments":"{\"a\":2,\"b\":3}","name":"multiply"},"type":"function"}],"role":"assistant"},{"content":"5","tool_call_id":"call_8I6muAnyFaBjKyotk1gPRTwU","role":"tool"},{"content":"6","tool_call_id":"call_pKAAv6bKX2qLYJ85RW4Hxqfp","role":"tool"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -73,49 +75,73 @@ interactions: proto_minor: 0 content_length: -1 body: |+ - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + : OPENROUTER PROCESSING + + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" Addition","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":":","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" \\(","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" +","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" +","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"\\","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":")","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"5","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" \n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"**\n","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" Multip","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"lication","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":":","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ×","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" \\(","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"2","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" \\","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"times","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"3","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"6","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"\\","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":")","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + : OPENROUTER PROCESSING + + : OPENROUTER PROCESSING - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}]} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}]} - data: {"id":"gen-1773945384-CDS0bQpWtuMHu6nuk27q","object":"chat.completion.chunk","created":1773945384,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}],"usage":{"prompt_tokens":183,"completion_tokens":24,"total_tokens":207,"cost":0.0000666,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000666,"upstream_inference_prompt_cost":0.0000366,"upstream_inference_completions_cost":0.00003},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319819-JeJtDeCKjjHTt8hFk9TD","object":"chat.completion.chunk","created":1777319819,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}],"usage":{"prompt_tokens":183,"completion_tokens":33,"total_tokens":216,"cost":0.00007785,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.00007785,"upstream_inference_prompt_cost":0.0000366,"upstream_inference_completions_cost":0.00004125},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -124,4 +150,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 388.096708ms + duration: 579.374708ms diff --git a/providertests/testdata/TestOpenRouterCommon/openai/simple.yaml b/providertests/testdata/TestOpenRouterCommon/openai/simple.yaml index 4394722da..4116f4db1 100644 --- a/providertests/testdata/TestOpenRouterCommon/openai/simple.yaml +++ b/providertests/testdata/TestOpenRouterCommon/openai/simple.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,10 +24,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n{\"id\":\"gen-1773945373-Bv9tKBtwWtfAzjZPxf5A\",\"object\":\"chat.completion\",\"created\":1773945373,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá!\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":19,\"completion_tokens\":6,\"total_tokens\":25,\"cost\":0.0000113,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000113,\"upstream_inference_prompt_cost\":0.0000038,\"upstream_inference_completions_cost\":0.0000075},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n{\"id\":\"gen-1777319808-n1Y7IbUGJBiu3hP0bz53\",\"object\":\"chat.completion\",\"created\":1777319808,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"Oi! \U0001F60A\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":19,\"completion_tokens\":7,\"total_tokens\":26,\"cost\":0.00001255,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00001255,\"upstream_inference_prompt_cost\":0.0000038,\"upstream_inference_completions_cost\":0.00000875},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 830.207834ms + duration: 577.611958ms diff --git a/providertests/testdata/TestOpenRouterCommon/openai/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/openai/simple_streaming.yaml index e9338b2e2..e30e60d5c 100644 --- a/providertests/testdata/TestOpenRouterCommon/openai/simple_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/openai/simple_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -23,10 +23,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: "data: {\"id\":\"gen-1773945374-q8ZSp46PFfXc9NAS2qL7\",\"object\":\"chat.completion.chunk\",\"created\":1773945374,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Oi\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945374-q8ZSp46PFfXc9NAS2qL7\",\"object\":\"chat.completion.chunk\",\"created\":1773945374,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"!\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945374-q8ZSp46PFfXc9NAS2qL7\",\"object\":\"chat.completion.chunk\",\"created\":1773945374,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \U0001F60A\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945374-q8ZSp46PFfXc9NAS2qL7\",\"object\":\"chat.completion.chunk\",\"created\":1773945374,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\"}]}\n\ndata: {\"id\":\"gen-1773945374-q8ZSp46PFfXc9NAS2qL7\",\"object\":\"chat.completion.chunk\",\"created\":1773945374,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\"}],\"usage\":{\"prompt_tokens\":19,\"completion_tokens\":7,\"total_tokens\":26,\"cost\":0.00001255,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00001255,\"upstream_inference_prompt_cost\":0.0000038,\"upstream_inference_completions_cost\":0.00000875},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + body: ": OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1777319809-KRozO9hOQbdWkZAi8Zj7\",\"object\":\"chat.completion.chunk\",\"created\":1777319809,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Olá\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319809-KRozO9hOQbdWkZAi8Zj7\",\"object\":\"chat.completion.chunk\",\"created\":1777319809,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"!\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319809-KRozO9hOQbdWkZAi8Zj7\",\"object\":\"chat.completion.chunk\",\"created\":1777319809,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \U0001F60A\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319809-KRozO9hOQbdWkZAi8Zj7\",\"object\":\"chat.completion.chunk\",\"created\":1777319809,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\"}]}\n\ndata: {\"id\":\"gen-1777319809-KRozO9hOQbdWkZAi8Zj7\",\"object\":\"chat.completion.chunk\",\"created\":1777319809,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\"}],\"usage\":{\"prompt_tokens\":19,\"completion_tokens\":7,\"total_tokens\":26,\"cost\":0.00001255,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00001255,\"upstream_inference_prompt_cost\":0.0000038,\"upstream_inference_completions_cost\":0.00000875},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 453.163167ms + duration: 606.367333ms diff --git a/providertests/testdata/TestOpenRouterCommon/openai/tool.yaml b/providertests/testdata/TestOpenRouterCommon/openai/tool.yaml index c5a5ddd90..cf4f4a549 100644 --- a/providertests/testdata/TestOpenRouterCommon/openai/tool.yaml +++ b/providertests/testdata/TestOpenRouterCommon/openai/tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,13 +24,13 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n{\"id\":\"gen-1773945374-TeLNBnAFqTwjuAi8wpRj\",\"object\":\"chat.completion\",\"created\":1773945374,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_fYo0Z8fLQU2v12NNb25MFUhj\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":63,\"completion_tokens\":20,\"total_tokens\":83,\"cost\":0.0000376,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000376,\"upstream_inference_prompt_cost\":0.0000126,\"upstream_inference_completions_cost\":0.000025},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n{\"id\":\"gen-1777319810-8Yuvh6RCsaTxAqIJ0hFi\",\"object\":\"chat.completion\",\"created\":1777319810,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"call_DCueNvTKgjMyxnoqkMFfEefn\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\":\\\"Florence, Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":63,\"completion_tokens\":20,\"total_tokens\":83,\"cost\":0.0000376,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.0000376,\"upstream_inference_prompt_cost\":0.0000126,\"upstream_inference_completions_cost\":0.000025},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 667.863167ms + duration: 528.816167ms - id: 1 request: proto: HTTP/1.1 @@ -38,14 +38,14 @@ interactions: proto_minor: 1 content_length: 749 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_fYo0Z8fLQU2v12NNb25MFUhj","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"call_fYo0Z8fLQU2v12NNb25MFUhj","role":"tool"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_DCueNvTKgjMyxnoqkMFfEefn","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"call_DCueNvTKgjMyxnoqkMFfEefn","role":"tool"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n{\"id\":\"gen-1773945375-9AEqJV7RbOK8FPk7hsB2\",\"object\":\"chat.completion\",\"created\":1773945375,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in **Florence, Italy** is currently **40°C**.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":95,\"completion_tokens\":20,\"total_tokens\":115,\"cost\":0.000044,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000044,\"upstream_inference_prompt_cost\":0.000019,\"upstream_inference_completions_cost\":0.000025},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n{\"id\":\"gen-1777319811-IU2UqYiq6vT8x4Ewcqgw\",\"object\":\"chat.completion\",\"created\":1777319811,\"model\":\"openai/gpt-5.4-nano-20260317\",\"provider\":\"OpenAI\",\"system_fingerprint\":null,\"service_tier\":\"default\",\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"completed\",\"message\":{\"role\":\"assistant\",\"content\":\"The current weather in **Florence, Italy** is **40°C**.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":95,\"completion_tokens\":20,\"total_tokens\":115,\"cost\":0.000044,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000044,\"upstream_inference_prompt_cost\":0.000019,\"upstream_inference_completions_cost\":0.000025},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 650.392417ms + duration: 551.837583ms diff --git a/providertests/testdata/TestOpenRouterCommon/openai/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommon/openai/tool_streaming.yaml index 8537abb4d..145675e49 100644 --- a/providertests/testdata/TestOpenRouterCommon/openai/tool_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommon/openai/tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -26,29 +26,29 @@ interactions: body: |+ : OPENROUTER PROCESSING - data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_6jrRIpW4Qm0ovEB92ylZxfBy","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319812-D6VzmWKMw6zukREQPum0","object":"chat.completion.chunk","created":1777319812,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"call_PwnQR6IkH2UiHQ4qel3LGcri","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319812-D6VzmWKMw6zukREQPum0","object":"chat.completion.chunk","created":1777319812,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319812-D6VzmWKMw6zukREQPum0","object":"chat.completion.chunk","created":1777319812,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"location"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319812-D6VzmWKMw6zukREQPum0","object":"chat.completion.chunk","created":1777319812,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"location"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319812-D6VzmWKMw6zukREQPum0","object":"chat.completion.chunk","created":1777319812,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":\""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"Flor"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319812-D6VzmWKMw6zukREQPum0","object":"chat.completion.chunk","created":1777319812,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"Flor"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ence"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319812-D6VzmWKMw6zukREQPum0","object":"chat.completion.chunk","created":1777319812,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ence"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319812-D6VzmWKMw6zukREQPum0","object":"chat.completion.chunk","created":1777319812,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":","}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" Italy"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319812-D6VzmWKMw6zukREQPum0","object":"chat.completion.chunk","created":1777319812,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" Italy"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319812-D6VzmWKMw6zukREQPum0","object":"chat.completion.chunk","created":1777319812,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} + data: {"id":"gen-1777319812-D6VzmWKMw6zukREQPum0","object":"chat.completion.chunk","created":1777319812,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}]} - data: {"id":"gen-1773945376-TLrrn3G9TGS0BbGDFto3","object":"chat.completion.chunk","created":1773945376,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}],"usage":{"prompt_tokens":63,"completion_tokens":20,"total_tokens":83,"cost":0.0000376,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000376,"upstream_inference_prompt_cost":0.0000126,"upstream_inference_completions_cost":0.000025},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319812-D6VzmWKMw6zukREQPum0","object":"chat.completion.chunk","created":1777319812,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"completed"}],"usage":{"prompt_tokens":63,"completion_tokens":20,"total_tokens":83,"cost":0.0000376,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.0000376,"upstream_inference_prompt_cost":0.0000126,"upstream_inference_completions_cost":0.000025},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -57,7 +57,7 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 406.696208ms + duration: 845.789666ms - id: 1 request: proto: HTTP/1.1 @@ -65,14 +65,14 @@ interactions: proto_minor: 1 content_length: 803 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_6jrRIpW4Qm0ovEB92ylZxfBy","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"call_6jrRIpW4Qm0ovEB92ylZxfBy","role":"tool"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"call_PwnQR6IkH2UiHQ4qel3LGcri","function":{"arguments":"{\"location\":\"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant"},{"content":"40 C","tool_call_id":"call_PwnQR6IkH2UiHQ4qel3LGcri","role":"tool"}],"model":"openai/gpt-5.4-nano","max_completion_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -83,41 +83,41 @@ interactions: body: |+ : OPENROUTER PROCESSING - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"The","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" weather","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" in","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"Flor","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"ence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"Flor","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"ence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":",","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" Italy","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" currently","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" is","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"40","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"°C","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}]} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}]} - data: {"id":"gen-1773945377-qEiqJ8jtJDRv2fbll0BH","object":"chat.completion.chunk","created":1773945377,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}],"usage":{"prompt_tokens":95,"completion_tokens":20,"total_tokens":115,"cost":0.000044,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000044,"upstream_inference_prompt_cost":0.000019,"upstream_inference_completions_cost":0.000025},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319813-VorvbQqOmlpN8EcPKbMR","object":"chat.completion.chunk","created":1777319813,"model":"openai/gpt-5.4-nano-20260317","provider":"OpenAI","service_tier":"default","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"completed"}],"usage":{"prompt_tokens":95,"completion_tokens":20,"total_tokens":115,"cost":0.000044,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000044,"upstream_inference_prompt_cost":0.000019,"upstream_inference_completions_cost":0.000025},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -126,4 +126,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 896.667791ms + duration: 701.089708ms diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool.yaml index 803541e79..4b5e30944 100644 --- a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool.yaml +++ b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,13 +24,13 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945519-vH8l4rm4QBpQxTOx4cAf\",\"object\":\"chat.completion\",\"created\":1773945519,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_01H14Zn23kEJtcsCuMfrUSLn\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"toolu_bdrk_01YV3GUPWt1ArbfQmf7iprfQ\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}}]}}],\"usage\":{\"prompt_tokens\":690,\"completion_tokens\":120,\"total_tokens\":810,\"cost\":0.00129,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00129,\"upstream_inference_prompt_cost\":0.00069,\"upstream_inference_completions_cost\":0.0006},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n{\"id\":\"gen-1777319940-5gxPYdze0IneZJMlSBKX\",\"object\":\"chat.completion\",\"created\":1777319940,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_use\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_011gzTohxPFN5kvawEZfCgDs\",\"function\":{\"name\":\"add\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}},{\"type\":\"function\",\"index\":1,\"id\":\"toolu_bdrk_013ddv4UW7UB3M9EvYTGzg3L\",\"function\":{\"name\":\"multiply\",\"arguments\":\"{\\\"a\\\": 2, \\\"b\\\": 3}\"}}]}}],\"usage\":{\"prompt_tokens\":690,\"completion_tokens\":120,\"total_tokens\":810,\"cost\":0.00129,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.00129,\"upstream_inference_prompt_cost\":0.00069,\"upstream_inference_completions_cost\":0.0006},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.567961792s + duration: 1.126607917s - id: 1 request: proto: HTTP/1.1 @@ -38,14 +38,14 @@ interactions: proto_minor: 1 content_length: 1385 host: "" - body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01H14Zn23kEJtcsCuMfrUSLn","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_bdrk_01YV3GUPWt1ArbfQmf7iprfQ","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_bdrk_01H14Zn23kEJtcsCuMfrUSLn","role":"tool"},{"content":"6","tool_call_id":"toolu_bdrk_01YV3GUPWt1ArbfQmf7iprfQ","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant. CRITICAL: Always use both add and multiply at the same time ALWAYS.","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_011gzTohxPFN5kvawEZfCgDs","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_bdrk_013ddv4UW7UB3M9EvYTGzg3L","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_bdrk_011gzTohxPFN5kvawEZfCgDs","role":"tool"},{"content":"6","tool_call_id":"toolu_bdrk_013ddv4UW7UB3M9EvYTGzg3L","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n{\"id\":\"gen-1773945521-RVUJLnRL6jUAAh5b6soX\",\"object\":\"chat.completion\",\"created\":1773945521,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Perfect! Here are the results:\\n\\n- **Addition**: 2 + 3 = **5**\\n- **Multiplication**: 2 × 3 = **6**\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":871,\"completion_tokens\":43,\"total_tokens\":914,\"cost\":0.001086,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001086,\"upstream_inference_prompt_cost\":0.000871,\"upstream_inference_completions_cost\":0.000215},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n{\"id\":\"gen-1777319942-T4bRv1QFKxB8NpCHToUg\",\"object\":\"chat.completion\",\"created\":1777319942,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\",\"message\":{\"role\":\"assistant\",\"content\":\"Perfect! Here are the results:\\n\\n- **Addition**: 2 + 3 = **5**\\n- **Multiplication**: 2 × 3 = **6**\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":871,\"completion_tokens\":43,\"total_tokens\":914,\"cost\":0.001086,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001086,\"upstream_inference_prompt_cost\":0.000871,\"upstream_inference_completions_cost\":0.000215},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.465064916s + duration: 1.450215s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool_streaming.yaml index 3babb9361..16d6b1090 100644 --- a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/multi_tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -28,49 +28,41 @@ interactions: : OPENROUTER PROCESSING - : OPENROUTER PROCESSING + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01FS6PPeAPQTDNqXK3a3eRHr","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a"}}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" 2"}}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":", "}}]},"finish_reason":null,"native_finish_reason":null}]} - : OPENROUTER PROCESSING - - data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01KDfMFitkvhgBdEEGHT9CRQ","type":"function","function":{"name":"add","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"b\""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"a\": 2"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"toolu_bdrk_01YRxwgSi9gzNNtQ9Bz5AX6u","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":", \"b\": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"id":"toolu_bdrk_011XFKroyRot22bfhg21E6aX","type":"function","function":{"name":"multiply","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\": 2"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":", \""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"{\"a\": "}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"b\":"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"2"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":" 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":", \""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_use"}]} - data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":1,"function":{"arguments":"b\": 3}"}}]},"finish_reason":null,"native_finish_reason":null}]} - - data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} - - data: {"id":"gen-1773945523-tt56AysOw62Fb3DpltAS","object":"chat.completion.chunk","created":1773945523,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":685,"completion_tokens":120,"total_tokens":805,"cost":0.001285,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001285,"upstream_inference_prompt_cost":0.000685,"upstream_inference_completions_cost":0.0006},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319944-Chq7Z6SUi1ZPNQoVHReu","object":"chat.completion.chunk","created":1777319944,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_use"}],"usage":{"prompt_tokens":685,"completion_tokens":120,"total_tokens":805,"cost":0.001285,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001285,"upstream_inference_prompt_cost":0.000685,"upstream_inference_completions_cost":0.0006},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -79,7 +71,7 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 4.244026542s + duration: 1.370825s - id: 1 request: proto: HTTP/1.1 @@ -87,14 +79,14 @@ interactions: proto_minor: 1 content_length: 1422 host: "" - body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01KDfMFitkvhgBdEEGHT9CRQ","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_bdrk_011XFKroyRot22bfhg21E6aX","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_bdrk_01KDfMFitkvhgBdEEGHT9CRQ","role":"tool"},{"content":"6","tool_call_id":"toolu_bdrk_011XFKroyRot22bfhg21E6aX","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant. Always use both add and multiply at the same time.","role":"system","cache_control":{"type":"ephemeral"}},{"content":"Add and multiply the number 2 and 3","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01FS6PPeAPQTDNqXK3a3eRHr","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"add"},"type":"function"},{"id":"toolu_bdrk_01YRxwgSi9gzNNtQ9Bz5AX6u","function":{"arguments":"{\"a\": 2, \"b\": 3}","name":"multiply"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"5","tool_call_id":"toolu_bdrk_01FS6PPeAPQTDNqXK3a3eRHr","role":"tool"},{"content":"6","tool_call_id":"toolu_bdrk_01YRxwgSi9gzNNtQ9Bz5AX6u","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"add","strict":false,"description":"Add two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"},{"function":{"name":"multiply","strict":false,"description":"Multiply two numbers","parameters":{"properties":{"a":{"description":"first number","type":"integer"},"b":{"description":"second number","type":"integer"}},"required":["a","b"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -107,27 +99,27 @@ interactions: : OPENROUTER PROCESSING - : OPENROUTER PROCESSING + data: {"id":"gen-1777319945-Gm4f5AD272Fyu1cg30BV","object":"chat.completion.chunk","created":1777319945,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"Perfect","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"Here are the results:\n\n-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319945-Gm4f5AD272Fyu1cg30BV","object":"chat.completion.chunk","created":1777319945,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"! Here","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319945-Gm4f5AD272Fyu1cg30BV","object":"chat.completion.chunk","created":1777319945,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" are the results:\n\n-","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"Addition","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319945-Gm4f5AD272Fyu1cg30BV","object":"chat.completion.chunk","created":1777319945,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **Addition","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"**: 2 + 3 ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319945-Gm4f5AD272Fyu1cg30BV","object":"chat.completion.chunk","created":1777319945,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"**: 2 + 3 ","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"= **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319945-Gm4f5AD272Fyu1cg30BV","object":"chat.completion.chunk","created":1777319945,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"= **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"5**\n- **Multiplication**:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319945-Gm4f5AD272Fyu1cg30BV","object":"chat.completion.chunk","created":1777319945,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"5**\n- **Multiplication**:","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" 2 × 3 =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319945-Gm4f5AD272Fyu1cg30BV","object":"chat.completion.chunk","created":1777319945,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" 2 × 3 =","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **6**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319945-Gm4f5AD272Fyu1cg30BV","object":"chat.completion.chunk","created":1777319945,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **6**","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} + data: {"id":"gen-1777319945-Gm4f5AD272Fyu1cg30BV","object":"chat.completion.chunk","created":1777319945,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"end_turn"}]} - data: {"id":"gen-1773945528-OutOUCEUBNVQzbdS7ePu","object":"chat.completion.chunk","created":1773945528,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":866,"completion_tokens":41,"total_tokens":907,"cost":0.001071,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001071,"upstream_inference_prompt_cost":0.000866,"upstream_inference_completions_cost":0.000205},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319945-Gm4f5AD272Fyu1cg30BV","object":"chat.completion.chunk","created":1777319945,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"end_turn"}],"usage":{"prompt_tokens":866,"completion_tokens":43,"total_tokens":909,"cost":0.001081,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001081,"upstream_inference_prompt_cost":0.000866,"upstream_inference_completions_cost":0.000215},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -136,4 +128,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.563418666s + duration: 1.289342083s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple.yaml index c43f51581..445aa6973 100644 --- a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple.yaml +++ b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,10 +24,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945503-TWLdI6hobgaikHf5gRS1\",\"object\":\"chat.completion\",\"created\":1773945503,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá! \U0001F44B\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":10,\"total_tokens\":26,\"cost\":0.000066,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000066,\"upstream_inference_prompt_cost\":0.000016,\"upstream_inference_completions_cost\":0.00005},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1777319930-L8KSfNKOH38dkufPhaUr\",\"object\":\"chat.completion\",\"created\":1777319930,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\",\"message\":{\"role\":\"assistant\",\"content\":\"Olá! \U0001F44B\\n\\nHow can I help you today?\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":18,\"total_tokens\":34,\"cost\":0.000106,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000106,\"upstream_inference_prompt_cost\":0.000016,\"upstream_inference_completions_cost\":0.00009},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 4.339756292s + duration: 5.004122125s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple_streaming.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple_streaming.yaml index a3946059f..208bfa2d8 100644 --- a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/simple_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -23,10 +23,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: ": OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Olá! \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\U0001F44B\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\\n\\n(\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Or\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" \\\"\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Oi!\\\" for\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" a\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" more casual greeting)\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}]}\n\ndata: {\"id\":\"gen-1773945508-Gat2V4icRH8NVNjvno2y\",\"object\":\"chat.completion.chunk\",\"created\":1773945508,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\"}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":24,\"total_tokens\":40,\"cost\":0.000136,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000136,\"upstream_inference_prompt_cost\":0.000016,\"upstream_inference_completions_cost\":0.00012},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" + body: ": OPENROUTER PROCESSING\n\n: OPENROUTER PROCESSING\n\ndata: {\"id\":\"gen-1777319932-YgFptgSBThjQHdYuhNa6\",\"object\":\"chat.completion.chunk\",\"created\":1777319932,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"Olá! \",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319932-YgFptgSBThjQHdYuhNa6\",\"object\":\"chat.completion.chunk\",\"created\":1777319932,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\U0001F44B\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319932-YgFptgSBThjQHdYuhNa6\",\"object\":\"chat.completion.chunk\",\"created\":1777319932,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\\n\\nHow\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319932-YgFptgSBThjQHdYuhNa6\",\"object\":\"chat.completion.chunk\",\"created\":1777319932,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\" can I help you today?\",\"role\":\"assistant\"},\"finish_reason\":null,\"native_finish_reason\":null}]}\n\ndata: {\"id\":\"gen-1777319932-YgFptgSBThjQHdYuhNa6\",\"object\":\"chat.completion.chunk\",\"created\":1777319932,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\"}]}\n\ndata: {\"id\":\"gen-1777319932-YgFptgSBThjQHdYuhNa6\",\"object\":\"chat.completion.chunk\",\"created\":1777319932,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"\",\"role\":\"assistant\"},\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\"}],\"usage\":{\"prompt_tokens\":16,\"completion_tokens\":18,\"total_tokens\":34,\"cost\":0.000106,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000106,\"upstream_inference_prompt_cost\":0.000016,\"upstream_inference_completions_cost\":0.00009},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}\n\ndata: [DONE]\n\n" headers: Content-Type: - text/event-stream status: 200 OK code: 200 - duration: 4.0492025s + duration: 1.203068917s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool.yaml index e6ba30a13..83cc54104 100644 --- a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool.yaml +++ b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,13 +24,13 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n{\"id\":\"gen-1773945512-Xt6mSHr3OgFEVbjoGGkN\",\"object\":\"chat.completion\",\"created\":1773945512,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_01X4cGongGVKKVt2JGXZNZnt\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence, Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":577,\"completion_tokens\":54,\"total_tokens\":631,\"cost\":0.000847,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000847,\"upstream_inference_prompt_cost\":0.000577,\"upstream_inference_completions_cost\":0.00027},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n{\"id\":\"gen-1777319934-1HZi3MDZW5QwcjMB6tjc\",\"object\":\"chat.completion\",\"created\":1777319934,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_use\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":null,\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_0156sNzvRkpm2xuxFNs2N49s\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence, Italy\\\"}\"}}]}}],\"usage\":{\"prompt_tokens\":577,\"completion_tokens\":54,\"total_tokens\":631,\"cost\":0.000847,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000847,\"upstream_inference_prompt_cost\":0.000577,\"upstream_inference_completions_cost\":0.00027},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.363396958s + duration: 1.45853775s - id: 1 request: proto: HTTP/1.1 @@ -38,14 +38,14 @@ interactions: proto_minor: 1 content_length: 832 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01X4cGongGVKKVt2JGXZNZnt","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_bdrk_01X4cGongGVKKVt2JGXZNZnt","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_0156sNzvRkpm2xuxFNs2N49s","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_bdrk_0156sNzvRkpm2xuxFNs2N49s","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945513-P0NATIIxI7GM9cWqpyep\",\"object\":\"chat.completion\",\"created\":1773945513,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is currently **40°C (104°F)**, which is quite hot! It's a warm summer day in Florence. Make sure to stay hydrated and use sunscreen if you're planning to be outdoors.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":646,\"completion_tokens\":54,\"total_tokens\":700,\"cost\":0.000916,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000916,\"upstream_inference_prompt_cost\":0.000646,\"upstream_inference_completions_cost\":0.00027},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n{\"id\":\"gen-1777319936-rW62wrIX8oNT4X6EucWB\",\"object\":\"chat.completion\",\"created\":1777319936,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is currently **40°C (104°F)**. That's quite hot! If you're planning to visit or are there now, make sure to stay hydrated, wear sunscreen, and try to stay in shaded areas during the hottest parts of the day.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":646,\"completion_tokens\":65,\"total_tokens\":711,\"cost\":0.000971,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.000971,\"upstream_inference_prompt_cost\":0.000646,\"upstream_inference_completions_cost\":0.000325},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.631234625s + duration: 1.1230985s diff --git a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool_streaming.yaml b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool_streaming.yaml index 7c2e3fa18..ea83d71cd 100644 --- a/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool_streaming.yaml +++ b/providertests/testdata/TestOpenRouterCommonWithAnthropicCache/anthropic/tool_streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -28,25 +28,29 @@ interactions: : OPENROUTER PROCESSING - : OPENROUTER PROCESSING + data: {"id":"gen-1777319937-TnBGr8gcC8LZ7pmTzgP6","object":"chat.completion.chunk","created":1777319937,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01LTELMMWKNzJUfqvcC4sycZ","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319937-TnBGr8gcC8LZ7pmTzgP6","object":"chat.completion.chunk","created":1777319937,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01QQHfcup9N3oZuLJo424HVC","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319937-TnBGr8gcC8LZ7pmTzgP6","object":"chat.completion.chunk","created":1777319937,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319937-TnBGr8gcC8LZ7pmTzgP6","object":"chat.completion.chunk","created":1777319937,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"l"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319937-TnBGr8gcC8LZ7pmTzgP6","object":"chat.completion.chunk","created":1777319937,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ocatio"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"locati"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319937-TnBGr8gcC8LZ7pmTzgP6","object":"chat.completion.chunk","created":1777319937,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"n\""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"on\": \"Flor"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319937-TnBGr8gcC8LZ7pmTzgP6","object":"chat.completion.chunk","created":1777319937,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":": \"Flore"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ence, It"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319937-TnBGr8gcC8LZ7pmTzgP6","object":"chat.completion.chunk","created":1777319937,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"nce, "}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"aly\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319937-TnBGr8gcC8LZ7pmTzgP6","object":"chat.completion.chunk","created":1777319937,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"Ital"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} + data: {"id":"gen-1777319937-TnBGr8gcC8LZ7pmTzgP6","object":"chat.completion.chunk","created":1777319937,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"y\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945515-sgmaEwpZZyQZdwfyE0yB","object":"chat.completion.chunk","created":1773945515,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":577,"completion_tokens":54,"total_tokens":631,"cost":0.000847,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000847,"upstream_inference_prompt_cost":0.000577,"upstream_inference_completions_cost":0.00027},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319937-TnBGr8gcC8LZ7pmTzgP6","object":"chat.completion.chunk","created":1777319937,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_use"}]} + + data: {"id":"gen-1777319937-TnBGr8gcC8LZ7pmTzgP6","object":"chat.completion.chunk","created":1777319937,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_use"}],"usage":{"prompt_tokens":577,"completion_tokens":54,"total_tokens":631,"cost":0.000847,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000847,"upstream_inference_prompt_cost":0.000577,"upstream_inference_completions_cost":0.00027},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -55,7 +59,7 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.609333666s + duration: 1.34971325s - id: 1 request: proto: HTTP/1.1 @@ -63,14 +67,14 @@ interactions: proto_minor: 1 content_length: 886 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01QQHfcup9N3oZuLJo424HVC","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_bdrk_01QQHfcup9N3oZuLJo424HVC","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system","cache_control":{"type":"ephemeral"}},{"content":"What''s the weather in Florence,Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01LTELMMWKNzJUfqvcC4sycZ","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function","cache_control":{"type":"ephemeral"}}],"role":"assistant"},{"content":"40 C","tool_call_id":"toolu_bdrk_01LTELMMWKNzJUfqvcC4sycZ","role":"tool"}],"model":"anthropic/claude-haiku-4.5","max_tokens":4000,"stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -83,53 +87,49 @@ interactions: : OPENROUTER PROCESSING - : OPENROUTER PROCESSING - - : OPENROUTER PROCESSING - - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"The current","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"The weather in Florence, Italy is currently","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" weather in Florence, Italy is **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"40°C (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"40°C (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"104°F)**,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"104°F)**,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" which","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" which is quite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" is quite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" It","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" It","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"'s a very","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"'s a typical warm","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" warm","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" day","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" day. Make","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" in Florence.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" sure to stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" Make","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hydrated,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" sure to stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" wear","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hydrated and use sun","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" light clothing","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" protection if","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":", and use","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" you're","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" sun protection if you","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" planning","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"'re planning","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" to be out","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" to be","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"doors.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" outside.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"end_turn"}]} - data: {"id":"gen-1773945517-KstYN5GyTgkkVlJf1xOk","object":"chat.completion.chunk","created":1773945517,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":646,"completion_tokens":54,"total_tokens":700,"cost":0.000916,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000916,"upstream_inference_prompt_cost":0.000646,"upstream_inference_completions_cost":0.00027},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319939-WDBJKeSPlMNmYM8wdvlY","object":"chat.completion.chunk","created":1777319939,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"end_turn"}],"usage":{"prompt_tokens":646,"completion_tokens":56,"total_tokens":702,"cost":0.000926,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.000926,"upstream_inference_prompt_cost":0.000646,"upstream_inference_completions_cost":0.00028},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -138,4 +138,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.755883125s + duration: 1.038457s diff --git a/providertests/testdata/TestOpenRouterThinking/anthropic/thinking-streaming.yaml b/providertests/testdata/TestOpenRouterThinking/anthropic/thinking-streaming.yaml index ec593ea7e..088857538 100644 --- a/providertests/testdata/TestOpenRouterThinking/anthropic/thinking-streaming.yaml +++ b/providertests/testdata/TestOpenRouterThinking/anthropic/thinking-streaming.yaml @@ -15,7 +15,7 @@ interactions: Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -28,59 +28,75 @@ interactions: : OPENROUTER PROCESSING - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The user is asking for","reasoning_details":[{"type":"reasoning.text","text":"The user is asking for","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"The user is asking for","reasoning_details":[{"type":"reasoning.text","text":"The user is asking for","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the weather in Florence, Italy. I","reasoning_details":[{"type":"reasoning.text","text":" the weather in Florence, Italy. I","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" weather information in Florence, Italy. I","reasoning_details":[{"type":"reasoning.text","text":" weather information in Florence, Italy. I","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" have","reasoning_details":[{"type":"reasoning.text","text":" have","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" have","reasoning_details":[{"type":"reasoning.text","text":" have","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a weather","reasoning_details":[{"type":"reasoning.text","text":" a weather","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" access","reasoning_details":[{"type":"reasoning.text","text":" access","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" function available that takes","reasoning_details":[{"type":"reasoning.text","text":" function available that takes","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" to a weather function that takes a location","reasoning_details":[{"type":"reasoning.text","text":" to a weather function that takes a location","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" a location parameter. I should call","reasoning_details":[{"type":"reasoning.text","text":" a location parameter. I should call","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" parameter. I shoul","reasoning_details":[{"type":"reasoning.text","text":" parameter. I shoul","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" it","reasoning_details":[{"type":"reasoning.text","text":" it","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"d call","reasoning_details":[{"type":"reasoning.text","text":"d call","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" with \"Florence, Italy\" or","reasoning_details":[{"type":"reasoning.text","text":" with \"Florence, Italy\" or","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the weather function with \"Florence, Italy","reasoning_details":[{"type":"reasoning.text","text":" the weather function with \"Florence, Italy","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" just","reasoning_details":[{"type":"reasoning.text","text":" just","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\" or","reasoning_details":[{"type":"reasoning.text","text":"\" or","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"Florence\" as the location. Let","reasoning_details":[{"type":"reasoning.text","text":" \"Florence\" as the location. Let","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"Florence\" as the location.","reasoning_details":[{"type":"reasoning.text","text":" \"Florence\" as the location.","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" me use","reasoning_details":[{"type":"reasoning.text","text":" me use","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"\n\nLet me call","reasoning_details":[{"type":"reasoning.text","text":"\n\nLet me call","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" the weather function with the location being","reasoning_details":[{"type":"reasoning.text","text":" the weather function with the location being","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Florence, Italy\" to","reasoning_details":[{"type":"reasoning.text","text":"Florence, Italy\" to","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" Florence","reasoning_details":[{"type":"reasoning.text","text":" Florence","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" be","reasoning_details":[{"type":"reasoning.text","text":" be","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":", Italy (","reasoning_details":[{"type":"reasoning.text","text":", Italy (","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" specific","reasoning_details":[{"type":"reasoning.text","text":" specific","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"or I","reasoning_details":[{"type":"reasoning.text","text":"or I","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":".","reasoning_details":[{"type":"reasoning.text","text":".","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" could try","reasoning_details":[{"type":"reasoning.text","text":" could try","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01Xwqc5oEGdjPCCPum1Dtb2Y","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" just","reasoning_details":[{"type":"reasoning.text","text":" just","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"Florence\" -","reasoning_details":[{"type":"reasoning.text","text":" \"Florence\" -","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" but","reasoning_details":[{"type":"reasoning.text","text":" but","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"location"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" \"","reasoning_details":[{"type":"reasoning.text","text":" \"","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"Florence, Italy\" woul","reasoning_details":[{"type":"reasoning.text","text":"Florence, Italy\" woul","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" \"Florence,"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"d be more specific","reasoning_details":[{"type":"reasoning.text","text":"d be more specific","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":" Italy"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":" an","reasoning_details":[{"type":"reasoning.text","text":" an","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":"d accurate).","reasoning_details":[{"type":"reasoning.text","text":"d accurate).","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning_details":[{"type":"reasoning.text","signature":"Ep8DCkgICxABGAIqQMPJIeZ0P/DSe9JQ2wg9NaUiY1fY4A/kD7HwtPBhRsepL0jAqIXyjKajtqj8mKKNj39kCrDFp0b8NOBIbX3e+XASDPK3RtRCSq7Z/Iu0kxoMCL2VPJ0qWJYZyey0IjCjhME7FUWTLD7dhGw2WNWJmQNbsVVq1YyyqPpn8Ap9qdhRPb/0uZM0wZaMR/FW2C0qhALVhWU2Hb3H30vrcYfc5S6wPMnYgNDIAvsif7nvmGrWK8YA+4cd9cPNBIfi/AO/OUkOeXowSVr4F19yt+fcjKXDOff5PfS+j/FeqwcKhG1EIC8SQvnqjAZqTmlPg5B1O8nrVqrUZWr3UEqVKoGUvrEQxKobN+JN/2u+/yQQK3SmrnArp2+N1fusDCz6uq7V1qWhjSzsZKTUO4+lFy0eKCzNFeGFRGFgZTgWdfS/cxiCaZLe0PE35kq6ubKVNGC+C6NVBm3h/bNtqQuWt+19TAX7y8Vk94rBMaEeJsCo81W0EOkhenk5ohDZsvL+8iFcDso5whoraTA0HQViPU1zW+FifZDATBgB","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning_details":[{"type":"reasoning.text","signature":"Eq0ECkgIDRABGAIqQM/zwzd9QrbMZ79kRrc7C/5+aoKK90YBv7ZbImUoagaaGZvOU3SP14cZRUHB0b+fLRHRC8LLhfcfaQiGOGAxwdoSDIbgptNVmRLyYm/sdhoMI7e1X+W59yUjKZVlIjAqlULqwvQixLC+CkI+RvLV4hHztMBsL/kzC5raPmOTiEVmCaQ5c7W4fXO3Mon1cZAqkgNVe2nmngGw6pcyT7NffJiTFdTsCng7MUiRRJEF/ewiBLEFGMIPyMN/yUsjQnMewYzwYtsnaf3NGiv15hJ3xrAwdn0YW5k6oU5Fw33QYby3cMAxJxO/Pfz4vQEqEz01veyKIUoIN1ohc/ntl59HQCBxblYiiOvenqc7FZXtTSamyK5aXDaV7chH1xYJYffZGDs4RBYEObRjWADgTi4r01G3RdXMA9UAPbJ2w4y0u85g18EFnIiqfJbm3TfQXtevWaRT8lFV8gaSqjzpqq0a6V3RbZWT/I2iJOVrWxRlVcZWR1/vaR9HkaJsz0d1Gi25UrfJHxsB4QnZKfvDHQ6DrX79FHPvGmfwvUb/BOxjrtARlnKKiMzd15nT9XiDhc1PuUKv7+4mM8XIlG47FQGcGO4MSZMr5hFQsYTlYPx/WfNKrayx+WJ3qPVelJ78+BFLzaoZ2JFjEQJqS+ULV1ZOjkYZNE5Ab/kjUpu6YklsKvdzjfdtBLA94m5g5L4zk6ygJMBjCIQ6ziSW4AAzYQeJjnyJOwYYAQ==","format":"anthropic-claude-v1","index":0}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}]} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"id":"toolu_bdrk_01N8hD5cYDw4WfvnjKXAkA2W","type":"function","function":{"name":"weather","arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945537-De6r293kjwFRqSih0qan","object":"chat.completion.chunk","created":1773945537,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_calls"}],"usage":{"prompt_tokens":607,"completion_tokens":116,"total_tokens":723,"cost":0.001187,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001187,"upstream_inference_prompt_cost":0.000607,"upstream_inference_completions_cost":0.00058},"completion_tokens_details":{"reasoning_tokens":61,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":""}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"{\"locat"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ion\": \"Flor"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"en"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"ce, Ital"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":null,"role":"assistant","tool_calls":[{"index":0,"function":{"arguments":"y\"}"}}]},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant","reasoning":null},"finish_reason":"tool_calls","native_finish_reason":"tool_use"}]} + + data: {"id":"gen-1777319950-BX6MCZRmFqpAw5lUPuhg","object":"chat.completion.chunk","created":1777319950,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"tool_calls","native_finish_reason":"tool_use"}],"usage":{"prompt_tokens":607,"completion_tokens":143,"total_tokens":750,"cost":0.001322,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001322,"upstream_inference_prompt_cost":0.000607,"upstream_inference_completions_cost":0.000715},"completion_tokens_details":{"reasoning_tokens":99,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -89,22 +105,22 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.27368825s + duration: 1.369993583s - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 1972 + content_length: 2504 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01Xwqc5oEGdjPCCPum1Dtb2Y","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"anthropic-claude-v1","index":0,"signature":"Ep8DCkgICxABGAIqQMPJIeZ0P/DSe9JQ2wg9NaUiY1fY4A/kD7HwtPBhRsepL0jAqIXyjKajtqj8mKKNj39kCrDFp0b8NOBIbX3e+XASDPK3RtRCSq7Z/Iu0kxoMCL2VPJ0qWJYZyey0IjCjhME7FUWTLD7dhGw2WNWJmQNbsVVq1YyyqPpn8Ap9qdhRPb/0uZM0wZaMR/FW2C0qhALVhWU2Hb3H30vrcYfc5S6wPMnYgNDIAvsif7nvmGrWK8YA+4cd9cPNBIfi/AO/OUkOeXowSVr4F19yt+fcjKXDOff5PfS+j/FeqwcKhG1EIC8SQvnqjAZqTmlPg5B1O8nrVqrUZWr3UEqVKoGUvrEQxKobN+JN/2u+/yQQK3SmrnArp2+N1fusDCz6uq7V1qWhjSzsZKTUO4+lFy0eKCzNFeGFRGFgZTgWdfS/cxiCaZLe0PE35kq6ubKVNGC+C6NVBm3h/bNtqQuWt+19TAX7y8Vk94rBMaEeJsCo81W0EOkhenk5ohDZsvL+8iFcDso5whoraTA0HQViPU1zW+FifZDATBgB","text":" the weather in Florence, Italy. I have a weather function available that takes a location parameter. I should call it with \"Florence, Italy\" or just \"Florence\" as the location. Let me use \"Florence, Italy\" to be specific.","type":"reasoning.text"}],"reasoning":" the weather in Florence, Italy. I have a weather function available that takes a location parameter. I should call it with \"Florence, Italy\" or just \"Florence\" as the location. Let me use \"Florence, Italy\" to be specific."},{"content":"40 C","tool_call_id":"toolu_bdrk_01Xwqc5oEGdjPCCPum1Dtb2Y","role":"tool"}],"model":"anthropic/claude-haiku-4.5","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01N8hD5cYDw4WfvnjKXAkA2W","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"anthropic-claude-v1","index":0,"signature":"Eq0ECkgIDRABGAIqQM/zwzd9QrbMZ79kRrc7C/5+aoKK90YBv7ZbImUoagaaGZvOU3SP14cZRUHB0b+fLRHRC8LLhfcfaQiGOGAxwdoSDIbgptNVmRLyYm/sdhoMI7e1X+W59yUjKZVlIjAqlULqwvQixLC+CkI+RvLV4hHztMBsL/kzC5raPmOTiEVmCaQ5c7W4fXO3Mon1cZAqkgNVe2nmngGw6pcyT7NffJiTFdTsCng7MUiRRJEF/ewiBLEFGMIPyMN/yUsjQnMewYzwYtsnaf3NGiv15hJ3xrAwdn0YW5k6oU5Fw33QYby3cMAxJxO/Pfz4vQEqEz01veyKIUoIN1ohc/ntl59HQCBxblYiiOvenqc7FZXtTSamyK5aXDaV7chH1xYJYffZGDs4RBYEObRjWADgTi4r01G3RdXMA9UAPbJ2w4y0u85g18EFnIiqfJbm3TfQXtevWaRT8lFV8gaSqjzpqq0a6V3RbZWT/I2iJOVrWxRlVcZWR1/vaR9HkaJsz0d1Gi25UrfJHxsB4QnZKfvDHQ6DrX79FHPvGmfwvUb/BOxjrtARlnKKiMzd15nT9XiDhc1PuUKv7+4mM8XIlG47FQGcGO4MSZMr5hFQsYTlYPx/WfNKrayx+WJ3qPVelJ78+BFLzaoZ2JFjEQJqS+ULV1ZOjkYZNE5Ab/kjUpu6YklsKvdzjfdtBLA94m5g5L4zk6ygJMBjCIQ6ziSW4AAzYQeJjnyJOwYYAQ==","text":"The user is asking for weather information in Florence, Italy. I have access to a weather function that takes a location parameter. I should call the weather function with \"Florence, Italy\" or \"Florence\" as the location.\n\nLet me call the weather function with the location being Florence, Italy (or I could try just \"Florence\" - but \"Florence, Italy\" would be more specific and accurate).","type":"reasoning.text"}],"reasoning":"The user is asking for weather information in Florence, Italy. I have access to a weather function that takes a location parameter. I should call the weather function with \"Florence, Italy\" or \"Florence\" as the location.\n\nLet me call the weather function with the location being Florence, Italy (or I could try just \"Florence\" - but \"Florence, Italy\" would be more specific and accurate)."},{"content":"40 C","tool_call_id":"toolu_bdrk_01N8hD5cYDw4WfvnjKXAkA2W","role":"tool"}],"model":"anthropic/claude-haiku-4.5","stream_options":{"include_usage":true},"tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true},"stream":true}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -119,53 +135,67 @@ interactions: : OPENROUTER PROCESSING - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"The weather in Florence, Italy is currently","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"The weather in Florence, Italy is currently","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"40°C (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"104°F)**,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" which","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" is quite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"!","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" **","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" This is typical","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"40°C (","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" for Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"104°F)**,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" during the","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" which","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" summer months.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" is quite","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" If","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hot","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" you're planning to visit, make","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"! It's a","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" sure to stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" warm","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hydrated,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" summer","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" wear","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" day in Florence","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" light clothing","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":".","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":", and use","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" If","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" sunscreen.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" you're planning to visit or travel","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" It","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" there","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"'s a goo","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":", make","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"d idea to plan","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" sure to stay","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" outdoor","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" hydrated,","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" activities for early","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" wear","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" morning or late evening","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" light clothing","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" when it","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":", and apply","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"'s a","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" sunscreen.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":" bit cooler.","role":"assistant"},"finish_reason":null,"native_finish_reason":null}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}]} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"end_turn"}]} - data: {"id":"gen-1773945539-NkL1DRr645GoRuXEuqXV","object":"chat.completion.chunk","created":1773945539,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"stop"}],"usage":{"prompt_tokens":738,"completion_tokens":61,"total_tokens":799,"cost":0.001043,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001043,"upstream_inference_prompt_cost":0.000738,"upstream_inference_completions_cost":0.000305},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} + data: {"id":"gen-1777319952-fbyZefNGWUrY0N3vwtxP","object":"chat.completion.chunk","created":1777319952,"model":"anthropic/claude-4.5-haiku-20251001","provider":"Amazon Bedrock","choices":[{"index":0,"delta":{"content":"","role":"assistant"},"finish_reason":"stop","native_finish_reason":"end_turn"}],"usage":{"prompt_tokens":764,"completion_tokens":82,"total_tokens":846,"cost":0.001174,"is_byok":false,"prompt_tokens_details":{"cached_tokens":0,"cache_write_tokens":0,"audio_tokens":0,"video_tokens":0},"cost_details":{"upstream_inference_cost":0.001174,"upstream_inference_prompt_cost":0.000764,"upstream_inference_completions_cost":0.00041},"completion_tokens_details":{"reasoning_tokens":0,"image_tokens":0,"audio_tokens":0}}} data: [DONE] @@ -174,4 +204,4 @@ interactions: - text/event-stream status: 200 OK code: 200 - duration: 1.79521675s + duration: 1.527412458s diff --git a/providertests/testdata/TestOpenRouterThinking/anthropic/thinking.yaml b/providertests/testdata/TestOpenRouterThinking/anthropic/thinking.yaml index 56bf5836c..0b77ec9da 100644 --- a/providertests/testdata/TestOpenRouterThinking/anthropic/thinking.yaml +++ b/providertests/testdata/TestOpenRouterThinking/anthropic/thinking.yaml @@ -8,14 +8,14 @@ interactions: proto_minor: 1 content_length: 508 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"anthropic/claude-haiku-4.5","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"}],"model":"anthropic/claude-haiku-4.5","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"usage":{"include":true},"reasoning":{"effort":"medium"}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -24,28 +24,28 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945529-4x3WtegraF6F7Hx5vnXk\",\"object\":\"chat.completion\",\"created\":1773945529,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_calls\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. I should call the weather function with \\\"Florence, Italy\\\" or just \\\"Florence\\\" as the location.\\n\\nLet me call the weather function with \\\"Florence, Italy\\\" to get the weather information.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_011YAi4MUZaDYszc4HjpbhN2\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. I should call the weather function with \\\"Florence, Italy\\\" or just \\\"Florence\\\" as the location.\\n\\nLet me call the weather function with \\\"Florence, Italy\\\" to get the weather information.\",\"format\":\"anthropic-claude-v1\",\"index\":0,\"signature\":\"EtsDCkgICxABGAIqQEwZWjOj3+xqUgNiHMa7PU5h2NpcWKGQ5Xz6Z2W6TpuQI8BawgtBcx2w3Ii+aO8SWxb9/FWh7QMQIxpC3V1N9hkSDBF9vqo23Di4tTYwfBoMdcIzCI5hZzhIYBWbIjCcfrx6oOoMUcCgm3R+Mh4goj6nQAzX4NbwlXUaXR0/QLr9IFLrsRIsTNen3kZec+EqwAIPgE2IdMn4w//171eA8fA6vJtlFtkOvwql1e/Znt+i/H4D1XA7wnBBzFJFNe7lXOEMWce3o9eAnzROAyTKtwEPCRVFySVgSWsl1YQ7wOEfT8fisVKp1fpKmpxnHz/gdFVoVE5FcuSMXaBg5fnNCzerUgv2GcImSr86WDSSuLhGiECmVPAeMeZU2zPUkKxIKJeDVxXotEX0MgpS2xZaq/GD/vgbi+DW5aVcSK+IAsSg55/wwwcR/aT95KO+ayT80adkVugVMIBr+CQfQZo40SjguNaxA55Fln6+WclcaRmVfeES54KeYWApJshca+93LwwwvOtpigqpoa0650ftVyLpvcr2dhxArg1K7tguv3wN6MDEvNflxRk3y2u010vPG/ycgT0Mkzs+TIPPlrz+a5S9yZzxUBfP+xKmyquEMTCQnhgB\"}]}}],\"usage\":{\"prompt_tokens\":607,\"completion_tokens\":126,\"total_tokens\":733,\"cost\":0.001237,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001237,\"upstream_inference_prompt_cost\":0.000607,\"upstream_inference_completions_cost\":0.00063},\"completion_tokens_details\":{\"reasoning_tokens\":78,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n{\"id\":\"gen-1777319947-Y45Z6u60MD4bK91UwvCd\",\"object\":\"chat.completion\",\"created\":1777319947,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"tool_calls\",\"native_finish_reason\":\"tool_use\",\"message\":{\"role\":\"assistant\",\"content\":null,\"refusal\":null,\"reasoning\":\"The user is asking about the weather in Florence, Italy. I have access to a weather function that takes a location (city) as a parameter. I should call the weather function with \\\"Florence\\\" as the location.\",\"tool_calls\":[{\"type\":\"function\",\"index\":0,\"id\":\"toolu_bdrk_01AfMUr4SPqrUP7qb65GXqma\",\"function\":{\"name\":\"weather\",\"arguments\":\"{\\\"location\\\": \\\"Florence, Italy\\\"}\"}}],\"reasoning_details\":[{\"type\":\"reasoning.text\",\"text\":\"The user is asking about the weather in Florence, Italy. I have access to a weather function that takes a location (city) as a parameter. I should call the weather function with \\\"Florence\\\" as the location.\",\"format\":\"anthropic-claude-v1\",\"index\":0,\"signature\":\"EvgCCkgIDRABGAIqQKb/wFIBWhtfZLSnNhQwwG129YA/VzhXG3yrKKa8RDLsJF9Ou09wUxfl8aZAM4RrbMtgfJj0NqOwW6gR/IxJCaYSDCJGTmAZRCX8O6P0SxoMEclljJPZqUpkiTlSIjD8acYx0eq73rSidczytc6ya6Q2+Z6aQinyGI3qT0XFaNIuA5TjxTIo0eVOMfEl0k8q3QHMxOzt0C9P/6AgewciZFhw+tVmFCGWlzlbvNbHBKanZPOMVAA0p95QLWgZ0v1qbNGDaYlkL17bms+XBXmHNdZDBybYY4bjmFgiy60i90Ag/Kg8DxBfKET2tOMigbtJa1lpBc/e1m0QD/rR1UzqoKbvMg5NMqzdgARgEQS+udM6CnyXGcG3IrZS+HcBlp2CCBR9QKdhe+D+YX8xjuWF9UftT/H7xcx8E0Z24SFypKalibdT3jShS72rDdHShG6qFqwvIVzfCc932jEk9IDn0KBdK6Sj4ViB1+iEIAjfQhgB\"}]}}],\"usage\":{\"prompt_tokens\":607,\"completion_tokens\":105,\"total_tokens\":712,\"cost\":0.001132,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001132,\"upstream_inference_prompt_cost\":0.000607,\"upstream_inference_completions_cost\":0.000525},\"completion_tokens_details\":{\"reasoning_tokens\":52,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 5.523986875s + duration: 947.214916ms - id: 1 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 2170 + content_length: 1824 host: "" - body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_011YAi4MUZaDYszc4HjpbhN2","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"anthropic-claude-v1","index":0,"signature":"EtsDCkgICxABGAIqQEwZWjOj3+xqUgNiHMa7PU5h2NpcWKGQ5Xz6Z2W6TpuQI8BawgtBcx2w3Ii+aO8SWxb9/FWh7QMQIxpC3V1N9hkSDBF9vqo23Di4tTYwfBoMdcIzCI5hZzhIYBWbIjCcfrx6oOoMUcCgm3R+Mh4goj6nQAzX4NbwlXUaXR0/QLr9IFLrsRIsTNen3kZec+EqwAIPgE2IdMn4w//171eA8fA6vJtlFtkOvwql1e/Znt+i/H4D1XA7wnBBzFJFNe7lXOEMWce3o9eAnzROAyTKtwEPCRVFySVgSWsl1YQ7wOEfT8fisVKp1fpKmpxnHz/gdFVoVE5FcuSMXaBg5fnNCzerUgv2GcImSr86WDSSuLhGiECmVPAeMeZU2zPUkKxIKJeDVxXotEX0MgpS2xZaq/GD/vgbi+DW5aVcSK+IAsSg55/wwwcR/aT95KO+ayT80adkVugVMIBr+CQfQZo40SjguNaxA55Fln6+WclcaRmVfeES54KeYWApJshca+93LwwwvOtpigqpoa0650ftVyLpvcr2dhxArg1K7tguv3wN6MDEvNflxRk3y2u010vPG/ycgT0Mkzs+TIPPlrz+a5S9yZzxUBfP+xKmyquEMTCQnhgB","text":"The user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. I should call the weather function with \"Florence, Italy\" or just \"Florence\" as the location.\n\nLet me call the weather function with \"Florence, Italy\" to get the weather information.","type":"reasoning.text"}],"reasoning":"The user is asking for the weather in Florence, Italy. I have access to a weather function that takes a location parameter. I should call the weather function with \"Florence, Italy\" or just \"Florence\" as the location.\n\nLet me call the weather function with \"Florence, Italy\" to get the weather information."},{"content":"40 C","tool_call_id":"toolu_bdrk_011YAi4MUZaDYszc4HjpbhN2","role":"tool"}],"model":"anthropic/claude-haiku-4.5","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' + body: '{"messages":[{"content":"You are a helpful assistant","role":"system"},{"content":"What''s the weather in Florence, Italy?","role":"user"},{"tool_calls":[{"id":"toolu_bdrk_01AfMUr4SPqrUP7qb65GXqma","function":{"arguments":"{\"location\": \"Florence, Italy\"}","name":"weather"},"type":"function"}],"role":"assistant","reasoning_details":[{"format":"anthropic-claude-v1","index":0,"signature":"EvgCCkgIDRABGAIqQKb/wFIBWhtfZLSnNhQwwG129YA/VzhXG3yrKKa8RDLsJF9Ou09wUxfl8aZAM4RrbMtgfJj0NqOwW6gR/IxJCaYSDCJGTmAZRCX8O6P0SxoMEclljJPZqUpkiTlSIjD8acYx0eq73rSidczytc6ya6Q2+Z6aQinyGI3qT0XFaNIuA5TjxTIo0eVOMfEl0k8q3QHMxOzt0C9P/6AgewciZFhw+tVmFCGWlzlbvNbHBKanZPOMVAA0p95QLWgZ0v1qbNGDaYlkL17bms+XBXmHNdZDBybYY4bjmFgiy60i90Ag/Kg8DxBfKET2tOMigbtJa1lpBc/e1m0QD/rR1UzqoKbvMg5NMqzdgARgEQS+udM6CnyXGcG3IrZS+HcBlp2CCBR9QKdhe+D+YX8xjuWF9UftT/H7xcx8E0Z24SFypKalibdT3jShS72rDdHShG6qFqwvIVzfCc932jEk9IDn0KBdK6Sj4ViB1+iEIAjfQhgB","text":"The user is asking about the weather in Florence, Italy. I have access to a weather function that takes a location (city) as a parameter. I should call the weather function with \"Florence\" as the location.","type":"reasoning.text"}],"reasoning":"The user is asking about the weather in Florence, Italy. I have access to a weather function that takes a location (city) as a parameter. I should call the weather function with \"Florence\" as the location."},{"content":"40 C","tool_call_id":"toolu_bdrk_01AfMUr4SPqrUP7qb65GXqma","role":"tool"}],"model":"anthropic/claude-haiku-4.5","tool_choice":"auto","tools":[{"function":{"name":"weather","strict":false,"description":"Get weather information for a location","parameters":{"properties":{"location":{"description":"the city","type":"string"}},"required":["location"],"type":"object"}},"type":"function"}],"reasoning":{"effort":"medium"},"usage":{"include":true}}' headers: Accept: - application/json Content-Type: - application/json User-Agent: - - Charm-Fantasy/0.15.0 (https://charm.land/fantasy) + - Charm-Fantasy/0.21.0 (https://charm.land/fantasy) url: https://openrouter.ai/api/v1/chat/completions method: POST response: @@ -54,10 +54,10 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: "\n \n\n \n\n \n\n \n\n \n{\"id\":\"gen-1773945535-J1gXRWEKUu1J0LUdVpFo\",\"object\":\"chat.completion\",\"created\":1773945535,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is currently **40°C (104°F)**, which is quite hot! \\n\\nThat's typical for Florence during the summer months when temperatures can get quite warm. If you're planning to visit or are currently there, make sure to:\\n- Stay hydrated\\n- Wear light, breathable clothing\\n- Use sunscreen\\n- Try to explore during early morning or late evening hours to avoid the peak heat\\n\\nIs there anything else you'd like to know about the weather or Florence?\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":747,\"completion_tokens\":111,\"total_tokens\":858,\"cost\":0.001302,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001302,\"upstream_inference_prompt_cost\":0.000747,\"upstream_inference_completions_cost\":0.000555},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" + body: "\n \n\n \n\n \n{\"id\":\"gen-1777319948-7H6B4qcHtbG3hqFZquj6\",\"object\":\"chat.completion\",\"created\":1777319948,\"model\":\"anthropic/claude-4.5-haiku-20251001\",\"provider\":\"Amazon Bedrock\",\"system_fingerprint\":null,\"choices\":[{\"index\":0,\"logprobs\":null,\"finish_reason\":\"stop\",\"native_finish_reason\":\"end_turn\",\"message\":{\"role\":\"assistant\",\"content\":\"The weather in Florence, Italy is currently **40°C (104°F)**, which is quite hot! It's a warm day in Florence. Make sure to stay hydrated and take precautions against the heat if you're planning to visit or are already there.\",\"refusal\":null,\"reasoning\":null}}],\"usage\":{\"prompt_tokens\":727,\"completion_tokens\":59,\"total_tokens\":786,\"cost\":0.001022,\"is_byok\":false,\"prompt_tokens_details\":{\"cached_tokens\":0,\"cache_write_tokens\":0,\"audio_tokens\":0,\"video_tokens\":0},\"cost_details\":{\"upstream_inference_cost\":0.001022,\"upstream_inference_prompt_cost\":0.000727,\"upstream_inference_completions_cost\":0.000295},\"completion_tokens_details\":{\"reasoning_tokens\":0,\"image_tokens\":0,\"audio_tokens\":0}}}" headers: Content-Type: - application/json status: 200 OK code: 200 - duration: 1.309788583s + duration: 1.074211583s From ea03063390ae24b64a03ae19da4c733fd5623802 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Mon, 27 Apr 2026 17:14:36 -0300 Subject: [PATCH 29/82] v0.21.1 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 885415662..a67cebaf7 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.21.0 +0.21.1 From 505a5b8c1ab57412bcb848c7a6855a4352368b26 Mon Sep 17 00:00:00 2001 From: William Kennedy Date: Wed, 29 Apr 2026 05:39:09 -0700 Subject: [PATCH 30/82] chore(deps): upgrade kronk to v1.24.0 (#218) --- go.mod | 20 ++++++++-------- go.sum | 52 ++++++++++++++++++++-------------------- providers/kronk/kronk.go | 17 ++++--------- 3 files changed, 40 insertions(+), 49 deletions(-) diff --git a/go.mod b/go.mod index 80a100dbc..4d5bc6bb9 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.26.2 require ( charm.land/x/vcr v0.1.1 cloud.google.com/go/auth v0.20.0 - github.com/ardanlabs/kronk v1.23.1 + github.com/ardanlabs/kronk v1.24.0 github.com/aws/aws-sdk-go-v2 v1.41.6 github.com/aws/aws-sdk-go-v2/config v1.32.16 github.com/aws/smithy-go v1.25.1 @@ -37,17 +37,17 @@ require ( github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 // indirect github.com/ardanlabs/jinja v1.1.0 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.19.15 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.22 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.14 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.22 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.100.0 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.10 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.30.16 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20 // indirect @@ -72,12 +72,12 @@ require ( github.com/googleapis/enterprise-certificate-proxy v0.3.15 // indirect github.com/googleapis/gax-go/v2 v2.22.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 // indirect github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.8.6 // indirect github.com/hashicorp/go-version v1.9.0 // indirect - github.com/hybridgroup/yzma v1.12.0 // indirect + github.com/hybridgroup/yzma v1.13.0 // indirect github.com/jupiterrider/ffi v0.6.0 // indirect github.com/kaptinlin/go-i18n v0.4.4 // indirect github.com/kaptinlin/jsonpointer v0.4.19 // indirect @@ -118,9 +118,9 @@ require ( golang.org/x/text v0.36.0 // indirect golang.org/x/time v0.15.0 // indirect google.golang.org/api v0.276.0 // indirect - google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 // indirect + google.golang.org/genproto v0.0.0-20260427160629-7cedc36a6bc4 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 // indirect google.golang.org/grpc v1.80.0 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect diff --git a/go.sum b/go.sum index 6173777d7..9e8304c56 100644 --- a/go.sum +++ b/go.sum @@ -12,16 +12,16 @@ cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdB cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= cloud.google.com/go/iam v1.9.0 h1:89wyjxT6DL4b5rk/Nk8eBC9DHqf+JiMstrn5IEYxFw4= cloud.google.com/go/iam v1.9.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= -cloud.google.com/go/logging v1.15.0 h1:6ooUEBNT6jdWh2b36+iuPn6b/R9qN/tHCbvGS5255gg= -cloud.google.com/go/logging v1.15.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI= -cloud.google.com/go/longrunning v0.10.0 h1:4OWvp1BjCvoeSZTog3sRFDu6j4IrI9TI4/Y9N+8h25g= -cloud.google.com/go/longrunning v0.10.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= +cloud.google.com/go/logging v1.16.0 h1:MMNgYRvZ/pEwiNSkcoJTKWfAbAJDqCqAMJiarZx+/CI= +cloud.google.com/go/logging v1.16.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI= +cloud.google.com/go/longrunning v0.11.0 h1:fE4XVLJQj+gRnw1HrbDyQXXgC0aiqY3wxP7DDU4cWk0= +cloud.google.com/go/longrunning v0.11.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= cloud.google.com/go/monitoring v1.27.0 h1:BhYwMqao+e5Nn7JtWMM9m6zRtKtVUK6kJWMizXChkLU= cloud.google.com/go/monitoring v1.27.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= cloud.google.com/go/storage v1.62.1 h1:Os0G3XbUbjZumkpDUf2Y0rLoXJTCF1kU2kWUujKYXD8= cloud.google.com/go/storage v1.62.1/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= -cloud.google.com/go/trace v1.13.0 h1:RfqsqPOiSCG8ql50UZt5F65KrVa1zbY9mJrO7xvZfbE= -cloud.google.com/go/trace v1.13.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= +cloud.google.com/go/trace v1.14.0 h1:jUtnmOrNcu5XJNk4Gz0fv+v5sM0weaOa3z5MPQUjRXs= +cloud.google.com/go/trace v1.14.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc= @@ -40,12 +40,12 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapp github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= github.com/ardanlabs/jinja v1.1.0 h1:SZtVrV+1szfSBXBKQA5FoJtOabUxkJu5IvEX+ADUtcM= github.com/ardanlabs/jinja v1.1.0/go.mod h1:onVec/ZOYPqNm7TRiNfJBnW+t9VxSi2gkARWhgP9qwQ= -github.com/ardanlabs/kronk v1.23.1 h1:5grtasj/ZIPHod0P9tG38RKZkRiOmLMjX2QwxpLzi8s= -github.com/ardanlabs/kronk v1.23.1/go.mod h1:a3FhTn4vz2tR0axNBCiG8SzFw33bN0WA9EBAK+YMYIE= +github.com/ardanlabs/kronk v1.24.0 h1:A5oEaMKHQFyh1jGGQb3nQUSCpd7bSLYGLx8jJ1FJvuo= +github.com/ardanlabs/kronk v1.24.0/go.mod h1:cdt6xRpBH8lfdNXHDPAJ2b9i4IhmY7Gc3KpJmV7nSO4= github.com/aws/aws-sdk-go-v2 v1.41.6 h1:1AX0AthnBQzMx1vbmir3Y4WsnJgiydmnJjiLu+LvXOg= github.com/aws/aws-sdk-go-v2 v1.41.6/go.mod h1:dy0UzBIfwSeot4grGvY1AqFWN5zgziMmWGzysDnHFcQ= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 h1:eBMB84YGghSocM7PsjmmPffTa+1FBUeNvGvFou6V/4o= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9 h1:adBsCIIpLbLmYnkQU+nAChU5yhVTvu5PerROm+/Kq2A= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9/go.mod h1:uOYhgfgThm/ZyAuJGNQ5YgNyOlYfqnGpTHXvk3cpykg= github.com/aws/aws-sdk-go-v2/config v1.32.16 h1:Q0iQ7quUgJP0F/SCRTieScnaMdXr9h/2+wze1u3cNeM= github.com/aws/aws-sdk-go-v2/config v1.32.16/go.mod h1:duCCnJEFqpt2RC6no1iK6q+8HpwOAkiUua0pY507dQc= github.com/aws/aws-sdk-go-v2/credentials v1.19.15 h1:fyvgWTszojq8hEnMi8PPBTvZdTtEVmAVyo+NFLHBhH4= @@ -60,14 +60,14 @@ github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23 h1:FPXsW9+gMuIeKmz7j6ENWcWtBGT github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23/go.mod h1:7J8iGMdRKk6lw2C+cMIphgAnT8uTwBwNOsGkyOCm80U= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8 h1:HtOTYcbVcGABLOVuPYaIihj6IlkqubBwFj10K5fxRek= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8/go.mod h1:VsK9abqQeGlzPgUr+isNWzPlK2vKe9INMLWnY65f5Xs= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 h1:JRaIgADQS/U6uXDqlPiefP32yXTda7Kqfx+LgspooZM= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13/go.mod h1:CEuVn5WqOMilYl+tbccq8+N2ieCy0gVn3OtRb0vBNNM= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.14 h1:xnvDEnw+pnj5mctWiYuFbigrEzSm35x7k4KS/ZkCANg= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.14/go.mod h1:yS5rNogD8e0Wu9+l3MUwr6eENBzEeGejvINpN5PAYfY= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22 h1:PUmZeJU6Y1Lbvt9WFuJ0ugUK2xn6hIWUBBbKuOWF30s= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22/go.mod h1:nO6egFBoAaoXze24a2C0NjQCvdpk8OueRoYimvEB9jo= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 h1:ZlvrNcHSFFWURB8avufQq9gFsheUgjVD9536obIknfM= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21/go.mod h1:cv3TNhVrssKR0O/xxLJVRfd2oazSnZnkUeTf6ctUwfQ= -github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0 h1:hlSuz394kV0vhv9drL5lhuEFbEOEP1VyQpy15qWh1Pk= -github.com/aws/aws-sdk-go-v2/service/s3 v1.99.0/go.mod h1:uoA43SdFwacedBfSgfFSjjCvYe8aYBS7EnU5GZ/YKMM= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.22 h1:SE+aQ4DEqG53RRCAIHlCf//B2ycxGH7jFkpnAh/kKPM= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.22/go.mod h1:ES3ynECd7fYeJIL6+oax+uIEljmfps0S70BaQzbMd/o= +github.com/aws/aws-sdk-go-v2/service/s3 v1.100.0 h1:7G26Sae6PMKn4kMcU5JzNfrm1YrKwyOhowXPYR2WiWY= +github.com/aws/aws-sdk-go-v2/service/s3 v1.100.0/go.mod h1:Fw9aqhJicIVee1VytBBjH+l+5ov6/PhbtIK/u3rt/ls= github.com/aws/aws-sdk-go-v2/service/signin v1.0.10 h1:a1Fq/KXn75wSzoJaPQTgZO0wHGqE9mjFnylnqEPTchA= github.com/aws/aws-sdk-go-v2/service/signin v1.0.10/go.mod h1:p6+MXNxW7IA6dMgHfTAzljuwSKD0NCm/4lbS4t6+7vI= github.com/aws/aws-sdk-go-v2/service/sso v1.30.16 h1:x6bKbmDhsgSZwv6q19wY/u3rLk/3FGjJWyqKcIRufpE= @@ -145,8 +145,8 @@ github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 h1:5VipnvEpbqr2gA2VbM+nYVbkIF28c5ZQfqCBQ5g2xfk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0/go.mod h1:Hyl3n6Twe1hvtd9XUXDec4pTvgMSEixRuQKPTMH2bNs= github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 h1:vTCWu1wbdYo7PEZFem/rlr01+Un+wwVmI7wiegFdRLk= github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72/go.mod h1:Vn+BBgKQHVQYdVQ4NZDICE1Brb+JfaONyDHr3q07oQc= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= @@ -155,8 +155,8 @@ github.com/hashicorp/go-getter v1.8.6 h1:9sQboWULaydVphxc4S64oAI4YqpuCk7nPmvbk13 github.com/hashicorp/go-getter v1.8.6/go.mod h1:nVH12eOV2P58dIiL3rsU6Fh3wLeJEKBOJzhMmzlSWoo= github.com/hashicorp/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA= github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hybridgroup/yzma v1.12.0 h1:kRHZdzEQCuQaBCUx7AVWYqVUvTHw8qB6gp+9ORcryLg= -github.com/hybridgroup/yzma v1.12.0/go.mod h1:zrzMgv/KVQz23+s6l16b+vJ+9uJVBdWtGcGkwRTMeiQ= +github.com/hybridgroup/yzma v1.13.0 h1:itnOCpjZMZ9iSRLgV1iK1dZPtzr2uC+wIyOiQp9S4GI= +github.com/hybridgroup/yzma v1.13.0/go.mod h1:zrzMgv/KVQz23+s6l16b+vJ+9uJVBdWtGcGkwRTMeiQ= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jupiterrider/ffi v0.6.0 h1:UX378KcZvH5c8qgLi9KL/bL82SZTHdRspZ+jj7bvBng= @@ -267,12 +267,12 @@ google.golang.org/api v0.276.0 h1:nVArUtfLEihtW+b0DdcqRGK1xoEm2+ltAihyztq7MKY= google.golang.org/api v0.276.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= google.golang.org/genai v1.54.0 h1:ZQCa70WMTJDI11FdqWCzGvZ5PanpcpfoO6jl/lrSnGU= google.golang.org/genai v1.54.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= -google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478 h1:aLsVTW0lZ8+IY5u/ERjZSCvAmhuR7slKzyha3YikDNA= -google.golang.org/genproto v0.0.0-20260414002931-afd174a4e478/go.mod h1:YJAzKjfHIUHb9T+bfu8L7mthAp7VVXQBUs1PLdBWS7M= -google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478 h1:yQugLulqltosq0B/f8l4w9VryjV+N/5gcW0jQ3N8Qec= -google.golang.org/genproto/googleapis/api v0.0.0-20260414002931-afd174a4e478/go.mod h1:C6ADNqOxbgdUUeRTU+LCHDPB9ttAMCTff6auwCVa4uc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478 h1:RmoJA1ujG+/lRGNfUnOMfhCy5EipVMyvUE+KNbPbTlw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260414002931-afd174a4e478/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto v0.0.0-20260427160629-7cedc36a6bc4 h1:2iMJZntwvmfgtse+s744JY7v7PgEdSBuFYXucvpOHNM= +google.golang.org/genproto v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:v14kaaboYyXQ1Gsu489Q+Hg/oN4B33mWtuOhF1HCeXA= +google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 h1:yOzSCGPx+cp5VO7IxvZ9SBFF7j1tZVcNtlHR2iYKtVo= +google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:Q9HWtNeE7tM9npdIsEvqXj1QJIvVoeAV3rtXtS715Cw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 h1:tEkOQcXgF6dH1G+MVKZrfpYvozGrzb91k6ha7jireSM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= diff --git a/providers/kronk/kronk.go b/providers/kronk/kronk.go index 8f7c8815a..6c698f7f1 100644 --- a/providers/kronk/kronk.go +++ b/providers/kronk/kronk.go @@ -9,7 +9,7 @@ import ( "charm.land/fantasy" "github.com/ardanlabs/kronk/sdk/kronk" - "github.com/ardanlabs/kronk/sdk/tools/catalog" + "github.com/ardanlabs/kronk/sdk/kronk/model" "github.com/ardanlabs/kronk/sdk/tools/libs" "github.com/ardanlabs/kronk/sdk/tools/models" ) @@ -102,7 +102,7 @@ func (p *provider) Close(ctx context.Context) error { return nil } -func (p *provider) installSystem(ctx context.Context, modelURL string) (models.Path, error) { +func (p *provider) installSystem(ctx context.Context, modelSource string) (models.Path, error) { logger := p.options.logger if logger == nil { logger = func(context.Context, string, ...any) {} @@ -117,21 +117,12 @@ func (p *provider) installSystem(ctx context.Context, modelURL string) (models.P return models.Path{}, fmt.Errorf("unable to install llama.cpp: %w", err) } - ctlg, err := catalog.New() - if err != nil { - return models.Path{}, fmt.Errorf("unable to create catalog system: %w", err) - } - - if err := ctlg.Download(ctx); err != nil { - return models.Path{}, fmt.Errorf("unable to download catalog: %w", err) - } - mdls, err := models.New() if err != nil { return models.Path{}, fmt.Errorf("unable to create models: %w", err) } - mp, err := mdls.Download(ctx, models.Logger(logger), modelURL, "") + mp, err := mdls.Download(ctx, models.Logger(logger), modelSource) if err != nil { return models.Path{}, fmt.Errorf("unable to install model: %w", err) } @@ -147,7 +138,7 @@ func (p *provider) newKronk(mp models.Path) (*kronk.Kronk, error) { cfg := p.options.modelConfig cfg.ModelFiles = mp.ModelFiles - krn, err := kronk.New(cfg) + krn, err := kronk.New(model.WithConfig(cfg)) if err != nil { return nil, fmt.Errorf("unable to create inference model: %w", err) } From d73b308628f5a2750c872ce80f283639a83ae4d1 Mon Sep 17 00:00:00 2001 From: Lauri Jutila Date: Wed, 29 Apr 2026 15:42:09 +0300 Subject: [PATCH 31/82] fix(anthropic): preserve `tool_use` when `ToolCallPart.Input` is empty or malformed (#219) json.Unmarshal("", &m) errors and previously caused the tool_use to be silently dropped in toPrompt, leaving the matching tool_result orphaned in the next user message. The Anthropic API then rejects the request with "tool_result must have a corresponding tool_use in the previous message". Default empty/whitespace input to {} (and nil for the server_tool_use branch); on malformed-but-non-empty input, emit {} + a CallWarning rather than dropping the block. Hit in the wild via DeepSeek's anthropic-compat endpoint, which emits empty input for parameterless tool calls. --- providers/anthropic/anthropic.go | 60 +++++++++++++++++++++++---- providers/anthropic/anthropic_test.go | 57 +++++++++++++++++++++++-- 2 files changed, 106 insertions(+), 11 deletions(-) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 882a22c9c..2760b0d71 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -999,10 +999,9 @@ func toPrompt(prompt fantasy.Prompt, sendReasoningData bool) ([]anthropic.TextBl if toolCall.ProviderExecuted { // Reconstruct server_tool_use block for // multi-turn round-tripping. - var inputAny any - err := json.Unmarshal([]byte(toolCall.Input), &inputAny) - if err != nil { - continue + inputAny, warning := decodeToolCallInputAny(toolCall) + if warning != nil { + warnings = append(warnings, *warning) } anthropicContent = append(anthropicContent, anthropic.ContentBlockParamUnion{ OfServerToolUse: &anthropic.ServerToolUseBlockParam{ @@ -1013,10 +1012,9 @@ func toPrompt(prompt fantasy.Prompt, sendReasoningData bool) ([]anthropic.TextBl }) continue } - var inputMap map[string]any - err := json.Unmarshal([]byte(toolCall.Input), &inputMap) - if err != nil { - continue + inputMap, warning := decodeToolCallInputMap(toolCall) + if warning != nil { + warnings = append(warnings, *warning) } toolUseBlock := anthropic.NewToolUseBlock(toolCall.ToolCallID, inputMap, toolCall.ToolName) if cacheControl != nil { @@ -1077,6 +1075,52 @@ func hasVisibleAssistantContent(content []anthropic.ContentBlockParamUnion) bool return false } +// decodeToolCallInputMap unmarshals a ToolCallPart.Input into a map for +// reconstructing an Anthropic tool_use block. The Anthropic API rejects any +// request whose tool_result lacks a matching tool_use in the previous +// message, so this helper never drops the block: empty input becomes {}, +// and malformed input falls back to {} with a CallWarning. The caller still +// emits a tool_use block with the original ToolCallID, preserving the pair. +func decodeToolCallInputMap(toolCall fantasy.ToolCallPart) (map[string]any, *fantasy.CallWarning) { + if strings.TrimSpace(toolCall.Input) == "" { + return map[string]any{}, nil + } + var inputMap map[string]any + if err := json.Unmarshal([]byte(toolCall.Input), &inputMap); err != nil { + return map[string]any{}, &fantasy.CallWarning{ + Type: fantasy.CallWarningTypeOther, + Message: fmt.Sprintf( + "tool call %q has malformed input JSON; emitting empty arguments to preserve tool_use ↔ tool_result pairing: %s", + toolCall.ToolCallID, err, + ), + } + } + if inputMap == nil { + return map[string]any{}, nil + } + return inputMap, nil +} + +// decodeToolCallInputAny is the server_tool_use counterpart to +// decodeToolCallInputMap. ServerToolUseBlockParam.Input has type `any` so +// nil is acceptable for the empty case. +func decodeToolCallInputAny(toolCall fantasy.ToolCallPart) (any, *fantasy.CallWarning) { + if strings.TrimSpace(toolCall.Input) == "" { + return nil, nil + } + var inputAny any + if err := json.Unmarshal([]byte(toolCall.Input), &inputAny); err != nil { + return nil, &fantasy.CallWarning{ + Type: fantasy.CallWarningTypeOther, + Message: fmt.Sprintf( + "server tool call %q has malformed input JSON; emitting empty arguments to preserve tool_use ↔ tool_result pairing: %s", + toolCall.ToolCallID, err, + ), + } + } + return inputAny, nil +} + // buildWebSearchToolResultBlock constructs an Anthropic // web_search_tool_result content block from structured metadata. func buildWebSearchToolResultBlock(toolCallID string, searchMeta *WebSearchResultMetadata) anthropic.ContentBlockParamUnion { diff --git a/providers/anthropic/anthropic_test.go b/providers/anthropic/anthropic_test.go index 69c41f94f..219171c0b 100644 --- a/providers/anthropic/anthropic_test.go +++ b/providers/anthropic/anthropic_test.go @@ -176,9 +176,14 @@ func TestToPrompt_DropsEmptyMessages(t *testing.T) { require.Empty(t, warnings) }) - t.Run("should drop assistant messages with invalid tool input", func(t *testing.T) { + t.Run("should preserve tool_use block when input JSON is malformed", func(t *testing.T) { t.Parallel() + // Anthropic's API rejects any request whose tool_result lacks a + // matching tool_use in the previous message. Dropping the tool_use + // because its input failed to parse leaves the next turn's + // tool_result orphaned and produces a 400. Emit the block with + // empty arguments instead, and surface the parse error as a warning. prompt := fantasy.Prompt{ { Role: fantasy.MessageRoleUser, @@ -201,10 +206,56 @@ func TestToPrompt_DropsEmptyMessages(t *testing.T) { systemBlocks, messages, warnings := toPrompt(prompt, true) require.Empty(t, systemBlocks) - require.Len(t, messages, 1, "should only have user message") + require.Len(t, messages, 2, "user + assistant — assistant must be preserved so tool_result can pair") + assistant := messages[1] + require.Equal(t, anthropic.MessageParamRoleAssistant, assistant.Role) + require.Len(t, assistant.Content, 1) + toolUse := assistant.Content[0].OfToolUse + require.NotNil(t, toolUse, "tool_use block should be emitted even when input is malformed") + require.Equal(t, "call_123", toolUse.ID) + require.Equal(t, "get_weather", toolUse.Name) require.Len(t, warnings, 1) require.Equal(t, fantasy.CallWarningTypeOther, warnings[0].Type) - require.Contains(t, warnings[0].Message, "dropping empty assistant message") + require.Contains(t, warnings[0].Message, "malformed input JSON") + require.Contains(t, warnings[0].Message, "call_123") + }) + + t.Run("should preserve tool_use block when input is empty", func(t *testing.T) { + t.Parallel() + + // Some upstream providers (notably DeepSeek's anthropic-compat + // endpoint) emit tool_use blocks with empty input for parameterless + // tool calls. Treat empty input as {} rather than dropping the + // block, since the next turn's tool_result still needs its pair. + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleUser, + Content: []fantasy.MessagePart{ + fantasy.TextPart{Text: "Hi"}, + }, + }, + { + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + fantasy.ToolCallPart{ + ToolCallID: "call_empty", + ToolName: "ping", + Input: "", + }, + }, + }, + } + + systemBlocks, messages, warnings := toPrompt(prompt, true) + + require.Empty(t, systemBlocks) + require.Empty(t, warnings, "empty input is a valid round-trip; no warning") + require.Len(t, messages, 2) + require.Equal(t, anthropic.MessageParamRoleAssistant, messages[1].Role) + toolUse := messages[1].Content[0].OfToolUse + require.NotNil(t, toolUse) + require.Equal(t, "call_empty", toolUse.ID) + require.Equal(t, "ping", toolUse.Name) }) t.Run("should keep assistant messages with reasoning and text", func(t *testing.T) { From b2f723073617a47c156a60f853c04834b1c3f36f Mon Sep 17 00:00:00 2001 From: fwang2002 Date: Wed, 29 Apr 2026 20:44:27 +0800 Subject: [PATCH 32/82] fix(openai,openaicompat): apply `WithName` to provider lookup and `Name()` (#212) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The openaicompat PrepareCallFunc looked up ProviderOptions using the hardcoded "openai-compat" key, so any name supplied via WithName was silently ignored — users could not key their per-call options under a custom provider name. Switch the lookup to model.Provider() so it matches whatever name was configured. Similarly, the openai provider's Name() method always returned the hardcoded "openai" constant, discarding the value passed to WithName. Return o.options.name instead so the configured name is reported consistently. Co-authored-by: wangfeng01 --- providers/openai/openai.go | 2 +- providers/openaicompat/language_model_hooks.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/providers/openai/openai.go b/providers/openai/openai.go index 51ebf4845..29a909426 100644 --- a/providers/openai/openai.go +++ b/providers/openai/openai.go @@ -200,5 +200,5 @@ func (o *provider) LanguageModel(_ context.Context, modelID string) (fantasy.Lan } func (o *provider) Name() string { - return Name + return o.options.name } diff --git a/providers/openaicompat/language_model_hooks.go b/providers/openaicompat/language_model_hooks.go index e6018b489..d2e77af1b 100644 --- a/providers/openaicompat/language_model_hooks.go +++ b/providers/openaicompat/language_model_hooks.go @@ -16,9 +16,9 @@ import ( const reasoningStartedCtx = "reasoning_started" // PrepareCallFunc prepares the call for the language model. -func PrepareCallFunc(_ fantasy.LanguageModel, params *openaisdk.ChatCompletionNewParams, call fantasy.Call) ([]fantasy.CallWarning, error) { +func PrepareCallFunc(model fantasy.LanguageModel, params *openaisdk.ChatCompletionNewParams, call fantasy.Call) ([]fantasy.CallWarning, error) { providerOptions := &ProviderOptions{} - if v, ok := call.ProviderOptions[Name]; ok { + if v, ok := call.ProviderOptions[model.Provider()]; ok { providerOptions, ok = v.(*ProviderOptions) if !ok { return nil, &fantasy.Error{Title: "invalid argument", Message: "openai-compat provider options should be *openaicompat.ProviderOptions"} From 966aa604320a46f6e86977ec15fb7cfde16fa527 Mon Sep 17 00:00:00 2001 From: fwang2002 Date: Wed, 29 Apr 2026 20:47:15 +0800 Subject: [PATCH 33/82] feat(agent): add `ToolChoice` to `AgentCall`, `AgentStreamCall`, and `WithToolChoice` option (#213) Previously ToolChoice could only be set via PrepareStep. Expose it as a first-class field on AgentCall/AgentStreamCall and a WithToolChoice agent option, mirroring how Temperature, TopP, and other call params are surfaced. Precedence: PrepareStep > call.ToolChoice > WithToolChoice > ToolChoiceAuto. Co-authored-by: wangfeng01 --- agent.go | 43 +++++++++++++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/agent.go b/agent.go index 01912bbf3..62e219457 100644 --- a/agent.go +++ b/agent.go @@ -146,6 +146,7 @@ type agentSettings struct { providerDefinedTools []ProviderDefinedTool executableProviderTools []ExecutableProviderTool tools []AgentTool + toolChoice *ToolChoice maxRetries *int model LanguageModel @@ -162,12 +163,13 @@ type AgentCall struct { Files []FilePart `json:"files"` Messages []Message `json:"messages"` MaxOutputTokens *int64 - Temperature *float64 `json:"temperature"` - TopP *float64 `json:"top_p"` - TopK *int64 `json:"top_k"` - PresencePenalty *float64 `json:"presence_penalty"` - FrequencyPenalty *float64 `json:"frequency_penalty"` - ActiveTools []string `json:"active_tools"` + Temperature *float64 `json:"temperature"` + TopP *float64 `json:"top_p"` + TopK *int64 `json:"top_k"` + PresencePenalty *float64 `json:"presence_penalty"` + FrequencyPenalty *float64 `json:"frequency_penalty"` + ActiveTools []string `json:"active_tools"` + ToolChoice *ToolChoice `json:"tool_choice"` ProviderOptions ProviderOptions OnRetry OnRetryCallback MaxRetries *int @@ -252,12 +254,13 @@ type AgentStreamCall struct { Files []FilePart `json:"files"` Messages []Message `json:"messages"` MaxOutputTokens *int64 - Temperature *float64 `json:"temperature"` - TopP *float64 `json:"top_p"` - TopK *int64 `json:"top_k"` - PresencePenalty *float64 `json:"presence_penalty"` - FrequencyPenalty *float64 `json:"frequency_penalty"` - ActiveTools []string `json:"active_tools"` + Temperature *float64 `json:"temperature"` + TopP *float64 `json:"top_p"` + TopK *int64 `json:"top_k"` + PresencePenalty *float64 `json:"presence_penalty"` + FrequencyPenalty *float64 `json:"frequency_penalty"` + ActiveTools []string `json:"active_tools"` + ToolChoice *ToolChoice `json:"tool_choice"` Headers map[string]string ProviderOptions ProviderOptions OnRetry OnRetryCallback @@ -335,6 +338,7 @@ func (a *agent) prepareCall(call AgentCall) AgentCall { call.PresencePenalty = cmp.Or(call.PresencePenalty, a.settings.presencePenalty) call.FrequencyPenalty = cmp.Or(call.FrequencyPenalty, a.settings.frequencyPenalty) call.MaxRetries = cmp.Or(call.MaxRetries, a.settings.maxRetries) + call.ToolChoice = cmp.Or(call.ToolChoice, a.settings.toolChoice) if len(call.StopWhen) == 0 && len(a.settings.stopWhen) > 0 { call.StopWhen = a.settings.stopWhen @@ -383,6 +387,9 @@ func (a *agent) Generate(ctx context.Context, opts AgentCall) (*AgentResult, err stepSystemPrompt := a.settings.systemPrompt stepActiveTools := opts.ActiveTools stepToolChoice := ToolChoiceAuto + if opts.ToolChoice != nil { + stepToolChoice = *opts.ToolChoice + } disableAllTools := false stepTools := a.settings.tools if opts.PrepareStep != nil { @@ -787,6 +794,7 @@ func (a *agent) Stream(ctx context.Context, opts AgentStreamCall) (*AgentResult, PresencePenalty: opts.PresencePenalty, FrequencyPenalty: opts.FrequencyPenalty, ActiveTools: opts.ActiveTools, + ToolChoice: opts.ToolChoice, ProviderOptions: opts.ProviderOptions, MaxRetries: opts.MaxRetries, OnRetry: opts.OnRetry, @@ -817,6 +825,9 @@ func (a *agent) Stream(ctx context.Context, opts AgentStreamCall) (*AgentResult, stepSystemPrompt := a.settings.systemPrompt stepActiveTools := call.ActiveTools stepToolChoice := ToolChoiceAuto + if call.ToolChoice != nil { + stepToolChoice = *call.ToolChoice + } disableAllTools := false stepTools := a.settings.tools // Apply step preparation if provided @@ -1206,6 +1217,14 @@ func WithProviderDefinedTools(tools ...ProviderTool) AgentOption { } } +// WithToolChoice sets the default tool choice for the agent. It is overridden +// by the ToolChoice on a specific call, and by PrepareStep at the step level. +func WithToolChoice(choice ToolChoice) AgentOption { + return func(s *agentSettings) { + s.toolChoice = &choice + } +} + // WithStopConditions sets the stop conditions for the agent. func WithStopConditions(conditions ...StopCondition) AgentOption { return func(s *agentSettings) { From 6dbd4f52580682aef81f390c0a121da550706f70 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Wed, 29 Apr 2026 09:53:32 -0300 Subject: [PATCH 34/82] v0.22.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index a67cebaf7..215740905 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.21.1 +0.22.0 From ea8f291585c7447feda734c02ecf90eff226838f Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Thu, 30 Apr 2026 12:49:11 -0400 Subject: [PATCH 35/82] fix(openai): handle media tool results (#221) This fix applies to media tool results for every downstream provider that builds on `providers/openai` (Hyper, OpenRouter, Vercel, MiniMax, Copilot, Azure, `openai-compat`). Tool results with image or audio content fell through the MessageRoleTool switch in both the Chat Completions and Responses paths, leaving a dangling `tool_call` with no matching tool message and 400-ing every subsequent turn. This fix emit a text tool message with a placeholder so the pairing stays valid, then attaches the media in a synthetic follow-up user message so vision and audio-capable models still see it. It will also warn on unknown tool result content types so new variants can't silently drop messages again. --- providers/openai/language_model_hooks.go | 70 ++++++ providers/openai/responses_language_model.go | 42 ++++ providers/openai/tool_result_media_test.go | 247 +++++++++++++++++++ 3 files changed, 359 insertions(+) create mode 100644 providers/openai/tool_result_media_test.go diff --git a/providers/openai/language_model_hooks.go b/providers/openai/language_model_hooks.go index e1131bc77..7da22c9dc 100644 --- a/providers/openai/language_model_hooks.go +++ b/providers/openai/language_model_hooks.go @@ -564,6 +564,41 @@ func DefaultToPrompt(prompt fantasy.Prompt, _, _ string) ([]openai.ChatCompletio continue } messages = append(messages, openai.ToolMessage(output.Error.Error(), toolResultPart.ToolCallID)) + case fantasy.ToolResultContentTypeMedia: + output, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentMedia](toolResultPart.Output) + if !ok { + warnings = append(warnings, fantasy.CallWarning{ + Type: fantasy.CallWarningTypeOther, + Message: "tool result output does not have the right type", + }) + continue + } + // OpenAI Chat Completions tool messages cannot carry image + // or audio content directly; the SDK's content union only + // accepts text. To keep the tool_call/tool_result pairing + // valid while still surfacing the media to vision-capable + // models, emit a text tool message with a placeholder (or + // any accompanying text) and follow it with a synthetic + // user message holding the actual media content part. + placeholder := output.Text + if placeholder == "" { + placeholder = fmt.Sprintf("The tool returned %s content; see the following user message.", output.MediaType) + } + messages = append(messages, openai.ToolMessage(placeholder, toolResultPart.ToolCallID)) + mediaPart, mediaWarning, emit := toolResultMediaUserPart(output) + if mediaWarning != nil { + warnings = append(warnings, *mediaWarning) + } + if emit { + messages = append(messages, openai.UserMessage( + []openai.ChatCompletionContentPartUnionParam{mediaPart}, + )) + } + default: + warnings = append(warnings, fantasy.CallWarning{ + Type: fantasy.CallWarningTypeOther, + Message: fmt.Sprintf("tool result output type %q not supported", toolResultPart.Output.GetType()), + }) } } } @@ -571,6 +606,41 @@ func DefaultToPrompt(prompt fantasy.Prompt, _, _ string) ([]openai.ChatCompletio return messages, warnings } +// toolResultMediaUserPart maps a tool-result media output to an OpenAI chat +// completions user content part. It returns the content part, an optional +// warning, and whether the caller should emit the returned part. +func toolResultMediaUserPart(output fantasy.ToolResultOutputContentMedia) (openai.ChatCompletionContentPartUnionParam, *fantasy.CallWarning, bool) { + switch { + case strings.HasPrefix(output.MediaType, "image/"): + data := "data:" + output.MediaType + ";base64," + output.Data + imageBlock := openai.ChatCompletionContentPartImageParam{ + ImageURL: openai.ChatCompletionContentPartImageImageURLParam{URL: data}, + } + return openai.ChatCompletionContentPartUnionParam{OfImageURL: &imageBlock}, nil, true + case output.MediaType == "audio/wav": + audioBlock := openai.ChatCompletionContentPartInputAudioParam{ + InputAudio: openai.ChatCompletionContentPartInputAudioInputAudioParam{ + Data: output.Data, + Format: "wav", + }, + } + return openai.ChatCompletionContentPartUnionParam{OfInputAudio: &audioBlock}, nil, true + case output.MediaType == "audio/mpeg" || output.MediaType == "audio/mp3": + audioBlock := openai.ChatCompletionContentPartInputAudioParam{ + InputAudio: openai.ChatCompletionContentPartInputAudioInputAudioParam{ + Data: output.Data, + Format: "mp3", + }, + } + return openai.ChatCompletionContentPartUnionParam{OfInputAudio: &audioBlock}, nil, true + default: + return openai.ChatCompletionContentPartUnionParam{}, &fantasy.CallWarning{ + Type: fantasy.CallWarningTypeOther, + Message: fmt.Sprintf("tool result media type %s not supported, sending text placeholder only", output.MediaType), + }, false + } +} + func hasVisibleUserContent(content []openai.ChatCompletionContentPartUnionParam) bool { for _, part := range content { if part.OfText != nil || part.OfImageURL != nil || part.OfInputAudio != nil || part.OfFile != nil { diff --git a/providers/openai/responses_language_model.go b/providers/openai/responses_language_model.go index bd61a68ba..06da0aa6e 100644 --- a/providers/openai/responses_language_model.go +++ b/providers/openai/responses_language_model.go @@ -611,6 +611,7 @@ func toResponsesPrompt(prompt fantasy.Prompt, systemMessageMode string, store bo } var outputStr string + var followupParts responses.ResponseInputMessageContentListParam switch toolResultPart.Output.GetType() { case fantasy.ToolResultContentTypeText: @@ -633,9 +634,50 @@ func toResponsesPrompt(prompt fantasy.Prompt, systemMessageMode string, store bo continue } outputStr = output.Error.Error() + case fantasy.ToolResultContentTypeMedia: + output, ok := fantasy.AsToolResultOutputType[fantasy.ToolResultOutputContentMedia](toolResultPart.Output) + if !ok { + warnings = append(warnings, fantasy.CallWarning{ + Type: fantasy.CallWarningTypeOther, + Message: "tool result output does not have the right type", + }) + continue + } + // The Responses API function_call_output only accepts a + // string. Emit a text placeholder (preserving any + // accompanying text) so the tool_call/tool_result pairing + // stays valid, then attach the media as a synthetic user + // input_image so vision-capable models still receive it. + outputStr = output.Text + if outputStr == "" { + outputStr = fmt.Sprintf("The tool returned %s content; see the following user message.", output.MediaType) + } + if strings.HasPrefix(output.MediaType, "image/") { + imageURL := fmt.Sprintf("data:%s;base64,%s", output.MediaType, output.Data) + followupParts = append(followupParts, responses.ResponseInputContentUnionParam{ + OfInputImage: &responses.ResponseInputImageParam{ + Type: "input_image", + ImageURL: param.NewOpt(imageURL), + }, + }) + } else { + warnings = append(warnings, fantasy.CallWarning{ + Type: fantasy.CallWarningTypeOther, + Message: fmt.Sprintf("tool result media type %s not supported, sending text placeholder only", output.MediaType), + }) + } + default: + warnings = append(warnings, fantasy.CallWarning{ + Type: fantasy.CallWarningTypeOther, + Message: fmt.Sprintf("tool result output type %q not supported", toolResultPart.Output.GetType()), + }) + continue } input = append(input, responses.ResponseInputItemParamOfFunctionCallOutput(toolResultPart.ToolCallID, outputStr)) + if len(followupParts) > 0 { + input = append(input, responses.ResponseInputItemParamOfMessage(followupParts, responses.EasyInputMessageRoleUser)) + } } } } diff --git a/providers/openai/tool_result_media_test.go b/providers/openai/tool_result_media_test.go new file mode 100644 index 000000000..cc7424cf0 --- /dev/null +++ b/providers/openai/tool_result_media_test.go @@ -0,0 +1,247 @@ +package openai + +import ( + "encoding/base64" + "testing" + + "charm.land/fantasy" + "github.com/stretchr/testify/require" +) + +// Tool messages in the OpenAI Chat Completions API cannot carry image or audio +// content directly — the SDK's content union only accepts text. When a tool +// returns media, DefaultToPrompt must still emit a text tool message so the +// tool_call/tool_result pairing stays valid, and attach the media to a +// synthetic follow-up user message so vision- and audio-capable models can see +// it. + +func TestDefaultToPrompt_MediaToolResult_ImagePNG(t *testing.T) { + t.Parallel() + + imageData := base64.StdEncoding.EncodeToString([]byte{0, 1, 2, 3}) + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + fantasy.ToolCallPart{ToolCallID: "img-1", ToolName: "view", Input: "{}"}, + }, + }, + { + Role: fantasy.MessageRoleTool, + Content: []fantasy.MessagePart{ + fantasy.ToolResultPart{ + ToolCallID: "img-1", + Output: fantasy.ToolResultOutputContentMedia{ + Data: imageData, + MediaType: "image/png", + }, + }, + }, + }, + } + + messages, warnings := DefaultToPrompt(prompt, "openrouter", "anthropic/claude-opus-4.7") + + require.Empty(t, warnings) + // Assistant tool call + text tool message + synthetic user image message. + require.Len(t, messages, 3) + + toolMsg := messages[1].OfTool + require.NotNil(t, toolMsg) + require.Equal(t, "img-1", toolMsg.ToolCallID) + require.Contains(t, toolMsg.Content.OfString.Value, "image/png") + + userMsg := messages[2].OfUser + require.NotNil(t, userMsg) + require.Len(t, userMsg.Content.OfArrayOfContentParts, 1) + imagePart := userMsg.Content.OfArrayOfContentParts[0].OfImageURL + require.NotNil(t, imagePart) + require.Equal(t, "data:image/png;base64,"+imageData, imagePart.ImageURL.URL) +} + +func TestDefaultToPrompt_MediaToolResult_PrefersAccompanyingText(t *testing.T) { + t.Parallel() + + imageData := base64.StdEncoding.EncodeToString([]byte{9, 9, 9}) + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + fantasy.ToolCallPart{ToolCallID: "img-2", ToolName: "view", Input: "{}"}, + }, + }, + { + Role: fantasy.MessageRoleTool, + Content: []fantasy.MessagePart{ + fantasy.ToolResultPart{ + ToolCallID: "img-2", + Output: fantasy.ToolResultOutputContentMedia{ + Data: imageData, + MediaType: "image/jpeg", + Text: "Screenshot of the blockquote element.", + }, + }, + }, + }, + } + + messages, warnings := DefaultToPrompt(prompt, "openrouter", "anthropic/claude-opus-4.7") + + require.Empty(t, warnings) + require.Len(t, messages, 3) + require.Equal(t, "Screenshot of the blockquote element.", messages[1].OfTool.Content.OfString.Value) +} + +func TestDefaultToPrompt_MediaToolResult_AudioWAV(t *testing.T) { + t.Parallel() + + audio := base64.StdEncoding.EncodeToString([]byte("fake-wav-bytes")) + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + fantasy.ToolCallPart{ToolCallID: "audio-1", ToolName: "record", Input: "{}"}, + }, + }, + { + Role: fantasy.MessageRoleTool, + Content: []fantasy.MessagePart{ + fantasy.ToolResultPart{ + ToolCallID: "audio-1", + Output: fantasy.ToolResultOutputContentMedia{ + Data: audio, + MediaType: "audio/wav", + }, + }, + }, + }, + } + + messages, warnings := DefaultToPrompt(prompt, "openai", "gpt-4o-audio") + + require.Empty(t, warnings) + require.Len(t, messages, 3) + require.NotNil(t, messages[1].OfTool) + userMsg := messages[2].OfUser + require.NotNil(t, userMsg) + require.Len(t, userMsg.Content.OfArrayOfContentParts, 1) + audioPart := userMsg.Content.OfArrayOfContentParts[0].OfInputAudio + require.NotNil(t, audioPart) + require.Equal(t, audio, audioPart.InputAudio.Data) + require.Equal(t, "wav", audioPart.InputAudio.Format) +} + +func TestDefaultToPrompt_MediaToolResult_UnsupportedMediaType(t *testing.T) { + t.Parallel() + + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + fantasy.ToolCallPart{ToolCallID: "vid-1", ToolName: "record", Input: "{}"}, + }, + }, + { + Role: fantasy.MessageRoleTool, + Content: []fantasy.MessagePart{ + fantasy.ToolResultPart{ + ToolCallID: "vid-1", + Output: fantasy.ToolResultOutputContentMedia{ + Data: "AAAA", + MediaType: "video/mp4", + }, + }, + }, + }, + } + + messages, warnings := DefaultToPrompt(prompt, "openai", "gpt-5") + + // Assistant tool call + text tool message, but no synthetic user image. + require.Len(t, messages, 2) + require.NotNil(t, messages[1].OfTool) + require.Equal(t, "vid-1", messages[1].OfTool.ToolCallID) + require.Len(t, warnings, 1) + require.Contains(t, warnings[0].Message, "video/mp4") +} + +func TestToResponsesPrompt_MediaToolResult_ImagePNG(t *testing.T) { + t.Parallel() + + imageData := base64.StdEncoding.EncodeToString([]byte{7, 7, 7, 7}) + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + fantasy.ToolCallPart{ToolCallID: "img-resp-1", ToolName: "view", Input: "{}"}, + }, + }, + { + Role: fantasy.MessageRoleTool, + Content: []fantasy.MessagePart{ + fantasy.ToolResultPart{ + ToolCallID: "img-resp-1", + Output: fantasy.ToolResultOutputContentMedia{ + Data: imageData, + MediaType: "image/png", + }, + }, + }, + }, + } + + input, warnings := toResponsesPrompt(prompt, "system", false) + + require.Empty(t, warnings) + // Assistant function call + function_call_output + synthetic user image + // message. + require.Len(t, input, 3) + + funcOut := input[1].OfFunctionCallOutput + require.NotNil(t, funcOut) + require.Equal(t, "img-resp-1", funcOut.CallID) + require.Contains(t, funcOut.Output.OfString.Value, "image/png") + + userMsg := input[2].OfMessage + require.NotNil(t, userMsg) + parts := userMsg.Content.OfInputItemContentList + require.Len(t, parts, 1) + imagePart := parts[0].OfInputImage + require.NotNil(t, imagePart) + require.Equal(t, "data:image/png;base64,"+imageData, imagePart.ImageURL.Value) +} + +func TestToResponsesPrompt_MediaToolResult_UnsupportedMediaType(t *testing.T) { + t.Parallel() + + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + fantasy.ToolCallPart{ToolCallID: "vid-resp-1", ToolName: "record", Input: "{}"}, + }, + }, + { + Role: fantasy.MessageRoleTool, + Content: []fantasy.MessagePart{ + fantasy.ToolResultPart{ + ToolCallID: "vid-resp-1", + Output: fantasy.ToolResultOutputContentMedia{ + Data: "AAAA", + MediaType: "video/mp4", + }, + }, + }, + }, + } + + input, warnings := toResponsesPrompt(prompt, "system", false) + + // Assistant function call + function_call_output, but no synthetic user + // image message. + require.Len(t, input, 2) + require.NotNil(t, input[1].OfFunctionCallOutput) + require.Equal(t, "vid-resp-1", input[1].OfFunctionCallOutput.CallID) + require.Len(t, warnings, 1) + require.Contains(t, warnings[0].Message, "video/mp4") +} From 792d186f5720b55339baf89bda3b34bdddd8a9d8 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 30 Apr 2026 13:50:45 -0300 Subject: [PATCH 36/82] feat: add `ExtraBody` provider option to openai-compat (#220) This was already present to some other providers, like Vercel and OpenRouter. --- providers/openaicompat/language_model_hooks.go | 3 +++ providers/openaicompat/provider_options.go | 1 + 2 files changed, 4 insertions(+) diff --git a/providers/openaicompat/language_model_hooks.go b/providers/openaicompat/language_model_hooks.go index d2e77af1b..5ffefb692 100644 --- a/providers/openaicompat/language_model_hooks.go +++ b/providers/openaicompat/language_model_hooks.go @@ -47,6 +47,9 @@ func PrepareCallFunc(model fantasy.LanguageModel, params *openaisdk.ChatCompleti if providerOptions.User != nil { params.User = param.NewOpt(*providerOptions.User) } + if len(providerOptions.ExtraBody) > 0 { + params.SetExtraFields(providerOptions.ExtraBody) + } return nil, nil } diff --git a/providers/openaicompat/provider_options.go b/providers/openaicompat/provider_options.go index 561860c32..1c5662c3c 100644 --- a/providers/openaicompat/provider_options.go +++ b/providers/openaicompat/provider_options.go @@ -28,6 +28,7 @@ func init() { type ProviderOptions struct { User *string `json:"user"` ReasoningEffort *openai.ReasoningEffort `json:"reasoning_effort"` + ExtraBody map[string]any `json:"extra_body,omitempty"` } // ReasoningData represents reasoning data for OpenAI-compatible provider. From f9f1cf6600e5c6e30af5fc4c6e508575a4d5153f Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 30 Apr 2026 13:52:36 -0300 Subject: [PATCH 37/82] v0.23.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 215740905..ca222b7cf 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.22.0 +0.23.0 From 54c9dd50ecee61df3fe7b1d0ce80f9d447b95ef4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 10:41:44 +0000 Subject: [PATCH 38/82] chore(deps): bump the all group with 4 updates (#225) Bumps the all group with 4 updates: [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/kaptinlin/jsonschema](https://github.com/kaptinlin/jsonschema) and [google.golang.org/genai](https://github.com/googleapis/go-genai). Updates `github.com/aws/aws-sdk-go-v2` from 1.41.6 to 1.41.7 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.41.6...v1.41.7) Updates `github.com/aws/aws-sdk-go-v2/config` from 1.32.16 to 1.32.17 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.32.16...config/v1.32.17) Updates `github.com/kaptinlin/jsonschema` from 0.7.11 to 0.7.13 - [Commits](https://github.com/kaptinlin/jsonschema/compare/v0.7.11...v0.7.13) Updates `google.golang.org/genai` from 1.54.0 to 1.55.0 - [Release notes](https://github.com/googleapis/go-genai/releases) - [Changelog](https://github.com/googleapis/go-genai/blob/main/CHANGELOG.md) - [Commits](https://github.com/googleapis/go-genai/compare/v1.54.0...v1.55.0) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go-v2 dependency-version: 1.41.7 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: github.com/aws/aws-sdk-go-v2/config dependency-version: 1.32.17 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: github.com/kaptinlin/jsonschema dependency-version: 0.7.13 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: google.golang.org/genai dependency-version: 1.55.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 36 ++++++++++++++--------------- go.sum | 72 +++++++++++++++++++++++++++++----------------------------- 2 files changed, 54 insertions(+), 54 deletions(-) diff --git a/go.mod b/go.mod index 4d5bc6bb9..1ea71e402 100644 --- a/go.mod +++ b/go.mod @@ -6,8 +6,8 @@ require ( charm.land/x/vcr v0.1.1 cloud.google.com/go/auth v0.20.0 github.com/ardanlabs/kronk v1.24.0 - github.com/aws/aws-sdk-go-v2 v1.41.6 - github.com/aws/aws-sdk-go-v2/config v1.32.16 + github.com/aws/aws-sdk-go-v2 v1.41.7 + github.com/aws/aws-sdk-go-v2/config v1.32.17 github.com/aws/smithy-go v1.25.1 github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 @@ -17,10 +17,10 @@ require ( github.com/go-viper/mapstructure/v2 v2.5.0 github.com/google/uuid v1.6.0 github.com/joho/godotenv v1.5.1 - github.com/kaptinlin/jsonschema v0.7.11 + github.com/kaptinlin/jsonschema v0.7.13 github.com/stretchr/testify v1.11.1 golang.org/x/oauth2 v0.36.0 - google.golang.org/genai v1.54.0 + google.golang.org/genai v1.55.0 ) require ( @@ -38,20 +38,20 @@ require ( github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 // indirect github.com/ardanlabs/jinja v1.1.0 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.19.15 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.22 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.16 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9 // indirect github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.14 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.22 // indirect github.com/aws/aws-sdk-go-v2/service/s3 v1.100.0 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.0.10 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.16 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.42.0 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.42.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect @@ -63,7 +63,7 @@ require ( github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-jose/go-jose/v4 v4.1.4 // indirect - github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433 // indirect + github.com/go-json-experiment/json v0.0.0-20260430182902-b6187a392ed4 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/goccy/go-yaml v1.19.2 // indirect @@ -79,8 +79,8 @@ require ( github.com/hashicorp/go-version v1.9.0 // indirect github.com/hybridgroup/yzma v1.13.0 // indirect github.com/jupiterrider/ffi v0.6.0 // indirect - github.com/kaptinlin/go-i18n v0.4.4 // indirect - github.com/kaptinlin/jsonpointer v0.4.19 // indirect + github.com/kaptinlin/go-i18n v0.4.5 // indirect + github.com/kaptinlin/jsonpointer v0.4.20 // indirect github.com/kaptinlin/messageformat-go v0.6.0 // indirect github.com/klauspost/compress v1.18.5 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect diff --git a/go.sum b/go.sum index 9e8304c56..2fd5762da 100644 --- a/go.sum +++ b/go.sum @@ -42,40 +42,40 @@ github.com/ardanlabs/jinja v1.1.0 h1:SZtVrV+1szfSBXBKQA5FoJtOabUxkJu5IvEX+ADUtcM github.com/ardanlabs/jinja v1.1.0/go.mod h1:onVec/ZOYPqNm7TRiNfJBnW+t9VxSi2gkARWhgP9qwQ= github.com/ardanlabs/kronk v1.24.0 h1:A5oEaMKHQFyh1jGGQb3nQUSCpd7bSLYGLx8jJ1FJvuo= github.com/ardanlabs/kronk v1.24.0/go.mod h1:cdt6xRpBH8lfdNXHDPAJ2b9i4IhmY7Gc3KpJmV7nSO4= -github.com/aws/aws-sdk-go-v2 v1.41.6 h1:1AX0AthnBQzMx1vbmir3Y4WsnJgiydmnJjiLu+LvXOg= -github.com/aws/aws-sdk-go-v2 v1.41.6/go.mod h1:dy0UzBIfwSeot4grGvY1AqFWN5zgziMmWGzysDnHFcQ= +github.com/aws/aws-sdk-go-v2 v1.41.7 h1:DWpAJt66FmnnaRIOT/8ASTucrvuDPZASqhhLey6tLY8= +github.com/aws/aws-sdk-go-v2 v1.41.7/go.mod h1:4LAfZOPHNVNQEckOACQx60Y8pSRjIkNZQz1w92xpMJc= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9 h1:adBsCIIpLbLmYnkQU+nAChU5yhVTvu5PerROm+/Kq2A= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9/go.mod h1:uOYhgfgThm/ZyAuJGNQ5YgNyOlYfqnGpTHXvk3cpykg= -github.com/aws/aws-sdk-go-v2/config v1.32.16 h1:Q0iQ7quUgJP0F/SCRTieScnaMdXr9h/2+wze1u3cNeM= -github.com/aws/aws-sdk-go-v2/config v1.32.16/go.mod h1:duCCnJEFqpt2RC6no1iK6q+8HpwOAkiUua0pY507dQc= -github.com/aws/aws-sdk-go-v2/credentials v1.19.15 h1:fyvgWTszojq8hEnMi8PPBTvZdTtEVmAVyo+NFLHBhH4= -github.com/aws/aws-sdk-go-v2/credentials v1.19.15/go.mod h1:gJiYyMOjNg8OEdRWOf3CrFQxM2a98qmrtjx1zuiQfB8= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.22 h1:IOGsJ1xVWhsi+ZO7/NW8OuZZBtMJLZbk4P5HDjJO0jQ= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.22/go.mod h1:b+hYdbU+jGKfXE8kKM6g1+h+L/Go3vMvzlxBsiuGsxg= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22 h1:GmLa5Kw1ESqtFpXsx5MmC84QWa/ZrLZvlJGa2y+4kcQ= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.22/go.mod h1:6sW9iWm9DK9YRpRGga/qzrzNLgKpT2cIxb7Vo2eNOp0= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22 h1:dY4kWZiSaXIzxnKlj17nHnBcXXBfac6UlsAx2qL6XrU= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.22/go.mod h1:KIpEUx0JuRZLO7U6cbV204cWAEco2iC3l061IxlwLtI= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23 h1:FPXsW9+gMuIeKmz7j6ENWcWtBGTe1kH8r9thNt5Uxx4= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.23/go.mod h1:7J8iGMdRKk6lw2C+cMIphgAnT8uTwBwNOsGkyOCm80U= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8 h1:HtOTYcbVcGABLOVuPYaIihj6IlkqubBwFj10K5fxRek= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.8/go.mod h1:VsK9abqQeGlzPgUr+isNWzPlK2vKe9INMLWnY65f5Xs= +github.com/aws/aws-sdk-go-v2/config v1.32.17 h1:FpL4/758/diKwqbytU0prpuiu60fgXKUWCpDJtApclU= +github.com/aws/aws-sdk-go-v2/config v1.32.17/go.mod h1:OXqUMzgXytfoF9JaKkhrOYsyh72t9G+MJH8mMRaexOE= +github.com/aws/aws-sdk-go-v2/credentials v1.19.16 h1:r3RJBuU7X9ibt8RHbMjWE6y60QbKBiII6wSrXnapxSU= +github.com/aws/aws-sdk-go-v2/credentials v1.19.16/go.mod h1:6cx7zqDENJDbBIIWX6P8s0h6hqHC8Avbjh9Dseo27ug= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 h1:UuSfcORqNSz/ey3VPRS8TcVH2Ikf0/sC+Hdj400QI6U= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23/go.mod h1:+G/OSGiOFnSOkYloKj/9M35s74LgVAdJBSD5lsFfqKg= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23 h1:GpT/TrnBYuE5gan2cZbTtvP+JlHsutdmlV2YfEyNde0= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23/go.mod h1:xYWD6BS9ywC5bS3sz9Xh04whO/hzK2plt2Zkyrp4JuA= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23 h1:bpd8vxhlQi2r1hiueOw02f/duEPTMK59Q4QMAoTTtTo= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23/go.mod h1:15DfR2nw+CRHIk0tqNyifu3G1YdAOy68RftkhMDDwYk= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 h1:OQqn11BtaYv1WLUowvcA30MpzIu8Ti4pcLPIIyoKZrA= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24/go.mod h1:X5ZJyfwVrWA96GzPmUCWFQaEARPR7gCrpq2E92PJwAE= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9 h1:FLudkZLt5ci0ozzgkVo8BJGwvqNaZbTWb3UcucAateA= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9/go.mod h1:w7wZ/s9qK7c8g4al+UyoF1Sp/Z45UwMGcqIzLWVQHWk= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.14 h1:xnvDEnw+pnj5mctWiYuFbigrEzSm35x7k4KS/ZkCANg= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.14/go.mod h1:yS5rNogD8e0Wu9+l3MUwr6eENBzEeGejvINpN5PAYfY= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22 h1:PUmZeJU6Y1Lbvt9WFuJ0ugUK2xn6hIWUBBbKuOWF30s= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.22/go.mod h1:nO6egFBoAaoXze24a2C0NjQCvdpk8OueRoYimvEB9jo= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 h1:pbrxO/kuIwgEsOPLkaHu0O+m4fNgLU8B3vxQ+72jTPw= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23/go.mod h1:/CMNUqoj46HpS3MNRDEDIwcgEnrtZlKRaHNaHxIFpNA= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.22 h1:SE+aQ4DEqG53RRCAIHlCf//B2ycxGH7jFkpnAh/kKPM= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.22/go.mod h1:ES3ynECd7fYeJIL6+oax+uIEljmfps0S70BaQzbMd/o= github.com/aws/aws-sdk-go-v2/service/s3 v1.100.0 h1:7G26Sae6PMKn4kMcU5JzNfrm1YrKwyOhowXPYR2WiWY= github.com/aws/aws-sdk-go-v2/service/s3 v1.100.0/go.mod h1:Fw9aqhJicIVee1VytBBjH+l+5ov6/PhbtIK/u3rt/ls= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.10 h1:a1Fq/KXn75wSzoJaPQTgZO0wHGqE9mjFnylnqEPTchA= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.10/go.mod h1:p6+MXNxW7IA6dMgHfTAzljuwSKD0NCm/4lbS4t6+7vI= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.16 h1:x6bKbmDhsgSZwv6q19wY/u3rLk/3FGjJWyqKcIRufpE= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.16/go.mod h1:CudnEVKRtLn0+3uMV0yEXZ+YZOKnAtUJ5DmDhilVnIw= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20 h1:oK/njaL8GtyEihkWMD4k3VgHCT64RQKkZwh0DG5j8ak= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.20/go.mod h1:JHs8/y1f3zY7U5WcuzoJ/yAYGYtNIVPKLIbp61euvmg= -github.com/aws/aws-sdk-go-v2/service/sts v1.42.0 h1:ks8KBcZPh3PYISr5dAiXCM5/Thcuxk8l+PG4+A0exds= -github.com/aws/aws-sdk-go-v2/service/sts v1.42.0/go.mod h1:pFw33T0WLvXU3rw1WBkpMlkgIn54eCB5FYLhjDc9Foo= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 h1:TdJ+HdzOBhU8+iVAOGUTU63VXopcumCOF1paFulHWZc= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.11/go.mod h1:R82ZRExE/nheo0N+T8zHPcLRTcH8MGsnR3BiVGX0TwI= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 h1:7byT8HUWrgoRp6sXjxtZwgOKfhss5fW6SkLBtqzgRoE= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.17/go.mod h1:xNWknVi4Ezm1vg1QsB/5EWpAJURq22uqd38U8qKvOJc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21 h1:+1Kl1zx6bWi4X7cKi3VYh29h8BvsCoHQEQ6ST9X8w7w= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21/go.mod h1:4vIRDq+CJB2xFAXZ+YgGUTiEft7oAQlhIs71xcSeuVg= +github.com/aws/aws-sdk-go-v2/service/sts v1.42.1 h1:F/M5Y9I3nwr2IEpshZgh1GeHpOItExNM9L1euNuh/fk= +github.com/aws/aws-sdk-go-v2/service/sts v1.42.1/go.mod h1:mTNxImtovCOEEuD65mKW7DCsL+2gjEH+RPEAexAzAio= github.com/aws/smithy-go v1.25.1 h1:J8ERsGSU7d+aCmdQur5Txg6bVoYelvQJgtZehD12GkI= github.com/aws/smithy-go v1.25.1/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -116,8 +116,8 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= -github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433 h1:vymEbVwYFP/L05h5TKQxvkXoKxNvTpjxYKdF1Nlwuao= -github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg= +github.com/go-json-experiment/json v0.0.0-20260430182902-b6187a392ed4 h1:2WmHkJINIjgXXYDGik8d3oJvFA3DAwPy00csDJ3vo+o= +github.com/go-json-experiment/json v0.0.0-20260430182902-b6187a392ed4/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -161,12 +161,12 @@ github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jupiterrider/ffi v0.6.0 h1:UX378KcZvH5c8qgLi9KL/bL82SZTHdRspZ+jj7bvBng= github.com/jupiterrider/ffi v0.6.0/go.mod h1:PqZ5Go6X9by8CIXgfprxfMPYmn8oT5m2O7AA56s64bY= -github.com/kaptinlin/go-i18n v0.4.4 h1:3XrUYyLOykcd1K3gm4j7ndrF8YLIYrJjtbKGr/nF2Kw= -github.com/kaptinlin/go-i18n v0.4.4/go.mod h1:mU/7BH4molY5lGZYBwBRKAaiJ70dWRHuqmQ0/pFLGno= -github.com/kaptinlin/jsonpointer v0.4.19 h1:dEkwEnvn9jJCofrwKGxfKaPNbDOQEf3UEbEumn4xZBg= -github.com/kaptinlin/jsonpointer v0.4.19/go.mod h1:Mo7+DX8RlQTFqS4dnYJl0izSP4ob+Rl5xO/mGDETgaU= -github.com/kaptinlin/jsonschema v0.7.11 h1:h63Lb3Q4FBSWeWiAGefNPEVPNsOvgn91ATmf25X0yRs= -github.com/kaptinlin/jsonschema v0.7.11/go.mod h1:cJ8QIhwq3V/Yyh3sXRNt8w3sM943bNIbwnPTpBTXn3s= +github.com/kaptinlin/go-i18n v0.4.5 h1:9tIlo5A0RXth+yZJO2MG7Bhpu/X9PlzQnGz/qyYWNoY= +github.com/kaptinlin/go-i18n v0.4.5/go.mod h1:mU/7BH4molY5lGZYBwBRKAaiJ70dWRHuqmQ0/pFLGno= +github.com/kaptinlin/jsonpointer v0.4.20 h1:otSZZnCVdVo9OwOm+AQhS8ke31CLLQYXmG5Q0GOrXYg= +github.com/kaptinlin/jsonpointer v0.4.20/go.mod h1:Mo7+DX8RlQTFqS4dnYJl0izSP4ob+Rl5xO/mGDETgaU= +github.com/kaptinlin/jsonschema v0.7.13 h1:kahVXTy/rURL0XJjyQ9WELm59wEmXi6IY0TWswQEFvU= +github.com/kaptinlin/jsonschema v0.7.13/go.mod h1:Uh0aUBusnhXDCEXJ2oimL/hx7YTo7F+sKniE+tM0ERc= github.com/kaptinlin/messageformat-go v0.6.0 h1:D6jiXFsKW4/JG2CMddv/F6Rev9KVbCRKEzzV5QOAcpc= github.com/kaptinlin/messageformat-go v0.6.0/go.mod h1:NKjwS6e9u7DRhAK+vydjDDwJ7UbdHhYjk/yk2WPuZPs= github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= @@ -265,8 +265,8 @@ gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/api v0.276.0 h1:nVArUtfLEihtW+b0DdcqRGK1xoEm2+ltAihyztq7MKY= google.golang.org/api v0.276.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= -google.golang.org/genai v1.54.0 h1:ZQCa70WMTJDI11FdqWCzGvZ5PanpcpfoO6jl/lrSnGU= -google.golang.org/genai v1.54.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= +google.golang.org/genai v1.55.0 h1:iLHGk4Bj/IZ/GNNZb7hYqwSJMRBvqLeu2Hb6YQ+rYGw= +google.golang.org/genai v1.55.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= google.golang.org/genproto v0.0.0-20260427160629-7cedc36a6bc4 h1:2iMJZntwvmfgtse+s744JY7v7PgEdSBuFYXucvpOHNM= google.golang.org/genproto v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:v14kaaboYyXQ1Gsu489Q+Hg/oN4B33mWtuOhF1HCeXA= google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 h1:yOzSCGPx+cp5VO7IxvZ9SBFF7j1tZVcNtlHR2iYKtVo= From 2c8825d8c7f48d2bd67349c0fefbd38a421731cf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 May 2026 10:46:43 +0000 Subject: [PATCH 39/82] chore(deps): bump github.com/ardanlabs/kronk (#226) Bumps the kronk group with 1 update in the / directory: [github.com/ardanlabs/kronk](https://github.com/ardanlabs/kronk). Updates `github.com/ardanlabs/kronk` from 1.24.0 to 1.24.2 - [Release notes](https://github.com/ardanlabs/kronk/releases) - [Commits](https://github.com/ardanlabs/kronk/compare/v1.24.0...v1.24.2) --- updated-dependencies: - dependency-name: github.com/ardanlabs/kronk dependency-version: 1.24.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: kronk ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 20 ++++++++++---------- go.sum | 40 ++++++++++++++++++++-------------------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/go.mod b/go.mod index 1ea71e402..3bca09ef9 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.26.2 require ( charm.land/x/vcr v0.1.1 cloud.google.com/go/auth v0.20.0 - github.com/ardanlabs/kronk v1.24.0 + github.com/ardanlabs/kronk v1.24.2 github.com/aws/aws-sdk-go-v2 v1.41.7 github.com/aws/aws-sdk-go-v2/config v1.32.17 github.com/aws/smithy-go v1.25.1 @@ -28,26 +28,26 @@ require ( cloud.google.com/go v0.123.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect - cloud.google.com/go/iam v1.9.0 // indirect - cloud.google.com/go/monitoring v1.27.0 // indirect + cloud.google.com/go/iam v1.10.0 // indirect + cloud.google.com/go/monitoring v1.28.0 // indirect cloud.google.com/go/storage v1.62.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 // indirect - github.com/ardanlabs/jinja v1.1.0 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9 // indirect + github.com/ardanlabs/jinja v1.2.0 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.19.16 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.14 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.15 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.22 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.100.0 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.100.1 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21 // indirect @@ -82,7 +82,7 @@ require ( github.com/kaptinlin/go-i18n v0.4.5 // indirect github.com/kaptinlin/jsonpointer v0.4.20 // indirect github.com/kaptinlin/messageformat-go v0.6.0 // indirect - github.com/klauspost/compress v1.18.5 // indirect + github.com/klauspost/compress v1.18.6 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect @@ -117,7 +117,7 @@ require ( golang.org/x/sys v0.43.0 // indirect golang.org/x/text v0.36.0 // indirect golang.org/x/time v0.15.0 // indirect - google.golang.org/api v0.276.0 // indirect + google.golang.org/api v0.277.0 // indirect google.golang.org/genproto v0.0.0-20260427160629-7cedc36a6bc4 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 // indirect diff --git a/go.sum b/go.sum index 2fd5762da..7fc756f68 100644 --- a/go.sum +++ b/go.sum @@ -10,14 +10,14 @@ cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIi cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -cloud.google.com/go/iam v1.9.0 h1:89wyjxT6DL4b5rk/Nk8eBC9DHqf+JiMstrn5IEYxFw4= -cloud.google.com/go/iam v1.9.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= +cloud.google.com/go/iam v1.10.0 h1:cWWt8u8jXv3MzpvBmQgNClvvbVCRukruCJAnoK3fIJY= +cloud.google.com/go/iam v1.10.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= cloud.google.com/go/logging v1.16.0 h1:MMNgYRvZ/pEwiNSkcoJTKWfAbAJDqCqAMJiarZx+/CI= cloud.google.com/go/logging v1.16.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI= cloud.google.com/go/longrunning v0.11.0 h1:fE4XVLJQj+gRnw1HrbDyQXXgC0aiqY3wxP7DDU4cWk0= cloud.google.com/go/longrunning v0.11.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= -cloud.google.com/go/monitoring v1.27.0 h1:BhYwMqao+e5Nn7JtWMM9m6zRtKtVUK6kJWMizXChkLU= -cloud.google.com/go/monitoring v1.27.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= +cloud.google.com/go/monitoring v1.28.0 h1:jOe0Wkm+a56ptZnEeyHevXo7+KPWAPPP5wUTEJdP7GY= +cloud.google.com/go/monitoring v1.28.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= cloud.google.com/go/storage v1.62.1 h1:Os0G3XbUbjZumkpDUf2Y0rLoXJTCF1kU2kWUujKYXD8= cloud.google.com/go/storage v1.62.1/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= cloud.google.com/go/trace v1.14.0 h1:jUtnmOrNcu5XJNk4Gz0fv+v5sM0weaOa3z5MPQUjRXs= @@ -38,14 +38,14 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0 github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.56.0/go.mod h1:rqP9UEhOXv9WhQ7Gjz+G5y/pf8+BJZW5/Ts0AhE0PwE= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 h1:0YP0+/ixwu+Uqeu/FGiBZNQ19huiUxxiPXIc9WsLKuQ= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= -github.com/ardanlabs/jinja v1.1.0 h1:SZtVrV+1szfSBXBKQA5FoJtOabUxkJu5IvEX+ADUtcM= -github.com/ardanlabs/jinja v1.1.0/go.mod h1:onVec/ZOYPqNm7TRiNfJBnW+t9VxSi2gkARWhgP9qwQ= -github.com/ardanlabs/kronk v1.24.0 h1:A5oEaMKHQFyh1jGGQb3nQUSCpd7bSLYGLx8jJ1FJvuo= -github.com/ardanlabs/kronk v1.24.0/go.mod h1:cdt6xRpBH8lfdNXHDPAJ2b9i4IhmY7Gc3KpJmV7nSO4= +github.com/ardanlabs/jinja v1.2.0 h1:B5di2EVsMkYFhEk1yCnDPTZ4KhqYmwNaNIp8PUWYq+A= +github.com/ardanlabs/jinja v1.2.0/go.mod h1:aXXzlJfjA+T3XNKA/YT5ZtDq2VJxt5a5siZ8cl9B35Q= +github.com/ardanlabs/kronk v1.24.2 h1:wQNEnM2kjb/sJ+QjbdNCAhrhvQru0gdGi2uHTd+dnGM= +github.com/ardanlabs/kronk v1.24.2/go.mod h1:jVlHPPmuKbiXIu5ZvB4W6jFQy8IznJBrO0WuS88yfX4= github.com/aws/aws-sdk-go-v2 v1.41.7 h1:DWpAJt66FmnnaRIOT/8ASTucrvuDPZASqhhLey6tLY8= github.com/aws/aws-sdk-go-v2 v1.41.7/go.mod h1:4LAfZOPHNVNQEckOACQx60Y8pSRjIkNZQz1w92xpMJc= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9 h1:adBsCIIpLbLmYnkQU+nAChU5yhVTvu5PerROm+/Kq2A= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.9/go.mod h1:uOYhgfgThm/ZyAuJGNQ5YgNyOlYfqnGpTHXvk3cpykg= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 h1:gx1AwW1Iyk9Z9dD9F4akX5gnN3QZwUB20GGKH/I+Rho= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10/go.mod h1:qqY157uZoqm5OXq/amuaBJyC9hgBCBQnsaWnPe905GY= github.com/aws/aws-sdk-go-v2/config v1.32.17 h1:FpL4/758/diKwqbytU0prpuiu60fgXKUWCpDJtApclU= github.com/aws/aws-sdk-go-v2/config v1.32.17/go.mod h1:OXqUMzgXytfoF9JaKkhrOYsyh72t9G+MJH8mMRaexOE= github.com/aws/aws-sdk-go-v2/credentials v1.19.16 h1:r3RJBuU7X9ibt8RHbMjWE6y60QbKBiII6wSrXnapxSU= @@ -60,14 +60,14 @@ github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 h1:OQqn11BtaYv1WLUowvcA30MpzIu github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24/go.mod h1:X5ZJyfwVrWA96GzPmUCWFQaEARPR7gCrpq2E92PJwAE= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9 h1:FLudkZLt5ci0ozzgkVo8BJGwvqNaZbTWb3UcucAateA= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9/go.mod h1:w7wZ/s9qK7c8g4al+UyoF1Sp/Z45UwMGcqIzLWVQHWk= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.14 h1:xnvDEnw+pnj5mctWiYuFbigrEzSm35x7k4KS/ZkCANg= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.14/go.mod h1:yS5rNogD8e0Wu9+l3MUwr6eENBzEeGejvINpN5PAYfY= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.15 h1:ieLCO1JxUWuxTZ1cRd0GAaeX7O6cIxnwk7tc1LsQhC4= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.15/go.mod h1:e3IzZvQ3kAWNykvE0Tr0RDZCMFInMvhku3qNpcIQXhM= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 h1:pbrxO/kuIwgEsOPLkaHu0O+m4fNgLU8B3vxQ+72jTPw= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23/go.mod h1:/CMNUqoj46HpS3MNRDEDIwcgEnrtZlKRaHNaHxIFpNA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.22 h1:SE+aQ4DEqG53RRCAIHlCf//B2ycxGH7jFkpnAh/kKPM= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.22/go.mod h1:ES3ynECd7fYeJIL6+oax+uIEljmfps0S70BaQzbMd/o= -github.com/aws/aws-sdk-go-v2/service/s3 v1.100.0 h1:7G26Sae6PMKn4kMcU5JzNfrm1YrKwyOhowXPYR2WiWY= -github.com/aws/aws-sdk-go-v2/service/s3 v1.100.0/go.mod h1:Fw9aqhJicIVee1VytBBjH+l+5ov6/PhbtIK/u3rt/ls= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23 h1:03xatSQO4+AM1lTAbnRg5OK528EUg744nW7F73U8DKw= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23/go.mod h1:M8l3mwgx5ToK7wot2sBBce/ojzgnPzZXUV445gTSyE8= +github.com/aws/aws-sdk-go-v2/service/s3 v1.100.1 h1:mxuT1xE+dI54NW3RkNjP8DUT5HXqbkiAFvfdyDFwE5c= +github.com/aws/aws-sdk-go-v2/service/s3 v1.100.1/go.mod h1:L2dcoOgS2VSgbPLvpak2NyUPsO1TBN7M45Z4H7DlRc4= github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 h1:TdJ+HdzOBhU8+iVAOGUTU63VXopcumCOF1paFulHWZc= github.com/aws/aws-sdk-go-v2/service/signin v1.0.11/go.mod h1:R82ZRExE/nheo0N+T8zHPcLRTcH8MGsnR3BiVGX0TwI= github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 h1:7byT8HUWrgoRp6sXjxtZwgOKfhss5fW6SkLBtqzgRoE= @@ -169,8 +169,8 @@ github.com/kaptinlin/jsonschema v0.7.13 h1:kahVXTy/rURL0XJjyQ9WELm59wEmXi6IY0TWs github.com/kaptinlin/jsonschema v0.7.13/go.mod h1:Uh0aUBusnhXDCEXJ2oimL/hx7YTo7F+sKniE+tM0ERc= github.com/kaptinlin/messageformat-go v0.6.0 h1:D6jiXFsKW4/JG2CMddv/F6Rev9KVbCRKEzzV5QOAcpc= github.com/kaptinlin/messageformat-go v0.6.0/go.mod h1:NKjwS6e9u7DRhAK+vydjDDwJ7UbdHhYjk/yk2WPuZPs= -github.com/klauspost/compress v1.18.5 h1:/h1gH5Ce+VWNLSWqPzOVn6XBO+vJbCNGvjoaGBFW2IE= -github.com/klauspost/compress v1.18.5/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= +github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao= +github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -263,8 +263,8 @@ golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.276.0 h1:nVArUtfLEihtW+b0DdcqRGK1xoEm2+ltAihyztq7MKY= -google.golang.org/api v0.276.0/go.mod h1:Fnag/EWUPIcJXuIkP1pjoTgS5vdxlk3eeemL7Do6bvw= +google.golang.org/api v0.277.0 h1:HJfyJUiNeBBUMai7ez8u14wkp/gH/I4wpGbbO9o+cSk= +google.golang.org/api v0.277.0/go.mod h1:B9TqLBwJqVjp1mtt7WeoQwWRwvu/400y5lETOql+giQ= google.golang.org/genai v1.55.0 h1:iLHGk4Bj/IZ/GNNZb7hYqwSJMRBvqLeu2Hb6YQ+rYGw= google.golang.org/genai v1.55.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= google.golang.org/genproto v0.0.0-20260427160629-7cedc36a6bc4 h1:2iMJZntwvmfgtse+s744JY7v7PgEdSBuFYXucvpOHNM= From ba2ee05fbded59853faef2632285df2b7b6a58b8 Mon Sep 17 00:00:00 2001 From: slzcdhd Date: Fri, 8 May 2026 22:27:58 +0800 Subject: [PATCH 40/82] fix: guard against nil response in Generate to prevent panic (#228) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some OpenAI-compatible API endpoints (e.g. DeepSeek) may return a nil response with no error from the underlying SDK under edge conditions (empty response body, connection issues during response parsing, etc.). When this happens, accessing response.Choices (Chat Completions), response.Error (Responses API), or response.Content (Anthropic) causes a nil pointer dereference panic that crashes the process. Add nil response checks in Generate methods for: - providers/openai: languageModel.Generate (Chat Completions API) - providers/openai: responsesLanguageModel.Generate (Responses API) - providers/anthropic: languageModel.Generate Each returns a descriptive fantasy.Error instead of panicking. Co-authored-by: liaoyijun <“liaoyijun@wps.cn”> --- providers/anthropic/anthropic.go | 3 +++ providers/openai/language_model.go | 3 +++ providers/openai/openai_test.go | 25 ++++++++++++++++++++ providers/openai/responses_language_model.go | 3 +++ 4 files changed, 34 insertions(+) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 2760b0d71..27dd22698 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -1171,6 +1171,9 @@ func (a languageModel) Generate(ctx context.Context, call fantasy.Call) (*fantas if err != nil { return nil, toProviderErr(err) } + if response == nil { + return nil, &fantasy.Error{Title: "no response", Message: "provider returned nil response"} + } var content []fantasy.Content for _, block := range response.Content { diff --git a/providers/openai/language_model.go b/providers/openai/language_model.go index 4515dabbd..2907008de 100644 --- a/providers/openai/language_model.go +++ b/providers/openai/language_model.go @@ -251,6 +251,9 @@ func (o languageModel) Generate(ctx context.Context, call fantasy.Call) (*fantas if err != nil { return nil, toProviderErr(err) } + if response == nil { + return nil, &fantasy.Error{Title: "no response", Message: "provider returned nil response"} + } if len(response.Choices) == 0 { return nil, &fantasy.Error{Title: "no response", Message: "no response generated"} diff --git a/providers/openai/openai_test.go b/providers/openai/openai_test.go index 254ae6354..2230deae4 100644 --- a/providers/openai/openai_test.go +++ b/providers/openai/openai_test.go @@ -2010,6 +2010,31 @@ func TestDoGenerate(t *testing.T) { require.Equal(t, "ServiceTier", result.Warnings[0].Setting) require.Contains(t, result.Warnings[0].Details, "priority processing is only available") }) + + t.Run("should return error instead of panic on empty response body", func(t *testing.T) { + t.Parallel() + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + // Write empty body — some OpenAI-compatible endpoints may do this + // under edge conditions, causing the SDK to return (nil, nil). + })) + defer server.Close() + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.URL), + ) + require.NoError(t, err) + model, _ := provider.LanguageModel(t.Context(), "gpt-3.5-turbo") + + require.NotPanics(t, func() { + _, _ = model.Generate(context.Background(), fantasy.Call{ + Prompt: testPrompt, + }) + }) + }) } type streamingMockServer struct { diff --git a/providers/openai/responses_language_model.go b/providers/openai/responses_language_model.go index 06da0aa6e..35c88ed7e 100644 --- a/providers/openai/responses_language_model.go +++ b/providers/openai/responses_language_model.go @@ -789,6 +789,9 @@ func (o responsesLanguageModel) Generate(ctx context.Context, call fantasy.Call) if err != nil { return nil, toProviderErr(err) } + if response == nil { + return nil, &fantasy.Error{Title: "no response", Message: "provider returned nil response"} + } if response.Error.Message != "" { return nil, &fantasy.Error{ From e0ddf8769a53fd9d1154c100bf3d72c87b1bb3fe Mon Sep 17 00:00:00 2001 From: mkaaad <119158371+mkaaad@users.noreply.github.com> Date: Sat, 9 May 2026 01:54:25 +0800 Subject: [PATCH 41/82] fix(openai): yield tool calls with invalid JSON instead of silently dropping (#223) Previously, tool calls with invalid JSON arguments were silently dropped in the stream, preventing the agent from reporting the error back to the model. Now all tool calls are yielded regardless of argument validity, and the agent handles validation via its existing repair/error flow. Additionally, track hasYieldedToolCall to map finishReason correctly: use tool_calls only when a tool call was actually yielded, and fall back to stop when no tool call was yielded despite the API saying tool_calls. --- providers/openai/language_model.go | 21 +++--- providers/openai/openai_test.go | 101 +++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 10 deletions(-) diff --git a/providers/openai/language_model.go b/providers/openai/language_model.go index 2907008de..06610dedb 100644 --- a/providers/openai/language_model.go +++ b/providers/openai/language_model.go @@ -517,7 +517,10 @@ func (o languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S } // Handle tool calls that finish with empty arguments (e.g., Copilot). - // Normalize empty args to "{}" and emit the tool call if valid. + // Normalize empty args to "{}" and emit the tool call. + // If the arguments are invalid JSON, we still yield the tool call + // so the consumer (agent) can handle the error rather than + // silently dropping it. for idx, tc := range toolCalls { if tc.hasFinished { continue @@ -526,16 +529,14 @@ func (o languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S tc.arguments = "{}" toolCalls[idx] = tc } - if xjson.IsValid(tc.arguments) { - if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeToolInputEnd, ID: tc.id}) { - return - } - if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeToolCall, ID: tc.id, ToolCallName: tc.name, ToolCallInput: tc.arguments}) { - return - } - tc.hasFinished = true - toolCalls[idx] = tc + if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeToolInputEnd, ID: tc.id}) { + return + } + if !yield(fantasy.StreamPart{Type: fantasy.StreamPartTypeToolCall, ID: tc.id, ToolCallName: tc.name, ToolCallInput: tc.arguments}) { + return } + tc.hasFinished = true + toolCalls[idx] = tc } if len(acc.Choices) > 0 { diff --git a/providers/openai/openai_test.go b/providers/openai/openai_test.go index 2230deae4..058c8fc3d 100644 --- a/providers/openai/openai_test.go +++ b/providers/openai/openai_test.go @@ -2296,6 +2296,23 @@ func (sms *streamingMockServer) prepareToolStreamResponseWithEmptyArgs() { sms.chunks = chunks } +func (sms *streamingMockServer) prepareToolStreamResponseWithInvalidJSON() { + chunks := []string{ + // Tool call start + `data: {"id":"chatcmpl-invalid","object":"chat.completion.chunk","created":1711357598,"model":"gpt-3.5-turbo-0125","system_fingerprint":"fp_3bc1b5746c","choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_invalid_json","type":"function","function":{"name":"test-tool","arguments":""}}]},"logprobs":null,"finish_reason":null}]}` + "\n\n", + // Arguments delta containing \x00 which is not a valid JSON escape + `data: {"id":"chatcmpl-invalid","object":"chat.completion.chunk","created":1711357598,"model":"gpt-3.5-turbo-0125","system_fingerprint":"fp_3bc1b5746c","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\"old_string\":\"hello\\x00"}}]},"logprobs":null,"finish_reason":null}]}` + "\n\n", + // Remaining arguments — combined is {"old_string":"hello\x00world"} which is invalid JSON + `data: {"id":"chatcmpl-invalid","object":"chat.completion.chunk","created":1711357598,"model":"gpt-3.5-turbo-0125","system_fingerprint":"fp_3bc1b5746c","choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"world\"}"}}]},"logprobs":null,"finish_reason":null}]}` + "\n\n", + // Finish with tool_calls + `data: {"id":"chatcmpl-invalid","object":"chat.completion.chunk","created":1711357598,"model":"gpt-3.5-turbo-0125","system_fingerprint":"fp_3bc1b5746c","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"tool_calls"}]}` + "\n\n", + // Usage + `data: {"id":"chatcmpl-invalid","object":"chat.completion.chunk","created":1711357598,"model":"gpt-3.5-turbo-0125","system_fingerprint":"fp_3bc1b5746c","choices":[],"usage":{"prompt_tokens":53,"completion_tokens":17,"total_tokens":70}}` + "\n\n", + "data: [DONE]\n\n", + } + sms.chunks = chunks +} + func collectStreamParts(stream fantasy.StreamResponse) ([]fantasy.StreamPart, error) { var parts []fantasy.StreamPart for part := range stream { @@ -3022,6 +3039,90 @@ func TestDoStream(t *testing.T) { require.Equal(t, int64(35), finishPart.Usage.TotalTokens) require.Equal(t, int64(10), finishPart.Usage.ReasoningTokens) }) + + t.Run("should drop tool calls with invalid JSON arguments", func(t *testing.T) { + t.Parallel() + + server := newStreamingMockServer() + defer server.close() + + server.prepareToolStreamResponseWithInvalidJSON() + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.server.URL), + ) + require.NoError(t, err) + model, _ := provider.LanguageModel(t.Context(), "gpt-3.5-turbo") + + stream, err := model.Stream(context.Background(), fantasy.Call{ + Prompt: testPrompt, + Tools: []fantasy.Tool{ + fantasy.FunctionTool{ + Name: "test-tool", + InputSchema: map[string]any{ + "type": "object", + "properties": map[string]any{ + "old_string": map[string]any{ + "type": "string", + }, + "new_string": map[string]any{ + "type": "string", + }, + }, + "required": []string{"old_string", "new_string"}, + "additionalProperties": false, + "$schema": "http://json-schema.org/draft-07/schema#", + }, + }, + }, + }) + + require.NoError(t, err) + + parts, err := collectStreamParts(stream) + require.NoError(t, err) + + // Find tool-related parts + toolInputStart, toolInputEnd, toolCall := -1, -1, -1 + var toolDeltas []string + var finishPart *fantasy.StreamPart + + for i, part := range parts { + switch part.Type { + case fantasy.StreamPartTypeToolInputStart: + toolInputStart = i + require.Equal(t, "call_invalid_json", part.ID) + require.Equal(t, "test-tool", part.ToolCallName) + case fantasy.StreamPartTypeToolInputDelta: + toolDeltas = append(toolDeltas, part.Delta) + case fantasy.StreamPartTypeToolInputEnd: + toolInputEnd = i + require.Equal(t, "call_invalid_json", part.ID) + case fantasy.StreamPartTypeToolCall: + toolCall = i + require.Equal(t, "call_invalid_json", part.ID) + require.Equal(t, "test-tool", part.ToolCallName) + case fantasy.StreamPartTypeFinish: + finishPart = &part + } + } + + require.NotEqual(t, -1, toolInputStart, "expected ToolInputStart part") + require.NotEqual(t, -1, toolInputEnd, "expected ToolInputEnd part") + require.NotEqual(t, -1, toolCall, "expected ToolCall part") + + // Verify tool deltas combine to the complete input with \x00 + var fullInput strings.Builder + for _, delta := range toolDeltas { + fullInput.WriteString(delta) + } + require.Equal(t, `{"old_string":"hello\x00world"}`, fullInput.String()) + + // Finish reason is ToolCalls since the tool call was yielded + require.NotNil(t, finishPart) + require.Equal(t, fantasy.FinishReasonToolCalls, finishPart.FinishReason) + }) } func TestDefaultToPrompt_DropsEmptyMessages(t *testing.T) { From c954320fb977b7dbf3c1cf197d7cb17ccc0530e8 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Fri, 8 May 2026 15:01:00 -0300 Subject: [PATCH 42/82] chore: update go patch version to make govulncheck happy --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 3bca09ef9..d8ec92b37 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module charm.land/fantasy -go 1.26.2 +go 1.26.3 require ( charm.land/x/vcr v0.1.1 From e6ec39547d4419f8e758b2e2bd8b36f972f0f27c Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Fri, 8 May 2026 15:05:56 -0300 Subject: [PATCH 43/82] v0.23.1 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index ca222b7cf..610e28725 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.23.0 +0.23.1 From d9d0f63ecdbc86c4af1e09ebcd39bd36edf9b8c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 12:34:49 +0000 Subject: [PATCH 44/82] chore(deps): bump github.com/ardanlabs/kronk in the kronk group (#231) Bumps the kronk group with 1 update: [github.com/ardanlabs/kronk](https://github.com/ardanlabs/kronk). Updates `github.com/ardanlabs/kronk` from 1.24.2 to 1.25.0 - [Release notes](https://github.com/ardanlabs/kronk/releases) - [Commits](https://github.com/ardanlabs/kronk/compare/v1.24.2...v1.25.0) --- updated-dependencies: - dependency-name: github.com/ardanlabs/kronk dependency-version: 1.25.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: kronk ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 18 +++++++++--------- go.sum | 48 ++++++++++++++++++++++++------------------------ 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/go.mod b/go.mod index d8ec92b37..37c2df978 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.26.3 require ( charm.land/x/vcr v0.1.1 cloud.google.com/go/auth v0.20.0 - github.com/ardanlabs/kronk v1.24.2 + github.com/ardanlabs/kronk v1.25.0 github.com/aws/aws-sdk-go-v2 v1.41.7 github.com/aws/aws-sdk-go-v2/config v1.32.17 github.com/aws/smithy-go v1.25.1 @@ -28,8 +28,8 @@ require ( cloud.google.com/go v0.123.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect - cloud.google.com/go/iam v1.10.0 // indirect - cloud.google.com/go/monitoring v1.28.0 // indirect + cloud.google.com/go/iam v1.11.0 // indirect + cloud.google.com/go/monitoring v1.29.0 // indirect cloud.google.com/go/storage v1.62.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect @@ -47,7 +47,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.15 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.100.1 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.101.0 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21 // indirect @@ -117,11 +117,11 @@ require ( golang.org/x/sys v0.43.0 // indirect golang.org/x/text v0.36.0 // indirect golang.org/x/time v0.15.0 // indirect - google.golang.org/api v0.277.0 // indirect - google.golang.org/genproto v0.0.0-20260427160629-7cedc36a6bc4 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 // indirect - google.golang.org/grpc v1.80.0 // indirect + google.golang.org/api v0.278.0 // indirect + google.golang.org/genproto v0.0.0-20260504160031-60b97b32f348 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260504160031-60b97b32f348 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260504160031-60b97b32f348 // indirect + google.golang.org/grpc v1.81.0 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 7fc756f68..ec632fb51 100644 --- a/go.sum +++ b/go.sum @@ -10,18 +10,18 @@ cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIi cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -cloud.google.com/go/iam v1.10.0 h1:cWWt8u8jXv3MzpvBmQgNClvvbVCRukruCJAnoK3fIJY= -cloud.google.com/go/iam v1.10.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= -cloud.google.com/go/logging v1.16.0 h1:MMNgYRvZ/pEwiNSkcoJTKWfAbAJDqCqAMJiarZx+/CI= -cloud.google.com/go/logging v1.16.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI= -cloud.google.com/go/longrunning v0.11.0 h1:fE4XVLJQj+gRnw1HrbDyQXXgC0aiqY3wxP7DDU4cWk0= -cloud.google.com/go/longrunning v0.11.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= -cloud.google.com/go/monitoring v1.28.0 h1:jOe0Wkm+a56ptZnEeyHevXo7+KPWAPPP5wUTEJdP7GY= -cloud.google.com/go/monitoring v1.28.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= +cloud.google.com/go/iam v1.11.0 h1:KieQ9Pb+LLPak1O3Rv3GgCxhnmkYf7Xyh0P5HfF1jFM= +cloud.google.com/go/iam v1.11.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= +cloud.google.com/go/logging v1.17.0 h1:rUFekZYwHiKElXCyz3zYBGz4BOeIqzgCKxVLdgrZ5mY= +cloud.google.com/go/logging v1.17.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI= +cloud.google.com/go/longrunning v0.12.0 h1:wLv2hXvID9zHejLtcPo1B0JBjErnwZCYAPKSTa65xpY= +cloud.google.com/go/longrunning v0.12.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= +cloud.google.com/go/monitoring v1.29.0 h1:AHhDsFaSax1/4k+qlIDX/SDGe6hggnfXJ9dkgD9qBPY= +cloud.google.com/go/monitoring v1.29.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= cloud.google.com/go/storage v1.62.1 h1:Os0G3XbUbjZumkpDUf2Y0rLoXJTCF1kU2kWUujKYXD8= cloud.google.com/go/storage v1.62.1/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= -cloud.google.com/go/trace v1.14.0 h1:jUtnmOrNcu5XJNk4Gz0fv+v5sM0weaOa3z5MPQUjRXs= -cloud.google.com/go/trace v1.14.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= +cloud.google.com/go/trace v1.15.0 h1:kAYkTwKyYHkGtAGFuu6qaUFRBkOVr+d1Yo44yZtGtgg= +cloud.google.com/go/trace v1.15.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc= @@ -40,8 +40,8 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapp github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= github.com/ardanlabs/jinja v1.2.0 h1:B5di2EVsMkYFhEk1yCnDPTZ4KhqYmwNaNIp8PUWYq+A= github.com/ardanlabs/jinja v1.2.0/go.mod h1:aXXzlJfjA+T3XNKA/YT5ZtDq2VJxt5a5siZ8cl9B35Q= -github.com/ardanlabs/kronk v1.24.2 h1:wQNEnM2kjb/sJ+QjbdNCAhrhvQru0gdGi2uHTd+dnGM= -github.com/ardanlabs/kronk v1.24.2/go.mod h1:jVlHPPmuKbiXIu5ZvB4W6jFQy8IznJBrO0WuS88yfX4= +github.com/ardanlabs/kronk v1.25.0 h1:xq4nGeH7u0+9LtTFQc+awsF7ksMN0f0aeneihHeC2js= +github.com/ardanlabs/kronk v1.25.0/go.mod h1:EyAhFaGlF8aAUPCy908xFCdxQPWRKRPYUU8RXrNtNk0= github.com/aws/aws-sdk-go-v2 v1.41.7 h1:DWpAJt66FmnnaRIOT/8ASTucrvuDPZASqhhLey6tLY8= github.com/aws/aws-sdk-go-v2 v1.41.7/go.mod h1:4LAfZOPHNVNQEckOACQx60Y8pSRjIkNZQz1w92xpMJc= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 h1:gx1AwW1Iyk9Z9dD9F4akX5gnN3QZwUB20GGKH/I+Rho= @@ -66,8 +66,8 @@ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 h1:pbrxO/ku github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23/go.mod h1:/CMNUqoj46HpS3MNRDEDIwcgEnrtZlKRaHNaHxIFpNA= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23 h1:03xatSQO4+AM1lTAbnRg5OK528EUg744nW7F73U8DKw= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23/go.mod h1:M8l3mwgx5ToK7wot2sBBce/ojzgnPzZXUV445gTSyE8= -github.com/aws/aws-sdk-go-v2/service/s3 v1.100.1 h1:mxuT1xE+dI54NW3RkNjP8DUT5HXqbkiAFvfdyDFwE5c= -github.com/aws/aws-sdk-go-v2/service/s3 v1.100.1/go.mod h1:L2dcoOgS2VSgbPLvpak2NyUPsO1TBN7M45Z4H7DlRc4= +github.com/aws/aws-sdk-go-v2/service/s3 v1.101.0 h1:etqBTKY581iwLL/H/S2sVgk3C9lAsTJFeXWFDsDcWOU= +github.com/aws/aws-sdk-go-v2/service/s3 v1.101.0/go.mod h1:L2dcoOgS2VSgbPLvpak2NyUPsO1TBN7M45Z4H7DlRc4= github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 h1:TdJ+HdzOBhU8+iVAOGUTU63VXopcumCOF1paFulHWZc= github.com/aws/aws-sdk-go-v2/service/signin v1.0.11/go.mod h1:R82ZRExE/nheo0N+T8zHPcLRTcH8MGsnR3BiVGX0TwI= github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 h1:7byT8HUWrgoRp6sXjxtZwgOKfhss5fW6SkLBtqzgRoE= @@ -263,18 +263,18 @@ golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.277.0 h1:HJfyJUiNeBBUMai7ez8u14wkp/gH/I4wpGbbO9o+cSk= -google.golang.org/api v0.277.0/go.mod h1:B9TqLBwJqVjp1mtt7WeoQwWRwvu/400y5lETOql+giQ= +google.golang.org/api v0.278.0 h1:W7jiRvRi53VYFfZ/HoZjQBtJk7gOFbHD8ot1RzVZU6E= +google.golang.org/api v0.278.0/go.mod h1:B9TqLBwJqVjp1mtt7WeoQwWRwvu/400y5lETOql+giQ= google.golang.org/genai v1.55.0 h1:iLHGk4Bj/IZ/GNNZb7hYqwSJMRBvqLeu2Hb6YQ+rYGw= google.golang.org/genai v1.55.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= -google.golang.org/genproto v0.0.0-20260427160629-7cedc36a6bc4 h1:2iMJZntwvmfgtse+s744JY7v7PgEdSBuFYXucvpOHNM= -google.golang.org/genproto v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:v14kaaboYyXQ1Gsu489Q+Hg/oN4B33mWtuOhF1HCeXA= -google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4 h1:yOzSCGPx+cp5VO7IxvZ9SBFF7j1tZVcNtlHR2iYKtVo= -google.golang.org/genproto/googleapis/api v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:Q9HWtNeE7tM9npdIsEvqXj1QJIvVoeAV3rtXtS715Cw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4 h1:tEkOQcXgF6dH1G+MVKZrfpYvozGrzb91k6ha7jireSM= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260427160629-7cedc36a6bc4/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM= -google.golang.org/grpc v1.80.0/go.mod h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4= +google.golang.org/genproto v0.0.0-20260504160031-60b97b32f348 h1:JjVGDZYWkJWZcxveJGzfkXC5myDVWAd4dZdgbzrDUv8= +google.golang.org/genproto v0.0.0-20260504160031-60b97b32f348/go.mod h1:95PqD4xM+AdOcBGsmgfaofXsiA37uXDtDufVbntT3TU= +google.golang.org/genproto/googleapis/api v0.0.0-20260504160031-60b97b32f348 h1:U8orV30l6KpDsi9dxU0CoJZGbjS8EEpw+6ba+XwGPQA= +google.golang.org/genproto/googleapis/api v0.0.0-20260504160031-60b97b32f348/go.mod h1:Yzdzr5OOZFgSsEV2D/Xi9NL3bszpXFAg0hFJiRohcD8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260504160031-60b97b32f348 h1:pfIbyB44sWzHiCpRqIen67ZQnVXSfIxWrqUMk1qwODE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260504160031-60b97b32f348/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.81.0 h1:W3G9N3KQf3BU+YuCtGKJk0CmxQNbAISICD/9AORxLIw= +google.golang.org/grpc v1.81.0/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From c03d60601ffef8d98d302cd8f089dd273b5f66e8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 May 2026 12:41:05 +0000 Subject: [PATCH 45/82] chore(deps): bump google.golang.org/genai (#230) Bumps the all group with 1 update in the / directory: [google.golang.org/genai](https://github.com/googleapis/go-genai). Updates `google.golang.org/genai` from 1.55.0 to 1.56.0 - [Release notes](https://github.com/googleapis/go-genai/releases) - [Changelog](https://github.com/googleapis/go-genai/blob/main/CHANGELOG.md) - [Commits](https://github.com/googleapis/go-genai/compare/v1.55.0...v1.56.0) --- updated-dependencies: - dependency-name: google.golang.org/genai dependency-version: 1.56.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 37c2df978..b0b00ac75 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/kaptinlin/jsonschema v0.7.13 github.com/stretchr/testify v1.11.1 golang.org/x/oauth2 v0.36.0 - google.golang.org/genai v1.55.0 + google.golang.org/genai v1.56.0 ) require ( diff --git a/go.sum b/go.sum index ec632fb51..4ceb811bd 100644 --- a/go.sum +++ b/go.sum @@ -265,8 +265,8 @@ gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/api v0.278.0 h1:W7jiRvRi53VYFfZ/HoZjQBtJk7gOFbHD8ot1RzVZU6E= google.golang.org/api v0.278.0/go.mod h1:B9TqLBwJqVjp1mtt7WeoQwWRwvu/400y5lETOql+giQ= -google.golang.org/genai v1.55.0 h1:iLHGk4Bj/IZ/GNNZb7hYqwSJMRBvqLeu2Hb6YQ+rYGw= -google.golang.org/genai v1.55.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= +google.golang.org/genai v1.56.0 h1:IwWrg1K0cn1/WBiPno/dYr0Q6o75NeH/bh3G4JEFERE= +google.golang.org/genai v1.56.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= google.golang.org/genproto v0.0.0-20260504160031-60b97b32f348 h1:JjVGDZYWkJWZcxveJGzfkXC5myDVWAd4dZdgbzrDUv8= google.golang.org/genproto v0.0.0-20260504160031-60b97b32f348/go.mod h1:95PqD4xM+AdOcBGsmgfaofXsiA37uXDtDufVbntT3TU= google.golang.org/genproto/googleapis/api v0.0.0-20260504160031-60b97b32f348 h1:U8orV30l6KpDsi9dxU0CoJZGbjS8EEpw+6ba+XwGPQA= From 5698022e65dfb30ae9d84e43d17358f5dc9bf8a9 Mon Sep 17 00:00:00 2001 From: William Kennedy Date: Tue, 12 May 2026 10:15:26 -0400 Subject: [PATCH 46/82] chore(deps): update kronk (#233) --- examples/go.mod | 136 ++++++++++----------- examples/go.sum | 317 ++++++++++++++++++++++-------------------------- go.mod | 14 +-- go.sum | 28 ++--- 4 files changed, 228 insertions(+), 267 deletions(-) diff --git a/examples/go.mod b/examples/go.mod index 173da9fdb..9cf6df70e 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -1,6 +1,6 @@ module charm.land/fantasy/examples -go 1.26.1 +go 1.26.3 replace charm.land/fantasy => ../ @@ -12,37 +12,37 @@ require ( ) require ( - cel.dev/expr v0.25.1 // indirect + cel.dev/expr v0.25.2 // indirect cloud.google.com/go v0.123.0 // indirect - cloud.google.com/go/auth v0.18.2 // indirect + cloud.google.com/go/auth v0.20.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect - cloud.google.com/go/iam v1.5.3 // indirect - cloud.google.com/go/monitoring v1.24.3 // indirect - cloud.google.com/go/storage v1.61.3 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect - github.com/ardanlabs/kronk v1.21.4 // indirect - github.com/aws/aws-sdk-go-v2 v1.41.4 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 // indirect - github.com/aws/aws-sdk-go-v2/config v1.32.12 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.19.12 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 // indirect - github.com/aws/smithy-go v1.24.2 // indirect + cloud.google.com/go/iam v1.11.0 // indirect + cloud.google.com/go/monitoring v1.29.0 // indirect + cloud.google.com/go/storage v1.62.1 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 // indirect + github.com/ardanlabs/jinja v1.2.0 // indirect + github.com/ardanlabs/kronk v1.25.2 // indirect + github.com/aws/aws-sdk-go-v2 v1.41.7 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 // indirect + github.com/aws/aws-sdk-go-v2/config v1.32.17 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.16 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.15 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.101.0 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.42.1 // indirect + github.com/aws/smithy-go v1.25.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect @@ -53,15 +53,15 @@ require ( github.com/charmbracelet/x/ansi v0.10.2 // indirect github.com/charmbracelet/x/cellbuf v0.0.14-0.20250811133356-e0c5dbe5ea4a // indirect github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5 // indirect + github.com/charmbracelet/x/exp/strings v0.1.0 // indirect github.com/charmbracelet/x/json v0.2.0 // indirect github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect - github.com/dustin/go-humanize v1.0.1 // indirect github.com/ebitengine/purego v0.10.0 // indirect github.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/go-jose/go-jose/v4 v4.1.3 // indirect - github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433 // indirect + github.com/go-jose/go-jose/v4 v4.1.4 // indirect + github.com/go-json-experiment/json v0.0.0-20260430182902-b6187a392ed4 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -70,38 +70,32 @@ require ( github.com/google/go-cmp v0.7.0 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect - github.com/googleapis/gax-go/v2 v2.18.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.15 // indirect + github.com/googleapis/gax-go/v2 v2.22.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect - github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 // indirect + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.8.5 // indirect - github.com/hashicorp/go-version v1.8.0 // indirect - github.com/hybridgroup/yzma v1.11.0 // indirect - github.com/json-iterator/go v1.1.12 // indirect - github.com/jupiterrider/ffi v0.6.0 // indirect - github.com/kaptinlin/go-i18n v0.2.12 // indirect - github.com/kaptinlin/jsonpointer v0.4.17 // indirect - github.com/kaptinlin/jsonschema v0.7.6 // indirect - github.com/kaptinlin/messageformat-go v0.4.18 // indirect - github.com/klauspost/compress v1.18.4 // indirect + github.com/hashicorp/go-getter v1.8.6 // indirect + github.com/hashicorp/go-version v1.9.0 // indirect + github.com/hybridgroup/yzma v1.13.0 // indirect + github.com/jupiterrider/ffi v0.7.0 // indirect + github.com/kaptinlin/go-i18n v0.4.5 // indirect + github.com/kaptinlin/jsonpointer v0.4.20 // indirect + github.com/kaptinlin/jsonschema v0.7.13 // indirect + github.com/kaptinlin/messageformat-go v0.6.0 // indirect + github.com/klauspost/compress v1.18.6 // indirect github.com/lucasb-eyer/go-colorful v1.3.0 // indirect github.com/mattn/go-runewidth v0.0.17 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect github.com/muesli/cancelreader v0.2.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/nikolalohinski/gonja/v2 v2.7.0 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.67.5 // indirect github.com/prometheus/procfs v0.20.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/sirupsen/logrus v1.9.4 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect github.com/tidwall/gjson v1.18.0 // indirect github.com/tidwall/match v1.1.1 // indirect @@ -110,31 +104,31 @@ require ( github.com/ulikunitz/xz v0.5.15 // indirect github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.42.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 // indirect - go.opentelemetry.io/otel v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 // indirect - go.opentelemetry.io/otel/metric v1.42.0 // indirect - go.opentelemetry.io/otel/sdk v1.42.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.42.0 // indirect - go.opentelemetry.io/otel/trace v1.42.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.43.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 // indirect + go.opentelemetry.io/otel v1.43.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 // indirect + go.opentelemetry.io/otel/metric v1.43.0 // indirect + go.opentelemetry.io/otel/sdk v1.43.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect + go.opentelemetry.io/otel/trace v1.43.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect - golang.org/x/crypto v0.49.0 // indirect + golang.org/x/crypto v0.51.0 // indirect golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect - golang.org/x/net v0.52.0 // indirect + golang.org/x/net v0.54.0 // indirect golang.org/x/oauth2 v0.36.0 // indirect golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.42.0 // indirect - golang.org/x/text v0.35.0 // indirect + golang.org/x/sys v0.44.0 // indirect + golang.org/x/text v0.37.0 // indirect golang.org/x/time v0.15.0 // indirect - google.golang.org/api v0.271.0 // indirect - google.golang.org/genai v1.51.0 // indirect - google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c // indirect - google.golang.org/grpc v1.79.2 // indirect + google.golang.org/api v0.278.0 // indirect + google.golang.org/genai v1.56.0 // indirect + google.golang.org/genproto v0.0.0-20260504160031-60b97b32f348 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260504160031-60b97b32f348 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260504160031-60b97b32f348 // indirect + google.golang.org/grpc v1.81.0 // indirect google.golang.org/protobuf v1.36.11 // indirect ) diff --git a/examples/go.sum b/examples/go.sum index 3b5392888..806d884b1 100644 --- a/examples/go.sum +++ b/examples/go.sum @@ -1,75 +1,73 @@ -cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= -cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= +cel.dev/expr v0.25.2 h1:K6j46C81hXtZQfuX60cVWQFBJahKSE2gfRbNuvr5bFs= +cel.dev/expr v0.25.2/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= -cloud.google.com/go/auth v0.18.2 h1:+Nbt5Ev0xEqxlNjd6c+yYUeosQ5TtEUaNcN/3FozlaM= -cloud.google.com/go/auth v0.18.2/go.mod h1:xD+oY7gcahcu7G2SG2DsBerfFxgPAJz17zz2joOFF3M= +cloud.google.com/go/auth v0.20.0 h1:kXTssoVb4azsVDoUiF8KvxAqrsQcQtB53DcSgta74CA= +cloud.google.com/go/auth v0.20.0/go.mod h1:942/yi/itH1SsmpyrbnTMDgGfdy2BUqIKyd0cyYLc5Q= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= -cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= -cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= -cloud.google.com/go/logging v1.13.2 h1:qqlHCBvieJT9Cdq4QqYx1KPadCQ2noD4FK02eNqHAjA= -cloud.google.com/go/logging v1.13.2/go.mod h1:zaybliM3yun1J8mU2dVQ1/qDzjbOqEijZCn6hSBtKak= -cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7EhfW8= -cloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk= -cloud.google.com/go/monitoring v1.24.3 h1:dde+gMNc0UhPZD1Azu6at2e79bfdztVDS5lvhOdsgaE= -cloud.google.com/go/monitoring v1.24.3/go.mod h1:nYP6W0tm3N9H/bOw8am7t62YTzZY+zUeQ+Bi6+2eonI= -cloud.google.com/go/storage v1.61.3 h1:VS//ZfBuPGDvakfD9xyPW1RGF1Vy3BWUoVZXgW1KMOg= -cloud.google.com/go/storage v1.61.3/go.mod h1:JtqK8BBB7TWv0HVGHubtUdzYYrakOQIsMLffZ2Z/HWk= -cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= -cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 h1:DHa2U07rk8syqvCge0QIGMCE1WxGj9njT44GH7zNJLQ= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 h1:UnDZ/zFfG1JhH/DqxIZYU/1CUAlTUScoXD/LcM2Ykk8= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0/go.mod h1:IA1C1U7jO/ENqm/vhi7V9YYpBsp+IMyqNrEN94N7tVc= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0 h1:7t/qx5Ost0s0wbA/VDrByOooURhp+ikYwv20i9Y07TQ= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.55.0/go.mod h1:vB2GH9GAYYJTO3mEn8oYwzEdhlayZIdQz6zdzgUIRvA= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 h1:0s6TxfCu2KHkkZPnBfsQ2y5qia0jl3MMrmBhu3nCOYk= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0/go.mod h1:Mf6O40IAyB9zR/1J8nGDDPirZQQPbYJni8Yisy7NTMc= -github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= -github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= -github.com/ardanlabs/kronk v1.21.4 h1:h/Wy+nxwKH8OZAuJfCZ/dSzKD0YNCGLcrswLqRb4Gk4= -github.com/ardanlabs/kronk v1.21.4/go.mod h1:07fwlo30o3xn8utYjAcy/3TCTNZbanP2WFthyjgBxPY= -github.com/aws/aws-sdk-go-v2 v1.41.4 h1:10f50G7WyU02T56ox1wWXq+zTX9I1zxG46HYuG1hH/k= -github.com/aws/aws-sdk-go-v2 v1.41.4/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 h1:3kGOqnh1pPeddVa/E37XNTaWJ8W6vrbYV9lJEkCnhuY= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= -github.com/aws/aws-sdk-go-v2/config v1.32.12 h1:O3csC7HUGn2895eNrLytOJQdoL2xyJy0iYXhoZ1OmP0= -github.com/aws/aws-sdk-go-v2/config v1.32.12/go.mod h1:96zTvoOFR4FURjI+/5wY1vc1ABceROO4lWgWJuxgy0g= -github.com/aws/aws-sdk-go-v2/credentials v1.19.12 h1:oqtA6v+y5fZg//tcTWahyN9PEn5eDU/Wpvc2+kJ4aY8= -github.com/aws/aws-sdk-go-v2/credentials v1.19.12/go.mod h1:U3R1RtSHx6NB0DvEQFGyf/0sbrpJrluENHdPy1j/3TE= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 h1:zOgq3uezl5nznfoK3ODuqbhVg1JzAGDUhXOsU0IDCAo= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20/go.mod h1:z/MVwUARehy6GAg/yQ1GO2IMl0k++cu1ohP9zo887wE= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 h1:CNXO7mvgThFGqOFgbNAP2nol2qAWBOGfqR/7tQlvLmc= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20/go.mod h1:oydPDJKcfMhgfcgBUZaG+toBbwy8yPWubJXBVERtI4o= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 h1:tN6W/hg+pkM+tf9XDkWUbDEjGLb+raoBMFsTodcoYKw= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20/go.mod h1:YJ898MhD067hSHA6xYCx5ts/jEd8BSOLtQDL3iZsvbc= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 h1:SwGMTMLIlvDNyhMteQ6r8IJSBPlRdXX5d4idhIGbkXA= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21/go.mod h1:UUxgWxofmOdAMuqEsSppbDtGKLfR04HGsD0HXzvhI1k= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 h1:qtJZ70afD3ISKWnoX3xB0J2otEqu3LqicRcDBqsj0hQ= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12/go.mod h1:v2pNpJbRNl4vEUWEh5ytQok0zACAKfdmKS51Hotc3pQ= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 h1:2HvVAIq+YqgGotK6EkMf+KIEqTISmTYh5zLpYyeTo1Y= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20/go.mod h1:V4X406Y666khGa8ghKmphma/7C0DAtEQYhkq9z4vpbk= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 h1:siU1A6xjUZ2N8zjTHSXFhB9L/2OY8Dqs0xXiLjF30jA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20/go.mod h1:4TLZCmVJDM3FOu5P5TJP0zOlu9zWgDWU7aUxWbr+rcw= -github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 h1:csi9NLpFZXb9fxY7rS1xVzgPRGMt7MSNWeQ6eo247kE= -github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1/go.mod h1:qXVal5H0ChqXP63t6jze5LmFalc7+ZE7wOdLtZ0LCP0= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 h1:0GFOLzEbOyZABS3PhYfBIx2rNBACYcKty+XGkTgw1ow= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.8/go.mod h1:LXypKvk85AROkKhOG6/YEcHFPoX+prKTowKnVdcaIxE= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 h1:kiIDLZ005EcKomYYITtfsjn7dtOwHDOFy7IbPXKek2o= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.13/go.mod h1:2h/xGEowcW/g38g06g3KpRWDlT+OTfxxI0o1KqayAB8= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 h1:jzKAXIlhZhJbnYwHbvUQZEB8KfgAEuG0dc08Bkda7NU= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17/go.mod h1:Al9fFsXjv4KfbzQHGe6V4NZSZQXecFcvaIF4e70FoRA= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 h1:Cng+OOwCHmFljXIxpEVXAGMnBia8MSU6Ch5i9PgBkcU= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.9/go.mod h1:LrlIndBDdjA/EeXeyNBle+gyCwTlizzW5ycgWnvIxkk= -github.com/aws/smithy-go v1.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng= -github.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= +cloud.google.com/go/iam v1.11.0 h1:KieQ9Pb+LLPak1O3Rv3GgCxhnmkYf7Xyh0P5HfF1jFM= +cloud.google.com/go/iam v1.11.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= +cloud.google.com/go/logging v1.17.0 h1:rUFekZYwHiKElXCyz3zYBGz4BOeIqzgCKxVLdgrZ5mY= +cloud.google.com/go/logging v1.17.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI= +cloud.google.com/go/longrunning v0.12.0 h1:wLv2hXvID9zHejLtcPo1B0JBjErnwZCYAPKSTa65xpY= +cloud.google.com/go/longrunning v0.12.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= +cloud.google.com/go/monitoring v1.29.0 h1:AHhDsFaSax1/4k+qlIDX/SDGe6hggnfXJ9dkgD9qBPY= +cloud.google.com/go/monitoring v1.29.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= +cloud.google.com/go/storage v1.62.1 h1:Os0G3XbUbjZumkpDUf2Y0rLoXJTCF1kU2kWUujKYXD8= +cloud.google.com/go/storage v1.62.1/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= +cloud.google.com/go/trace v1.15.0 h1:kAYkTwKyYHkGtAGFuu6qaUFRBkOVr+d1Yo44yZtGtgg= +cloud.google.com/go/trace v1.15.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 h1:rIkQfkCOVKc1OiRCNcSDD8ml5RJlZbH/Xsq7lbpynwc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0/go.mod h1:RD2SsorTmYhF6HkTmDw7KmPYQk8OBYwTkuasChwv7R4= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 h1:O2sXMyJh8b7devAGdE+163xtRurt0RVpB6DIzX5vGfg= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0/go.mod h1:hEpiGU18xf70qb3jbTcIggWAiEfX/cOIVc2OTe4OegA= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.56.0 h1:ZIT85vKP7LBS84XJ0WdJ3dPOX3iz4j3c0+lpajGQMyo= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.56.0/go.mod h1:rqP9UEhOXv9WhQ7Gjz+G5y/pf8+BJZW5/Ts0AhE0PwE= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 h1:0YP0+/ixwu+Uqeu/FGiBZNQ19huiUxxiPXIc9WsLKuQ= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= +github.com/ardanlabs/jinja v1.2.0 h1:B5di2EVsMkYFhEk1yCnDPTZ4KhqYmwNaNIp8PUWYq+A= +github.com/ardanlabs/jinja v1.2.0/go.mod h1:aXXzlJfjA+T3XNKA/YT5ZtDq2VJxt5a5siZ8cl9B35Q= +github.com/ardanlabs/kronk v1.25.2 h1:kw8sDq/yDvy8D9I4/L4yptwmevfnM4hNeGv7mKLCz1s= +github.com/ardanlabs/kronk v1.25.2/go.mod h1:b5Gg4jDqvHDklkeHNB8+7treZRxUiCFsV65zphrTloY= +github.com/aws/aws-sdk-go-v2 v1.41.7 h1:DWpAJt66FmnnaRIOT/8ASTucrvuDPZASqhhLey6tLY8= +github.com/aws/aws-sdk-go-v2 v1.41.7/go.mod h1:4LAfZOPHNVNQEckOACQx60Y8pSRjIkNZQz1w92xpMJc= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 h1:gx1AwW1Iyk9Z9dD9F4akX5gnN3QZwUB20GGKH/I+Rho= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10/go.mod h1:qqY157uZoqm5OXq/amuaBJyC9hgBCBQnsaWnPe905GY= +github.com/aws/aws-sdk-go-v2/config v1.32.17 h1:FpL4/758/diKwqbytU0prpuiu60fgXKUWCpDJtApclU= +github.com/aws/aws-sdk-go-v2/config v1.32.17/go.mod h1:OXqUMzgXytfoF9JaKkhrOYsyh72t9G+MJH8mMRaexOE= +github.com/aws/aws-sdk-go-v2/credentials v1.19.16 h1:r3RJBuU7X9ibt8RHbMjWE6y60QbKBiII6wSrXnapxSU= +github.com/aws/aws-sdk-go-v2/credentials v1.19.16/go.mod h1:6cx7zqDENJDbBIIWX6P8s0h6hqHC8Avbjh9Dseo27ug= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 h1:UuSfcORqNSz/ey3VPRS8TcVH2Ikf0/sC+Hdj400QI6U= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23/go.mod h1:+G/OSGiOFnSOkYloKj/9M35s74LgVAdJBSD5lsFfqKg= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23 h1:GpT/TrnBYuE5gan2cZbTtvP+JlHsutdmlV2YfEyNde0= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23/go.mod h1:xYWD6BS9ywC5bS3sz9Xh04whO/hzK2plt2Zkyrp4JuA= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23 h1:bpd8vxhlQi2r1hiueOw02f/duEPTMK59Q4QMAoTTtTo= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23/go.mod h1:15DfR2nw+CRHIk0tqNyifu3G1YdAOy68RftkhMDDwYk= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 h1:OQqn11BtaYv1WLUowvcA30MpzIu8Ti4pcLPIIyoKZrA= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24/go.mod h1:X5ZJyfwVrWA96GzPmUCWFQaEARPR7gCrpq2E92PJwAE= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9 h1:FLudkZLt5ci0ozzgkVo8BJGwvqNaZbTWb3UcucAateA= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9/go.mod h1:w7wZ/s9qK7c8g4al+UyoF1Sp/Z45UwMGcqIzLWVQHWk= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.15 h1:ieLCO1JxUWuxTZ1cRd0GAaeX7O6cIxnwk7tc1LsQhC4= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.15/go.mod h1:e3IzZvQ3kAWNykvE0Tr0RDZCMFInMvhku3qNpcIQXhM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 h1:pbrxO/kuIwgEsOPLkaHu0O+m4fNgLU8B3vxQ+72jTPw= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23/go.mod h1:/CMNUqoj46HpS3MNRDEDIwcgEnrtZlKRaHNaHxIFpNA= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23 h1:03xatSQO4+AM1lTAbnRg5OK528EUg744nW7F73U8DKw= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23/go.mod h1:M8l3mwgx5ToK7wot2sBBce/ojzgnPzZXUV445gTSyE8= +github.com/aws/aws-sdk-go-v2/service/s3 v1.101.0 h1:etqBTKY581iwLL/H/S2sVgk3C9lAsTJFeXWFDsDcWOU= +github.com/aws/aws-sdk-go-v2/service/s3 v1.101.0/go.mod h1:L2dcoOgS2VSgbPLvpak2NyUPsO1TBN7M45Z4H7DlRc4= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 h1:TdJ+HdzOBhU8+iVAOGUTU63VXopcumCOF1paFulHWZc= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.11/go.mod h1:R82ZRExE/nheo0N+T8zHPcLRTcH8MGsnR3BiVGX0TwI= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 h1:7byT8HUWrgoRp6sXjxtZwgOKfhss5fW6SkLBtqzgRoE= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.17/go.mod h1:xNWknVi4Ezm1vg1QsB/5EWpAJURq22uqd38U8qKvOJc= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21 h1:+1Kl1zx6bWi4X7cKi3VYh29h8BvsCoHQEQ6ST9X8w7w= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21/go.mod h1:4vIRDq+CJB2xFAXZ+YgGUTiEft7oAQlhIs71xcSeuVg= +github.com/aws/aws-sdk-go-v2/service/sts v1.42.1 h1:F/M5Y9I3nwr2IEpshZgh1GeHpOItExNM9L1euNuh/fk= +github.com/aws/aws-sdk-go-v2/service/sts v1.42.1/go.mod h1:mTNxImtovCOEEuD65mKW7DCsL+2gjEH+RPEAexAzAio= +github.com/aws/smithy-go v1.25.1 h1:J8ERsGSU7d+aCmdQur5Txg6bVoYelvQJgtZehD12GkI= +github.com/aws/smithy-go v1.25.1/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/aymanbagabas/go-udiff v0.2.0 h1:TK0fH4MteXUDspT88n8CKzvK0X9O2xu9yQjWpi6yML8= github.com/aymanbagabas/go-udiff v0.2.0/go.mod h1:RE4Ex0qsGkTAJoQdQQCA0uG+nAzJO/pI/QwceO5fgrA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -98,20 +96,18 @@ github.com/charmbracelet/x/exp/golden v0.0.0-20240806155701-69247e0abc2a h1:G99k github.com/charmbracelet/x/exp/golden v0.0.0-20240806155701-69247e0abc2a/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U= 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/exp/strings v0.1.0 h1:i69S2XI7uG1u4NLGeJPSYU++Nmjvpo9nwd6aoEm7gkA= +github.com/charmbracelet/x/exp/strings v0.1.0/go.mod h1:/ehtMPNh9K4odGFkqYJKpIYyePhdp1hLBRvyY4bWkH8= github.com/charmbracelet/x/json v0.2.0 h1:DqB+ZGx2h+Z+1s98HOuOyli+i97wsFQIxP2ZQANTPrQ= github.com/charmbracelet/x/json v0.2.0/go.mod h1:opFIflx2YgXgi49xVUu8gEQ21teFAxyMwvOiZhIvWNM= github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk= github.com/charmbracelet/x/term v0.2.2/go.mod h1:kF8CY5RddLWrsgVwpw4kAa6TESp6EB5y3uxGLeCqzAI= github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 h1:aBangftG7EVZoUb69Os8IaYg++6uMOdKK83QtkkvJik= github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2/go.mod h1:qwXFYgsP6T7XnJtbKlf1HP8AjxZZyzxMmc+Lq5GjlU4= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/ebitengine/purego v0.10.0 h1:QIw4xfpWT6GWTzaW5XEKy3HXoqrJGx1ijYHzTF0/ISU= github.com/ebitengine/purego v0.10.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA= @@ -124,10 +120,10 @@ github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMD github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/go-jose/go-jose/v4 v4.1.3 h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs= -github.com/go-jose/go-jose/v4 v4.1.3/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= -github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433 h1:vymEbVwYFP/L05h5TKQxvkXoKxNvTpjxYKdF1Nlwuao= -github.com/go-json-experiment/json v0.0.0-20260214004413-d219187c3433/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg= +github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= +github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= +github.com/go-json-experiment/json v0.0.0-20260430182902-b6187a392ed4 h1:2WmHkJINIjgXXYDGik8d3oJvFA3DAwPy00csDJ3vo+o= +github.com/go-json-experiment/json v0.0.0-20260430182902-b6187a392ed4/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg= github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -135,8 +131,6 @@ github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= -github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPEgAXnvj1Ro= github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= @@ -145,75 +139,56 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= -github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8= -github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= -github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.18.0 h1:jxP5Uuo3bxm3M6gGtV94P4lliVetoCB4Wk2x8QA86LI= -github.com/googleapis/gax-go/v2 v2.18.0/go.mod h1:uSzZN4a356eRG985CzJ3WfbFSpqkLTjsnhWGJR6EwrE= +github.com/googleapis/enterprise-certificate-proxy v0.3.15 h1:xolVQTEXusUcAA5UgtyRLjelpFFHWlPQ4XfWGc7MBas= +github.com/googleapis/enterprise-certificate-proxy v0.3.15/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= +github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4= +github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 h1:HWRh5R2+9EifMyIHV7ZV+MIZqgz+PMpZ14Jynv3O2Zs= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= -github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71 h1:3qrWTgbR0uMacRVnE6//G1B20hUJexxqqmQ2OTs1+0s= -github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71/go.mod h1:YV27+mh2SLUqeP36G1a9MiqL5eBkFnZQJjNTR9Q9NcY= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 h1:5VipnvEpbqr2gA2VbM+nYVbkIF28c5ZQfqCBQ5g2xfk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0/go.mod h1:Hyl3n6Twe1hvtd9XUXDec4pTvgMSEixRuQKPTMH2bNs= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 h1:vTCWu1wbdYo7PEZFem/rlr01+Un+wwVmI7wiegFdRLk= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72/go.mod h1:Vn+BBgKQHVQYdVQ4NZDICE1Brb+JfaONyDHr3q07oQc= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.8.5 h1:DMPV5CSw5JrNg/IK7kDZt3+l2REKXOi3oAw7uYLh2NM= -github.com/hashicorp/go-getter v1.8.5/go.mod h1:WIffejwAyDSJhoVptc3UEshEMkR9O63rw34V7k43O3Q= -github.com/hashicorp/go-version v1.8.0 h1:KAkNb1HAiZd1ukkxDFGmokVZe1Xy9HG6NUp+bPle2i4= -github.com/hashicorp/go-version v1.8.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hybridgroup/yzma v1.11.0 h1:dIAs/GoV8imTB1fsFk1ft0ejI5APhUK6iHBSMudbfZc= -github.com/hybridgroup/yzma v1.11.0/go.mod h1:zrzMgv/KVQz23+s6l16b+vJ+9uJVBdWtGcGkwRTMeiQ= -github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jupiterrider/ffi v0.6.0 h1:UX378KcZvH5c8qgLi9KL/bL82SZTHdRspZ+jj7bvBng= -github.com/jupiterrider/ffi v0.6.0/go.mod h1:PqZ5Go6X9by8CIXgfprxfMPYmn8oT5m2O7AA56s64bY= -github.com/kaptinlin/go-i18n v0.2.12 h1:ywDsvb4KDFddMC2dpI/rrIzGU2mWUSvHmWUm9BMsdl4= -github.com/kaptinlin/go-i18n v0.2.12/go.mod h1:pVcu9qsW5pOIOoZFJXesRYmLos1vMQrby70JPAoWmJU= -github.com/kaptinlin/jsonpointer v0.4.17 h1:mY9k8ciWncxbsECyaxKnR0MdmxamNdp2tLQkAKVrtSk= -github.com/kaptinlin/jsonpointer v0.4.17/go.mod h1:SsfsjqnHG5zuKo1DTBzk1VknaHlL4osHw+X9kZKukpU= -github.com/kaptinlin/jsonschema v0.7.6 h1:UUMqZGFAk7nOzQsYAxvgygm4wpDp/nwXxA4VP9mCPCs= -github.com/kaptinlin/jsonschema v0.7.6/go.mod h1:GGk/oE+F1lWUfYrzKaCf4QWZmMdytt0LL4XdFEFB0LE= -github.com/kaptinlin/messageformat-go v0.4.18 h1:RBlHVWgZyoxTcUgGWBsl2AcyScq/urqbLZvzgryTmSI= -github.com/kaptinlin/messageformat-go v0.4.18/go.mod h1:ntI3154RnqJgr7GaC+vZBnIExl2V3sv9selvRNNEM24= -github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c= -github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/hashicorp/go-getter v1.8.6 h1:9sQboWULaydVphxc4S64oAI4YqpuCk7nPmvbk131ebY= +github.com/hashicorp/go-getter v1.8.6/go.mod h1:nVH12eOV2P58dIiL3rsU6Fh3wLeJEKBOJzhMmzlSWoo= +github.com/hashicorp/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA= +github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hybridgroup/yzma v1.13.0 h1:itnOCpjZMZ9iSRLgV1iK1dZPtzr2uC+wIyOiQp9S4GI= +github.com/hybridgroup/yzma v1.13.0/go.mod h1:zrzMgv/KVQz23+s6l16b+vJ+9uJVBdWtGcGkwRTMeiQ= +github.com/jupiterrider/ffi v0.7.0 h1:RKsl6Ascal+3kyAqR5Qcbp83LceQMLc1VZbPfHWoNzs= +github.com/jupiterrider/ffi v0.7.0/go.mod h1:9dauhpOfNqrqk28fxuu0kkdeFtT9Qr4vbfigiuIXN7c= +github.com/kaptinlin/go-i18n v0.4.5 h1:9tIlo5A0RXth+yZJO2MG7Bhpu/X9PlzQnGz/qyYWNoY= +github.com/kaptinlin/go-i18n v0.4.5/go.mod h1:mU/7BH4molY5lGZYBwBRKAaiJ70dWRHuqmQ0/pFLGno= +github.com/kaptinlin/jsonpointer v0.4.20 h1:otSZZnCVdVo9OwOm+AQhS8ke31CLLQYXmG5Q0GOrXYg= +github.com/kaptinlin/jsonpointer v0.4.20/go.mod h1:Mo7+DX8RlQTFqS4dnYJl0izSP4ob+Rl5xO/mGDETgaU= +github.com/kaptinlin/jsonschema v0.7.13 h1:kahVXTy/rURL0XJjyQ9WELm59wEmXi6IY0TWswQEFvU= +github.com/kaptinlin/jsonschema v0.7.13/go.mod h1:Uh0aUBusnhXDCEXJ2oimL/hx7YTo7F+sKniE+tM0ERc= +github.com/kaptinlin/messageformat-go v0.6.0 h1:D6jiXFsKW4/JG2CMddv/F6Rev9KVbCRKEzzV5QOAcpc= +github.com/kaptinlin/messageformat-go v0.6.0/go.mod h1:NKjwS6e9u7DRhAK+vydjDDwJ7UbdHhYjk/yk2WPuZPs= +github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao= +github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/lucasb-eyer/go-colorful v1.3.0 h1:2/yBRLdWBZKrf7gB40FoiKfAWYQ0lqNcbuQwVHXptag= github.com/lucasb-eyer/go-colorful v1.3.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mattn/go-runewidth v0.0.17 h1:78v8ZlW0bP43XfmAfPsdXcoNCelfMHsDmd/pkENfrjQ= github.com/mattn/go-runewidth v0.0.17/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/nikolalohinski/gonja/v2 v2.7.0 h1:XuwnulQVPwzGaM0J/9AaQv0AFPBAxKI1GILifQ1r9pk= -github.com/nikolalohinski/gonja/v2 v2.7.0/go.mod h1:UIzXPVuOsr5h7dZ5DUbqk3/Z7oFA/NLGQGMjqT4L2aU= -github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus= -github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= -github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y= -github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= -github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= -github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pelletier/go-toml/v2 v2.3.0 h1:k59bC/lIZREW0/iVaQR8nDHxVq8OVlIzYCOJf421CaM= +github.com/pelletier/go-toml/v2 v2.3.0/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= @@ -227,12 +202,8 @@ github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4Ul github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= -github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= github.com/spiffe/go-spiffe/v2 v2.6.0 h1:l+DolpxNWYgruGQVV0xsfeya3CsC7m8iBzDnMpsbLuo= github.com/spiffe/go-spiffe/v2 v2.6.0/go.mod h1:gm2SeUoMZEtpnzPNs2Csc0D/gX33k1xIx7lEzqblHEs= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= @@ -251,68 +222,64 @@ github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavM github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/detectors/gcp v1.42.0 h1:kpt2PEJuOuqYkPcktfJqWWDjTEd/FNgrxcniL7kQrXQ= -go.opentelemetry.io/contrib/detectors/gcp v1.42.0/go.mod h1:W9zQ439utxymRrXsUOzZbFX4JhLxXU4+ZnCt8GG7yA8= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 h1:yI1/OhfEPy7J9eoa6Sj051C7n5dvpj0QX8g4sRchg04= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0/go.mod h1:NoUCKYWK+3ecatC4HjkRktREheMeEtrXoQxrqYFeHSc= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 h1:OyrsyzuttWTSur2qN/Lm0m2a8yqyIjUVBZcxFPuXq2o= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg= -go.opentelemetry.io/otel v1.42.0 h1:lSQGzTgVR3+sgJDAU/7/ZMjN9Z+vUip7leaqBKy4sho= -go.opentelemetry.io/otel v1.42.0/go.mod h1:lJNsdRMxCUIWuMlVJWzecSMuNjE7dOYyWlqOXWkdqCc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 h1:THuZiwpQZuHPul65w4WcwEnkX2QIuMT+UFoOrygtoJw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0/go.mod h1:J2pvYM5NGHofZ2/Ru6zw/TNWnEQp5crgyDeSrYpXkAw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 h1:zWWrB1U6nqhS/k6zYB74CjRpuiitRtLLi68VcgmOEto= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0/go.mod h1:2qXPNBX1OVRC0IwOnfo1ljoid+RD0QK3443EaqVlsOU= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0 h1:ZrPRak/kS4xI3AVXy8F7pipuDXmDsrO8Lg+yQjBLjw0= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0/go.mod h1:3y6kQCWztq6hyW8Z9YxQDDm0Je9AJoFar2G0yDcmhRk= -go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4= -go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI= -go.opentelemetry.io/otel/sdk v1.42.0 h1:LyC8+jqk6UJwdrI/8VydAq/hvkFKNHZVIWuslJXYsDo= -go.opentelemetry.io/otel/sdk v1.42.0/go.mod h1:rGHCAxd9DAph0joO4W6OPwxjNTYWghRWmkHuGbayMts= -go.opentelemetry.io/otel/sdk/metric v1.42.0 h1:D/1QR46Clz6ajyZ3G8SgNlTJKBdGp84q9RKCAZ3YGuA= -go.opentelemetry.io/otel/sdk/metric v1.42.0/go.mod h1:Ua6AAlDKdZ7tdvaQKfSmnFTdHx37+J4ba8MwVCYM5hc= -go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY= -go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc= +go.opentelemetry.io/contrib/detectors/gcp v1.43.0 h1:62yY3dT7/ShwOxzA0RsKRgshBmfElKI4d/Myu2OxDFU= +go.opentelemetry.io/contrib/detectors/gcp v1.43.0/go.mod h1:RyaZMFY7yi1kAs45S6mbFGz8O8rqB0dTY14uzvG4LCs= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo= +go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= +go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 h1:RAE+JPfvEmvy+0LzyUA25/SGawPwIUbZ6u0Wug54sLc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0/go.mod h1:AGmbycVGEsRx9mXMZ75CsOyhSP6MFIcj/6dnG+vhVjk= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= +go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= +go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= +go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= +go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= +go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= +go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= +go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= -go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= -go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= -golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= -golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= +golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= +golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA= golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ= -golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= -golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= +golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= +golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= -golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= +golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= +golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= -golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= -golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= -gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= -gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/api v0.271.0 h1:cIPN4qcUc61jlh7oXu6pwOQqbJW2GqYh5PS6rB2C/JY= -google.golang.org/api v0.271.0/go.mod h1:CGT29bhwkbF+i11qkRUJb2KMKqcJ1hdFceEIRd9u64Q= -google.golang.org/genai v1.51.0 h1:IZGuUqgfx40INv3hLFGCbOSGp0qFqm7LVmDghzNIYqg= -google.golang.org/genai v1.51.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= -google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c h1:ZhFDeBMmFc/4g8/GwxnJ4rzB3O4GwQVNr+8Mh7Y5z4g= -google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c/go.mod h1:hf4r/rBuzaTkLUWRO03771Xvcs6P5hwdQK3UUEJjqo0= -google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c h1:OyQPd6I3pN/9gDxz6L13kYGJgqkpdrAohJRBeXyxlgI= -google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c/go.mod h1:X2gu9Qwng7Nn009s/r3RUxqkzQNqOrAy79bluY7ojIg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c h1:xgCzyF2LFIO/0X2UAoVRiXKU5Xg6VjToG4i2/ecSswk= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.79.2 h1:fRMD94s2tITpyJGtBBn7MkMseNpOZU8ZxgC3MMBaXRU= -google.golang.org/grpc v1.79.2/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +google.golang.org/api v0.278.0 h1:W7jiRvRi53VYFfZ/HoZjQBtJk7gOFbHD8ot1RzVZU6E= +google.golang.org/api v0.278.0/go.mod h1:B9TqLBwJqVjp1mtt7WeoQwWRwvu/400y5lETOql+giQ= +google.golang.org/genai v1.56.0 h1:IwWrg1K0cn1/WBiPno/dYr0Q6o75NeH/bh3G4JEFERE= +google.golang.org/genai v1.56.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= +google.golang.org/genproto v0.0.0-20260504160031-60b97b32f348 h1:JjVGDZYWkJWZcxveJGzfkXC5myDVWAd4dZdgbzrDUv8= +google.golang.org/genproto v0.0.0-20260504160031-60b97b32f348/go.mod h1:95PqD4xM+AdOcBGsmgfaofXsiA37uXDtDufVbntT3TU= +google.golang.org/genproto/googleapis/api v0.0.0-20260504160031-60b97b32f348 h1:U8orV30l6KpDsi9dxU0CoJZGbjS8EEpw+6ba+XwGPQA= +google.golang.org/genproto/googleapis/api v0.0.0-20260504160031-60b97b32f348/go.mod h1:Yzdzr5OOZFgSsEV2D/Xi9NL3bszpXFAg0hFJiRohcD8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260504160031-60b97b32f348 h1:pfIbyB44sWzHiCpRqIen67ZQnVXSfIxWrqUMk1qwODE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260504160031-60b97b32f348/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.81.0 h1:W3G9N3KQf3BU+YuCtGKJk0CmxQNbAISICD/9AORxLIw= +google.golang.org/grpc v1.81.0/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= diff --git a/go.mod b/go.mod index b0b00ac75..e73042f82 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.26.3 require ( charm.land/x/vcr v0.1.1 cloud.google.com/go/auth v0.20.0 - github.com/ardanlabs/kronk v1.25.0 + github.com/ardanlabs/kronk v1.25.2 github.com/aws/aws-sdk-go-v2 v1.41.7 github.com/aws/aws-sdk-go-v2/config v1.32.17 github.com/aws/smithy-go v1.25.1 @@ -24,7 +24,7 @@ require ( ) require ( - cel.dev/expr v0.25.1 // indirect + cel.dev/expr v0.25.2 // indirect cloud.google.com/go v0.123.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect @@ -78,7 +78,7 @@ require ( github.com/hashicorp/go-getter v1.8.6 // indirect github.com/hashicorp/go-version v1.9.0 // indirect github.com/hybridgroup/yzma v1.13.0 // indirect - github.com/jupiterrider/ffi v0.6.0 // indirect + github.com/jupiterrider/ffi v0.7.0 // indirect github.com/kaptinlin/go-i18n v0.4.5 // indirect github.com/kaptinlin/jsonpointer v0.4.20 // indirect github.com/kaptinlin/messageformat-go v0.6.0 // indirect @@ -111,11 +111,11 @@ require ( go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect - golang.org/x/crypto v0.50.0 // indirect - golang.org/x/net v0.53.0 // indirect + golang.org/x/crypto v0.51.0 // indirect + golang.org/x/net v0.54.0 // indirect golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.43.0 // indirect - golang.org/x/text v0.36.0 // indirect + golang.org/x/sys v0.44.0 // indirect + golang.org/x/text v0.37.0 // indirect golang.org/x/time v0.15.0 // indirect google.golang.org/api v0.278.0 // indirect google.golang.org/genproto v0.0.0-20260504160031-60b97b32f348 // indirect diff --git a/go.sum b/go.sum index 4ceb811bd..4d63eade8 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -cel.dev/expr v0.25.1 h1:1KrZg61W6TWSxuNZ37Xy49ps13NUovb66QLprthtwi4= -cel.dev/expr v0.25.1/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= +cel.dev/expr v0.25.2 h1:K6j46C81hXtZQfuX60cVWQFBJahKSE2gfRbNuvr5bFs= +cel.dev/expr v0.25.2/go.mod h1:hrXvqGP6G6gyx8UAHSHJ5RGk//1Oj5nXQ2NI02Nrsg4= charm.land/x/vcr v0.1.1 h1:PXCFMUG0rPtyk35rhfzYCJEduOzWXCIbrXTFq4OF/9Q= charm.land/x/vcr v0.1.1/go.mod h1:eByq2gqzWvcct/8XE2XO5KznoWEBiXH56+y2gphbltM= cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= @@ -40,8 +40,8 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapp github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= github.com/ardanlabs/jinja v1.2.0 h1:B5di2EVsMkYFhEk1yCnDPTZ4KhqYmwNaNIp8PUWYq+A= github.com/ardanlabs/jinja v1.2.0/go.mod h1:aXXzlJfjA+T3XNKA/YT5ZtDq2VJxt5a5siZ8cl9B35Q= -github.com/ardanlabs/kronk v1.25.0 h1:xq4nGeH7u0+9LtTFQc+awsF7ksMN0f0aeneihHeC2js= -github.com/ardanlabs/kronk v1.25.0/go.mod h1:EyAhFaGlF8aAUPCy908xFCdxQPWRKRPYUU8RXrNtNk0= +github.com/ardanlabs/kronk v1.25.2 h1:kw8sDq/yDvy8D9I4/L4yptwmevfnM4hNeGv7mKLCz1s= +github.com/ardanlabs/kronk v1.25.2/go.mod h1:b5Gg4jDqvHDklkeHNB8+7treZRxUiCFsV65zphrTloY= github.com/aws/aws-sdk-go-v2 v1.41.7 h1:DWpAJt66FmnnaRIOT/8ASTucrvuDPZASqhhLey6tLY8= github.com/aws/aws-sdk-go-v2 v1.41.7/go.mod h1:4LAfZOPHNVNQEckOACQx60Y8pSRjIkNZQz1w92xpMJc= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 h1:gx1AwW1Iyk9Z9dD9F4akX5gnN3QZwUB20GGKH/I+Rho= @@ -159,8 +159,8 @@ github.com/hybridgroup/yzma v1.13.0 h1:itnOCpjZMZ9iSRLgV1iK1dZPtzr2uC+wIyOiQp9S4 github.com/hybridgroup/yzma v1.13.0/go.mod h1:zrzMgv/KVQz23+s6l16b+vJ+9uJVBdWtGcGkwRTMeiQ= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/jupiterrider/ffi v0.6.0 h1:UX378KcZvH5c8qgLi9KL/bL82SZTHdRspZ+jj7bvBng= -github.com/jupiterrider/ffi v0.6.0/go.mod h1:PqZ5Go6X9by8CIXgfprxfMPYmn8oT5m2O7AA56s64bY= +github.com/jupiterrider/ffi v0.7.0 h1:RKsl6Ascal+3kyAqR5Qcbp83LceQMLc1VZbPfHWoNzs= +github.com/jupiterrider/ffi v0.7.0/go.mod h1:9dauhpOfNqrqk28fxuu0kkdeFtT9Qr4vbfigiuIXN7c= github.com/kaptinlin/go-i18n v0.4.5 h1:9tIlo5A0RXth+yZJO2MG7Bhpu/X9PlzQnGz/qyYWNoY= github.com/kaptinlin/go-i18n v0.4.5/go.mod h1:mU/7BH4molY5lGZYBwBRKAaiJ70dWRHuqmQ0/pFLGno= github.com/kaptinlin/jsonpointer v0.4.20 h1:otSZZnCVdVo9OwOm+AQhS8ke31CLLQYXmG5Q0GOrXYg= @@ -247,18 +247,18 @@ go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= go.yaml.in/yaml/v4 v4.0.0-rc.3 h1:3h1fjsh1CTAPjW7q/EMe+C8shx5d8ctzZTrLcs/j8Go= go.yaml.in/yaml/v4 v4.0.0-rc.3/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= -golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= -golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= -golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= -golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= +golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= +golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= +golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= +golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI= -golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= -golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= +golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= +golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= From d097d0433c94fa8d579db9457c7f7876e1f90523 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Tue, 12 May 2026 11:15:38 -0300 Subject: [PATCH 47/82] v0.23.2 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 610e28725..fda96dcf6 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.23.1 +0.23.2 From 26c3c41f0620bfb92d33fd28b8ef96fb3ecede81 Mon Sep 17 00:00:00 2001 From: Ethan <39577870+ethanndickson@users.noreply.github.com> Date: Thu, 14 May 2026 23:22:19 +1000 Subject: [PATCH 48/82] fix(providers/anthropic): preserve web search error replay (#237) --- providers/anthropic/anthropic.go | 54 ++++-- providers/anthropic/anthropic_test.go | 237 ++++++++++++++++++++++++ providers/anthropic/provider_options.go | 10 +- 3 files changed, 284 insertions(+), 17 deletions(-) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 27dd22698..0a1bdf94e 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -1027,8 +1027,9 @@ func toPrompt(prompt fantasy.Prompt, sendReasoningData bool) ([]anthropic.TextBl continue } if result.ProviderExecuted { - // Reconstruct web_search_tool_result block - // with encrypted_content for round-tripping. + // Reconstruct web_search_tool_result blocks, + // including encrypted content and errors, for + // round-tripping. searchMeta := &WebSearchResultMetadata{} if webMeta, ok := result.ProviderOptions[Name]; ok { if typed, ok := webMeta.(*WebSearchResultMetadata); ok { @@ -1124,24 +1125,37 @@ func decodeToolCallInputAny(toolCall fantasy.ToolCallPart) (any, *fantasy.CallWa // buildWebSearchToolResultBlock constructs an Anthropic // web_search_tool_result content block from structured metadata. func buildWebSearchToolResultBlock(toolCallID string, searchMeta *WebSearchResultMetadata) anthropic.ContentBlockParamUnion { - resultBlocks := make([]anthropic.WebSearchResultBlockParam, 0, len(searchMeta.Results)) - for _, r := range searchMeta.Results { - block := anthropic.WebSearchResultBlockParam{ - URL: r.URL, - Title: r.Title, - EncryptedContent: r.EncryptedContent, + var content anthropic.WebSearchToolResultBlockParamContentUnion + switch { + case searchMeta != nil && len(searchMeta.Results) > 0: + resultBlocks := make([]anthropic.WebSearchResultBlockParam, 0, len(searchMeta.Results)) + for _, r := range searchMeta.Results { + block := anthropic.WebSearchResultBlockParam{ + URL: r.URL, + Title: r.Title, + EncryptedContent: r.EncryptedContent, + } + if r.PageAge != "" { + block.PageAge = param.NewOpt(r.PageAge) + } + resultBlocks = append(resultBlocks, block) + } + content = anthropic.WebSearchToolResultBlockParamContentUnion{ + OfWebSearchToolResultBlockItem: resultBlocks, } - if r.PageAge != "" { - block.PageAge = param.NewOpt(r.PageAge) + case searchMeta != nil && searchMeta.ErrorCode != "": + content = anthropic.NewWebSearchToolRequestError( + anthropic.WebSearchToolResultErrorCode(searchMeta.ErrorCode), + ) + default: + content = anthropic.WebSearchToolResultBlockParamContentUnion{ + OfWebSearchToolResultBlockItem: []anthropic.WebSearchResultBlockParam{}, } - resultBlocks = append(resultBlocks, block) } return anthropic.ContentBlockParamUnion{ OfWebSearchToolResult: &anthropic.WebSearchToolResultBlockParam{ ToolUseID: toolCallID, - Content: anthropic.WebSearchToolResultBlockParamContentUnion{ - OfWebSearchToolResultBlockItem: resultBlocks, - }, + Content: content, }, } } @@ -1271,6 +1285,12 @@ func (a languageModel) Generate(ctx context.Context, call fantasy.Call) (*fantas Results: metadataResults, }, } + } else if webSearchResult.Content.ErrorCode != "" { + toolResult.ProviderMetadata = fantasy.ProviderMetadata{ + Name: &WebSearchResultMetadata{ + ErrorCode: string(webSearchResult.Content.ErrorCode), + }, + } } content = append(content, toolResult) } @@ -1451,6 +1471,12 @@ func (a languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S Results: metadataResults, }, } + } else if contentBlock.Content.ErrorCode != "" { + providerMeta = fantasy.ProviderMetadata{ + Name: &WebSearchResultMetadata{ + ErrorCode: string(contentBlock.Content.ErrorCode), + }, + } } if !yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeToolResult, diff --git a/providers/anthropic/anthropic_test.go b/providers/anthropic/anthropic_test.go index 219171c0b..3b952827a 100644 --- a/providers/anthropic/anthropic_test.go +++ b/providers/anthropic/anthropic_test.go @@ -670,6 +670,17 @@ func awaitAnthropicCall(t *testing.T, calls <-chan anthropicCall) anthropicCall } } +func requireWebSearchResultMetadata(t *testing.T, metadata fantasy.ProviderMetadata) *WebSearchResultMetadata { + t.Helper() + + providerOption, ok := fantasy.ProviderOptions(metadata)[Name] + require.True(t, ok, "provider metadata should contain anthropic key") + result, ok := providerOption.(*WebSearchResultMetadata) + require.True(t, ok, "provider metadata should be *WebSearchResultMetadata") + require.NotNil(t, result) + return result +} + func assertNoAnthropicCall(t *testing.T, calls <-chan anthropicCall) { t.Helper() @@ -786,6 +797,103 @@ func mockAnthropicWebSearchResponse() map[string]any { } } +func mockAnthropicWebSearchErrorResponse() map[string]any { + return map[string]any{ + "id": "msg_01WebSearchError", + "type": "message", + "role": "assistant", + "model": "claude-sonnet-4-20250514", + "content": []any{ + map[string]any{ + "type": "server_tool_use", + "id": "srvtoolu_err", + "name": "web_search", + "input": map[string]any{"query": "latest AI news"}, + "caller": map[string]any{"type": "direct"}, + }, + map[string]any{ + "type": "web_search_tool_result", + "tool_use_id": "srvtoolu_err", + "caller": map[string]any{"type": "direct"}, + "content": map[string]any{ + "type": "web_search_tool_result_error", + "error_code": "max_uses_exceeded", + }, + }, + map[string]any{ + "type": "text", + "text": "I was unable to search.", + }, + }, + "stop_reason": "end_turn", + "stop_sequence": nil, + "usage": map[string]any{ + "input_tokens": 100, + "output_tokens": 20, + "cache_creation_input_tokens": 0, + "cache_read_input_tokens": 0, + "server_tool_use": map[string]any{ + "web_search_requests": 1, + }, + }, + } +} + +func TestToPrompt_WebSearchProviderExecutedErrorRoundTrip(t *testing.T) { + t.Parallel() + + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleUser, + Content: []fantasy.MessagePart{ + fantasy.TextPart{Text: "Search for the latest AI news"}, + }, + }, + { + Role: fantasy.MessageRoleAssistant, + Content: []fantasy.MessagePart{ + fantasy.ToolCallPart{ + ToolCallID: "srvtoolu_err", + ToolName: "web_search", + Input: `{"query":"latest AI news"}`, + ProviderExecuted: true, + }, + fantasy.ToolResultPart{ + ToolCallID: "srvtoolu_err", + ProviderExecuted: true, + ProviderOptions: fantasy.ProviderOptions{ + Name: &WebSearchResultMetadata{ErrorCode: "max_uses_exceeded"}, + }, + }, + fantasy.TextPart{Text: "I was unable to search."}, + }, + }, + } + + _, messages, warnings := toPrompt(prompt, true) + require.Empty(t, warnings) + require.Len(t, messages, 2) + + assistantMsg := messages[1] + require.Len(t, assistantMsg.Content, 3) + require.NotNil(t, assistantMsg.Content[0].OfServerToolUse) + require.Equal(t, "srvtoolu_err", assistantMsg.Content[0].OfServerToolUse.ID) + + webResult := assistantMsg.Content[1] + require.NotNil(t, webResult.OfWebSearchToolResult) + require.Equal(t, "srvtoolu_err", webResult.OfWebSearchToolResult.ToolUseID) + require.Nil(t, webResult.OfWebSearchToolResult.Content.OfWebSearchToolResultBlockItem) + require.NotNil(t, webResult.OfWebSearchToolResult.Content.OfRequestWebSearchToolResultError) + require.Equal( + t, + anthropic.WebSearchToolResultErrorCodeMaxUsesExceeded, + webResult.OfWebSearchToolResult.Content.OfRequestWebSearchToolResultError.ErrorCode, + ) + + require.NotNil(t, assistantMsg.Content[2].OfText) + require.Equal(t, "I was unable to search.", assistantMsg.Content[2].OfText.Text) +} + func TestToPrompt_WebSearchProviderExecutedToolResults(t *testing.T) { t.Parallel() @@ -965,6 +1073,66 @@ func TestGenerate_WebSearchResponse(t *testing.T) { ) } +func TestGenerate_WebSearchErrorPreservesErrorCode(t *testing.T) { + t.Parallel() + + server, calls := newAnthropicJSONServer(mockAnthropicWebSearchErrorResponse()) + defer server.Close() + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.URL), + ) + require.NoError(t, err) + + model, err := provider.LanguageModel(context.Background(), "claude-sonnet-4-20250514") + require.NoError(t, err) + + resp, err := model.Generate(context.Background(), fantasy.Call{ + Prompt: testPrompt(), + Tools: []fantasy.Tool{ + WebSearchTool(nil), + }, + }) + require.NoError(t, err) + + call := awaitAnthropicCall(t, calls) + require.Equal(t, "POST", call.method) + require.Equal(t, "/v1/messages", call.path) + + var ( + toolCalls []fantasy.ToolCallContent + sources []fantasy.SourceContent + toolResults []fantasy.ToolResultContent + texts []fantasy.TextContent + ) + for _, c := range resp.Content { + switch v := c.(type) { + case fantasy.ToolCallContent: + toolCalls = append(toolCalls, v) + case fantasy.SourceContent: + sources = append(sources, v) + case fantasy.ToolResultContent: + toolResults = append(toolResults, v) + case fantasy.TextContent: + texts = append(texts, v) + } + } + + require.Len(t, toolCalls, 1) + require.True(t, toolCalls[0].ProviderExecuted) + require.Equal(t, "srvtoolu_err", toolCalls[0].ToolCallID) + require.Empty(t, sources) + require.Len(t, toolResults, 1) + require.True(t, toolResults[0].ProviderExecuted) + require.Equal(t, "srvtoolu_err", toolResults[0].ToolCallID) + webMeta := requireWebSearchResultMetadata(t, toolResults[0].ProviderMetadata) + require.Equal(t, "max_uses_exceeded", webMeta.ErrorCode) + require.Empty(t, webMeta.Results) + require.Len(t, texts, 1) + require.Equal(t, "I was unable to search.", texts[0].Text) +} + func TestGenerate_WebSearchToolInRequest(t *testing.T) { t.Parallel() @@ -1436,6 +1604,75 @@ func TestStream_WebSearchResponse(t *testing.T) { require.Equal(t, "Here are the results.", textDeltas[0].Delta) } +func TestStream_WebSearchErrorPreservesErrorCode(t *testing.T) { + t.Parallel() + + chunks := []string{ + "event: message_start\n", + `data: {"type":"message_start","message":{"id":"msg_01WebSearchError","type":"message","role":"assistant","model":"claude-sonnet-4-20250514","content":[],"stop_reason":null,"usage":{"input_tokens":100,"output_tokens":0}}}` + "\n\n", + "event: content_block_start\n", + `data: {"type":"content_block_start","index":0,"content_block":{"type":"server_tool_use","id":"srvtoolu_err","name":"web_search","input":{}}}` + "\n\n", + "event: content_block_stop\n", + `data: {"type":"content_block_stop","index":0}` + "\n\n", + "event: content_block_start\n", + `data: {"type":"content_block_start","index":1,"content_block":{"type":"web_search_tool_result","tool_use_id":"srvtoolu_err","content":{"type":"web_search_tool_result_error","error_code":"max_uses_exceeded"}}}` + "\n\n", + "event: content_block_stop\n", + `data: {"type":"content_block_stop","index":1}` + "\n\n", + "event: message_stop\n", + `data: {"type":"message_stop"}` + "\n\n", + } + + server, calls := newAnthropicStreamingServer(chunks) + defer server.Close() + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.URL), + ) + require.NoError(t, err) + + model, err := provider.LanguageModel(context.Background(), "claude-sonnet-4-20250514") + require.NoError(t, err) + + stream, err := model.Stream(context.Background(), fantasy.Call{ + Prompt: testPrompt(), + Tools: []fantasy.Tool{ + WebSearchTool(nil), + }, + }) + require.NoError(t, err) + + var parts []fantasy.StreamPart + stream(func(part fantasy.StreamPart) bool { + parts = append(parts, part) + return true + }) + + _ = awaitAnthropicCall(t, calls) + + var ( + toolResults []fantasy.StreamPart + sourceParts []fantasy.StreamPart + ) + for _, p := range parts { + switch p.Type { + case fantasy.StreamPartTypeToolResult: + toolResults = append(toolResults, p) + case fantasy.StreamPartTypeSource: + sourceParts = append(sourceParts, p) + } + } + + require.Len(t, toolResults, 1) + require.Empty(t, sourceParts) + require.True(t, toolResults[0].ProviderExecuted) + require.Equal(t, "srvtoolu_err", toolResults[0].ID) + require.Equal(t, "web_search", toolResults[0].ToolCallName) + webMeta := requireWebSearchResultMetadata(t, toolResults[0].ProviderMetadata) + require.Equal(t, "max_uses_exceeded", webMeta.ErrorCode) + require.Empty(t, webMeta.Results) +} + func TestGenerate_ToolChoiceNone(t *testing.T) { t.Parallel() diff --git a/providers/anthropic/provider_options.go b/providers/anthropic/provider_options.go index a429b3ec8..ae643b3c7 100644 --- a/providers/anthropic/provider_options.go +++ b/providers/anthropic/provider_options.go @@ -159,10 +159,14 @@ type WebSearchResultItem struct { } // WebSearchResultMetadata stores web search results from Anthropic's -// server-executed web_search tool. The structured data (especially -// EncryptedContent) must be preserved for multi-turn conversations. +// server-executed web_search tool. The structured data, especially +// encrypted content and error codes, must be preserved for multi-turn +// conversations. type WebSearchResultMetadata struct { - Results []WebSearchResultItem `json:"results"` + Results []WebSearchResultItem `json:"results,omitempty"` + // ErrorCode is the Anthropic web_search_tool_result_error.error_code. + // At most one of Results or ErrorCode should be non-empty. + ErrorCode string `json:"error_code,omitempty"` } // Options implements the ProviderOptions interface. From 53ec8a648cdcb33803238f7d932424bef0628061 Mon Sep 17 00:00:00 2001 From: Ethan <39577870+ethanndickson@users.noreply.github.com> Date: Thu, 14 May 2026 23:25:48 +1000 Subject: [PATCH 49/82] fix(providers/anthropic): preserve reasoning replay fidelity (#238) --- providers/anthropic/anthropic.go | 38 ++++-- providers/anthropic/anthropic_test.go | 177 ++++++++++++++++++++++++++ 2 files changed, 206 insertions(+), 9 deletions(-) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 0a1bdf94e..3c697fe63 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -400,6 +400,21 @@ func GetReasoningMetadata(providerOptions fantasy.ProviderOptions) *ReasoningOpt return nil } +func reasoningProviderMetadata(signature, redactedData string) fantasy.ProviderMetadata { + switch { + case signature != "": + return fantasy.ProviderMetadata{ + Name: &ReasoningOptionMetadata{Signature: signature}, + } + case redactedData != "": + return fantasy.ProviderMetadata{ + Name: &ReasoningOptionMetadata{RedactedData: redactedData}, + } + default: + return nil + } +} + type messageBlock struct { Role fantasy.MessageRole Messages []fantasy.Message @@ -1355,13 +1370,9 @@ func (a languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S } case "redacted_thinking": if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeReasoningStart, - ID: fmt.Sprintf("%d", chunk.Index), - ProviderMetadata: fantasy.ProviderMetadata{ - Name: &ReasoningOptionMetadata{ - RedactedData: chunk.ContentBlock.Data, - }, - }, + Type: fantasy.StreamPartTypeReasoningStart, + ID: fmt.Sprintf("%d", chunk.Index), + ProviderMetadata: reasoningProviderMetadata("", chunk.ContentBlock.Data), }) { return } @@ -1400,8 +1411,17 @@ func (a languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S } case "thinking": if !yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeReasoningEnd, - ID: fmt.Sprintf("%d", chunk.Index), + Type: fantasy.StreamPartTypeReasoningEnd, + ID: fmt.Sprintf("%d", chunk.Index), + ProviderMetadata: reasoningProviderMetadata(contentBlock.Signature, ""), + }) { + return + } + case "redacted_thinking": + if !yield(fantasy.StreamPart{ + Type: fantasy.StreamPartTypeReasoningEnd, + ID: fmt.Sprintf("%d", chunk.Index), + ProviderMetadata: reasoningProviderMetadata("", contentBlock.Data), }) { return } diff --git a/providers/anthropic/anthropic_test.go b/providers/anthropic/anthropic_test.go index 3b952827a..539fc80b4 100644 --- a/providers/anthropic/anthropic_test.go +++ b/providers/anthropic/anthropic_test.go @@ -658,6 +658,63 @@ func newAnthropicStreamingServer(chunks []string) (*httptest.Server, <-chan anth return server, calls } +func anthropicSSEEvent(event, data string) string { + return fmt.Sprintf("event: %s\ndata: %s\n\n", event, data) +} + +func collectAnthropicStreamParts(stream fantasy.StreamResponse) []fantasy.StreamPart { + var parts []fantasy.StreamPart + stream(func(part fantasy.StreamPart) bool { + parts = append(parts, part) + return true + }) + return parts +} + +func streamAnthropicParts(t *testing.T, chunks []string, tools ...fantasy.Tool) []fantasy.StreamPart { + t.Helper() + + server, calls := newAnthropicStreamingServer(chunks) + defer server.Close() + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.URL), + ) + require.NoError(t, err) + + model, err := provider.LanguageModel(context.Background(), "claude-sonnet-4-20250514") + require.NoError(t, err) + + stream, err := model.Stream(context.Background(), fantasy.Call{ + Prompt: testPrompt(), + Tools: tools, + }) + require.NoError(t, err) + + parts := collectAnthropicStreamParts(stream) + _ = awaitAnthropicCall(t, calls) + return parts +} + +func requireReasoningMetadata(t *testing.T, metadata fantasy.ProviderMetadata) *ReasoningOptionMetadata { + t.Helper() + + reasoning := GetReasoningMetadata(fantasy.ProviderOptions(metadata)) + require.NotNil(t, reasoning) + return reasoning +} + +func streamPartsByType(parts []fantasy.StreamPart, typ fantasy.StreamPartType) []fantasy.StreamPart { + var matches []fantasy.StreamPart + for _, part := range parts { + if part.Type == typ { + matches = append(matches, part) + } + } + return matches +} + func awaitAnthropicCall(t *testing.T, calls <-chan anthropicCall) anthropicCall { t.Helper() @@ -2171,6 +2228,126 @@ func TestGenerate_BetaAPI(t *testing.T) { }) } +func TestStream_RedactedThinkingEmitsStartAndEnd(t *testing.T) { + t.Parallel() + + parts := streamAnthropicParts(t, []string{ + anthropicSSEEvent("message_start", `{"type":"message_start","message":{"id":"msg_redacted","type":"message","role":"assistant","model":"claude-sonnet-4-20250514","content":[],"stop_reason":null,"usage":{"input_tokens":1,"output_tokens":0}}}`), + anthropicSSEEvent("content_block_start", `{"type":"content_block_start","index":0,"content_block":{"type":"redacted_thinking","data":"redacted_blob"}}`), + anthropicSSEEvent("content_block_stop", `{"type":"content_block_stop","index":0}`), + anthropicSSEEvent("message_stop", `{"type":"message_stop"}`), + }) + + starts := streamPartsByType(parts, fantasy.StreamPartTypeReasoningStart) + ends := streamPartsByType(parts, fantasy.StreamPartTypeReasoningEnd) + require.Len(t, starts, 1) + require.Len(t, ends, 1) + require.Equal(t, starts[0].ID, ends[0].ID) + require.Equal(t, "redacted_blob", requireReasoningMetadata(t, starts[0].ProviderMetadata).RedactedData) + require.Equal(t, "redacted_blob", requireReasoningMetadata(t, ends[0].ProviderMetadata).RedactedData) +} + +func TestStream_ThinkingSignaturePresentOnEnd(t *testing.T) { + t.Parallel() + + parts := streamAnthropicParts(t, []string{ + anthropicSSEEvent("message_start", `{"type":"message_start","message":{"id":"msg_sig","type":"message","role":"assistant","model":"claude-sonnet-4-20250514","content":[],"stop_reason":null,"usage":{"input_tokens":1,"output_tokens":0}}}`), + anthropicSSEEvent("content_block_start", `{"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":""}}`), + anthropicSSEEvent("content_block_delta", `{"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"first thought"}}`), + anthropicSSEEvent("content_block_delta", `{"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":"sig_123"}}`), + anthropicSSEEvent("content_block_stop", `{"type":"content_block_stop","index":0}`), + anthropicSSEEvent("message_stop", `{"type":"message_stop"}`), + }) + + deltas := streamPartsByType(parts, fantasy.StreamPartTypeReasoningDelta) + ends := streamPartsByType(parts, fantasy.StreamPartTypeReasoningEnd) + require.Len(t, deltas, 2) + require.Equal(t, "first thought", deltas[0].Delta) + require.Equal(t, "sig_123", requireReasoningMetadata(t, deltas[1].ProviderMetadata).Signature) + require.Len(t, ends, 1) + require.Equal(t, "sig_123", requireReasoningMetadata(t, ends[0].ProviderMetadata).Signature) +} + +func TestStream_NilMetadataDeltaDoesNotEraseSignatureOnEnd(t *testing.T) { + t.Parallel() + + parts := streamAnthropicParts(t, []string{ + anthropicSSEEvent("message_start", `{"type":"message_start","message":{"id":"msg_sig_tail","type":"message","role":"assistant","model":"claude-sonnet-4-20250514","content":[],"stop_reason":null,"usage":{"input_tokens":1,"output_tokens":0}}}`), + anthropicSSEEvent("content_block_start", `{"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":""}}`), + anthropicSSEEvent("content_block_delta", `{"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"first"}}`), + anthropicSSEEvent("content_block_delta", `{"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":"sig_tail"}}`), + anthropicSSEEvent("content_block_delta", `{"type":"content_block_delta","index":0,"delta":{"type":"thinking_delta","thinking":"second"}}`), + anthropicSSEEvent("content_block_stop", `{"type":"content_block_stop","index":0}`), + anthropicSSEEvent("message_stop", `{"type":"message_stop"}`), + }) + + deltas := streamPartsByType(parts, fantasy.StreamPartTypeReasoningDelta) + ends := streamPartsByType(parts, fantasy.StreamPartTypeReasoningEnd) + require.Len(t, deltas, 3) + require.Equal(t, "first", deltas[0].Delta) + require.Len(t, deltas[0].ProviderMetadata, 0) + require.Equal(t, "sig_tail", requireReasoningMetadata(t, deltas[1].ProviderMetadata).Signature) + require.Equal(t, "second", deltas[2].Delta) + require.Len(t, deltas[2].ProviderMetadata, 0) + require.Len(t, ends, 1) + require.Equal(t, "sig_tail", requireReasoningMetadata(t, ends[0].ProviderMetadata).Signature) +} + +func TestStream_InterleavedThinkingAndRedactedThinking(t *testing.T) { + t.Parallel() + + parts := streamAnthropicParts(t, []string{ + anthropicSSEEvent("message_start", `{"type":"message_start","message":{"id":"msg_interleaved","type":"message","role":"assistant","model":"claude-sonnet-4-20250514","content":[],"stop_reason":null,"usage":{"input_tokens":1,"output_tokens":0}}}`), + anthropicSSEEvent("content_block_start", `{"type":"content_block_start","index":0,"content_block":{"type":"redacted_thinking","data":"redacted_0"}}`), + anthropicSSEEvent("content_block_stop", `{"type":"content_block_stop","index":0}`), + anthropicSSEEvent("content_block_start", `{"type":"content_block_start","index":1,"content_block":{"type":"thinking","thinking":""}}`), + anthropicSSEEvent("content_block_delta", `{"type":"content_block_delta","index":1,"delta":{"type":"thinking_delta","thinking":"reasoning_1"}}`), + anthropicSSEEvent("content_block_delta", `{"type":"content_block_delta","index":1,"delta":{"type":"signature_delta","signature":"sig_1"}}`), + anthropicSSEEvent("content_block_stop", `{"type":"content_block_stop","index":1}`), + anthropicSSEEvent("content_block_start", `{"type":"content_block_start","index":2,"content_block":{"type":"redacted_thinking","data":"redacted_2"}}`), + anthropicSSEEvent("content_block_stop", `{"type":"content_block_stop","index":2}`), + anthropicSSEEvent("message_stop", `{"type":"message_stop"}`), + }) + + var reasoningParts []fantasy.StreamPart + for _, part := range parts { + switch part.Type { + case fantasy.StreamPartTypeReasoningStart, fantasy.StreamPartTypeReasoningDelta, fantasy.StreamPartTypeReasoningEnd: + reasoningParts = append(reasoningParts, part) + } + } + + require.Len(t, reasoningParts, 8) + require.Equal(t, fantasy.StreamPartTypeReasoningStart, reasoningParts[0].Type) + require.Equal(t, "0", reasoningParts[0].ID) + require.Equal(t, "redacted_0", requireReasoningMetadata(t, reasoningParts[0].ProviderMetadata).RedactedData) + + require.Equal(t, fantasy.StreamPartTypeReasoningEnd, reasoningParts[1].Type) + require.Equal(t, "0", reasoningParts[1].ID) + require.Equal(t, "redacted_0", requireReasoningMetadata(t, reasoningParts[1].ProviderMetadata).RedactedData) + + require.Equal(t, fantasy.StreamPartTypeReasoningStart, reasoningParts[2].Type) + require.Equal(t, "1", reasoningParts[2].ID) + require.Len(t, reasoningParts[2].ProviderMetadata, 0) + + require.Equal(t, fantasy.StreamPartTypeReasoningDelta, reasoningParts[3].Type) + require.Equal(t, "reasoning_1", reasoningParts[3].Delta) + require.Equal(t, fantasy.StreamPartTypeReasoningDelta, reasoningParts[4].Type) + require.Equal(t, "sig_1", requireReasoningMetadata(t, reasoningParts[4].ProviderMetadata).Signature) + + require.Equal(t, fantasy.StreamPartTypeReasoningEnd, reasoningParts[5].Type) + require.Equal(t, "1", reasoningParts[5].ID) + require.Equal(t, "sig_1", requireReasoningMetadata(t, reasoningParts[5].ProviderMetadata).Signature) + + require.Equal(t, fantasy.StreamPartTypeReasoningStart, reasoningParts[6].Type) + require.Equal(t, "2", reasoningParts[6].ID) + require.Equal(t, "redacted_2", requireReasoningMetadata(t, reasoningParts[6].ProviderMetadata).RedactedData) + + require.Equal(t, fantasy.StreamPartTypeReasoningEnd, reasoningParts[7].Type) + require.Equal(t, "2", reasoningParts[7].ID) + require.Equal(t, "redacted_2", requireReasoningMetadata(t, reasoningParts[7].ProviderMetadata).RedactedData) +} + func TestStream_BetaAPI(t *testing.T) { t.Parallel() From 11bf8eefa61e96e3968b14d95a334f4097e4542b Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Thu, 14 May 2026 09:31:40 -0400 Subject: [PATCH 50/82] chore: handle partial stream endings to prevent silent truncation (#232) --- errors.go | 13 ++ providers/anthropic/anthropic.go | 9 ++ providers/anthropic/anthropic_test.go | 46 +++++++ providers/google/google.go | 8 +- providers/openai/language_model.go | 10 ++ providers/openai/openai_test.go | 135 +++++++++++++++++++ providers/openai/responses_language_model.go | 10 ++ 7 files changed, 230 insertions(+), 1 deletion(-) diff --git a/errors.go b/errors.go index a925d4c43..08d8f73a0 100644 --- a/errors.go +++ b/errors.go @@ -90,6 +90,19 @@ func (m *ProviderError) IsContextTooLarge() bool { return m.ContextTooLargeErr || m.ContextMaxTokens > 0 || m.ContextUsedTokens > 0 } +// NewIncompleteStreamError returns a retryable ProviderError indicating that +// an upstream stream closed cleanly without delivering its terminal signal +// (finish_reason, stop_reason, response.completed, candidate.finishReason, +// etc.). The cause is io.ErrUnexpectedEOF so ProviderError.IsRetryable() +// engages and the retry middleware re-runs the step. +func NewIncompleteStreamError() *ProviderError { + return &ProviderError{ + Title: "stream transport error", + Message: io.ErrUnexpectedEOF.Error(), + Cause: io.ErrUnexpectedEOF, + } +} + // RetryError represents an error that occurred during retry operations. type RetryError struct { Errors []error diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 3c697fe63..f3aa6e829 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -1557,6 +1557,15 @@ func (a languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S err := stream.Err() if err == nil || errors.Is(err, io.EOF) { + // Truncated stream: no terminal message_delta with stop_reason. + // Surface as a retryable error. + if acc.StopReason == "" { + yield(fantasy.StreamPart{ + Type: fantasy.StreamPartTypeError, + Error: fantasy.NewIncompleteStreamError(), + }) + return + } yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeFinish, ID: acc.ID, diff --git a/providers/anthropic/anthropic_test.go b/providers/anthropic/anthropic_test.go index 539fc80b4..880bd528b 100644 --- a/providers/anthropic/anthropic_test.go +++ b/providers/anthropic/anthropic_test.go @@ -5,6 +5,7 @@ import ( "encoding/json" "errors" "fmt" + "io" "math" "net/http" "net/http/httptest" @@ -2798,3 +2799,48 @@ func TestStream_ComputerUseTool(t *testing.T) { require.Contains(t, h, "computer-use-2025-01-24", "request %d", i) } } + +func TestStream_TruncatedWithoutStopReason(t *testing.T) { + t.Parallel() + + // Truncated stream: no terminal message_delta with stop_reason. + server, _ := newAnthropicStreamingServer([]string{ + "event: message_start\n", + `data: {"type":"message_start","message":{"id":"msg_01","type":"message","role":"assistant","model":"claude-sonnet-4-20250514","content":[],"stop_reason":null,"usage":{"input_tokens":10,"output_tokens":0}}}` + "\n\n", + "event: content_block_start\n", + `data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}` + "\n\n", + "event: content_block_delta\n", + `data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello"}}` + "\n\n", + "event: content_block_stop\n", + `data: {"type":"content_block_stop","index":0}` + "\n\n", + }) + defer server.Close() + + provider, err := New(WithAPIKey("test-api-key"), WithBaseURL(server.URL)) + require.NoError(t, err) + model, err := provider.LanguageModel(context.Background(), "claude-sonnet-4-20250514") + require.NoError(t, err) + + stream, err := model.Stream(context.Background(), fantasy.Call{Prompt: testPrompt()}) + require.NoError(t, err) + + var parts []fantasy.StreamPart + stream(func(part fantasy.StreamPart) bool { + parts = append(parts, part) + return true + }) + + var errPart *fantasy.StreamPart + for i, part := range parts { + if part.Type == fantasy.StreamPartTypeError { + errPart = &parts[i] + } + require.NotEqual(t, fantasy.StreamPartTypeFinish, part.Type) + } + require.NotNil(t, errPart) + + var providerErr *fantasy.ProviderError + require.ErrorAs(t, errPart.Error, &providerErr) + require.True(t, providerErr.IsRetryable()) + require.ErrorIs(t, providerErr.Cause, io.ErrUnexpectedEOF) +} diff --git a/providers/google/google.go b/providers/google/google.go index 700341f7c..6fb1e3e20 100644 --- a/providers/google/google.go +++ b/providers/google/google.go @@ -867,7 +867,13 @@ func (g *languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy. if len(toolCalls) > 0 { finishReason = fantasy.FinishReasonToolCalls } else if finishReason == "" { - finishReason = fantasy.FinishReasonStop + // Truncated stream: no candidate emitted a finishReason before + // close. Surface as a retryable error. + yield(fantasy.StreamPart{ + Type: fantasy.StreamPartTypeError, + Error: fantasy.NewIncompleteStreamError(), + }) + return } var finalUsage fantasy.Usage diff --git a/providers/openai/language_model.go b/providers/openai/language_model.go index 06610dedb..84dd69445 100644 --- a/providers/openai/language_model.go +++ b/providers/openai/language_model.go @@ -564,6 +564,16 @@ func (o languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S mappedFinishReason = fantasy.FinishReasonToolCalls } } + // Truncated stream: upstream closed without finish_reason and we + // can't infer a tool-call turn. Surface as a retryable error so + // the retry middleware re-runs the step. + if finishReason == "" && mappedFinishReason != fantasy.FinishReasonToolCalls { + yield(fantasy.StreamPart{ + Type: fantasy.StreamPartTypeError, + Error: fantasy.NewIncompleteStreamError(), + }) + return + } yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeFinish, Usage: usage, diff --git a/providers/openai/openai_test.go b/providers/openai/openai_test.go index 058c8fc3d..249c3f99b 100644 --- a/providers/openai/openai_test.go +++ b/providers/openai/openai_test.go @@ -5,6 +5,7 @@ import ( "encoding/base64" "encoding/json" "errors" + "io" "net/http" "net/http/httptest" "strings" @@ -3123,6 +3124,95 @@ func TestDoStream(t *testing.T) { require.NotNil(t, finishPart) require.Equal(t, fantasy.FinishReasonToolCalls, finishPart.FinishReason) }) + + t.Run("should error when stream closes without finish_reason", func(t *testing.T) { + t.Parallel() + + // Truncated SSE: deltas + [DONE] without any finish_reason chunk. + server := newStreamingMockServer() + defer server.close() + + server.chunks = []string{ + `data: {"id":"chatcmpl-trunc","object":"chat.completion.chunk","created":1,"model":"gpt-3.5-turbo","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}` + "\n\n", + `data: {"id":"chatcmpl-trunc","object":"chat.completion.chunk","created":1,"model":"gpt-3.5-turbo","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}` + "\n\n", + "data: [DONE]\n\n", + } + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.server.URL), + ) + require.NoError(t, err) + model, _ := provider.LanguageModel(t.Context(), "gpt-3.5-turbo") + + stream, err := model.Stream(context.Background(), fantasy.Call{ + Prompt: testPrompt, + }) + require.NoError(t, err) + + parts, err := collectStreamParts(stream) + require.NoError(t, err) + + var errPart *fantasy.StreamPart + for i, part := range parts { + if part.Type == fantasy.StreamPartTypeError { + errPart = &parts[i] + } + require.NotEqual(t, fantasy.StreamPartTypeFinish, part.Type) + } + require.NotNil(t, errPart) + + var providerErr *fantasy.ProviderError + require.ErrorAs(t, errPart.Error, &providerErr) + require.True(t, providerErr.IsRetryable()) + require.ErrorIs(t, providerErr.Cause, io.ErrUnexpectedEOF) + }) + + t.Run("should still finish cleanly when tool_calls arrive without finish_reason", func(t *testing.T) { + t.Parallel() + + // Tool-call-only turn without finish_reason: accumulator infers + // FinishReasonToolCalls; truncation guard must not fire. + server := newStreamingMockServer() + defer server.close() + + server.chunks = []string{ + `data: {"id":"chatcmpl-tc","object":"chat.completion.chunk","created":1,"model":"gpt-3.5-turbo","choices":[{"index":0,"delta":{"role":"assistant","tool_calls":[{"index":0,"id":"call_x","type":"function","function":{"name":"test-tool","arguments":"{\"a\":1}"}}]},"finish_reason":null}]}` + "\n\n", + "data: [DONE]\n\n", + } + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.server.URL), + ) + require.NoError(t, err) + model, _ := provider.LanguageModel(t.Context(), "gpt-3.5-turbo") + + stream, err := model.Stream(context.Background(), fantasy.Call{ + Prompt: testPrompt, + Tools: []fantasy.Tool{fantasy.FunctionTool{ + Name: "test-tool", + InputSchema: map[string]any{ + "type": "object", + "properties": map[string]any{"a": map[string]any{"type": "number"}}, + }, + }}, + }) + require.NoError(t, err) + + parts, err := collectStreamParts(stream) + require.NoError(t, err) + + var finish *fantasy.StreamPart + for i, part := range parts { + require.NotEqual(t, fantasy.StreamPartTypeError, part.Type) + if part.Type == fantasy.StreamPartTypeFinish { + finish = &parts[i] + } + } + require.NotNil(t, finish) + require.Equal(t, fantasy.FinishReasonToolCalls, finish.FinishReason) + }) } func TestDefaultToPrompt_DropsEmptyMessages(t *testing.T) { @@ -4338,3 +4428,48 @@ func TestResponsesStream_PreviousResponseIDOption(t *testing.T) { require.Equal(t, "/responses", sms.calls[0].path) require.Equal(t, "resp_prev_456", sms.calls[0].body["previous_response_id"]) } + +func TestResponsesStream_TruncatedWithoutResponseCompleted(t *testing.T) { + t.Parallel() + + // Truncated Responses stream: deltas without response.completed. + chunks := []string{ + "event: response.created\n" + + `data: {"type":"response.created","response":{"id":"resp_01","status":"in_progress"}}` + "\n\n", + "event: response.output_item.added\n" + + `data: {"type":"response.output_item.added","output_index":0,"item":{"type":"message","id":"msg_01","role":"assistant","status":"in_progress","content":[]}}` + "\n\n", + "event: response.output_text.delta\n" + + `data: {"type":"response.output_text.delta","output_index":0,"content_index":0,"delta":"Hello"}` + "\n\n", + } + + sms := newStreamingMockServer() + defer sms.close() + sms.chunks = chunks + + model := newResponsesProvider(t, sms.server.URL) + + stream, err := model.Stream(context.Background(), fantasy.Call{ + Prompt: testPrompt, + }) + require.NoError(t, err) + + var parts []fantasy.StreamPart + stream(func(part fantasy.StreamPart) bool { + parts = append(parts, part) + return true + }) + + var errPart *fantasy.StreamPart + for i, part := range parts { + if part.Type == fantasy.StreamPartTypeError { + errPart = &parts[i] + } + require.NotEqual(t, fantasy.StreamPartTypeFinish, part.Type) + } + require.NotNil(t, errPart) + + var providerErr *fantasy.ProviderError + require.ErrorAs(t, errPart.Error, &providerErr) + require.True(t, providerErr.IsRetryable()) + require.ErrorIs(t, providerErr.Cause, io.ErrUnexpectedEOF) +} diff --git a/providers/openai/responses_language_model.go b/providers/openai/responses_language_model.go index 35c88ed7e..fde8c23a8 100644 --- a/providers/openai/responses_language_model.go +++ b/providers/openai/responses_language_model.go @@ -1240,6 +1240,16 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( return } + // Truncated stream: no response.completed / response.incomplete event + // before close. Surface as a retryable error. + if finishReason == fantasy.FinishReasonUnknown { + yield(fantasy.StreamPart{ + Type: fantasy.StreamPartTypeError, + Error: fantasy.NewIncompleteStreamError(), + }) + return + } + yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeFinish, Usage: usage, From d259d3185394fc2406d353c197b759e751d3da8e Mon Sep 17 00:00:00 2001 From: Kieran Klukas Date: Tue, 12 May 2026 16:39:29 -0400 Subject: [PATCH 51/82] feat(responses): add WithResponsesAPIFunc to opt in specific models --- providers/openai/openai.go | 18 +++++++++++++++++- providers/openaicompat/openaicompat.go | 7 +++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/providers/openai/openai.go b/providers/openai/openai.go index 29a909426..3e5714e51 100644 --- a/providers/openai/openai.go +++ b/providers/openai/openai.go @@ -30,6 +30,7 @@ type options struct { project string name string useResponsesAPI bool + responsesAPIFunc func(modelID string) bool headers map[string]string userAgent string client option.HTTPClient @@ -134,6 +135,14 @@ func WithUseResponsesAPI() Option { } } +// WithResponsesAPIFunc sets a custom filter for which models use the Responses API. +// When set, this function is called instead of the default IsResponsesModel(). +func WithResponsesAPIFunc(fn func(modelID string) bool) Option { + return func(o *options) { + o.responsesAPIFunc = fn + } +} + // WithUserAgent sets an explicit User-Agent header, overriding the default and any // value set via WithHeaders. func WithUserAgent(ua string) Option { @@ -179,7 +188,7 @@ func (o *provider) LanguageModel(_ context.Context, modelID string) (fantasy.Lan client := openai.NewClient(openaiClientOptions...) - if o.options.useResponsesAPI && IsResponsesModel(modelID) { + if o.options.useResponsesAPI && o.isResponsesModel(modelID) { // Not supported for responses API objectMode := o.options.objectMode if objectMode == fantasy.ObjectModeJSON { @@ -202,3 +211,10 @@ func (o *provider) LanguageModel(_ context.Context, modelID string) (fantasy.Lan func (o *provider) Name() string { return o.options.name } + +func (o *provider) isResponsesModel(modelID string) bool { + if o.options.responsesAPIFunc != nil { + return o.options.responsesAPIFunc(modelID) + } + return IsResponsesModel(modelID) +} diff --git a/providers/openaicompat/openaicompat.go b/providers/openaicompat/openaicompat.go index bb376c59e..4e9894462 100644 --- a/providers/openaicompat/openaicompat.go +++ b/providers/openaicompat/openaicompat.go @@ -122,3 +122,10 @@ func WithUseResponsesAPI() Option { o.openaiOptions = append(o.openaiOptions, openai.WithUseResponsesAPI()) } } + +// WithResponsesAPIFunc sets a custom filter for which models use the Responses API. +func WithResponsesAPIFunc(fn func(modelID string) bool) Option { + return func(o *options) { + o.openaiOptions = append(o.openaiOptions, openai.WithResponsesAPIFunc(fn)) + } +} From 8be360612da3619587bf956cea0d0fb908a19653 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 14 May 2026 16:25:14 -0300 Subject: [PATCH 52/82] v0.24.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index fda96dcf6..2094a100c 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.23.2 +0.24.0 From a7be6118a19ac0f53aaf0b309270db31dbb5f46d Mon Sep 17 00:00:00 2001 From: "Cris R." <232431073+processtrader@users.noreply.github.com> Date: Sun, 17 May 2026 20:40:59 +0200 Subject: [PATCH 53/82] feat(retry): also retry on network connection errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The retry logic only retried errors wrapped in ProviderError (HTTP-level errors like 429, 5xx). Network-level errors (DNS failures, TCP timeouts, connection refused) surface as raw net.Error and were never retried. Add isRetryableError() that checks for net.Error in addition to ProviderError.IsRetryable(), with an explicit guard against context.Canceled/DeadlineExceeded which also implement net.Error. 💘 Generated with Crush Assisted-by: Crush:glm-5.1 --- retry.go | 20 ++++++- retry_test.go | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 retry_test.go diff --git a/retry.go b/retry.go index 6b2c2a412..2c1ecaf8b 100644 --- a/retry.go +++ b/retry.go @@ -3,6 +3,7 @@ package fantasy import ( "context" "errors" + "net" "strconv" "time" ) @@ -56,6 +57,22 @@ func isAbortError(err error) bool { return errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) } +// isRetryableError reports whether the error should be retried. +// It checks for retryable ProviderError and also retries network-level +// connection errors (DNS failures, TCP timeouts, connection refused, etc.) +// that never produce an HTTP response and therefore aren't wrapped in ProviderError. +func isRetryableError(err error) bool { + var providerErr *ProviderError + if errors.As(err, &providerErr) { + return providerErr.IsRetryable() + } + if isAbortError(err) { + return false + } + var netErr net.Error + return errors.As(err, &netErr) +} + // RetryWithExponentialBackoffRespectingRetryHeaders creates a retry function that retries // a failed operation with exponential backoff, while respecting rate limit headers // (retry-after-ms and retry-after) if they are provided and reasonable (0-60 seconds). @@ -110,9 +127,10 @@ func retryWithExponentialBackoff[T any](ctx context.Context, fn RetryFn[T], opti } var providerErr *ProviderError - if errors.As(err, &providerErr) && providerErr.IsRetryable() && tryNumber <= options.MaxRetries { + if isRetryableError(err) && tryNumber <= options.MaxRetries { delay := getRetryDelayInMs(err, options.InitialDelayIn) if options.OnRetry != nil { + errors.As(err, &providerErr) options.OnRetry(providerErr, delay) } diff --git a/retry_test.go b/retry_test.go new file mode 100644 index 000000000..81dce507c --- /dev/null +++ b/retry_test.go @@ -0,0 +1,145 @@ +package fantasy + +import ( + "context" + "errors" + "net" + "testing" + "time" +) + +func TestIsRetryableError(t *testing.T) { + t.Parallel() + + t.Run("retryable ProviderError", func(t *testing.T) { + t.Parallel() + err := &ProviderError{ + StatusCode: 429, + Message: "rate limited", + } + if !isRetryableError(err) { + t.Error("expected retryable ProviderError to be retryable") + } + }) + + t.Run("non-retryable ProviderError", func(t *testing.T) { + t.Parallel() + err := &ProviderError{ + StatusCode: 400, + Message: "bad request", + } + if isRetryableError(err) { + t.Error("expected non-retryable ProviderError to not be retryable") + } + }) + + t.Run("net.OpError is retryable", func(t *testing.T) { + t.Parallel() + err := &net.OpError{Op: "dial", Net: "tcp", Err: errors.New("connection refused")} + if !isRetryableError(err) { + t.Error("expected net.OpError to be retryable") + } + }) + + t.Run("context.Canceled is not retryable", func(t *testing.T) { + t.Parallel() + err := context.Canceled + if isRetryableError(err) { + t.Error("expected context.Canceled to not be retryable") + } + }) + + t.Run("context.DeadlineExceeded is not retryable", func(t *testing.T) { + t.Parallel() + err := context.DeadlineExceeded + if isRetryableError(err) { + t.Error("expected context.DeadlineExceeded to not be retryable") + } + }) + + t.Run("generic error is not retryable", func(t *testing.T) { + t.Parallel() + err := errors.New("something went wrong") + if isRetryableError(err) { + t.Error("expected generic error to not be retryable") + } + }) +} + +func TestRetryWithExponentialBackoff_ConnectionErrors(t *testing.T) { + t.Parallel() + + t.Run("retries on net.OpError", func(t *testing.T) { + t.Parallel() + attempts := 0 + opts := RetryOptions{ + MaxRetries: 2, + InitialDelayIn: 1 * time.Millisecond, + BackoffFactor: 2.0, + } + + retryFn := RetryWithExponentialBackoffRespectingRetryHeaders[int](opts) + + result, err := retryFn(context.Background(), func() (int, error) { + attempts++ + if attempts < 3 { + return 0, &net.OpError{Op: "dial", Net: "tcp", Err: errors.New("connection refused")} + } + return 42, nil + }) + + if err != nil { + t.Fatalf("expected no error, got %v", err) + } + if result != 42 { + t.Fatalf("expected result 42, got %d", result) + } + if attempts != 3 { + t.Fatalf("expected 3 attempts, got %d", attempts) + } + }) + + t.Run("does not retry on context.Canceled", func(t *testing.T) { + t.Parallel() + attempts := 0 + opts := RetryOptions{ + MaxRetries: 2, + InitialDelayIn: 1 * time.Millisecond, + BackoffFactor: 2.0, + } + + retryFn := RetryWithExponentialBackoffRespectingRetryHeaders[int](opts) + + _, err := retryFn(context.Background(), func() (int, error) { + attempts++ + return 0, context.Canceled + }) + + if err == nil { + t.Fatal("expected error, got nil") + } + if attempts != 1 { + t.Fatalf("expected 1 attempt (no retry), got %d", attempts) + } + }) + + t.Run("returns RetryError when max retries exceeded on connection error", func(t *testing.T) { + t.Parallel() + opts := RetryOptions{ + MaxRetries: 2, + InitialDelayIn: 1 * time.Millisecond, + BackoffFactor: 2.0, + } + + retryFn := RetryWithExponentialBackoffRespectingRetryHeaders[int](opts) + + _, err := retryFn(context.Background(), func() (int, error) { + return 0, &net.OpError{Op: "dial", Net: "tcp", Err: errors.New("connection refused")} + }) + + var retryErr *RetryError + if !errors.As(err, &retryErr) { + t.Fatalf("expected RetryError, got %T: %v", err, err) + } + }) +} From 4cf3a0f2e322d49cefbe54d9a5efe2723239e862 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Mon, 18 May 2026 10:17:30 -0300 Subject: [PATCH 54/82] refactor(retry): move functions to a better place --- retry.go | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/retry.go b/retry.go index 2c1ecaf8b..894e5aea7 100644 --- a/retry.go +++ b/retry.go @@ -52,27 +52,6 @@ func getRetryDelayInMs(err error, exponentialBackoffDelay time.Duration) time.Du return exponentialBackoffDelay } -// isAbortError checks if the error is a context cancellation error. -func isAbortError(err error) bool { - return errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) -} - -// isRetryableError reports whether the error should be retried. -// It checks for retryable ProviderError and also retries network-level -// connection errors (DNS failures, TCP timeouts, connection refused, etc.) -// that never produce an HTTP response and therefore aren't wrapped in ProviderError. -func isRetryableError(err error) bool { - var providerErr *ProviderError - if errors.As(err, &providerErr) { - return providerErr.IsRetryable() - } - if isAbortError(err) { - return false - } - var netErr net.Error - return errors.As(err, &netErr) -} - // RetryWithExponentialBackoffRespectingRetryHeaders creates a retry function that retries // a failed operation with exponential backoff, while respecting rate limit headers // (retry-after-ms and retry-after) if they are provided and reasonable (0-60 seconds). @@ -153,3 +132,24 @@ func retryWithExponentialBackoff[T any](ctx context.Context, fn RetryFn[T], opti return zero, &RetryError{newErrors} } + +// isRetryableError reports whether the error should be retried. +// It checks for retryable ProviderError and also retries network-level +// connection errors (DNS failures, TCP timeouts, connection refused, etc.) +// that never produce an HTTP response and therefore aren't wrapped in ProviderError. +func isRetryableError(err error) bool { + var providerErr *ProviderError + if errors.As(err, &providerErr) { + return providerErr.IsRetryable() + } + if isAbortError(err) { + return false + } + var netErr net.Error + return errors.As(err, &netErr) +} + +// isAbortError checks if the error is a context cancellation error. +func isAbortError(err error) bool { + return errors.Is(err, context.Canceled) || errors.Is(err, context.DeadlineExceeded) +} From 15e3da1d6c9d54bab7047dbd8f5d67b7928d09ef Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Mon, 18 May 2026 10:30:24 -0300 Subject: [PATCH 55/82] v0.25.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 2094a100c..d21d277be 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.24.0 +0.25.0 From 54c29a30da7523603ee3bf0801bd562b365e6a48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 May 2026 16:22:54 +0000 Subject: [PATCH 56/82] chore(deps): bump the all group with 2 updates (#243) Bumps the all group with 2 updates: [github.com/kaptinlin/jsonschema](https://github.com/kaptinlin/jsonschema) and [google.golang.org/genai](https://github.com/googleapis/go-genai). Updates `github.com/kaptinlin/jsonschema` from 0.7.13 to 0.7.14 - [Release notes](https://github.com/kaptinlin/jsonschema/releases) - [Commits](https://github.com/kaptinlin/jsonschema/compare/v0.7.13...v0.7.14) Updates `google.golang.org/genai` from 1.56.0 to 1.57.0 - [Release notes](https://github.com/googleapis/go-genai/releases) - [Changelog](https://github.com/googleapis/go-genai/blob/main/CHANGELOG.md) - [Commits](https://github.com/googleapis/go-genai/compare/v1.56.0...v1.57.0) --- updated-dependencies: - dependency-name: github.com/kaptinlin/jsonschema dependency-version: 0.7.14 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: google.golang.org/genai dependency-version: 1.57.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 12 ++++++------ go.sum | 28 ++++++++++++++-------------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/go.mod b/go.mod index e73042f82..c08f20212 100644 --- a/go.mod +++ b/go.mod @@ -17,10 +17,10 @@ require ( github.com/go-viper/mapstructure/v2 v2.5.0 github.com/google/uuid v1.6.0 github.com/joho/godotenv v1.5.1 - github.com/kaptinlin/jsonschema v0.7.13 + github.com/kaptinlin/jsonschema v0.7.14 github.com/stretchr/testify v1.11.1 golang.org/x/oauth2 v0.36.0 - google.golang.org/genai v1.56.0 + google.golang.org/genai v1.57.0 ) require ( @@ -63,7 +63,7 @@ require ( github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-jose/go-jose/v4 v4.1.4 // indirect - github.com/go-json-experiment/json v0.0.0-20260430182902-b6187a392ed4 // indirect + github.com/go-json-experiment/json v0.0.0-20260505212615-e40f80bf6836 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/goccy/go-yaml v1.19.2 // indirect @@ -79,9 +79,9 @@ require ( github.com/hashicorp/go-version v1.9.0 // indirect github.com/hybridgroup/yzma v1.13.0 // indirect github.com/jupiterrider/ffi v0.7.0 // indirect - github.com/kaptinlin/go-i18n v0.4.5 // indirect - github.com/kaptinlin/jsonpointer v0.4.20 // indirect - github.com/kaptinlin/messageformat-go v0.6.0 // indirect + github.com/kaptinlin/go-i18n v0.4.8 // indirect + github.com/kaptinlin/jsonpointer v0.4.23 // indirect + github.com/kaptinlin/messageformat-go v0.6.4 // indirect github.com/klauspost/compress v1.18.6 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect diff --git a/go.sum b/go.sum index 4d63eade8..5e6148bbf 100644 --- a/go.sum +++ b/go.sum @@ -116,8 +116,8 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= -github.com/go-json-experiment/json v0.0.0-20260430182902-b6187a392ed4 h1:2WmHkJINIjgXXYDGik8d3oJvFA3DAwPy00csDJ3vo+o= -github.com/go-json-experiment/json v0.0.0-20260430182902-b6187a392ed4/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg= +github.com/go-json-experiment/json v0.0.0-20260505212615-e40f80bf6836 h1:5KGUhXZFTN1PrCY4zUZLe1J8n7uBNmPDbCLCn78EbPQ= +github.com/go-json-experiment/json v0.0.0-20260505212615-e40f80bf6836/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -161,14 +161,14 @@ github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jupiterrider/ffi v0.7.0 h1:RKsl6Ascal+3kyAqR5Qcbp83LceQMLc1VZbPfHWoNzs= github.com/jupiterrider/ffi v0.7.0/go.mod h1:9dauhpOfNqrqk28fxuu0kkdeFtT9Qr4vbfigiuIXN7c= -github.com/kaptinlin/go-i18n v0.4.5 h1:9tIlo5A0RXth+yZJO2MG7Bhpu/X9PlzQnGz/qyYWNoY= -github.com/kaptinlin/go-i18n v0.4.5/go.mod h1:mU/7BH4molY5lGZYBwBRKAaiJ70dWRHuqmQ0/pFLGno= -github.com/kaptinlin/jsonpointer v0.4.20 h1:otSZZnCVdVo9OwOm+AQhS8ke31CLLQYXmG5Q0GOrXYg= -github.com/kaptinlin/jsonpointer v0.4.20/go.mod h1:Mo7+DX8RlQTFqS4dnYJl0izSP4ob+Rl5xO/mGDETgaU= -github.com/kaptinlin/jsonschema v0.7.13 h1:kahVXTy/rURL0XJjyQ9WELm59wEmXi6IY0TWswQEFvU= -github.com/kaptinlin/jsonschema v0.7.13/go.mod h1:Uh0aUBusnhXDCEXJ2oimL/hx7YTo7F+sKniE+tM0ERc= -github.com/kaptinlin/messageformat-go v0.6.0 h1:D6jiXFsKW4/JG2CMddv/F6Rev9KVbCRKEzzV5QOAcpc= -github.com/kaptinlin/messageformat-go v0.6.0/go.mod h1:NKjwS6e9u7DRhAK+vydjDDwJ7UbdHhYjk/yk2WPuZPs= +github.com/kaptinlin/go-i18n v0.4.8 h1:ymGkz0uU974wljuuHZufHP1BlFWVk5Tf/sSMO8Cl9yQ= +github.com/kaptinlin/go-i18n v0.4.8/go.mod h1:F+ezt0Q39p5x8PQW6p4xKMovhjNbhZYHuqwyEV1hHMw= +github.com/kaptinlin/jsonpointer v0.4.23 h1:0VisnCL7rJT7BRTwxSWMU7vC0PD/RFgmisNcURkWp3k= +github.com/kaptinlin/jsonpointer v0.4.23/go.mod h1:Mo7+DX8RlQTFqS4dnYJl0izSP4ob+Rl5xO/mGDETgaU= +github.com/kaptinlin/jsonschema v0.7.14 h1:6grzaTJiRuLXlIGEdlGX5HEII3Za2tV+xxGpW3Kg4Rc= +github.com/kaptinlin/jsonschema v0.7.14/go.mod h1:9WFuBzJjrvNkXVjo0L2Ujl1T/yqAGurwgbx4JWgF5C8= +github.com/kaptinlin/messageformat-go v0.6.4 h1:6nC70fsqEn2xxg/Xoby2+Dk2r77kvxa3QNnYL/hsNcM= +github.com/kaptinlin/messageformat-go v0.6.4/go.mod h1:553UGZ1x5jmGtyH4pQKYwLGMyPm71deCoZICjq1DtR8= github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao= github.com/klauspost/compress v1.18.6/go.mod h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -181,8 +181,8 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/pelletier/go-toml/v2 v2.3.0 h1:k59bC/lIZREW0/iVaQR8nDHxVq8OVlIzYCOJf421CaM= -github.com/pelletier/go-toml/v2 v2.3.0/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= +github.com/pelletier/go-toml/v2 v2.3.1 h1:MYEvvGnQjeNkRF1qUuGolNtNExTDwct51yp7olPtrEc= +github.com/pelletier/go-toml/v2 v2.3.1/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= @@ -265,8 +265,8 @@ gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/api v0.278.0 h1:W7jiRvRi53VYFfZ/HoZjQBtJk7gOFbHD8ot1RzVZU6E= google.golang.org/api v0.278.0/go.mod h1:B9TqLBwJqVjp1mtt7WeoQwWRwvu/400y5lETOql+giQ= -google.golang.org/genai v1.56.0 h1:IwWrg1K0cn1/WBiPno/dYr0Q6o75NeH/bh3G4JEFERE= -google.golang.org/genai v1.56.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= +google.golang.org/genai v1.57.0 h1:qTyG2ynz5dQy2jF4CvZdLHHVslhR0heMue+zM1a4GNM= +google.golang.org/genai v1.57.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= google.golang.org/genproto v0.0.0-20260504160031-60b97b32f348 h1:JjVGDZYWkJWZcxveJGzfkXC5myDVWAd4dZdgbzrDUv8= google.golang.org/genproto v0.0.0-20260504160031-60b97b32f348/go.mod h1:95PqD4xM+AdOcBGsmgfaofXsiA37uXDtDufVbntT3TU= google.golang.org/genproto/googleapis/api v0.0.0-20260504160031-60b97b32f348 h1:U8orV30l6KpDsi9dxU0CoJZGbjS8EEpw+6ba+XwGPQA= From c5fcd7c1e8743f52099a55fd505be07629c761d5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 May 2026 16:29:37 +0000 Subject: [PATCH 57/82] chore(deps): bump github.com/ardanlabs/kronk (#244) Bumps the kronk group with 1 update in the / directory: [github.com/ardanlabs/kronk](https://github.com/ardanlabs/kronk). Updates `github.com/ardanlabs/kronk` from 1.25.2 to 1.25.8 - [Release notes](https://github.com/ardanlabs/kronk/releases) - [Commits](https://github.com/ardanlabs/kronk/compare/v1.25.2...v1.25.8) --- updated-dependencies: - dependency-name: github.com/ardanlabs/kronk dependency-version: 1.25.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: kronk ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 16 ++++++++-------- go.sum | 44 ++++++++++++++++++++++---------------------- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/go.mod b/go.mod index c08f20212..7f2526e5a 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.26.3 require ( charm.land/x/vcr v0.1.1 cloud.google.com/go/auth v0.20.0 - github.com/ardanlabs/kronk v1.25.2 + github.com/ardanlabs/kronk v1.25.8 github.com/aws/aws-sdk-go-v2 v1.41.7 github.com/aws/aws-sdk-go-v2/config v1.32.17 github.com/aws/smithy-go v1.25.1 @@ -36,7 +36,7 @@ require ( github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 // indirect - github.com/ardanlabs/jinja v1.2.0 // indirect + github.com/ardanlabs/jinja v1.4.0 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.19.16 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 // indirect @@ -77,7 +77,7 @@ require ( github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.8.6 // indirect github.com/hashicorp/go-version v1.9.0 // indirect - github.com/hybridgroup/yzma v1.13.0 // indirect + github.com/hybridgroup/yzma v1.14.0 // indirect github.com/jupiterrider/ffi v0.7.0 // indirect github.com/kaptinlin/go-i18n v0.4.8 // indirect github.com/kaptinlin/jsonpointer v0.4.23 // indirect @@ -117,11 +117,11 @@ require ( golang.org/x/sys v0.44.0 // indirect golang.org/x/text v0.37.0 // indirect golang.org/x/time v0.15.0 // indirect - google.golang.org/api v0.278.0 // indirect - google.golang.org/genproto v0.0.0-20260504160031-60b97b32f348 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260504160031-60b97b32f348 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260504160031-60b97b32f348 // indirect - google.golang.org/grpc v1.81.0 // indirect + google.golang.org/api v0.279.0 // indirect + google.golang.org/genproto v0.0.0-20260511170946-3700d4141b60 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260511170946-3700d4141b60 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260511170946-3700d4141b60 // indirect + google.golang.org/grpc v1.81.1 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 5e6148bbf..8683e9d4d 100644 --- a/go.sum +++ b/go.sum @@ -12,16 +12,16 @@ cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdB cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= cloud.google.com/go/iam v1.11.0 h1:KieQ9Pb+LLPak1O3Rv3GgCxhnmkYf7Xyh0P5HfF1jFM= cloud.google.com/go/iam v1.11.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= -cloud.google.com/go/logging v1.17.0 h1:rUFekZYwHiKElXCyz3zYBGz4BOeIqzgCKxVLdgrZ5mY= -cloud.google.com/go/logging v1.17.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI= -cloud.google.com/go/longrunning v0.12.0 h1:wLv2hXvID9zHejLtcPo1B0JBjErnwZCYAPKSTa65xpY= -cloud.google.com/go/longrunning v0.12.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= +cloud.google.com/go/logging v1.18.0 h1:KhzZq+1cSkPH9YUaKLLhLtQxIHitVayBmk0sGfoM9+k= +cloud.google.com/go/logging v1.18.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI= +cloud.google.com/go/longrunning v0.13.0 h1:dUfqF8y0bHOeZzF5+tKPZ6RBCeEEDOejvwGwENv/eEc= +cloud.google.com/go/longrunning v0.13.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= cloud.google.com/go/monitoring v1.29.0 h1:AHhDsFaSax1/4k+qlIDX/SDGe6hggnfXJ9dkgD9qBPY= cloud.google.com/go/monitoring v1.29.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= cloud.google.com/go/storage v1.62.1 h1:Os0G3XbUbjZumkpDUf2Y0rLoXJTCF1kU2kWUujKYXD8= cloud.google.com/go/storage v1.62.1/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= -cloud.google.com/go/trace v1.15.0 h1:kAYkTwKyYHkGtAGFuu6qaUFRBkOVr+d1Yo44yZtGtgg= -cloud.google.com/go/trace v1.15.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= +cloud.google.com/go/trace v1.16.0 h1:GmQovzFc5F0CNfl0VLgL64aoTtu7xsM0YajW2GlG9+E= +cloud.google.com/go/trace v1.16.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc= @@ -38,10 +38,10 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0 github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.56.0/go.mod h1:rqP9UEhOXv9WhQ7Gjz+G5y/pf8+BJZW5/Ts0AhE0PwE= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 h1:0YP0+/ixwu+Uqeu/FGiBZNQ19huiUxxiPXIc9WsLKuQ= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= -github.com/ardanlabs/jinja v1.2.0 h1:B5di2EVsMkYFhEk1yCnDPTZ4KhqYmwNaNIp8PUWYq+A= -github.com/ardanlabs/jinja v1.2.0/go.mod h1:aXXzlJfjA+T3XNKA/YT5ZtDq2VJxt5a5siZ8cl9B35Q= -github.com/ardanlabs/kronk v1.25.2 h1:kw8sDq/yDvy8D9I4/L4yptwmevfnM4hNeGv7mKLCz1s= -github.com/ardanlabs/kronk v1.25.2/go.mod h1:b5Gg4jDqvHDklkeHNB8+7treZRxUiCFsV65zphrTloY= +github.com/ardanlabs/jinja v1.4.0 h1:9iE0/wF4zhcws1CYZCWqJTQP8YuhC4FjycBGzCTuOFw= +github.com/ardanlabs/jinja v1.4.0/go.mod h1:aXXzlJfjA+T3XNKA/YT5ZtDq2VJxt5a5siZ8cl9B35Q= +github.com/ardanlabs/kronk v1.25.8 h1:m00XchkmanD8LsF1+hW5fE/+6qKgND8LQvdO0M3xwJo= +github.com/ardanlabs/kronk v1.25.8/go.mod h1:lRIUsMXaLFJ0rFniYthW+kpqXWVcr+LnFoyf5LU9JHQ= github.com/aws/aws-sdk-go-v2 v1.41.7 h1:DWpAJt66FmnnaRIOT/8ASTucrvuDPZASqhhLey6tLY8= github.com/aws/aws-sdk-go-v2 v1.41.7/go.mod h1:4LAfZOPHNVNQEckOACQx60Y8pSRjIkNZQz1w92xpMJc= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 h1:gx1AwW1Iyk9Z9dD9F4akX5gnN3QZwUB20GGKH/I+Rho= @@ -155,8 +155,8 @@ github.com/hashicorp/go-getter v1.8.6 h1:9sQboWULaydVphxc4S64oAI4YqpuCk7nPmvbk13 github.com/hashicorp/go-getter v1.8.6/go.mod h1:nVH12eOV2P58dIiL3rsU6Fh3wLeJEKBOJzhMmzlSWoo= github.com/hashicorp/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA= github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hybridgroup/yzma v1.13.0 h1:itnOCpjZMZ9iSRLgV1iK1dZPtzr2uC+wIyOiQp9S4GI= -github.com/hybridgroup/yzma v1.13.0/go.mod h1:zrzMgv/KVQz23+s6l16b+vJ+9uJVBdWtGcGkwRTMeiQ= +github.com/hybridgroup/yzma v1.14.0 h1:40G9wxRG356mqLsIMBWCzJnksxIIVm+cCtdXVMe0Rdw= +github.com/hybridgroup/yzma v1.14.0/go.mod h1:DAsHYcX7ze7iFZH6PT57oCuqaVd/AXdALhjnOSgWbaE= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jupiterrider/ffi v0.7.0 h1:RKsl6Ascal+3kyAqR5Qcbp83LceQMLc1VZbPfHWoNzs= @@ -263,18 +263,18 @@ golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.278.0 h1:W7jiRvRi53VYFfZ/HoZjQBtJk7gOFbHD8ot1RzVZU6E= -google.golang.org/api v0.278.0/go.mod h1:B9TqLBwJqVjp1mtt7WeoQwWRwvu/400y5lETOql+giQ= +google.golang.org/api v0.279.0 h1:hsx2M2OaRcaKtVYK6vXEUnQvdjnend7ZYES+lYaot74= +google.golang.org/api v0.279.0/go.mod h1:B9TqLBwJqVjp1mtt7WeoQwWRwvu/400y5lETOql+giQ= google.golang.org/genai v1.57.0 h1:qTyG2ynz5dQy2jF4CvZdLHHVslhR0heMue+zM1a4GNM= google.golang.org/genai v1.57.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= -google.golang.org/genproto v0.0.0-20260504160031-60b97b32f348 h1:JjVGDZYWkJWZcxveJGzfkXC5myDVWAd4dZdgbzrDUv8= -google.golang.org/genproto v0.0.0-20260504160031-60b97b32f348/go.mod h1:95PqD4xM+AdOcBGsmgfaofXsiA37uXDtDufVbntT3TU= -google.golang.org/genproto/googleapis/api v0.0.0-20260504160031-60b97b32f348 h1:U8orV30l6KpDsi9dxU0CoJZGbjS8EEpw+6ba+XwGPQA= -google.golang.org/genproto/googleapis/api v0.0.0-20260504160031-60b97b32f348/go.mod h1:Yzdzr5OOZFgSsEV2D/Xi9NL3bszpXFAg0hFJiRohcD8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260504160031-60b97b32f348 h1:pfIbyB44sWzHiCpRqIen67ZQnVXSfIxWrqUMk1qwODE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260504160031-60b97b32f348/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.81.0 h1:W3G9N3KQf3BU+YuCtGKJk0CmxQNbAISICD/9AORxLIw= -google.golang.org/grpc v1.81.0/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= +google.golang.org/genproto v0.0.0-20260511170946-3700d4141b60 h1:rhBdfmsOlOZIvz3Y5/BdUzPg2CkO8L7QQPKj96B8554= +google.golang.org/genproto v0.0.0-20260511170946-3700d4141b60/go.mod h1:8xo2Pj1b20ZOCpzlU3B9qieMwVIAXx1QVZWLMlPL6sM= +google.golang.org/genproto/googleapis/api v0.0.0-20260511170946-3700d4141b60 h1:3WsB1FAbiRIf2tOxscWKs3pQBD9he1NsrnbhMuWfekc= +google.golang.org/genproto/googleapis/api v0.0.0-20260511170946-3700d4141b60/go.mod h1:7yoXV7RIh5gblj/xVYoogxAWvA9wUeVbpsK/M694l00= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260511170946-3700d4141b60 h1:seT2EwLWM78plQ7wcDfuWBc/4FAEAXDDiaSol4ku4qo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260511170946-3700d4141b60/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= +google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From e277abdc6b5a616bed167b5eb15d727ce6dfb5be Mon Sep 17 00:00:00 2001 From: Ethan Date: Wed, 20 May 2026 22:56:58 +1000 Subject: [PATCH 58/82] fix(openai): require terminal stream events before finishing (#246) --- providers/openai/language_model.go | 24 +- providers/openai/openai_test.go | 341 ++++++++++++++++++- providers/openai/responses_language_model.go | 82 ++++- 3 files changed, 430 insertions(+), 17 deletions(-) diff --git a/providers/openai/language_model.go b/providers/openai/language_model.go index 84dd69445..231a77213 100644 --- a/providers/openai/language_model.go +++ b/providers/openai/language_model.go @@ -568,9 +568,13 @@ func (o languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S // can't infer a tool-call turn. Surface as a retryable error so // the retry middleware re-runs the step. if finishReason == "" && mappedFinishReason != fantasy.FinishReasonToolCalls { + err := ctx.Err() + if err == nil { + err = fantasy.NewIncompleteStreamError() + } yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeError, - Error: fantasy.NewIncompleteStreamError(), + Error: err, }) return } @@ -868,8 +872,8 @@ func (o languageModel) streamObjectWithJSONMode(ctx context.Context, call fantas var lastParsedObject any var usage fantasy.Usage var finishReason fantasy.FinishReason + var sawFinishReason bool var providerMetadata fantasy.ProviderMetadata - var streamErr error for stream.Next() { chunk := stream.Current() @@ -884,6 +888,7 @@ func (o languageModel) streamObjectWithJSONMode(ctx context.Context, call fantas choice := chunk.Choices[0] if choice.FinishReason != "" { finishReason = o.mapFinishReasonFunc(choice.FinishReason) + sawFinishReason = true } if choice.Delta.Content != "" { @@ -928,10 +933,21 @@ func (o languageModel) streamObjectWithJSONMode(ctx context.Context, call fantas err := stream.Err() if err != nil && !errors.Is(err, io.EOF) { - streamErr = toProviderErr(err) yield(fantasy.ObjectStreamPart{ Type: fantasy.ObjectStreamPartTypeError, - Error: streamErr, + Error: toProviderErr(err), + }) + return + } + + if !sawFinishReason { + err := ctx.Err() + if err == nil { + err = fantasy.NewIncompleteStreamError() + } + yield(fantasy.ObjectStreamPart{ + Type: fantasy.ObjectStreamPartTypeError, + Error: err, }) return } diff --git a/providers/openai/openai_test.go b/providers/openai/openai_test.go index 249c3f99b..24f4a687c 100644 --- a/providers/openai/openai_test.go +++ b/providers/openai/openai_test.go @@ -2260,6 +2260,17 @@ func (sms *streamingMockServer) prepareStreamResponse(opts map[string]any) { sms.chunks = chunks } +// chatCompletionChunksBeforeFinishReason drops every chunk from the final +// finish_reason chunk onward, including any trailing usage-only chunk. +func chatCompletionChunksBeforeFinishReason(chunks []string) []string { + for i, chunk := range chunks { + if strings.Contains(chunk, `"finish_reason":"`) { + return append([]string(nil), chunks[:i]...) + } + } + return append([]string(nil), chunks...) +} + func (sms *streamingMockServer) prepareToolStreamResponse() { chunks := []string{ `data: {"id":"chatcmpl-96aZqmeDpA9IPD6tACY8djkMsJCMP","object":"chat.completion.chunk","created":1711357598,"model":"gpt-3.5-turbo-0125","system_fingerprint":"fp_3bc1b5746c","choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_O17Uplv4lJvD6DVdIvFFeRMw","type":"function","function":{"name":"test-tool","arguments":""}}]},"logprobs":null,"finish_reason":null}]}` + "\n\n", @@ -2328,6 +2339,90 @@ func collectStreamParts(stream fantasy.StreamResponse) ([]fantasy.StreamPart, er return parts, nil } +func TestChatCompletionsStreamObject_RequiresFinishReasonBeforeFinish(t *testing.T) { + t.Parallel() + + objectSchema := fantasy.Schema{ + Type: "object", + Properties: map[string]*fantasy.Schema{ + "answer": {Type: "string"}, + }, + Required: []string{"answer"}, + } + + tests := []struct { + name string + truncate bool + wantFinish bool + }{ + { + name: "complete stream finishes", + wantFinish: true, + }, + { + name: "stream closed before finish_reason errors", + truncate: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + server := newStreamingMockServer() + defer server.close() + + server.prepareStreamResponse(map[string]any{ + "content": []string{`{"answer":"hello"}`}, + }) + if tt.truncate { + server.chunks = chatCompletionChunksBeforeFinishReason(server.chunks) + } + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.server.URL), + ) + require.NoError(t, err) + model, _ := provider.LanguageModel(t.Context(), "gpt-3.5-turbo") + + stream, err := model.StreamObject(context.Background(), fantasy.ObjectCall{ + Prompt: testPrompt, + Schema: objectSchema, + }) + require.NoError(t, err) + + parts := collectObjectStreamParts(stream) + + var objects, finishes, errorParts []fantasy.ObjectStreamPart + for _, part := range parts { + switch part.Type { + case fantasy.ObjectStreamPartTypeObject: + objects = append(objects, part) + case fantasy.ObjectStreamPartTypeFinish: + finishes = append(finishes, part) + case fantasy.ObjectStreamPartTypeError: + errorParts = append(errorParts, part) + } + } + + require.NotEmpty(t, objects) + require.Equal(t, map[string]any{"answer": "hello"}, objects[len(objects)-1].Object) + + if tt.wantFinish { + require.Len(t, finishes, 1) + require.Empty(t, errorParts) + return + } + + require.Empty(t, finishes) + require.Len(t, errorParts, 1) + require.Error(t, errorParts[0].Error) + requireRetryableUnexpectedEOF(t, errorParts[0].Error) + }) + } +} + func TestDoStream(t *testing.T) { t.Parallel() @@ -3883,7 +3978,8 @@ func TestResponsesGenerate_WebSearchResponse(t *testing.T) { // TextContent with the final answer. require.Len(t, texts, 1) - require.Equal(t, + require.Equal( + t, "Based on recent search results, here is the latest AI news.", texts[0].Text, ) @@ -4265,6 +4361,249 @@ func TestResponsesToPrompt_ReasoningWithStore(t *testing.T) { }) } +func TestResponsesStream_RequiresTerminalEventBeforeFinish(t *testing.T) { + t.Parallel() + + textChunks := []string{ + responsesSSEEvent("response.created", `{"type":"response.created","response":{"id":"resp_01","status":"in_progress","output":[]}}`), + responsesSSEEvent("response.output_item.added", `{"type":"response.output_item.added","output_index":0,"item":{"id":"msg_01","type":"message","role":"assistant","status":"in_progress","content":[]}}`), + responsesSSEEvent("response.content_part.added", `{"type":"response.content_part.added","output_index":0,"content_index":0,"item_id":"msg_01","part":{"type":"output_text","text":""}}`), + responsesSSEEvent("response.output_text.delta", `{"type":"response.output_text.delta","output_index":0,"content_index":0,"item_id":"msg_01","delta":"hello"}`), + } + incompleteEvent := responsesSSEEvent("response.incomplete", `{"type":"response.incomplete","response":{"id":"resp_02","status":"incomplete","output":[],"incomplete_details":{"reason":"max_output_tokens"},"usage":{"input_tokens":1,"output_tokens":1,"total_tokens":2}}}`) + failedEvent := responsesSSEEvent("response.failed", `{"type":"response.failed","response":{"id":"resp_03","status":"failed","error":{"code":"server_error","message":"boom"},"output":[]}}`) + errorEvent := responsesSSEEvent("error", `{"type":"error","message":"stream down","code":"server_error","param":"","sequence_number":1}`) + + tests := []struct { + name string + chunks []string + wantFinish bool + wantFinishReason fantasy.FinishReason + wantRetryable bool + wantErrContain string + }{ + { + name: "incomplete terminal event finishes", + chunks: append(append([]string{}, textChunks...), incompleteEvent), + wantFinish: true, + wantFinishReason: fantasy.FinishReasonLength, + }, + { + name: "stream closed before terminal event errors", + chunks: textChunks, + wantRetryable: true, + }, + { + name: "response failed errors", + chunks: []string{failedEvent}, + wantErrContain: "response failed: boom (code: server_error)", + }, + { + name: "provider error event is preserved", + chunks: []string{errorEvent}, + wantErrContain: "response error: stream down (code: server_error)", + }, + { + name: "malformed event error is preserved", + chunks: []string{responsesSSEEvent("response.created", `{`)}, + wantErrContain: "unexpected end of JSON input", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + sms := newStreamingMockServer() + defer sms.close() + sms.chunks = tt.chunks + + model := newResponsesProvider(t, sms.server.URL) + stream, err := model.Stream(context.Background(), fantasy.Call{Prompt: testPrompt}) + require.NoError(t, err) + + parts, err := collectStreamParts(stream) + require.NoError(t, err) + + var finishes, errorParts []fantasy.StreamPart + for _, part := range parts { + switch part.Type { + case fantasy.StreamPartTypeFinish: + finishes = append(finishes, part) + case fantasy.StreamPartTypeError: + errorParts = append(errorParts, part) + } + } + + if tt.wantFinish { + require.Len(t, finishes, 1) + require.Empty(t, errorParts) + require.Equal(t, tt.wantFinishReason, finishes[0].FinishReason) + return + } + + require.Empty(t, finishes) + require.Len(t, errorParts, 1) + require.Error(t, errorParts[0].Error) + if tt.wantErrContain != "" { + require.Contains(t, errorParts[0].Error.Error(), tt.wantErrContain) + } + + if tt.wantRetryable { + requireRetryableUnexpectedEOF(t, errorParts[0].Error) + } else { + requireNotRetryableUnexpectedEOF(t, errorParts[0].Error) + } + }) + } +} + +func TestResponsesStreamObject_RequiresTerminalEventBeforeFinish(t *testing.T) { + t.Parallel() + + objectSchema := fantasy.Schema{ + Type: "object", + Properties: map[string]*fantasy.Schema{ + "answer": {Type: "string"}, + }, + Required: []string{"answer"}, + } + + objectChunks := []string{ + responsesSSEEvent("response.created", `{"type":"response.created","response":{"id":"resp_obj","status":"in_progress","output":[]}}`), + responsesSSEEvent("response.output_text.delta", `{"type":"response.output_text.delta","output_index":0,"content_index":0,"item_id":"msg_obj","delta":"{\"answer\":\"hello\"}"}`), + } + completedEvent := responsesSSEEvent("response.completed", `{"type":"response.completed","response":{"id":"resp_obj","status":"completed","output":[],"usage":{"input_tokens":1,"output_tokens":1,"total_tokens":2}}}`) + failedEvent := responsesSSEEvent("response.failed", `{"type":"response.failed","response":{"id":"resp_failed","status":"failed","error":{"code":"server_error","message":"boom"},"output":[]}}`) + errorEvent := responsesSSEEvent("error", `{"type":"error","message":"stream down","code":"server_error","param":"","sequence_number":1}`) + + tests := []struct { + name string + chunks []string + wantFinish bool + wantObject bool + wantRetryable bool + wantErrContain string + }{ + { + name: "completed terminal event finishes", + chunks: append(append([]string{}, objectChunks...), completedEvent), + wantFinish: true, + wantObject: true, + }, + { + name: "object stream closed before terminal event errors", + chunks: objectChunks, + wantObject: true, + wantRetryable: true, + }, + { + name: "response failed errors", + chunks: []string{failedEvent}, + wantErrContain: "response failed: boom (code: server_error)", + }, + { + name: "provider error event is preserved", + chunks: []string{errorEvent}, + wantErrContain: "response error: stream down (code: server_error)", + }, + { + name: "malformed event error is preserved", + chunks: []string{responsesSSEEvent("response.output_text.delta", `{`)}, + wantErrContain: "unexpected end of JSON input", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + sms := newStreamingMockServer() + defer sms.close() + sms.chunks = tt.chunks + + model := newResponsesProvider(t, sms.server.URL) + stream, err := model.StreamObject(context.Background(), fantasy.ObjectCall{ + Prompt: testPrompt, + Schema: objectSchema, + }) + require.NoError(t, err) + + parts := collectObjectStreamParts(stream) + + var objects, finishes, errorParts []fantasy.ObjectStreamPart + for _, part := range parts { + switch part.Type { + case fantasy.ObjectStreamPartTypeObject: + objects = append(objects, part) + case fantasy.ObjectStreamPartTypeFinish: + finishes = append(finishes, part) + case fantasy.ObjectStreamPartTypeError: + errorParts = append(errorParts, part) + } + } + + if tt.wantObject { + require.NotEmpty(t, objects) + require.Equal(t, map[string]any{"answer": "hello"}, objects[len(objects)-1].Object) + } else { + require.Empty(t, objects) + } + + if tt.wantFinish { + require.Len(t, finishes, 1) + require.Empty(t, errorParts) + return + } + + require.Empty(t, finishes) + require.Len(t, errorParts, 1) + require.Error(t, errorParts[0].Error) + if tt.wantErrContain != "" { + require.Contains(t, errorParts[0].Error.Error(), tt.wantErrContain) + } + + if tt.wantRetryable { + requireRetryableUnexpectedEOF(t, errorParts[0].Error) + } else { + requireNotRetryableUnexpectedEOF(t, errorParts[0].Error) + } + }) + } +} + +func responsesSSEEvent(event, data string) string { + return "event: " + event + "\n" + "data: " + data + "\n\n" +} + +func collectObjectStreamParts(stream fantasy.ObjectStreamResponse) []fantasy.ObjectStreamPart { + var parts []fantasy.ObjectStreamPart + for part := range stream { + parts = append(parts, part) + } + return parts +} + +func requireNotRetryableUnexpectedEOF(t *testing.T, err error) { + t.Helper() + + require.NotErrorIs(t, err, io.ErrUnexpectedEOF) + var providerErr *fantasy.ProviderError + if errors.As(err, &providerErr) { + require.False(t, providerErr.IsRetryable()) + require.NotErrorIs(t, providerErr.Cause, io.ErrUnexpectedEOF) + } +} + +func requireRetryableUnexpectedEOF(t *testing.T, err error) { + t.Helper() + + var providerErr *fantasy.ProviderError + require.ErrorAs(t, err, &providerErr) + require.True(t, providerErr.IsRetryable()) + require.ErrorIs(t, providerErr.Cause, io.ErrUnexpectedEOF) +} + func TestResponsesStream_WebSearchResponse(t *testing.T) { t.Parallel() diff --git a/providers/openai/responses_language_model.go b/providers/openai/responses_language_model.go index fde8c23a8..9d9771360 100644 --- a/providers/openai/responses_language_model.go +++ b/providers/openai/responses_language_model.go @@ -6,6 +6,7 @@ import ( "encoding/json" "errors" "fmt" + "io" "reflect" "strings" @@ -789,6 +790,7 @@ func (o responsesLanguageModel) Generate(ctx context.Context, call fantasy.Call) if err != nil { return nil, toProviderErr(err) } + if response == nil { return nil, &fantasy.Error{Title: "no response", Message: "provider returned nil response"} } @@ -949,6 +951,7 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( // identical; the overwrites ensure we have the final value even if an event // is missed. responseID := "" + sawTerminalEvent := false ongoingToolCalls := make(map[int64]*ongoingToolCall) hasFunctionCall := false activeReasoning := make(map[string]*reasoningState) @@ -1208,22 +1211,34 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( } case "response.completed": + sawTerminalEvent = true completed := event.AsResponseCompleted() responseID = completed.Response.ID finishReason = mapResponsesFinishReason(completed.Response.IncompleteDetails.Reason, hasFunctionCall) usage = responsesUsage(completed.Response) case "response.incomplete": + sawTerminalEvent = true incomplete := event.AsResponseIncomplete() responseID = incomplete.Response.ID finishReason = mapResponsesFinishReason(incomplete.Response.IncompleteDetails.Reason, hasFunctionCall) usage = responsesUsage(incomplete.Response) + case "response.failed": + failed := event.AsResponseFailed() + if !yield(fantasy.StreamPart{ + Type: fantasy.StreamPartTypeError, + Error: responsesFailedStreamError(failed.Response.Error.Message, string(failed.Response.Error.Code)), + }) { + return + } + return + case "error": errorEvent := event.AsError() if !yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeError, - Error: fmt.Errorf("response error: %s (code: %s)", errorEvent.Message, errorEvent.Code), + Error: responsesErrorStreamError(errorEvent.Message, errorEvent.Code), }) { return } @@ -1232,7 +1247,7 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( } err := stream.Err() - if err != nil { + if err != nil && !errors.Is(err, io.EOF) { yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeError, Error: toProviderErr(err), @@ -1240,12 +1255,14 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( return } - // Truncated stream: no response.completed / response.incomplete event - // before close. Surface as a retryable error. - if finishReason == fantasy.FinishReasonUnknown { + if !sawTerminalEvent { + err := ctx.Err() + if err == nil { + err = fantasy.NewIncompleteStreamError() + } yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeError, - Error: fantasy.NewIncompleteStreamError(), + Error: err, }) return } @@ -1259,6 +1276,24 @@ func (o responsesLanguageModel) Stream(ctx context.Context, call fantasy.Call) ( }, nil } +// responsesFailedStreamError intentionally returns a provider-declared failure +// instead of a retryable transport error. Only synthetic stream truncation +// errors are wrapped with io.ErrUnexpectedEOF. +func responsesFailedStreamError(message, code string) error { + return responsesStreamFailureError("response failed", message, code) +} + +func responsesErrorStreamError(message, code string) error { + return responsesStreamFailureError("response error", message, code) +} + +func responsesStreamFailureError(title, message, code string) error { + if code != "" { + message = fmt.Sprintf("%s (code: %s)", message, code) + } + return &fantasy.Error{Title: title, Message: message} +} + // toWebSearchToolParam converts a ProviderDefinedTool with ID // "web_search" into the OpenAI SDK's WebSearchToolParam. func toWebSearchToolParam(pt fantasy.ProviderDefinedTool) responses.ToolUnionParam { @@ -1518,7 +1553,7 @@ func (o responsesLanguageModel) streamObjectWithJSONMode(ctx context.Context, ca // identical; the overwrites ensure we have the final value even if an event // is missed. var responseID string - var streamErr error + var sawTerminalEvent bool hasFunctionCall := false for stream.Next() { @@ -1573,23 +1608,34 @@ func (o responsesLanguageModel) streamObjectWithJSONMode(ctx context.Context, ca } case "response.completed": + sawTerminalEvent = true completed := event.AsResponseCompleted() responseID = completed.Response.ID finishReason = mapResponsesFinishReason(completed.Response.IncompleteDetails.Reason, hasFunctionCall) usage = responsesUsage(completed.Response) case "response.incomplete": + sawTerminalEvent = true incomplete := event.AsResponseIncomplete() responseID = incomplete.Response.ID finishReason = mapResponsesFinishReason(incomplete.Response.IncompleteDetails.Reason, hasFunctionCall) usage = responsesUsage(incomplete.Response) + case "response.failed": + failed := event.AsResponseFailed() + if !yield(fantasy.ObjectStreamPart{ + Type: fantasy.ObjectStreamPartTypeError, + Error: responsesFailedStreamError(failed.Response.Error.Message, string(failed.Response.Error.Code)), + }) { + return + } + return + case "error": errorEvent := event.AsError() - streamErr = fmt.Errorf("response error: %s (code: %s)", errorEvent.Message, errorEvent.Code) if !yield(fantasy.ObjectStreamPart{ Type: fantasy.ObjectStreamPartTypeError, - Error: streamErr, + Error: responsesErrorStreamError(errorEvent.Message, errorEvent.Code), }) { return } @@ -1598,7 +1644,7 @@ func (o responsesLanguageModel) streamObjectWithJSONMode(ctx context.Context, ca } err := stream.Err() - if err != nil { + if err != nil && !errors.Is(err, io.EOF) { yield(fantasy.ObjectStreamPart{ Type: fantasy.ObjectStreamPartTypeError, Error: toProviderErr(err), @@ -1606,15 +1652,27 @@ func (o responsesLanguageModel) streamObjectWithJSONMode(ctx context.Context, ca return } + if !sawTerminalEvent { + err := ctx.Err() + if err == nil { + err = fantasy.NewIncompleteStreamError() + } + yield(fantasy.ObjectStreamPart{ + Type: fantasy.ObjectStreamPartTypeError, + Error: err, + }) + return + } + // Final validation and emit - if streamErr == nil && lastParsedObject != nil { + if lastParsedObject != nil { yield(fantasy.ObjectStreamPart{ Type: fantasy.ObjectStreamPartTypeFinish, Usage: usage, FinishReason: finishReason, ProviderMetadata: responsesProviderMetadata(responseID), }) - } else if streamErr == nil && lastParsedObject == nil { + } else { // No object was generated yield(fantasy.ObjectStreamPart{ Type: fantasy.ObjectStreamPartTypeError, From 9aa7447fdbe8fb60eeaa1fe76685dc2eeba6937f Mon Sep 17 00:00:00 2001 From: Ethan Date: Thu, 21 May 2026 00:38:18 +1000 Subject: [PATCH 59/82] fix(anthropic): require message_stop before finishing stream (#245) --- providers/anthropic/anthropic.go | 54 +++++++----- providers/anthropic/anthropic_test.go | 116 +++++++++++++++++++++++++- 2 files changed, 144 insertions(+), 26 deletions(-) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index f3aa6e829..eb5b735e7 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -1347,6 +1347,8 @@ func (a languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S } } + sawMessageStop := false + for stream.Next() { chunk := stream.Current() _ = acc.Accumulate(chunk) @@ -1552,41 +1554,47 @@ func (a languageModel) Stream(ctx context.Context, call fantasy.Call) (fantasy.S } } case "message_stop": + sawMessageStop = true } } err := stream.Err() - if err == nil || errors.Is(err, io.EOF) { - // Truncated stream: no terminal message_delta with stop_reason. - // Surface as a retryable error. - if acc.StopReason == "" { - yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeError, - Error: fantasy.NewIncompleteStreamError(), - }) - return - } + if err != nil && !errors.Is(err, io.EOF) { yield(fantasy.StreamPart{ - Type: fantasy.StreamPartTypeFinish, - ID: acc.ID, - FinishReason: mapFinishReason(string(acc.StopReason)), - Usage: fantasy.Usage{ - InputTokens: acc.Usage.InputTokens, - OutputTokens: acc.Usage.OutputTokens, - TotalTokens: acc.Usage.InputTokens + acc.Usage.OutputTokens, - CacheCreationTokens: acc.Usage.CacheCreationInputTokens, - CacheReadTokens: acc.Usage.CacheReadInputTokens, - }, - ProviderMetadata: fantasy.ProviderMetadata{}, + Type: fantasy.StreamPartTypeError, + Error: toProviderErr(err), }) return - } else { //nolint: revive + } + + // Anthropic's SSE protocol reports the stop_reason in message_delta + // and then terminates the message with message_stop. Require both so + // a socket close after only one of those signals is retried. + if !sawMessageStop || acc.StopReason == "" { + err := ctx.Err() + if err == nil { + err = fantasy.NewIncompleteStreamError() + } yield(fantasy.StreamPart{ Type: fantasy.StreamPartTypeError, - Error: toProviderErr(err), + Error: err, }) return } + + yield(fantasy.StreamPart{ + Type: fantasy.StreamPartTypeFinish, + ID: acc.ID, + FinishReason: mapFinishReason(string(acc.StopReason)), + Usage: fantasy.Usage{ + InputTokens: acc.Usage.InputTokens, + OutputTokens: acc.Usage.OutputTokens, + TotalTokens: acc.Usage.InputTokens + acc.Usage.OutputTokens, + CacheCreationTokens: acc.Usage.CacheCreationInputTokens, + CacheReadTokens: acc.Usage.CacheReadInputTokens, + }, + ProviderMetadata: fantasy.ProviderMetadata{}, + }) }, nil } diff --git a/providers/anthropic/anthropic_test.go b/providers/anthropic/anthropic_test.go index 880bd528b..9d8af299d 100644 --- a/providers/anthropic/anthropic_test.go +++ b/providers/anthropic/anthropic_test.go @@ -600,6 +600,113 @@ func TestStream_SendsOutputConfigEffort(t *testing.T) { requireAnthropicEffort(t, call.body, EffortHigh) } +func TestStream_RequiresMessageStopBeforeFinish(t *testing.T) { + t.Parallel() + + completeTextStream := []string{ + anthropicSSEEvent("message_start", `{"type":"message_start","message":{"id":"msg_complete","type":"message","role":"assistant","model":"claude-sonnet-4-20250514","content":[],"stop_reason":null,"usage":{"input_tokens":1,"output_tokens":0}}}`), + anthropicSSEEvent("content_block_start", `{"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}`), + anthropicSSEEvent("content_block_delta", `{"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"hello"}}`), + anthropicSSEEvent("content_block_stop", `{"type":"content_block_stop","index":0}`), + anthropicSSEEvent("message_delta", `{"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":1}}`), + anthropicSSEEvent("message_stop", `{"type":"message_stop"}`), + } + + missingStopReasonStream := append([]string(nil), completeTextStream[:len(completeTextStream)-2]...) + missingStopReasonStream = append(missingStopReasonStream, completeTextStream[len(completeTextStream)-1]) + + tests := []struct { + name string + chunks []string + wantFinish bool + wantRetryable bool + wantErrContain string + }{ + { + name: "complete stream finishes", + chunks: completeTextStream, + wantFinish: true, + }, + { + name: "message_stop without stop_reason errors", + chunks: missingStopReasonStream, + wantRetryable: true, + }, + { + name: "text stream closed before message_stop errors", + chunks: completeTextStream[:len(completeTextStream)-1], + wantRetryable: true, + }, + { + name: "provider error event is preserved", + chunks: []string{ + anthropicSSEEvent("error", `{"type":"error","error":{"type":"api_error","message":"stream down"}}`), + }, + wantErrContain: "stream down", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + server, calls := newAnthropicStreamingServer(tt.chunks) + defer server.Close() + + provider, err := New( + WithAPIKey("test-api-key"), + WithBaseURL(server.URL), + ) + require.NoError(t, err) + + model, err := provider.LanguageModel(context.Background(), "claude-sonnet-4-20250514") + require.NoError(t, err) + + stream, err := model.Stream(context.Background(), fantasy.Call{Prompt: testPrompt()}) + require.NoError(t, err) + + parts := collectAnthropicStreamParts(stream) + _ = awaitAnthropicCall(t, calls) + + var finishes, errorParts []fantasy.StreamPart + for _, part := range parts { + switch part.Type { + case fantasy.StreamPartTypeFinish: + finishes = append(finishes, part) + case fantasy.StreamPartTypeError: + errorParts = append(errorParts, part) + } + } + + if tt.wantFinish { + require.Len(t, finishes, 1) + require.Empty(t, errorParts) + return + } + + require.Empty(t, finishes) + require.Len(t, errorParts, 1) + require.Error(t, errorParts[0].Error) + if tt.wantErrContain != "" { + require.Contains(t, errorParts[0].Error.Error(), tt.wantErrContain) + } + + var providerErr *fantasy.ProviderError + if tt.wantRetryable { + require.ErrorAs(t, errorParts[0].Error, &providerErr) + require.True(t, providerErr.IsRetryable()) + require.ErrorIs(t, providerErr.Cause, io.ErrUnexpectedEOF) + } else { + require.NotErrorIs(t, errorParts[0].Error, io.ErrUnexpectedEOF) + if errors.As(errorParts[0].Error, &providerErr) { + require.False(t, providerErr.IsRetryable()) + require.NotErrorIs(t, providerErr.Cause, io.ErrUnexpectedEOF) + } + } + }) + } +} + type anthropicCall struct { method string path string @@ -1125,7 +1232,8 @@ func TestGenerate_WebSearchResponse(t *testing.T) { // TextContent with the final answer. require.Len(t, texts, 1) - require.Equal(t, + require.Equal( + t, "Based on recent search results, here is the latest AI news.", texts[0].Text, ) @@ -2587,7 +2695,8 @@ func TestGenerate_ComputerUseTool(t *testing.T) { // Build the next prompt: append the assistant tool-call turn // and the user screenshot-result turn. - prompt = append(prompt, + prompt = append( + prompt, fantasy.Message{ Role: fantasy.MessageRoleAssistant, Content: []fantasy.MessagePart{ @@ -2767,7 +2876,8 @@ func TestStream_ComputerUseTool(t *testing.T) { require.NoError(t, err, "turn %d", turn) gotActions = append(gotActions, parsed.Action) - prompt = append(prompt, + prompt = append( + prompt, fantasy.Message{ Role: fantasy.MessageRoleAssistant, Content: []fantasy.MessagePart{ From 98dc56e6308df085841ce8a6885b0bfa2a84da8d Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Wed, 20 May 2026 11:39:24 -0300 Subject: [PATCH 60/82] v0.25.1 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index d21d277be..af2dabf3f 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.25.0 +0.25.1 From c8d4eb207c97e11d623824c1a711111d63eb1a74 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 21 May 2026 14:49:12 -0300 Subject: [PATCH 61/82] chore: add `.helix/ignore` --- .helix/ignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .helix/ignore diff --git a/.helix/ignore b/.helix/ignore new file mode 100644 index 000000000..793b6caf2 --- /dev/null +++ b/.helix/ignore @@ -0,0 +1 @@ +providertests/testdata From 1b525a18dbc5e267ac254262a80f7d16e99dee4f Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Fri, 22 May 2026 15:18:33 -0300 Subject: [PATCH 62/82] fix(bedrock): enforce `us-east-1` as region for bedrock (#248) As I understand, this is the only region with access to all models. Having a fixed region should aviod confusion as some users might have `AWS_REGION` or `AWS_DEFAULT_REGION` set, but other regions won't really work. * Catwalk PR: https://github.com/charmbracelet/catwalk/pull/289 * Crush PR: https://github.com/charmbracelet/crush/pull/2985 * Closes #189 --- providers/anthropic/anthropic.go | 2 -- providers/anthropic/bedrock.go | 18 +----------------- providertests/bedrock_test.go | 8 ++++---- 3 files changed, 5 insertions(+), 23 deletions(-) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index eb5b735e7..abf5ee831 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -223,8 +223,6 @@ func (a *provider) LanguageModel(ctx context.Context, modelID string) (fantasy.L ) } if a.options.useBedrock { - modelID = bedrockPrefixModelWithRegion(modelID) - if a.options.skipAuth || a.options.apiKey != "" { clientOptions = append( clientOptions, diff --git a/providers/anthropic/bedrock.go b/providers/anthropic/bedrock.go index 8d9b94959..0d0483869 100644 --- a/providers/anthropic/bedrock.go +++ b/providers/anthropic/bedrock.go @@ -1,29 +1,13 @@ package anthropic import ( - "cmp" - "os" - "strings" - "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/smithy-go/auth/bearer" ) func bedrockBasicAuthConfig(apiKey string) aws.Config { return aws.Config{ - Region: cmp.Or(os.Getenv("AWS_REGION"), "us-east-1"), + Region: "us-east-1", BearerAuthTokenProvider: bearer.StaticTokenProvider{Token: bearer.Token{Value: apiKey}}, } } - -func bedrockPrefixModelWithRegion(modelID string) string { - region := os.Getenv("AWS_REGION") - if len(region) < 2 { - region = "us-east-1" - } - prefix := region[:2] + "." - if strings.HasPrefix(modelID, prefix) { - return modelID - } - return prefix + modelID -} diff --git a/providertests/bedrock_test.go b/providertests/bedrock_test.go index 382201ea0..f8b9b339f 100644 --- a/providertests/bedrock_test.go +++ b/providertests/bedrock_test.go @@ -30,7 +30,7 @@ func builderBedrockClaudeSonnet(t *testing.T, r *vcr.Recorder) (fantasy.Language if err != nil { return nil, err } - return provider.LanguageModel(t.Context(), "anthropic.claude-sonnet-4-5-20250929-v1:0") + return provider.LanguageModel(t.Context(), "us.anthropic.claude-sonnet-4-5-20250929-v1:0") } func builderBedrockClaudeOpus(t *testing.T, r *vcr.Recorder) (fantasy.LanguageModel, error) { @@ -41,7 +41,7 @@ func builderBedrockClaudeOpus(t *testing.T, r *vcr.Recorder) (fantasy.LanguageMo if err != nil { return nil, err } - return provider.LanguageModel(t.Context(), "anthropic.claude-opus-4-6-v1") + return provider.LanguageModel(t.Context(), "us.anthropic.claude-opus-4-6-v1") } func builderBedrockClaudeHaiku(t *testing.T, r *vcr.Recorder) (fantasy.LanguageModel, error) { @@ -52,7 +52,7 @@ func builderBedrockClaudeHaiku(t *testing.T, r *vcr.Recorder) (fantasy.LanguageM if err != nil { return nil, err } - return provider.LanguageModel(t.Context(), "anthropic.claude-haiku-4-5-20251001-v1:0") + return provider.LanguageModel(t.Context(), "us.anthropic.claude-haiku-4-5-20251001-v1:0") } func buildersBedrockBasicAuth(t *testing.T, r *vcr.Recorder) (fantasy.LanguageModel, error) { @@ -64,5 +64,5 @@ func buildersBedrockBasicAuth(t *testing.T, r *vcr.Recorder) (fantasy.LanguageMo if err != nil { return nil, err } - return provider.LanguageModel(t.Context(), "anthropic.claude-haiku-4-5-20251001-v1:0") + return provider.LanguageModel(t.Context(), "us.anthropic.claude-haiku-4-5-20251001-v1:0") } From 2569fb6b1ee31bb3dd911a06a3f5b279f65b177d Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Fri, 22 May 2026 15:19:01 -0300 Subject: [PATCH 63/82] ci: fix govulncheck --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 7f2526e5a..f9d2bd059 100644 --- a/go.mod +++ b/go.mod @@ -112,9 +112,9 @@ require ( go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect golang.org/x/crypto v0.51.0 // indirect - golang.org/x/net v0.54.0 // indirect + golang.org/x/net v0.55.0 // indirect golang.org/x/sync v0.20.0 // indirect - golang.org/x/sys v0.44.0 // indirect + golang.org/x/sys v0.45.0 // indirect golang.org/x/text v0.37.0 // indirect golang.org/x/time v0.15.0 // indirect google.golang.org/api v0.279.0 // indirect diff --git a/go.sum b/go.sum index 8683e9d4d..aec3d255a 100644 --- a/go.sum +++ b/go.sum @@ -249,14 +249,14 @@ go.yaml.in/yaml/v4 v4.0.0-rc.3 h1:3h1fjsh1CTAPjW7q/EMe+C8shx5d8ctzZTrLcs/j8Go= go.yaml.in/yaml/v4 v4.0.0-rc.3/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= -golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= -golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= +golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= +golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= -golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= From dcabfc5e7dd8537fbd5e0f0d6b92550de8cf421c Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Fri, 22 May 2026 15:24:38 -0300 Subject: [PATCH 64/82] v0.25.2 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index af2dabf3f..166c9e29b 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.25.1 +0.25.2 From 470094b54aaf91a12f47b73172f1283bd6711c84 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 May 2026 13:36:30 +0000 Subject: [PATCH 65/82] chore(deps): bump the all group with 2 updates (#250) Bumps the all group with 2 updates: [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) and [google.golang.org/genai](https://github.com/googleapis/go-genai). Updates `github.com/aws/aws-sdk-go-v2/config` from 1.32.17 to 1.32.18 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.32.17...config/v1.32.18) Updates `google.golang.org/genai` from 1.57.0 to 1.58.0 - [Release notes](https://github.com/googleapis/go-genai/releases) - [Changelog](https://github.com/googleapis/go-genai/blob/main/CHANGELOG.md) - [Commits](https://github.com/googleapis/go-genai/compare/v1.57.0...v1.58.0) --- updated-dependencies: - dependency-name: github.com/aws/aws-sdk-go-v2/config dependency-version: 1.32.18 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all - dependency-name: google.golang.org/genai dependency-version: 1.58.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: all ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index f9d2bd059..5aae9adeb 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( cloud.google.com/go/auth v0.20.0 github.com/ardanlabs/kronk v1.25.8 github.com/aws/aws-sdk-go-v2 v1.41.7 - github.com/aws/aws-sdk-go-v2/config v1.32.17 + github.com/aws/aws-sdk-go-v2/config v1.32.18 github.com/aws/smithy-go v1.25.1 github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 @@ -20,7 +20,7 @@ require ( github.com/kaptinlin/jsonschema v0.7.14 github.com/stretchr/testify v1.11.1 golang.org/x/oauth2 v0.36.0 - google.golang.org/genai v1.57.0 + google.golang.org/genai v1.58.0 ) require ( @@ -38,7 +38,7 @@ require ( github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 // indirect github.com/ardanlabs/jinja v1.4.0 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.19.16 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.17 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23 // indirect @@ -50,7 +50,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/s3 v1.101.0 // indirect github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.0 // indirect github.com/aws/aws-sdk-go-v2/service/sts v1.42.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect diff --git a/go.sum b/go.sum index aec3d255a..de2951ccf 100644 --- a/go.sum +++ b/go.sum @@ -46,10 +46,10 @@ github.com/aws/aws-sdk-go-v2 v1.41.7 h1:DWpAJt66FmnnaRIOT/8ASTucrvuDPZASqhhLey6t github.com/aws/aws-sdk-go-v2 v1.41.7/go.mod h1:4LAfZOPHNVNQEckOACQx60Y8pSRjIkNZQz1w92xpMJc= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 h1:gx1AwW1Iyk9Z9dD9F4akX5gnN3QZwUB20GGKH/I+Rho= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10/go.mod h1:qqY157uZoqm5OXq/amuaBJyC9hgBCBQnsaWnPe905GY= -github.com/aws/aws-sdk-go-v2/config v1.32.17 h1:FpL4/758/diKwqbytU0prpuiu60fgXKUWCpDJtApclU= -github.com/aws/aws-sdk-go-v2/config v1.32.17/go.mod h1:OXqUMzgXytfoF9JaKkhrOYsyh72t9G+MJH8mMRaexOE= -github.com/aws/aws-sdk-go-v2/credentials v1.19.16 h1:r3RJBuU7X9ibt8RHbMjWE6y60QbKBiII6wSrXnapxSU= -github.com/aws/aws-sdk-go-v2/credentials v1.19.16/go.mod h1:6cx7zqDENJDbBIIWX6P8s0h6hqHC8Avbjh9Dseo27ug= +github.com/aws/aws-sdk-go-v2/config v1.32.18 h1:Hcia46bxhGgF3BaSnG8nSNCWmqTK6bj9xN9/FJ3WK6Q= +github.com/aws/aws-sdk-go-v2/config v1.32.18/go.mod h1:zEjCAYmxqDadH1WX8CdBvmLKhUEUVFgKRQG38zjDmrY= +github.com/aws/aws-sdk-go-v2/credentials v1.19.17 h1:gP2nkGsS+KMvF/jfFz2Vv2qiiOqWKyPACSzPsqHgoW8= +github.com/aws/aws-sdk-go-v2/credentials v1.19.17/go.mod h1:Bsew3S/moG5iT77giPj1q8wb/s0RE5/QfH+ASjYtuQc= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 h1:UuSfcORqNSz/ey3VPRS8TcVH2Ikf0/sC+Hdj400QI6U= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23/go.mod h1:+G/OSGiOFnSOkYloKj/9M35s74LgVAdJBSD5lsFfqKg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23 h1:GpT/TrnBYuE5gan2cZbTtvP+JlHsutdmlV2YfEyNde0= @@ -72,8 +72,8 @@ github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 h1:TdJ+HdzOBhU8+iVAOGUTU63VX github.com/aws/aws-sdk-go-v2/service/signin v1.0.11/go.mod h1:R82ZRExE/nheo0N+T8zHPcLRTcH8MGsnR3BiVGX0TwI= github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 h1:7byT8HUWrgoRp6sXjxtZwgOKfhss5fW6SkLBtqzgRoE= github.com/aws/aws-sdk-go-v2/service/sso v1.30.17/go.mod h1:xNWknVi4Ezm1vg1QsB/5EWpAJURq22uqd38U8qKvOJc= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21 h1:+1Kl1zx6bWi4X7cKi3VYh29h8BvsCoHQEQ6ST9X8w7w= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.21/go.mod h1:4vIRDq+CJB2xFAXZ+YgGUTiEft7oAQlhIs71xcSeuVg= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.0 h1:nDARhv/oF55bcxF7rCI/4PDxOKnVXVWwDuDwCs2I2SQ= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.0/go.mod h1:4vIRDq+CJB2xFAXZ+YgGUTiEft7oAQlhIs71xcSeuVg= github.com/aws/aws-sdk-go-v2/service/sts v1.42.1 h1:F/M5Y9I3nwr2IEpshZgh1GeHpOItExNM9L1euNuh/fk= github.com/aws/aws-sdk-go-v2/service/sts v1.42.1/go.mod h1:mTNxImtovCOEEuD65mKW7DCsL+2gjEH+RPEAexAzAio= github.com/aws/smithy-go v1.25.1 h1:J8ERsGSU7d+aCmdQur5Txg6bVoYelvQJgtZehD12GkI= @@ -265,8 +265,8 @@ gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= google.golang.org/api v0.279.0 h1:hsx2M2OaRcaKtVYK6vXEUnQvdjnend7ZYES+lYaot74= google.golang.org/api v0.279.0/go.mod h1:B9TqLBwJqVjp1mtt7WeoQwWRwvu/400y5lETOql+giQ= -google.golang.org/genai v1.57.0 h1:qTyG2ynz5dQy2jF4CvZdLHHVslhR0heMue+zM1a4GNM= -google.golang.org/genai v1.57.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= +google.golang.org/genai v1.58.0 h1:MNA3ZkRyr7MnRwZ9RNZ60p4+UMKV3yYRw6pyHq4pp0U= +google.golang.org/genai v1.58.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= google.golang.org/genproto v0.0.0-20260511170946-3700d4141b60 h1:rhBdfmsOlOZIvz3Y5/BdUzPg2CkO8L7QQPKj96B8554= google.golang.org/genproto v0.0.0-20260511170946-3700d4141b60/go.mod h1:8xo2Pj1b20ZOCpzlU3B9qieMwVIAXx1QVZWLMlPL6sM= google.golang.org/genproto/googleapis/api v0.0.0-20260511170946-3700d4141b60 h1:3WsB1FAbiRIf2tOxscWKs3pQBD9he1NsrnbhMuWfekc= From e519b1bf1862c732581d7246dc8086b13c94b343 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 May 2026 13:43:33 +0000 Subject: [PATCH 66/82] chore(deps): bump github.com/ardanlabs/kronk (#251) Bumps the kronk group with 1 update in the / directory: [github.com/ardanlabs/kronk](https://github.com/ardanlabs/kronk). Updates `github.com/ardanlabs/kronk` from 1.25.8 to 1.26.1 - [Release notes](https://github.com/ardanlabs/kronk/releases) - [Commits](https://github.com/ardanlabs/kronk/compare/v1.25.8...v1.26.1) --- updated-dependencies: - dependency-name: github.com/ardanlabs/kronk dependency-version: 1.26.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: kronk ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 18 +++++++++--------- go.sum | 40 ++++++++++++++++++++-------------------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/go.mod b/go.mod index 5aae9adeb..a8f755a0a 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.26.3 require ( charm.land/x/vcr v0.1.1 cloud.google.com/go/auth v0.20.0 - github.com/ardanlabs/kronk v1.25.8 + github.com/ardanlabs/kronk v1.26.1 github.com/aws/aws-sdk-go-v2 v1.41.7 github.com/aws/aws-sdk-go-v2/config v1.32.18 github.com/aws/smithy-go v1.25.1 @@ -30,7 +30,7 @@ require ( cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.11.0 // indirect cloud.google.com/go/monitoring v1.29.0 // indirect - cloud.google.com/go/storage v1.62.1 // indirect + cloud.google.com/go/storage v1.62.2 // indirect github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.32.0 // indirect @@ -69,7 +69,7 @@ require ( github.com/goccy/go-yaml v1.19.2 // indirect github.com/google/go-cmp v0.7.0 // indirect github.com/google/s2a-go v0.1.9 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.15 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.16 // indirect github.com/googleapis/gax-go/v2 v2.22.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 // indirect @@ -77,7 +77,7 @@ require ( github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.8.6 // indirect github.com/hashicorp/go-version v1.9.0 // indirect - github.com/hybridgroup/yzma v1.14.0 // indirect + github.com/hybridgroup/yzma v1.14.1 // indirect github.com/jupiterrider/ffi v0.7.0 // indirect github.com/kaptinlin/go-i18n v0.4.8 // indirect github.com/kaptinlin/jsonpointer v0.4.23 // indirect @@ -111,16 +111,16 @@ require ( go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect - golang.org/x/crypto v0.51.0 // indirect + golang.org/x/crypto v0.52.0 // indirect golang.org/x/net v0.55.0 // indirect golang.org/x/sync v0.20.0 // indirect golang.org/x/sys v0.45.0 // indirect golang.org/x/text v0.37.0 // indirect golang.org/x/time v0.15.0 // indirect - google.golang.org/api v0.279.0 // indirect - google.golang.org/genproto v0.0.0-20260511170946-3700d4141b60 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260511170946-3700d4141b60 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260511170946-3700d4141b60 // indirect + google.golang.org/api v0.280.0 // indirect + google.golang.org/genproto v0.0.0-20260523011958-0a33c5d7ca68 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260523011958-0a33c5d7ca68 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260523011958-0a33c5d7ca68 // indirect google.golang.org/grpc v1.81.1 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect diff --git a/go.sum b/go.sum index de2951ccf..6cc2d55b1 100644 --- a/go.sum +++ b/go.sum @@ -14,12 +14,12 @@ cloud.google.com/go/iam v1.11.0 h1:KieQ9Pb+LLPak1O3Rv3GgCxhnmkYf7Xyh0P5HfF1jFM= cloud.google.com/go/iam v1.11.0/go.mod h1:KP+nKGugNJW4LcLx1uEZcq1ok5sQHFaQehQNl4QDgV4= cloud.google.com/go/logging v1.18.0 h1:KhzZq+1cSkPH9YUaKLLhLtQxIHitVayBmk0sGfoM9+k= cloud.google.com/go/logging v1.18.0/go.mod h1:ZGKnpBaURITh+g/uom2VhbiFoFWvejcrHPDhxFtU/gI= -cloud.google.com/go/longrunning v0.13.0 h1:dUfqF8y0bHOeZzF5+tKPZ6RBCeEEDOejvwGwENv/eEc= -cloud.google.com/go/longrunning v0.13.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= +cloud.google.com/go/longrunning v1.0.0 h1:lwzWEYD8+NkYV7dhexOz6kmlvajZA70+bW/xMhRVVdY= +cloud.google.com/go/longrunning v1.0.0/go.mod h1:8nqFBPOO1U/XkhWl0I19AMZEphrHi73VNABIpKYaTwM= cloud.google.com/go/monitoring v1.29.0 h1:AHhDsFaSax1/4k+qlIDX/SDGe6hggnfXJ9dkgD9qBPY= cloud.google.com/go/monitoring v1.29.0/go.mod h1:72NOVjJXHY/HBfoLT0+qlCZBT059+9VXLeAnL2PeeVM= -cloud.google.com/go/storage v1.62.1 h1:Os0G3XbUbjZumkpDUf2Y0rLoXJTCF1kU2kWUujKYXD8= -cloud.google.com/go/storage v1.62.1/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= +cloud.google.com/go/storage v1.62.2 h1:WgR4U9n7bIzXkkVnwPKKE8bkaKUNsHG+0MAAlh9DGU4= +cloud.google.com/go/storage v1.62.2/go.mod h1:cpYz/kRVZ+UQAF1uHeea10/9ewcRbxGoGNKsS9daSXA= cloud.google.com/go/trace v1.16.0 h1:GmQovzFc5F0CNfl0VLgL64aoTtu7xsM0YajW2GlG9+E= cloud.google.com/go/trace v1.16.0/go.mod h1:r+bdAn16dKLSV1G2D5v3e58IlQlizfxWrUfjx7kM7X0= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ= @@ -40,8 +40,8 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapp github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= github.com/ardanlabs/jinja v1.4.0 h1:9iE0/wF4zhcws1CYZCWqJTQP8YuhC4FjycBGzCTuOFw= github.com/ardanlabs/jinja v1.4.0/go.mod h1:aXXzlJfjA+T3XNKA/YT5ZtDq2VJxt5a5siZ8cl9B35Q= -github.com/ardanlabs/kronk v1.25.8 h1:m00XchkmanD8LsF1+hW5fE/+6qKgND8LQvdO0M3xwJo= -github.com/ardanlabs/kronk v1.25.8/go.mod h1:lRIUsMXaLFJ0rFniYthW+kpqXWVcr+LnFoyf5LU9JHQ= +github.com/ardanlabs/kronk v1.26.1 h1:6do/vQZDSB8plsuzwbMyotZNBRmcMSsNsxmmlURCEzQ= +github.com/ardanlabs/kronk v1.26.1/go.mod h1:b4DnbGJ7Y7cUOgUgVBKfU2JTxmRm6PotkqdjisNsep0= github.com/aws/aws-sdk-go-v2 v1.41.7 h1:DWpAJt66FmnnaRIOT/8ASTucrvuDPZASqhhLey6tLY8= github.com/aws/aws-sdk-go-v2 v1.41.7/go.mod h1:4LAfZOPHNVNQEckOACQx60Y8pSRjIkNZQz1w92xpMJc= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 h1:gx1AwW1Iyk9Z9dD9F4akX5gnN3QZwUB20GGKH/I+Rho= @@ -139,8 +139,8 @@ github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.15 h1:xolVQTEXusUcAA5UgtyRLjelpFFHWlPQ4XfWGc7MBas= -github.com/googleapis/enterprise-certificate-proxy v0.3.15/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= +github.com/googleapis/enterprise-certificate-proxy v0.3.16 h1:F/VPrx0YPBdksZJQdCAp0WUsqnNmZpUZszzfYt0M5Dw= +github.com/googleapis/enterprise-certificate-proxy v0.3.16/go.mod h1:9Yb0eAkH/Xqhvv3zbeKf/+wMJqCeocWc6KIhDvEAuYE= github.com/googleapis/gax-go/v2 v2.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4= github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= @@ -155,8 +155,8 @@ github.com/hashicorp/go-getter v1.8.6 h1:9sQboWULaydVphxc4S64oAI4YqpuCk7nPmvbk13 github.com/hashicorp/go-getter v1.8.6/go.mod h1:nVH12eOV2P58dIiL3rsU6Fh3wLeJEKBOJzhMmzlSWoo= github.com/hashicorp/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA= github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hybridgroup/yzma v1.14.0 h1:40G9wxRG356mqLsIMBWCzJnksxIIVm+cCtdXVMe0Rdw= -github.com/hybridgroup/yzma v1.14.0/go.mod h1:DAsHYcX7ze7iFZH6PT57oCuqaVd/AXdALhjnOSgWbaE= +github.com/hybridgroup/yzma v1.14.1 h1:EMSy9ONR8WMljsWwKLDt8gEYJPOEyxZkBtCHxNWxOjQ= +github.com/hybridgroup/yzma v1.14.1/go.mod h1:DAsHYcX7ze7iFZH6PT57oCuqaVd/AXdALhjnOSgWbaE= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jupiterrider/ffi v0.7.0 h1:RKsl6Ascal+3kyAqR5Qcbp83LceQMLc1VZbPfHWoNzs= @@ -247,8 +247,8 @@ go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= go.yaml.in/yaml/v4 v4.0.0-rc.3 h1:3h1fjsh1CTAPjW7q/EMe+C8shx5d8ctzZTrLcs/j8Go= go.yaml.in/yaml/v4 v4.0.0-rc.3/go.mod h1:aZqd9kCMsGL7AuUv/m/PvWLdg5sjJsZ4oHDEnfPPfY0= -golang.org/x/crypto v0.51.0 h1:IBPXwPfKxY7cWQZ38ZCIRPI50YLeevDLlLnyC5wRGTI= -golang.org/x/crypto v0.51.0/go.mod h1:8AdwkbraGNABw2kOX6YFPs3WM22XqI4EXEd8g+x7Oc8= +golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= +golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= @@ -263,16 +263,16 @@ golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.279.0 h1:hsx2M2OaRcaKtVYK6vXEUnQvdjnend7ZYES+lYaot74= -google.golang.org/api v0.279.0/go.mod h1:B9TqLBwJqVjp1mtt7WeoQwWRwvu/400y5lETOql+giQ= +google.golang.org/api v0.280.0 h1:F4OfEHZhZh6a7uTufJAXXVd/2TQ8EjM4vZH+jX/vFYk= +google.golang.org/api v0.280.0/go.mod h1:oGKmPZRDoD3vdkf6MA7F4VNkR1rxCiuaPSkhsf3EolU= google.golang.org/genai v1.58.0 h1:MNA3ZkRyr7MnRwZ9RNZ60p4+UMKV3yYRw6pyHq4pp0U= google.golang.org/genai v1.58.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= -google.golang.org/genproto v0.0.0-20260511170946-3700d4141b60 h1:rhBdfmsOlOZIvz3Y5/BdUzPg2CkO8L7QQPKj96B8554= -google.golang.org/genproto v0.0.0-20260511170946-3700d4141b60/go.mod h1:8xo2Pj1b20ZOCpzlU3B9qieMwVIAXx1QVZWLMlPL6sM= -google.golang.org/genproto/googleapis/api v0.0.0-20260511170946-3700d4141b60 h1:3WsB1FAbiRIf2tOxscWKs3pQBD9he1NsrnbhMuWfekc= -google.golang.org/genproto/googleapis/api v0.0.0-20260511170946-3700d4141b60/go.mod h1:7yoXV7RIh5gblj/xVYoogxAWvA9wUeVbpsK/M694l00= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260511170946-3700d4141b60 h1:seT2EwLWM78plQ7wcDfuWBc/4FAEAXDDiaSol4ku4qo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260511170946-3700d4141b60/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto v0.0.0-20260523011958-0a33c5d7ca68 h1:cTHF8xtqtBN5sQ4dcoNwOS6FFejvFTkWQbZXsTU3trM= +google.golang.org/genproto v0.0.0-20260523011958-0a33c5d7ca68/go.mod h1:RRHjglSYABVCWpQ7USCpdfhcd9t4PkajvVwyynZizTc= +google.golang.org/genproto/googleapis/api v0.0.0-20260523011958-0a33c5d7ca68 h1:WVVw1Nl19li0fMX++FJ3ye1z9+S1N35QODDy5qpnaXw= +google.golang.org/genproto/googleapis/api v0.0.0-20260523011958-0a33c5d7ca68/go.mod h1:1dCETSCY2YKZNXQE3h4fun3TYwF5p8jejRKZgfWAgAY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260523011958-0a33c5d7ca68 h1:PvEgGJf9C/1u5CHkInMg7UFYYUoiaQmW2LbtH0pjB78= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260523011958-0a33c5d7ca68/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= From 75704eefefa56dd2a536c0b8e0e243ec15df6c76 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Tue, 26 May 2026 14:52:52 -0300 Subject: [PATCH 67/82] feat(bedrock): add WithRegion option to configure AWS region (#252) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allow users to specify a custom AWS region for Bedrock instead of defaulting to us-east-1, enabling support for EU and other regions. 💘 Generated with Crush Assisted-by: Crush:qwen3.7-max --- providers/anthropic/anthropic.go | 12 ++++++++++-- providers/anthropic/bedrock.go | 6 ++++-- providers/bedrock/bedrock.go | 7 +++++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index abf5ee831..e3e21b534 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -77,7 +77,8 @@ type options struct { vertexLocation string skipAuth bool - useBedrock bool + useBedrock bool + bedrockRegion string objectMode fantasy.ObjectMode } @@ -142,6 +143,13 @@ func WithBedrock() Option { } } +// WithBedrockRegion sets the AWS region for the Bedrock provider. +func WithBedrockRegion(region string) Option { + return func(o *options) { + o.bedrockRegion = region + } +} + // WithName sets the name for the Anthropic provider. func WithName(name string) Option { return func(o *options) { @@ -226,7 +234,7 @@ func (a *provider) LanguageModel(ctx context.Context, modelID string) (fantasy.L if a.options.skipAuth || a.options.apiKey != "" { clientOptions = append( clientOptions, - bedrock.WithConfig(bedrockBasicAuthConfig(a.options.apiKey)), + bedrock.WithConfig(bedrockBasicAuthConfig(a.options.apiKey, a.options.bedrockRegion)), ) } else { if cfg, err := config.LoadDefaultConfig(ctx); err == nil { diff --git a/providers/anthropic/bedrock.go b/providers/anthropic/bedrock.go index 0d0483869..b8ac35e6e 100644 --- a/providers/anthropic/bedrock.go +++ b/providers/anthropic/bedrock.go @@ -1,13 +1,15 @@ package anthropic import ( + "cmp" + "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/smithy-go/auth/bearer" ) -func bedrockBasicAuthConfig(apiKey string) aws.Config { +func bedrockBasicAuthConfig(apiKey string, region string) aws.Config { return aws.Config{ - Region: "us-east-1", + Region: cmp.Or(region, "us-east-1"), BearerAuthTokenProvider: bearer.StaticTokenProvider{Token: bearer.Token{Value: apiKey}}, } } diff --git a/providers/bedrock/bedrock.go b/providers/bedrock/bedrock.go index a430314e2..d3e0854e7 100644 --- a/providers/bedrock/bedrock.go +++ b/providers/bedrock/bedrock.go @@ -78,3 +78,10 @@ func WithSkipAuth(skipAuth bool) Option { o.skipAuth = skipAuth } } + +// WithRegion sets the AWS region for the Bedrock provider. +func WithRegion(region string) Option { + return func(o *options) { + o.anthropicOptions = append(o.anthropicOptions, anthropic.WithBedrockRegion(region)) + } +} From 412a0a5e26d2f955c3838a06a58a9c608dc243c5 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Tue, 26 May 2026 14:53:38 -0300 Subject: [PATCH 68/82] v0.26.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 166c9e29b..4e8f395fa 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.25.2 +0.26.0 From f4434d71709cc2d69cb129d8caa93b55e055daa1 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Tue, 26 May 2026 15:08:53 -0300 Subject: [PATCH 69/82] ci(labeler): do not use custom token --- .github/workflows/labeler.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml index afc6427ff..52935102d 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/labeler.yml @@ -14,6 +14,7 @@ on: permissions: issues: write + pull-requests: write contents: read jobs: @@ -26,5 +27,4 @@ jobs: enable-versioned-regex: 0 include-title: 1 include-body: 0 - repo-token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} issue-number: ${{ github.event.inputs.issue-number || github.event.issue.number || github.event.pull_request.number }} From 1327dc142cb261935cd2e3677e376d9a226c5787 Mon Sep 17 00:00:00 2001 From: Kieran Klukas Date: Thu, 28 May 2026 11:56:09 -0400 Subject: [PATCH 70/82] feat(errors): support ionet context length error --- providers/openai/error.go | 2 +- providers/openai/openai_test.go | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/providers/openai/error.go b/providers/openai/error.go index 5cbc76be0..1d31ba74f 100644 --- a/providers/openai/error.go +++ b/providers/openai/error.go @@ -13,7 +13,7 @@ import ( "github.com/charmbracelet/openai-go" ) -var openaiContextPattern = regexp.MustCompile(`maximum context length is (\d+) tokens.*?(?:resulted in|requested) (\d+) tokens`) +var openaiContextPattern = regexp.MustCompile(`maximum context length (?:is|of) (\d+) tokens.*?(?:resulted in|requested) ~?(\d+) tokens`) func toProviderErr(err error) error { var apiErr *openai.Error diff --git a/providers/openai/openai_test.go b/providers/openai/openai_test.go index 24f4a687c..ba4cef3fb 100644 --- a/providers/openai/openai_test.go +++ b/providers/openai/openai_test.go @@ -3664,6 +3664,13 @@ func TestParseContextTooLargeError(t *testing.T) { wantUsed: 10000, wantMax: 8192, }, + { + name: "matches ionet format with of and tilde", + message: "Your request exceeds this model's maximum context length of 204800 tokens. You requested ~269722 tokens (204186 input + 65536 output). Reduce your prompt length or max_tokens and retry.", + wantErr: true, + wantUsed: 269722, + wantMax: 204800, + }, { name: "does not match unrelated error", message: "invalid api key", From 22785dab6daac0c44809db62d3aba5c5f549b514 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 28 May 2026 17:57:09 -0300 Subject: [PATCH 71/82] fix(bedrock): apply region if given for aws config as well (#255) Before, it was only being applied for raw API keys. --- providers/anthropic/anthropic.go | 1 + 1 file changed, 1 insertion(+) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index e3e21b534..01e049358 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -238,6 +238,7 @@ func (a *provider) LanguageModel(ctx context.Context, modelID string) (fantasy.L ) } else { if cfg, err := config.LoadDefaultConfig(ctx); err == nil { + cfg.Region = cmp.Or(a.options.bedrockRegion, cfg.Region) clientOptions = append( clientOptions, bedrock.WithConfig(cfg), From da2032ff00f5994154e628f3bb7e755f7ee5f62b Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Thu, 28 May 2026 17:58:06 -0300 Subject: [PATCH 72/82] v0.27.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 4e8f395fa..1b58cc101 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.26.0 +0.27.0 From 55563e4ed1e27b2065e5bb728cb4557d6263dc45 Mon Sep 17 00:00:00 2001 From: Kieran Klukas Date: Thu, 28 May 2026 16:36:06 -0400 Subject: [PATCH 73/82] feat(errors): add proper context window errors for alibaba --- providers/openai/error.go | 18 ++++++++++++------ providers/openai/openai_test.go | 6 ++++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/providers/openai/error.go b/providers/openai/error.go index 1d31ba74f..873105f71 100644 --- a/providers/openai/error.go +++ b/providers/openai/error.go @@ -13,7 +13,10 @@ import ( "github.com/charmbracelet/openai-go" ) -var openaiContextPattern = regexp.MustCompile(`maximum context length (?:is|of) (\d+) tokens.*?(?:resulted in|requested) ~?(\d+) tokens`) +var ( + openaiContextPattern = regexp.MustCompile(`maximum context length (?:is|of) (\d+) tokens.*?(?:resulted in|requested) ~?(\d+) tokens`) + alibabaContextPattern = regexp.MustCompile(`Range of input length should be \[\d+,\s*(\d+)\]`) +) func toProviderErr(err error) error { var apiErr *openai.Error @@ -46,13 +49,16 @@ func toProviderErr(err error) error { } func parseContextTooLargeError(message string, providerErr *fantasy.ProviderError) { - matches := openaiContextPattern.FindStringSubmatch(message) - if matches == nil { + if matches := openaiContextPattern.FindStringSubmatch(message); matches != nil { + providerErr.ContextTooLargeErr = true + providerErr.ContextMaxTokens, _ = strconv.Atoi(matches[1]) + providerErr.ContextUsedTokens, _ = strconv.Atoi(matches[2]) return } - providerErr.ContextTooLargeErr = true - providerErr.ContextMaxTokens, _ = strconv.Atoi(matches[1]) - providerErr.ContextUsedTokens, _ = strconv.Atoi(matches[2]) + if matches := alibabaContextPattern.FindStringSubmatch(message); matches != nil { + providerErr.ContextTooLargeErr = true + providerErr.ContextMaxTokens, _ = strconv.Atoi(matches[1]) + } } func toProviderErrMessage(apiErr *openai.Error) string { diff --git a/providers/openai/openai_test.go b/providers/openai/openai_test.go index ba4cef3fb..17d4af015 100644 --- a/providers/openai/openai_test.go +++ b/providers/openai/openai_test.go @@ -3671,6 +3671,12 @@ func TestParseContextTooLargeError(t *testing.T) { wantUsed: 269722, wantMax: 204800, }, + { + name: "matches alibaba/qwen format", + message: "<400> InternalError.Algo.InvalidParameter: Range of input length should be [1, 245760]", + wantErr: true, + wantMax: 245760, + }, { name: "does not match unrelated error", message: "invalid api key", From 80572360055eedbcd25605f3b47369f8ab3f5f45 Mon Sep 17 00:00:00 2001 From: Kieran Klukas Date: Fri, 29 May 2026 13:26:31 -0400 Subject: [PATCH 74/82] v0.28.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 1b58cc101..697f087f3 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.27.0 +0.28.0 From 798593037331aae8391692894ee564d0bd70a8f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jun 2026 03:23:52 +0000 Subject: [PATCH 75/82] chore(deps): bump github.com/ardanlabs/kronk in the kronk group (#263) Bumps the kronk group with 1 update: [github.com/ardanlabs/kronk](https://github.com/ardanlabs/kronk). Updates `github.com/ardanlabs/kronk` from 1.26.1 to 1.26.6 - [Release notes](https://github.com/ardanlabs/kronk/releases) - [Commits](https://github.com/ardanlabs/kronk/compare/v1.26.1...v1.26.6) --- updated-dependencies: - dependency-name: github.com/ardanlabs/kronk dependency-version: 1.26.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: kronk ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 72 +++++++++++++-------------- go.sum | 150 +++++++++++++++++++++++++++++---------------------------- 2 files changed, 112 insertions(+), 110 deletions(-) diff --git a/go.mod b/go.mod index a8f755a0a..abc282d72 100644 --- a/go.mod +++ b/go.mod @@ -5,10 +5,10 @@ go 1.26.3 require ( charm.land/x/vcr v0.1.1 cloud.google.com/go/auth v0.20.0 - github.com/ardanlabs/kronk v1.26.1 - github.com/aws/aws-sdk-go-v2 v1.41.7 - github.com/aws/aws-sdk-go-v2/config v1.32.18 - github.com/aws/smithy-go v1.25.1 + github.com/ardanlabs/kronk v1.26.6 + github.com/aws/aws-sdk-go-v2 v1.41.9 + github.com/aws/aws-sdk-go-v2/config v1.32.20 + github.com/aws/smithy-go v1.26.0 github.com/charmbracelet/anthropic-sdk-go v0.0.0-20260223140439-63879b0b8dab github.com/charmbracelet/openai-go v0.0.0-20260319145158-d0740cc34266 github.com/charmbracelet/x/exp/slice v0.0.0-20250904123553-b4e2667e5ad5 @@ -37,28 +37,28 @@ require ( github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.56.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0 // indirect github.com/ardanlabs/jinja v1.4.0 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.19.17 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.15 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23 // indirect - github.com/aws/aws-sdk-go-v2/service/s3 v1.101.0 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.0 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.42.1 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.11 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.19 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.25 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.25 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.25 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.26 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.10 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.18 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.25 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.25 // indirect + github.com/aws/aws-sdk-go-v2/service/s3 v1.102.2 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.1.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.19 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.2 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.42.3 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/ebitengine/purego v0.10.0 // indirect + github.com/ebitengine/purego v0.10.1 // indirect github.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect @@ -73,7 +73,7 @@ require ( github.com/googleapis/gax-go/v2 v2.22.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 // indirect - github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 // indirect + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.73 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.8.6 // indirect github.com/hashicorp/go-version v1.9.0 // indirect @@ -89,7 +89,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect - github.com/prometheus/common v0.67.5 // indirect + github.com/prometheus/common v0.68.0 // indirect github.com/prometheus/procfs v0.20.1 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect github.com/tidwall/gjson v1.18.0 // indirect @@ -98,16 +98,16 @@ require ( github.com/tidwall/sjson v1.2.5 // indirect github.com/ulikunitz/xz v0.5.15 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.43.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 // indirect - go.opentelemetry.io/otel v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 // indirect - go.opentelemetry.io/otel/metric v1.43.0 // indirect - go.opentelemetry.io/otel/sdk v1.43.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect - go.opentelemetry.io/otel/trace v1.43.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.44.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 // indirect + go.opentelemetry.io/otel v1.44.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.44.0 // indirect + go.opentelemetry.io/otel/metric v1.44.0 // indirect + go.opentelemetry.io/otel/sdk v1.44.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.44.0 // indirect + go.opentelemetry.io/otel/trace v1.44.0 // indirect go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v4 v4.0.0-rc.3 // indirect @@ -117,10 +117,10 @@ require ( golang.org/x/sys v0.45.0 // indirect golang.org/x/text v0.37.0 // indirect golang.org/x/time v0.15.0 // indirect - google.golang.org/api v0.280.0 // indirect - google.golang.org/genproto v0.0.0-20260523011958-0a33c5d7ca68 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260523011958-0a33c5d7ca68 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260523011958-0a33c5d7ca68 // indirect + google.golang.org/api v0.282.0 // indirect + google.golang.org/genproto v0.0.0-20260526163538-3dc84a4a5aaa // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/grpc v1.81.1 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/dnaeon/go-vcr.v4 v4.0.6-0.20251110073552-01de4eb40290 // indirect diff --git a/go.sum b/go.sum index 6cc2d55b1..e31bc956b 100644 --- a/go.sum +++ b/go.sum @@ -40,44 +40,44 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapp github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.56.0/go.mod h1:6ZZMQhZKDvUvkJw2rc+oDP90tMMzuU/J+5HG1ZmPOmE= github.com/ardanlabs/jinja v1.4.0 h1:9iE0/wF4zhcws1CYZCWqJTQP8YuhC4FjycBGzCTuOFw= github.com/ardanlabs/jinja v1.4.0/go.mod h1:aXXzlJfjA+T3XNKA/YT5ZtDq2VJxt5a5siZ8cl9B35Q= -github.com/ardanlabs/kronk v1.26.1 h1:6do/vQZDSB8plsuzwbMyotZNBRmcMSsNsxmmlURCEzQ= -github.com/ardanlabs/kronk v1.26.1/go.mod h1:b4DnbGJ7Y7cUOgUgVBKfU2JTxmRm6PotkqdjisNsep0= -github.com/aws/aws-sdk-go-v2 v1.41.7 h1:DWpAJt66FmnnaRIOT/8ASTucrvuDPZASqhhLey6tLY8= -github.com/aws/aws-sdk-go-v2 v1.41.7/go.mod h1:4LAfZOPHNVNQEckOACQx60Y8pSRjIkNZQz1w92xpMJc= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10 h1:gx1AwW1Iyk9Z9dD9F4akX5gnN3QZwUB20GGKH/I+Rho= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.10/go.mod h1:qqY157uZoqm5OXq/amuaBJyC9hgBCBQnsaWnPe905GY= -github.com/aws/aws-sdk-go-v2/config v1.32.18 h1:Hcia46bxhGgF3BaSnG8nSNCWmqTK6bj9xN9/FJ3WK6Q= -github.com/aws/aws-sdk-go-v2/config v1.32.18/go.mod h1:zEjCAYmxqDadH1WX8CdBvmLKhUEUVFgKRQG38zjDmrY= -github.com/aws/aws-sdk-go-v2/credentials v1.19.17 h1:gP2nkGsS+KMvF/jfFz2Vv2qiiOqWKyPACSzPsqHgoW8= -github.com/aws/aws-sdk-go-v2/credentials v1.19.17/go.mod h1:Bsew3S/moG5iT77giPj1q8wb/s0RE5/QfH+ASjYtuQc= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23 h1:UuSfcORqNSz/ey3VPRS8TcVH2Ikf0/sC+Hdj400QI6U= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.23/go.mod h1:+G/OSGiOFnSOkYloKj/9M35s74LgVAdJBSD5lsFfqKg= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23 h1:GpT/TrnBYuE5gan2cZbTtvP+JlHsutdmlV2YfEyNde0= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.23/go.mod h1:xYWD6BS9ywC5bS3sz9Xh04whO/hzK2plt2Zkyrp4JuA= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23 h1:bpd8vxhlQi2r1hiueOw02f/duEPTMK59Q4QMAoTTtTo= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.23/go.mod h1:15DfR2nw+CRHIk0tqNyifu3G1YdAOy68RftkhMDDwYk= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24 h1:OQqn11BtaYv1WLUowvcA30MpzIu8Ti4pcLPIIyoKZrA= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.24/go.mod h1:X5ZJyfwVrWA96GzPmUCWFQaEARPR7gCrpq2E92PJwAE= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9 h1:FLudkZLt5ci0ozzgkVo8BJGwvqNaZbTWb3UcucAateA= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.9/go.mod h1:w7wZ/s9qK7c8g4al+UyoF1Sp/Z45UwMGcqIzLWVQHWk= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.15 h1:ieLCO1JxUWuxTZ1cRd0GAaeX7O6cIxnwk7tc1LsQhC4= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.15/go.mod h1:e3IzZvQ3kAWNykvE0Tr0RDZCMFInMvhku3qNpcIQXhM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23 h1:pbrxO/kuIwgEsOPLkaHu0O+m4fNgLU8B3vxQ+72jTPw= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.23/go.mod h1:/CMNUqoj46HpS3MNRDEDIwcgEnrtZlKRaHNaHxIFpNA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23 h1:03xatSQO4+AM1lTAbnRg5OK528EUg744nW7F73U8DKw= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.23/go.mod h1:M8l3mwgx5ToK7wot2sBBce/ojzgnPzZXUV445gTSyE8= -github.com/aws/aws-sdk-go-v2/service/s3 v1.101.0 h1:etqBTKY581iwLL/H/S2sVgk3C9lAsTJFeXWFDsDcWOU= -github.com/aws/aws-sdk-go-v2/service/s3 v1.101.0/go.mod h1:L2dcoOgS2VSgbPLvpak2NyUPsO1TBN7M45Z4H7DlRc4= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 h1:TdJ+HdzOBhU8+iVAOGUTU63VXopcumCOF1paFulHWZc= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.11/go.mod h1:R82ZRExE/nheo0N+T8zHPcLRTcH8MGsnR3BiVGX0TwI= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 h1:7byT8HUWrgoRp6sXjxtZwgOKfhss5fW6SkLBtqzgRoE= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.17/go.mod h1:xNWknVi4Ezm1vg1QsB/5EWpAJURq22uqd38U8qKvOJc= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.0 h1:nDARhv/oF55bcxF7rCI/4PDxOKnVXVWwDuDwCs2I2SQ= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.0/go.mod h1:4vIRDq+CJB2xFAXZ+YgGUTiEft7oAQlhIs71xcSeuVg= -github.com/aws/aws-sdk-go-v2/service/sts v1.42.1 h1:F/M5Y9I3nwr2IEpshZgh1GeHpOItExNM9L1euNuh/fk= -github.com/aws/aws-sdk-go-v2/service/sts v1.42.1/go.mod h1:mTNxImtovCOEEuD65mKW7DCsL+2gjEH+RPEAexAzAio= -github.com/aws/smithy-go v1.25.1 h1:J8ERsGSU7d+aCmdQur5Txg6bVoYelvQJgtZehD12GkI= -github.com/aws/smithy-go v1.25.1/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= +github.com/ardanlabs/kronk v1.26.6 h1:u4wlgPbdUrGBYp7ZjOVji9tiBnP2mYU05zY/Ca8GPR4= +github.com/ardanlabs/kronk v1.26.6/go.mod h1:yImFM7h+YvTMP4y7JJ837M1X02c+skeiTJ600F+V2tQ= +github.com/aws/aws-sdk-go-v2 v1.41.9 h1:/rYeyO2+HrMztAmxAq9++XJtFMqSIpSsNA0yDGALYq4= +github.com/aws/aws-sdk-go-v2 v1.41.9/go.mod h1:+HsoOEX80qAVUitj1A2DhCNTjmb3edVyuDypb6LNEeo= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.11 h1:h5+3VT69KUBK24grGuuA5saDJTj2IIjLb9au668Fo5I= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.11/go.mod h1:dnakxebH6UwFvcvujL0LVggYQ8nEvBGjU4G/V79Nv94= +github.com/aws/aws-sdk-go-v2/config v1.32.20 h1:8VMDnWc/kEzxsI/1ngGM9mG81a8IGmIHD8KLcYGwagc= +github.com/aws/aws-sdk-go-v2/config v1.32.20/go.mod h1:PuwEpciweIXGULWeOeSTXtSbH4CW9mWdWrhdCKQI1sM= +github.com/aws/aws-sdk-go-v2/credentials v1.19.19 h1:yuFzSV1U0aRNYCQGVaTY2zW2M/L93pYHnXnrJUphYhU= +github.com/aws/aws-sdk-go-v2/credentials v1.19.19/go.mod h1:7y63L1kGzeoDlJaQ3Z578KrnmfBut96JjvJUzGwR+YE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.25 h1:0w6dCiO8iez+YKwRhRBlL1CH/E3GTfdkuzrwj1by8vo= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.25/go.mod h1:9FDWUothyr5RCRAHc45XOiVCzUR8n/IhCYX+uVqw6vk= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.25 h1:Uii3frf9ztec/ABM2/FSH9/z7PLzxfpG8h4RpkUFflQ= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.25/go.mod h1:G6kntsA2GorAxDPbap6xgB2F+amSLUF8GJTi7PUoX44= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.25 h1:r1+/l6m+WaUJF9HISEsNOLHSNj5EXYQxK8VX6Cz9NlA= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.25/go.mod h1:cKf+D+NMDK1LndD7BowHbBZPgR9V0/5HubH0PFWvA+c= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.26 h1:A1PmWU2zfkIm9EyFlJncFXL4W4phML+h8KjltUsCvNQ= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.26/go.mod h1:dY4MRzXEizrD4hqtpKvWVGPX7QleSGGVY+EBolo1RmM= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.10 h1:d5/908OJ4bXg8lyjeMPvXetEKqoDoLi5Owy1zNue3yg= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.10/go.mod h1:a57l7Hwh+FWI+we50g5NPJHYUKeJKfXbc4w8SyXu8Ig= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.18 h1:W/EyPFl9A5rXrtoilfwHYEvzHER+K4SpBPtMXi24Mos= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.18/go.mod h1:UG50K+pvd/uy6xExbobg0rjqFBFZe6I3l75EPDZw4tg= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.25 h1:dD3dhHNglpd98gs72my22Ndqi1hqQGllFFg1F+twfxg= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.25/go.mod h1:0yAbjPfd64gG7mj85RW+fMEYdfBgCRZw8g/oWcL1pjc= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.25 h1:2pQEbwf+/6EDbiit/GcBE2K4IUpMZymaA0kOz3xK978= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.25/go.mod h1:KvT6NCcQ0EZ+ZkVRrlBMt04Po3ok23YELEp7WimhLhM= +github.com/aws/aws-sdk-go-v2/service/s3 v1.102.2 h1:ie4ElCmUKS26pzrZcIk/lmt4yWjAqLLcawstyQCh298= +github.com/aws/aws-sdk-go-v2/service/s3 v1.102.2/go.mod h1:zjsomFeX5duj+4PlMB+o4JoWTIx+G0XMyzjYrUbQkN0= +github.com/aws/aws-sdk-go-v2/service/signin v1.1.1 h1:1VwbP3qMNfxUDEXWki4rCE5iA+44VA1lokTz9HasGzw= +github.com/aws/aws-sdk-go-v2/service/signin v1.1.1/go.mod h1:vUtyoSj0OPji3kjIVSc/GlKuWEiL33f/WFxl6dmpy/A= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.19 h1:N6pIsdFOW1Kd9S4KyFKXdGRBojPPxkP32+uHFWLv4Hc= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.19/go.mod h1:3gt5WJArFooNmyLONS+h/R4J+o86II8du38IgCwj9dE= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.2 h1:hc+lBYiiTr8Zk4MTzIsQ92MeDWCIDvWGmzKUWOaBcOg= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.2/go.mod h1:hU6fqB3OJA6/ePheD47LQnxvjYk6br6PtQxs+Q9ojvk= +github.com/aws/aws-sdk-go-v2/service/sts v1.42.3 h1:ErklX/7uhSbkAAeyQD/Y1OoQ9hO3SJXQNEgksORW3Js= +github.com/aws/aws-sdk-go-v2/service/sts v1.42.3/go.mod h1:ULe4HCzfKPiR6R3HEurE3b1upEkuk8AkMrOKtaOxKO8= +github.com/aws/smithy-go v1.26.0 h1:9ouqbi+NyKP7fV3Te7UElCwdAb6Y8uk7LGwPE5tVe/s= +github.com/aws/smithy-go v1.26.0/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= @@ -102,8 +102,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/ebitengine/purego v0.10.0 h1:QIw4xfpWT6GWTzaW5XEKy3HXoqrJGx1ijYHzTF0/ISU= -github.com/ebitengine/purego v0.10.0/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= +github.com/ebitengine/purego v0.10.1 h1:dewVBCBT2GaMu1SrNTYxQhgQBethzfhiwvZiLGP/qyY= +github.com/ebitengine/purego v0.10.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/envoyproxy/go-control-plane v0.14.0 h1:hbG2kr4RuFj222B6+7T83thSPqLjwBIfQawTkC++2HA= github.com/envoyproxy/go-control-plane v0.14.0/go.mod h1:NcS5X47pLl/hfqxU70yPwL9ZMkUlwlKxtAohpi2wBEU= github.com/envoyproxy/go-control-plane/envoy v1.37.0 h1:u3riX6BoYRfF4Dr7dwSOroNfdSbEPe9Yyl09/B6wBrQ= @@ -127,8 +127,8 @@ github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPE github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= -github.com/golang-jwt/jwt/v5 v5.3.0 h1:pv4AsKCKKZuqlgs5sUmn4x8UlGa0kEVt/puTpKx9vvo= -github.com/golang-jwt/jwt/v5 v5.3.0/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= +github.com/golang-jwt/jwt/v5 v5.3.1 h1:kYf81DTWFe7t+1VvL7eS+jKFVWaUnK9cB1qbwn63YCY= +github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArsqaEUEa5bE= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= @@ -147,8 +147,8 @@ github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aN github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 h1:5VipnvEpbqr2gA2VbM+nYVbkIF28c5ZQfqCBQ5g2xfk= github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0/go.mod h1:Hyl3n6Twe1hvtd9XUXDec4pTvgMSEixRuQKPTMH2bNs= -github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72 h1:vTCWu1wbdYo7PEZFem/rlr01+Un+wwVmI7wiegFdRLk= -github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.72/go.mod h1:Vn+BBgKQHVQYdVQ4NZDICE1Brb+JfaONyDHr3q07oQc= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.73 h1:LXhjywNxHsex3qFY2p2iOaHK4nFvdqVp9T9QLdZfpjQ= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.73/go.mod h1:AsbUhwFfdK9ipM8G0i8WVHS0IesKck6M0M9NcuMQTJ8= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-getter v1.8.6 h1:9sQboWULaydVphxc4S64oAI4YqpuCk7nPmvbk131ebY= @@ -193,8 +193,8 @@ github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4= -github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= +github.com/prometheus/common v0.68.0 h1:8rQJvQmYltsR2L7h8Zw0Iyj8WYNNmpwikoQTZXwfVeA= +github.com/prometheus/common v0.68.0/go.mod h1:4soH+U8yJSROk7OJ//hmTiWKsxapv6zRGgTt3keN8gQ= github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEycfc= github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= @@ -217,28 +217,30 @@ github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/detectors/gcp v1.43.0 h1:62yY3dT7/ShwOxzA0RsKRgshBmfElKI4d/Myu2OxDFU= -go.opentelemetry.io/contrib/detectors/gcp v1.43.0/go.mod h1:RyaZMFY7yi1kAs45S6mbFGz8O8rqB0dTY14uzvG4LCs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0 h1:CqXxU8VOmDefoh0+ztfGaymYbhdB/tT3zs79QaZTNGY= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.68.0/go.mod h1:BuhAPThV8PBHBvg8ZzZ/Ok3idOdhWIodywz2xEcRbJo= -go.opentelemetry.io/otel v1.43.0 h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I= -go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0 h1:88Y4s2C8oTui1LGM6bTWkw0ICGcOLCAI5l6zsD1j20k= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.43.0/go.mod h1:Vl1/iaggsuRlrHf/hfPJPvVag77kKyvrLeD10kpMl+A= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0 h1:RAE+JPfvEmvy+0LzyUA25/SGawPwIUbZ6u0Wug54sLc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.43.0/go.mod h1:AGmbycVGEsRx9mXMZ75CsOyhSP6MFIcj/6dnG+vhVjk= +go.opentelemetry.io/contrib/detectors/gcp v1.44.0 h1:NmLfL734pJhM0JKaYd2Y28+nY9dPRWYAAbxhRCrKXPw= +go.opentelemetry.io/contrib/detectors/gcp v1.44.0/go.mod h1:tNAsgd8avTGke1+MndXlU5Cru4PQ9Ai/cCNWQv/ZJ/s= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0 h1:2yEATaop1/a1I4psnSLgWVPLWwCzkqWakgJy7xTDVy0= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.69.0/go.mod h1:D7J12YRapIekYyPWgGPlA/23pRmpSEZC5xJC/TTLI9U= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 h1:8tvICD4vSTOOsNrsI4Ljf6C+6UKvpTEH5XY3JMoyPoo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI= +go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= +go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0 h1:4YsVu3B8+3qtWYYrsUYgn0OG78pN0rnNPRGX4SbokQI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0/go.mod h1:+wnlSn0mD1ADVMe3v9Z/WIaiz6q6gL2J/ejaAmdmv80= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.44.0 h1:qazEJlUOQzhCpzQpFETGby7EdqjI1wsd0W+6Gg1SCTU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.44.0/go.mod h1:fOD2Yefuxixkx3ahVNf0O/PERb6r4OlbxfATVnYvzCo= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0 h1:TC+BewnDpeiAmcscXbGMfxkO+mwYUwE/VySwvw88PfA= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.43.0/go.mod h1:J/ZyF4vfPwsSr9xJSPyQ4LqtcTPULFR64KwTikGLe+A= -go.opentelemetry.io/otel/metric v1.43.0 h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM= -go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= -go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= -go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= -go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= -go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= -go.opentelemetry.io/otel/trace v1.43.0 h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A= -go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= +go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= +go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo= +go.opentelemetry.io/otel/metric/x v0.66.0 h1:YkCrx1zLOChi9ZcZ6euupOcsgzbVlec7D/xoEU1+cTA= +go.opentelemetry.io/otel/metric/x v0.66.0/go.mod h1:d1+BDj9t96do0/1LoU1ayfCv79ZgNE41qbhBvnMOBZk= +go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58= +go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0= +go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI= +go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA= +go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk= +go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE= go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -263,16 +265,16 @@ golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/api v0.280.0 h1:F4OfEHZhZh6a7uTufJAXXVd/2TQ8EjM4vZH+jX/vFYk= -google.golang.org/api v0.280.0/go.mod h1:oGKmPZRDoD3vdkf6MA7F4VNkR1rxCiuaPSkhsf3EolU= +google.golang.org/api v0.282.0 h1:WmJiSVqUnKqJCpJOx7YADbXaC+9DDsnGSfllFSj7R2I= +google.golang.org/api v0.282.0/go.mod h1:6Wssta4c5n9qHq5CBhmlai5h/PUa1djdDAIhYEHyvcM= google.golang.org/genai v1.58.0 h1:MNA3ZkRyr7MnRwZ9RNZ60p4+UMKV3yYRw6pyHq4pp0U= google.golang.org/genai v1.58.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= -google.golang.org/genproto v0.0.0-20260523011958-0a33c5d7ca68 h1:cTHF8xtqtBN5sQ4dcoNwOS6FFejvFTkWQbZXsTU3trM= -google.golang.org/genproto v0.0.0-20260523011958-0a33c5d7ca68/go.mod h1:RRHjglSYABVCWpQ7USCpdfhcd9t4PkajvVwyynZizTc= -google.golang.org/genproto/googleapis/api v0.0.0-20260523011958-0a33c5d7ca68 h1:WVVw1Nl19li0fMX++FJ3ye1z9+S1N35QODDy5qpnaXw= -google.golang.org/genproto/googleapis/api v0.0.0-20260523011958-0a33c5d7ca68/go.mod h1:1dCETSCY2YKZNXQE3h4fun3TYwF5p8jejRKZgfWAgAY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260523011958-0a33c5d7ca68 h1:PvEgGJf9C/1u5CHkInMg7UFYYUoiaQmW2LbtH0pjB78= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260523011958-0a33c5d7ca68/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto v0.0.0-20260526163538-3dc84a4a5aaa h1:mfj8IS4EA4VAR9a6QDVxTQkLY64iBybb5QI1B4pXrpE= +google.golang.org/genproto v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:fuT7yonGw1Iq2oa+YC0fyqPPQJkgo/54gPNC6VitOkI= +google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa h1:Kjn0N0tCrDgiAFW+lGO4JZ3ck44CehvJQMAwj9QF0G8= +google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:q4lMZS6kskjT5HvCPrnnypcDPVJqT/f4nfxmkE7gryY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1:mZHHdPZl0dbGHCflZgAq/Q468DWVFcU2whhB2KAo8fk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= From 2d27a0e9e03271f85e868e76d9f756c3ed1ffd92 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 2 Jun 2026 03:30:10 +0000 Subject: [PATCH 76/82] chore(deps): bump github.com/kaptinlin/jsonschema (#264) Bumps the all group with 1 update in the / directory: [github.com/kaptinlin/jsonschema](https://github.com/kaptinlin/jsonschema). Updates `github.com/kaptinlin/jsonschema` from 0.7.14 to 0.7.15 - [Release notes](https://github.com/kaptinlin/jsonschema/releases) - [Commits](https://github.com/kaptinlin/jsonschema/compare/v0.7.14...v0.7.15) --- updated-dependencies: - dependency-name: github.com/kaptinlin/jsonschema dependency-version: 0.7.15 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: all ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index abc282d72..6ea924d96 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/go-viper/mapstructure/v2 v2.5.0 github.com/google/uuid v1.6.0 github.com/joho/godotenv v1.5.1 - github.com/kaptinlin/jsonschema v0.7.14 + github.com/kaptinlin/jsonschema v0.7.15 github.com/stretchr/testify v1.11.1 golang.org/x/oauth2 v0.36.0 google.golang.org/genai v1.58.0 @@ -63,7 +63,7 @@ require ( github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-jose/go-jose/v4 v4.1.4 // indirect - github.com/go-json-experiment/json v0.0.0-20260505212615-e40f80bf6836 // indirect + github.com/go-json-experiment/json v0.0.0-20260520185125-572e7c383686 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/goccy/go-yaml v1.19.2 // indirect @@ -79,8 +79,8 @@ require ( github.com/hashicorp/go-version v1.9.0 // indirect github.com/hybridgroup/yzma v1.14.1 // indirect github.com/jupiterrider/ffi v0.7.0 // indirect - github.com/kaptinlin/go-i18n v0.4.8 // indirect - github.com/kaptinlin/jsonpointer v0.4.23 // indirect + github.com/kaptinlin/go-i18n v0.4.9 // indirect + github.com/kaptinlin/jsonpointer v0.4.25 // indirect github.com/kaptinlin/messageformat-go v0.6.4 // indirect github.com/klauspost/compress v1.18.6 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect diff --git a/go.sum b/go.sum index e31bc956b..472da90ae 100644 --- a/go.sum +++ b/go.sum @@ -116,8 +116,8 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/go-jose/go-jose/v4 v4.1.4 h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA= github.com/go-jose/go-jose/v4 v4.1.4/go.mod h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08= -github.com/go-json-experiment/json v0.0.0-20260505212615-e40f80bf6836 h1:5KGUhXZFTN1PrCY4zUZLe1J8n7uBNmPDbCLCn78EbPQ= -github.com/go-json-experiment/json v0.0.0-20260505212615-e40f80bf6836/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg= +github.com/go-json-experiment/json v0.0.0-20260520185125-572e7c383686 h1:NZBJxCpbHS1gzS6xAmyxbJznosZIIPk9IB42v62UvKA= +github.com/go-json-experiment/json v0.0.0-20260520185125-572e7c383686/go.mod h1:tphK2c80bpPhMOI4v6bIc2xWywPfbqi1Z06+RcrMkDg= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -161,12 +161,12 @@ github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/jupiterrider/ffi v0.7.0 h1:RKsl6Ascal+3kyAqR5Qcbp83LceQMLc1VZbPfHWoNzs= github.com/jupiterrider/ffi v0.7.0/go.mod h1:9dauhpOfNqrqk28fxuu0kkdeFtT9Qr4vbfigiuIXN7c= -github.com/kaptinlin/go-i18n v0.4.8 h1:ymGkz0uU974wljuuHZufHP1BlFWVk5Tf/sSMO8Cl9yQ= -github.com/kaptinlin/go-i18n v0.4.8/go.mod h1:F+ezt0Q39p5x8PQW6p4xKMovhjNbhZYHuqwyEV1hHMw= -github.com/kaptinlin/jsonpointer v0.4.23 h1:0VisnCL7rJT7BRTwxSWMU7vC0PD/RFgmisNcURkWp3k= -github.com/kaptinlin/jsonpointer v0.4.23/go.mod h1:Mo7+DX8RlQTFqS4dnYJl0izSP4ob+Rl5xO/mGDETgaU= -github.com/kaptinlin/jsonschema v0.7.14 h1:6grzaTJiRuLXlIGEdlGX5HEII3Za2tV+xxGpW3Kg4Rc= -github.com/kaptinlin/jsonschema v0.7.14/go.mod h1:9WFuBzJjrvNkXVjo0L2Ujl1T/yqAGurwgbx4JWgF5C8= +github.com/kaptinlin/go-i18n v0.4.9 h1:kxYNfExb1GG241BIPnQaD3YOvWkP7poHwfj8ctwIpkw= +github.com/kaptinlin/go-i18n v0.4.9/go.mod h1:15vHHYLhwo1stIdztJatujSttIY6sRFt+7v8K1ik1AA= +github.com/kaptinlin/jsonpointer v0.4.25 h1:iJ197e8n+WwqaqBsa53FqG3rPJCg5oijyFXEXNWWC3E= +github.com/kaptinlin/jsonpointer v0.4.25/go.mod h1:wVOBaXGGnP42YsMb6zev/3W5POTvspdNfh8DXzf8XS8= +github.com/kaptinlin/jsonschema v0.7.15 h1:5v9TBnGOm/DV4EEsC13dfR0UXid/3OcR7yAnpRlruE0= +github.com/kaptinlin/jsonschema v0.7.15/go.mod h1:5njr9isKoP9FnqZrFV1Iygx7QqjN3SBZ/AkgBl4Elug= github.com/kaptinlin/messageformat-go v0.6.4 h1:6nC70fsqEn2xxg/Xoby2+Dk2r77kvxa3QNnYL/hsNcM= github.com/kaptinlin/messageformat-go v0.6.4/go.mod h1:553UGZ1x5jmGtyH4pQKYwLGMyPm71deCoZICjq1DtR8= github.com/klauspost/compress v1.18.6 h1:2jupLlAwFm95+YDR+NwD2MEfFO9d4z4Prjl1XXDjuao= From 283ecba7dc1162da8b7778c8506d0ba0b6472ca0 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Tue, 2 Jun 2026 18:15:59 -0300 Subject: [PATCH 77/82] feat(anthropic): add support for "extra body" (#266) --- providers/anthropic/anthropic.go | 8 ++++++++ providers/anthropic/provider_options.go | 1 + 2 files changed, 9 insertions(+) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 01e049358..2481be5c9 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -42,6 +42,11 @@ func betaRequestOptions(flags []string) []option.RequestOption { // by Generate and Stream: user-agent, raw tool injection, and any // beta API flags. func buildRequestOptions(call fantasy.Call, rawTools []json.RawMessage, betaFlags []string) []option.RequestOption { + providerOptions := &ProviderOptions{} + if v, ok := call.ProviderOptions[Name]; ok { + providerOptions, _ = v.(*ProviderOptions) + } + reqOpts := callUARequestOptions(call) if len(rawTools) > 0 { // Tools are injected as raw JSON rather than via params.Tools @@ -50,6 +55,9 @@ func buildRequestOptions(call fantasy.Call, rawTools []json.RawMessage, betaFlag // this will need updating. reqOpts = append(reqOpts, option.WithJSONSet("tools", rawTools)) } + for k, v := range providerOptions.ExtraBody { + reqOpts = append(reqOpts, option.WithJSONSet(k, v)) + } if len(betaFlags) > 0 { reqOpts = append(reqOpts, betaRequestOptions(betaFlags)...) } diff --git a/providers/anthropic/provider_options.go b/providers/anthropic/provider_options.go index ae643b3c7..4c89a4438 100644 --- a/providers/anthropic/provider_options.go +++ b/providers/anthropic/provider_options.go @@ -71,6 +71,7 @@ type ProviderOptions struct { Thinking *ThinkingProviderOption `json:"thinking"` Effort *Effort `json:"effort"` DisableParallelToolUse *bool `json:"disable_parallel_tool_use"` + ExtraBody map[string]any `json:"extra_body,omitempty"` } // Options implements the ProviderOptions interface. From 0e7200140b00449f895ae75537d3bbffd525bd8a Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Tue, 2 Jun 2026 18:16:17 -0300 Subject: [PATCH 78/82] v0.29.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 697f087f3..ae6dd4e20 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.28.0 +0.29.0 From a79c920d37c9c9e23274e1fd311c6d1dedeeddce Mon Sep 17 00:00:00 2001 From: Ethan Dickson Date: Wed, 3 Jun 2026 06:48:30 +0000 Subject: [PATCH 79/82] fix(providers/anthropic): forward PDF filename to document title Anthropic's DocumentBlockParam exposes a Title field that the model uses when it refers back to an attached document. Forward FilePart.Filename into that field so users can ask the model about a document by name. The title is sanitized first: Anthropic restricts titles to alphanumerics, whitespace, hyphens, parentheses, and square brackets, and returns 'The document file name can only contain alphanumeric characters, whitespace characters, hyphens, parentheses, and square brackets.' for any title containing other runes. Disallowed runes are replaced with spaces, runs of whitespace are collapsed, and the result is trimmed. Empty or fully disallowed input falls back to 'Document' so every attached document has a stable handle, matching the invariant the OpenAI provider already enforces with its part-N.pdf synthetic name. The sanitizer is a Go port of the implementation in coder/mux (src/node/utils/messages/sanitizeAnthropicDocumentFilename.ts); prior art for sending filename as title also includes vercel/ai's @ai-sdk/anthropic, which sets document.title from part.filename when no provider-options title is supplied. --- providers/anthropic/anthropic.go | 1 + providers/anthropic/anthropic_test.go | 31 ++++++++++ providers/anthropic/sanitize.go | 33 +++++++++++ providers/anthropic/sanitize_test.go | 81 +++++++++++++++++++++++++++ 4 files changed, 146 insertions(+) create mode 100644 providers/anthropic/sanitize.go create mode 100644 providers/anthropic/sanitize_test.go diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 2481be5c9..95c6adc91 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -874,6 +874,7 @@ func toPrompt(prompt fantasy.Prompt, sendReasoningData bool) ([]anthropic.TextBl docBlock := anthropic.NewDocumentBlock(anthropic.Base64PDFSourceParam{ Data: base64Encoded, }) + docBlock.OfDocument.Title = anthropic.String(sanitizeAnthropicDocumentTitle(file.Filename)) if cacheControl != nil { docBlock.OfDocument.CacheControl = anthropic.NewCacheControlEphemeralParam() } diff --git a/providers/anthropic/anthropic_test.go b/providers/anthropic/anthropic_test.go index 9d8af299d..c95c5d4c8 100644 --- a/providers/anthropic/anthropic_test.go +++ b/providers/anthropic/anthropic_test.go @@ -322,6 +322,7 @@ func TestToPrompt_DropsEmptyMessages(t *testing.T) { Role: fantasy.MessageRoleUser, Content: []fantasy.MessagePart{ fantasy.FilePart{ + Filename: "quarterly_report.v1.pdf", Data: []byte("fake pdf data"), MediaType: "application/pdf", }, @@ -333,6 +334,36 @@ func TestToPrompt_DropsEmptyMessages(t *testing.T) { require.Empty(t, systemBlocks) require.Len(t, messages, 1) + require.Len(t, messages[0].Content, 1) + require.NotNil(t, messages[0].Content[0].OfDocument) + require.Equal(t, "quarterly report v1 pdf", messages[0].Content[0].OfDocument.Title.Value) + require.True(t, messages[0].Content[0].OfDocument.Title.Valid()) + require.Empty(t, warnings) + }) + + t.Run("should fall back to Document title when PDF filename is missing", func(t *testing.T) { + t.Parallel() + + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleUser, + Content: []fantasy.MessagePart{ + fantasy.FilePart{ + Data: []byte("fake pdf data"), + MediaType: "application/pdf", + }, + }, + }, + } + + systemBlocks, messages, warnings := toPrompt(prompt, true) + + require.Empty(t, systemBlocks) + require.Len(t, messages, 1) + require.Len(t, messages[0].Content, 1) + require.NotNil(t, messages[0].Content[0].OfDocument) + require.Equal(t, "Document", messages[0].Content[0].OfDocument.Title.Value) + require.True(t, messages[0].Content[0].OfDocument.Title.Valid()) require.Empty(t, warnings) }) diff --git a/providers/anthropic/sanitize.go b/providers/anthropic/sanitize.go new file mode 100644 index 000000000..f9b664219 --- /dev/null +++ b/providers/anthropic/sanitize.go @@ -0,0 +1,33 @@ +package anthropic + +import ( + "regexp" + "strings" +) + +// anthropicDocumentTitleDisallowed matches every rune that Anthropic's +// document title field rejects. The allowlist is alphanumerics, whitespace, +// hyphens, parentheses, and square brackets. Anything else is replaced +// with a space; consecutive whitespace is then collapsed. +// +// Anthropic returns "The document file name can only contain alphanumeric +// characters, whitespace characters, hyphens, parentheses, and square +// brackets." when the title falls outside this set. +var anthropicDocumentTitleDisallowed = regexp.MustCompile(`[^a-zA-Z0-9\s\-()\[\]]`) + +// anthropicDocumentTitleWhitespace collapses runs of whitespace. +var anthropicDocumentTitleWhitespace = regexp.MustCompile(`\s+`) + +// sanitizeAnthropicDocumentTitle adapts a filename for use as the title +// field on an Anthropic DocumentBlock. Disallowed characters are replaced +// with spaces, runs of whitespace are collapsed, and the result is trimmed. +// Empty input (or input that sanitizes to empty) returns "Document" so the +// model always has a stable handle for the attachment. +func sanitizeAnthropicDocumentTitle(filename string) string { + replaced := anthropicDocumentTitleDisallowed.ReplaceAllString(filename, " ") + collapsed := strings.TrimSpace(anthropicDocumentTitleWhitespace.ReplaceAllString(replaced, " ")) + if collapsed == "" { + return "Document" + } + return collapsed +} diff --git a/providers/anthropic/sanitize_test.go b/providers/anthropic/sanitize_test.go new file mode 100644 index 000000000..6d99a94c6 --- /dev/null +++ b/providers/anthropic/sanitize_test.go @@ -0,0 +1,81 @@ +package anthropic + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestSanitizeAnthropicDocumentTitle(t *testing.T) { + t.Parallel() + + cases := []struct { + name string + input string + want string + }{ + { + name: "empty falls back to Document", + input: "", + want: "Document", + }, + { + name: "all disallowed falls back to Document", + input: "...", + want: "Document", + }, + { + name: "whitespace only falls back to Document", + input: " \t\n", + want: "Document", + }, + { + name: "alphanumeric is preserved", + input: "report 2026", + want: "report 2026", + }, + { + name: "dots and underscores become spaces", + input: "quarterly_report.v1.pdf", + want: "quarterly report v1 pdf", + }, + { + name: "preserves hyphens, parentheses, square brackets", + input: "draft-1 (final) [v2].pdf", + want: "draft-1 (final) [v2] pdf", + }, + { + name: "collapses runs of whitespace", + input: "name with spaces", + want: "name with spaces", + }, + { + name: "trims leading and trailing whitespace", + input: " leading and trailing ", + want: "leading and trailing", + }, + { + name: "leading dots collapse to single space then trim", + input: "..hidden.txt", + want: "hidden txt", + }, + { + name: "non-ascii letters are not allowlisted", + input: "résumé.pdf", + want: "r sum pdf", + }, + { + name: "production failure example is sanitized", + input: "D19910350Lj.pdf", + want: "D19910350Lj pdf", + }, + } + + for _, tc := range cases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + require.Equal(t, tc.want, sanitizeAnthropicDocumentTitle(tc.input)) + }) + } +} From c9afe3be5c6c994a4f474800e63e7f1c284a8bbf Mon Sep 17 00:00:00 2001 From: Ethan Dickson Date: Wed, 3 Jun 2026 06:49:22 +0000 Subject: [PATCH 80/82] fix(providers/anthropic): forward text filename and warn on unsupported media types Mirror the PDF document-title handling on the text/* document branch so text attachments also reach Anthropic with a stable handle the model can refer back to. The filename runs through the same sanitizer; an empty or fully disallowed filename falls back to 'Document'. Also add a default case to the file MediaType switch that emits a CallWarning when a FilePart's media type is not handled. Previously the Anthropic provider silently dropped any file with a media type other than image/*, application/pdf, or text/*, so unsupported attachments left no trace for the caller. The new behavior matches the openai, openaicompat, openrouter, and vercel providers, which already warn on unsupported FilePart media types. --- providers/anthropic/anthropic.go | 6 +++ providers/anthropic/anthropic_test.go | 67 +++++++++++++++++++++++++-- 2 files changed, 70 insertions(+), 3 deletions(-) diff --git a/providers/anthropic/anthropic.go b/providers/anthropic/anthropic.go index 95c6adc91..814b48122 100644 --- a/providers/anthropic/anthropic.go +++ b/providers/anthropic/anthropic.go @@ -883,10 +883,16 @@ func toPrompt(prompt fantasy.Prompt, sendReasoningData bool) ([]anthropic.TextBl documentBlock := anthropic.NewDocumentBlock(anthropic.PlainTextSourceParam{ Data: string(file.Data), }) + documentBlock.OfDocument.Title = anthropic.String(sanitizeAnthropicDocumentTitle(file.Filename)) if cacheControl != nil { documentBlock.OfDocument.CacheControl = anthropic.NewCacheControlEphemeralParam() } anthropicContent = append(anthropicContent, documentBlock) + default: + warnings = append(warnings, fantasy.CallWarning{ + Type: fantasy.CallWarningTypeOther, + Message: fmt.Sprintf("file part media type %s not supported", file.MediaType), + }) } } } diff --git a/providers/anthropic/anthropic_test.go b/providers/anthropic/anthropic_test.go index c95c5d4c8..3d55d2fe6 100644 --- a/providers/anthropic/anthropic_test.go +++ b/providers/anthropic/anthropic_test.go @@ -375,6 +375,7 @@ func TestToPrompt_DropsEmptyMessages(t *testing.T) { Role: fantasy.MessageRoleUser, Content: []fantasy.MessagePart{ fantasy.FilePart{ + Filename: "notes_v1.md", Data: []byte("# Hello World\nSome markdown content"), MediaType: "text/markdown", }, @@ -386,9 +387,66 @@ func TestToPrompt_DropsEmptyMessages(t *testing.T) { require.Empty(t, systemBlocks) require.Len(t, messages, 1) + require.Len(t, messages[0].Content, 1) + require.NotNil(t, messages[0].Content[0].OfDocument) + require.Equal(t, "notes v1 md", messages[0].Content[0].OfDocument.Title.Value) + require.True(t, messages[0].Content[0].OfDocument.Title.Valid()) require.Empty(t, warnings) }) + t.Run("should fall back to Document title when text filename is missing", func(t *testing.T) { + t.Parallel() + + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleUser, + Content: []fantasy.MessagePart{ + fantasy.FilePart{ + Data: []byte("# Hello World\nSome markdown content"), + MediaType: "text/markdown", + }, + }, + }, + } + + systemBlocks, messages, warnings := toPrompt(prompt, true) + + require.Empty(t, systemBlocks) + require.Len(t, messages, 1) + require.Len(t, messages[0].Content, 1) + require.NotNil(t, messages[0].Content[0].OfDocument) + require.Equal(t, "Document", messages[0].Content[0].OfDocument.Title.Value) + require.True(t, messages[0].Content[0].OfDocument.Title.Valid()) + require.Empty(t, warnings) + }) + + t.Run("should warn on unsupported file media type while keeping visible content", func(t *testing.T) { + t.Parallel() + + prompt := fantasy.Prompt{ + { + Role: fantasy.MessageRoleUser, + Content: []fantasy.MessagePart{ + fantasy.TextPart{Text: "look at this archive"}, + fantasy.FilePart{ + Filename: "logs.zip", + Data: []byte("not supported"), + MediaType: "application/zip", + }, + }, + }, + } + + systemBlocks, messages, warnings := toPrompt(prompt, true) + + require.Empty(t, systemBlocks) + require.Len(t, messages, 1) + require.Len(t, warnings, 1) + require.Equal(t, fantasy.CallWarningTypeOther, warnings[0].Type) + require.Contains(t, warnings[0].Message, "application/zip") + require.Contains(t, warnings[0].Message, "not supported") + }) + t.Run("should drop user messages without visible content", func(t *testing.T) { t.Parallel() @@ -408,10 +466,13 @@ func TestToPrompt_DropsEmptyMessages(t *testing.T) { require.Empty(t, systemBlocks) require.Empty(t, messages) - require.Len(t, warnings, 1) + require.Len(t, warnings, 2) require.Equal(t, fantasy.CallWarningTypeOther, warnings[0].Type) - require.Contains(t, warnings[0].Message, "dropping empty user message") - require.Contains(t, warnings[0].Message, "neither user-facing content nor tool results") + require.Contains(t, warnings[0].Message, "application/zip") + require.Contains(t, warnings[0].Message, "not supported") + require.Equal(t, fantasy.CallWarningTypeOther, warnings[1].Type) + require.Contains(t, warnings[1].Message, "dropping empty user message") + require.Contains(t, warnings[1].Message, "neither user-facing content nor tool results") }) t.Run("should keep user messages with tool results", func(t *testing.T) { From 5876e9146a9c6eae29f6724c9aa18c45a71d5aaf Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Wed, 3 Jun 2026 11:02:01 -0300 Subject: [PATCH 81/82] ci: fix govulncheck --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 6ea924d96..ff47c341e 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module charm.land/fantasy -go 1.26.3 +go 1.26.4 require ( charm.land/x/vcr v0.1.1 From 124d86ad1cc0b894b56a17921e4af9f6512657a3 Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Wed, 3 Jun 2026 11:10:10 -0300 Subject: [PATCH 82/82] v0.29.1 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index ae6dd4e20..25939d35c 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.29.0 +0.29.1