From f7e382dedf11043914fa85bf9aec20e1a4940436 Mon Sep 17 00:00:00 2001 From: Ken Jiang Date: Tue, 31 Mar 2026 15:30:22 -0400 Subject: [PATCH 1/2] add bedrock to transforms test harness --- bindings/lingua-wasm/package.json | 4 +- crates/lingua/Cargo.toml | 2 +- crates/lingua/src/providers/bedrock/mod.rs | 1 + .../__snapshots__/transforms.test.ts.snap | 2574 ++++++++++++----- .../scripts/transforms/capture-transforms.ts | 55 +- payloads/scripts/transforms/helpers.ts | 41 +- .../complexReasoningRequest.json | 29 + .../multimodalRequest.json | 4 + .../reasoningRequest.json | 29 + .../reasoningRequestTruncated.json | 29 + .../reasoningWithOutput.json | 29 + .../anthropic_to_bedrock/simpleRequest.json | 29 + .../systemMessageArrayContent.json | 29 + .../anthropic_to_bedrock/toolCallRequest.json | 36 + .../complexReasoningRequest.json | 29 + .../multimodalRequest.json | 4 + .../reasoningRequest.json | 29 + .../reasoningRequestTruncated.json | 29 + .../reasoningWithOutput.json | 29 + .../simpleRequest.json | 3 + .../systemMessageArrayContent.json | 29 + .../toolCallRequest.json | 36 + .../complexReasoningRequest.json | 3 + .../multimodalRequest.json | 4 + .../reasoningRequest.json | 3 + .../reasoningRequestTruncated.json | 4 + .../reasoningWithOutput.json | 3 + .../responses_to_bedrock/simpleRequest.json | 3 + .../systemMessageArrayContent.json | 29 + .../responses_to_bedrock/toolCallRequest.json | 36 + payloads/transforms/transform_errors.json | 15 + 31 files changed, 2514 insertions(+), 665 deletions(-) create mode 100644 payloads/transforms/anthropic_to_bedrock/complexReasoningRequest.json create mode 100644 payloads/transforms/anthropic_to_bedrock/multimodalRequest.json create mode 100644 payloads/transforms/anthropic_to_bedrock/reasoningRequest.json create mode 100644 payloads/transforms/anthropic_to_bedrock/reasoningRequestTruncated.json create mode 100644 payloads/transforms/anthropic_to_bedrock/reasoningWithOutput.json create mode 100644 payloads/transforms/anthropic_to_bedrock/simpleRequest.json create mode 100644 payloads/transforms/anthropic_to_bedrock/systemMessageArrayContent.json create mode 100644 payloads/transforms/anthropic_to_bedrock/toolCallRequest.json create mode 100644 payloads/transforms/chat-completions_to_bedrock/complexReasoningRequest.json create mode 100644 payloads/transforms/chat-completions_to_bedrock/multimodalRequest.json create mode 100644 payloads/transforms/chat-completions_to_bedrock/reasoningRequest.json create mode 100644 payloads/transforms/chat-completions_to_bedrock/reasoningRequestTruncated.json create mode 100644 payloads/transforms/chat-completions_to_bedrock/reasoningWithOutput.json create mode 100644 payloads/transforms/chat-completions_to_bedrock/simpleRequest.json create mode 100644 payloads/transforms/chat-completions_to_bedrock/systemMessageArrayContent.json create mode 100644 payloads/transforms/chat-completions_to_bedrock/toolCallRequest.json create mode 100644 payloads/transforms/responses_to_bedrock/complexReasoningRequest.json create mode 100644 payloads/transforms/responses_to_bedrock/multimodalRequest.json create mode 100644 payloads/transforms/responses_to_bedrock/reasoningRequest.json create mode 100644 payloads/transforms/responses_to_bedrock/reasoningRequestTruncated.json create mode 100644 payloads/transforms/responses_to_bedrock/reasoningWithOutput.json create mode 100644 payloads/transforms/responses_to_bedrock/simpleRequest.json create mode 100644 payloads/transforms/responses_to_bedrock/systemMessageArrayContent.json create mode 100644 payloads/transforms/responses_to_bedrock/toolCallRequest.json diff --git a/bindings/lingua-wasm/package.json b/bindings/lingua-wasm/package.json index 7d1e6143..fc5b2228 100644 --- a/bindings/lingua-wasm/package.json +++ b/bindings/lingua-wasm/package.json @@ -4,8 +4,8 @@ "description": "WASM bindings for Lingua", "scripts": { "build": "pnpm run build:nodejs && pnpm run build:web", - "build:nodejs": "cd ../../crates/lingua && wasm-pack build --target nodejs --release --out-dir ../../bindings/lingua-wasm/nodejs --no-pack", - "build:web": "cd ../../crates/lingua && wasm-pack build --target web --release --out-dir ../../bindings/lingua-wasm/web --no-pack" + "build:nodejs": "cd ../../crates/lingua && wasm-pack build --target nodejs --release --out-dir ../../bindings/lingua-wasm/nodejs --no-pack --features bedrock", + "build:web": "cd ../../crates/lingua && wasm-pack build --target web --release --out-dir ../../bindings/lingua-wasm/web --no-pack --features bedrock" }, "files": [ "nodejs", diff --git a/crates/lingua/Cargo.toml b/crates/lingua/Cargo.toml index f3089c61..7908528b 100644 --- a/crates/lingua/Cargo.toml +++ b/crates/lingua/Cargo.toml @@ -36,7 +36,6 @@ assert-json-diff.workspace = true url.workspace = true urlencoding.workspace = true base64.workspace = true -aws-sdk-bedrockruntime = { workspace = true, optional = true } pyo3 = { workspace = true, optional = true } [target.'cfg(target_arch = "wasm32")'.dependencies] @@ -48,6 +47,7 @@ serde-wasm-bindgen.workspace = true [target.'cfg(not(target_arch = "wasm32"))'.dependencies] reqwest.workspace = true +aws-sdk-bedrockruntime = { workspace = true, optional = true } [dev-dependencies] tokio-test.workspace = true diff --git a/crates/lingua/src/providers/bedrock/mod.rs b/crates/lingua/src/providers/bedrock/mod.rs index 294ef4ea..6ede6de7 100644 --- a/crates/lingua/src/providers/bedrock/mod.rs +++ b/crates/lingua/src/providers/bedrock/mod.rs @@ -16,6 +16,7 @@ pub mod response; pub use adapter::BedrockAdapter; // Re-export commonly used AWS SDK types (note: these don't have Serde by default) +#[cfg(not(target_arch = "wasm32"))] pub use aws_sdk_bedrockruntime::types::{ ContentBlock, ConversationRole, Message, SystemContentBlock, }; diff --git a/payloads/scripts/transforms/__snapshots__/transforms.test.ts.snap b/payloads/scripts/transforms/__snapshots__/transforms.test.ts.snap index 9d90107b..392602df 100644 --- a/payloads/scripts/transforms/__snapshots__/transforms.test.ts.snap +++ b/payloads/scripts/transforms/__snapshots__/transforms.test.ts.snap @@ -1,335 +1,438 @@ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`anthropic → chat-completions > complexReasoningRequest > request 1`] = ` +exports[`anthropic → bedrock > complexReasoningRequest > request 1`] = ` { - "max_completion_tokens": 20000, + "inferenceConfig": { + "maxTokens": 20000, + }, "messages": [ { - "content": "There is a digital clock, with minutes and hours in the form of 00:00. The clock shows all times from 00:00 to 23:59 and repeating. Imagine you had a list of all these times. Which digit(s) is the most common and which is the rarest? Can you find their percentage?", + "content": [ + { + "text": "There is a digital clock, with minutes and hours in the form of 00:00. The clock shows all times from 00:00 to 23:59 and repeating. Imagine you had a list of all these times. Which digit(s) is the most common and which is the rarest? Can you find their percentage?", + }, + ], "role": "user", }, ], - "model": "gpt-5-nano", + "modelId": "claude-sonnet-4-5-20250929", } `; -exports[`anthropic → chat-completions > complexReasoningRequest > response 1`] = ` +exports[`anthropic → bedrock > complexReasoningRequest > response 1`] = ` { "content": [ { - "text": "Total times: 24 hours × 60 minutes = 1440 times. Each time has 4 digits (HHMM), so 1440 × 4 = 5760 digits in total. + "text": "# Digital Clock Digit Analysis -Count digits in each position: +Let me work through this systematically by counting digit occurrences across all 24-hour times. -- Hour tens (H1): 0 for 00–09 (10 hours) and 1 for 10–19 (10 hours), 2 for 20–23 (4 hours). So H1 contributes: 0→600, 1→600, 2→240, others→0. -- Hour units (H2): digits 0,1,2,3 appear 3 times each (00,10,20 etc. for 0–3), digits 4–9 appear 2 times each. Across all hours: 0→180, 1→180, 2→180, 3→180, 4→120, 5→120, 6→120, 7→120, 8→120, 9→120. -- Minute tens (M1): digits 0–5 each appear 240 times; digits 6–9 never appear here. So 0→240, 1→240, 2→240, 3→240, 4→240, 5→240, others→0. -- Minute units (M2): each digit 0–9 appears 144 times. +## Setting Up the Problem -Sum per digit (0–9): +A full day has **1,440 minutes** (00:00 through 23:59), and each time displays 4 digits. -- 0: 600 + 180 + 240 + 144 = 1,164 -- 1: 600 + 180 + 240 + 144 = 1,164 -- 2: 240 + 180 + 240 + 144 = 804 -- 3: 0 + 180 + 240 + 144 = 564 -- 4: 0 + 120 + 240 + 144 = 504 -- 5: 0 + 120 + 240 + 144 = 504 -- 6: 0 + 120 + 0 + 144 = 264 -- 7: 0 + 120 + 0 + 144 = 264 -- 8: 0 + 120 + 0 + 144 = 264 -- 9: 0 + 120 + 0 + 144 = 264 +**Total digit positions: 1,440 × 4 = 5,760 digits** -From these counts: -- The most common digits are 0 and 1, each appearing 1,164 times (out of 5,760 digits), i.e., 1,164 / 5,760 ≈ 20.21%. -- The rarest digits are 6, 7, 8, and 9, each appearing 264 times, i.e., 264 / 5,760 ≈ 4.58%. +## Counting Each Position -So: most common - digits 0 and 1 (about 20.21% each); rarest - digits 6–9 (about 4.58% each).", +Let me count how often each digit (0-9) appears in each of the 4 positions: + +### Hours (00-23) +- **Tens place**: 0(00-09)×10, 1(10-19)×10, 2(20-23)×4 = cycles 24 times/day +- **Ones place**: Each digit 0-9 appears in every 10-hour cycle, repeated 2.4 times + +### Minutes (00-59) +- **Tens place**: Each digit 0-5 appears 10 times per hour, so 240 times/day +- **Ones place**: Each digit 0-9 appears 6 times per hour, so 144 times/day + +## Complete Count per Digit + +| Digit | Tens(H) | Ones(H) | Tens(M) | Ones(M) | **Total** | +|-------|---------|---------|---------|---------|-----------| +| 0 | 264 | 144 | 240 | 144 | **792** | +| 1 | 240 | 144 | 240 | 144 | **768** | +| 2 | 240 | 144 | 240 | 144 | **768** | +| 3 | 144 | 144 | 240 | 144 | **672** | +| 4 | 144 | 144 | 240 | 144 | **672** | +| 5 | 144 | 144 | 240 | 144 | **672** | +| 6 | 0 | 0 | 0 | 144 | **144** | +| 7 | 0 | 0 | 0 | 144 | **144** | +| 8 | 0 | 0 | 0 | 144 | **144** | +| 9 | 0 | 0 | 0 | 144 | **144** | + +## Results + +**Most Common: 0** +- Appears: **792 times** +- Percentage: 792 ÷ 5,760 = **13.75%** + +**Rarest: 6, 7, 8, and 9** (tied) +- Each appears: **144 times** +- Percentage: 144 ÷ 5,760 = **2.5%** + +The digit 0 dominates because it appears frequently in leading positions (00-09 hours, 00-09 and 00-59 minutes), while 6-9 only appear in the ones place of minutes.", "type": "text", }, ], - "id": "msg_D8WwNOBX3OKWYX8U00UuE09bjaCEU", - "model": "gpt-5-nano-2025-08-07", + "id": "msg_transformed", + "model": "transformed", "role": "assistant", "stop_reason": "end_turn", "type": "message", "usage": { + "cache_creation_input_tokens": 0, "cache_read_input_tokens": 0, - "input_tokens": 74, - "output_tokens": 6276, + "input_tokens": 80, + "output_tokens": 735, }, } `; -exports[`anthropic → chat-completions > multimodalRequest > request 1`] = ` +exports[`anthropic → bedrock > multimodalRequest > request 1`] = ` { - "max_completion_tokens": 300, + "inferenceConfig": { + "maxTokens": 300, + }, "messages": [ { "content": [ { "text": "What do you see in this image?", - "type": "text", }, { - "image_url": { - "url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxMUExYUFBQXFxYWGRsZGhkZGBgZIBgjIBYYGBkbGhkhHikhHx4mHhsYIjIiJiosLy8wGSA1OjUuOSkuLywBCgoKDg0OGxAQHDAmISYsMC4uLi40MC4uLi4uNy4uLiwsNy4xLi4sLi4uLi4wLi4wLi4uLC4uLi4uLi4uLi4uLP/AABEIAOAA4QMBIgACEQEDEQH/xAAcAAACAwEBAQEAAAAAAAAAAAAABgQFBwMBAgj/xABLEAACAQMABgYFCQQIBQQDAAABAgMABBEFBhIhMUETUWFxgZEHIjKhsRQjQlJicpLB0TOCsvAkQ1NUc6LC4RY0RJPSFSWD4jVjo//EABsBAAIDAQEBAAAAAAAAAAAAAAADAQIEBQYH/8QAMREAAgIBAwICCQQDAQEAAAAAAAECEQMSITEEUUFxBRMiYYGRobHRMkLB8BRS4fEj/9oADAMBAAIRAxEAPwDcaKKKACiik/TnpJ0daytDJK3SIcMqRu2DjODgccUAOFFJlh6T9FynHykRk/2itH72GKm6361paWZuo1E42kVQjjDFmCj1wDuoAXfStrZNEY7G0OLicbRccYo8kFgeROG38gDzxVH6ItKNa3M2j55CwlxLCzE+s2D0gyTxO446wx51S2ulDe3tzdsjIfUiVX4oAuWXzrrpnRYmCsrGOWI7UUi8UYEEeGQK5+TrVDNofHj+TPLNU68DeKKy3QnpOeICPSMLqw3dPEpeN+0gb1Pn4U3WWvejZcbN7Bv5NIqHybBrdGSkri7Hpp8DLRUWDSEL+xLGw+y6n4Gu+2OsedWJPuiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDysp9L+g1hePSkY3xlY5xydGOwGx9YEgZ7uqtWrB/S7aMNITKJZVWSzEuyHOyxV2Uhl4EeoDjrqsqp3wVlVbkuSCOQesispHNQcg1UX+rYMbJBI8QYglAxMbEEMpKHhvAORU7QDk20JPHo0/hAqfXnPWzwyai+DDqcXsKur948dzNFMoSSUiRRncxxg7J55xnwNNVV2nNFLPHsn1XXejjip4jwrhq3pNpVaOTdNCdmQdfIMO/H85q2WssfWR8KtfRPyCXtK0XFQrnRMEntxRt2lRnzG+ptFIjOUd06KJ0Ub6o2ZOREVP2XcfnXo1ZhHsyTr3TPV3RTV1OZfufzLa5dypj0TMm+K9ukP+KW+NTbbTOmYTlLxJ1+pNGN/wC+Bn31JopkeuzR8b8yyyzXiSX9MUsAAurBgfrRyDZPcSPdmrLR/pqsHx0sdxCOG0yB1/ErE+6qNlBBBAIPEHeD4UtX+rzREy2Z2W+lEd6P2YO7PZ8K34fSCltNU/p/wdHPfJu+hNYrW6GbeaOTmQrDI714iravzZo63trv10Vre4jO8xnYZG4ZHWMg9opx0B6QrmydYtI/OwHctyo9ZeyVRx78Z7+WuHURlLS9n2f8dxscibp8mx0VxgnV1DowZWAIIOQQeBBrtTxgUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB5WC+mO7Bvrhgf2NnHD+9JKx+De6t1nmVFZ2OFUFiTyAGSa/M17dNdzq7DDXtwZsH6MUe5AfAHypeSSUd/wC+JSbpDdouHZhjX6saDyUZqTRRXmZO5Wc8KWdYswTxXS+yx6KXtB4E92/yFM1Vuslp0ltKmMnZLDvX1h8KZ08lHIr4ez8mWg6ZZZoqp1UveltomJyQNg96nGfEYPjVtVMkHCTi/BkNU6CiiiqEBRS1d61HpWiggecp7RXJHbjAO7tr211yh2tiVJIW+2N36jxFaf8ADzadWkv6uXYZKK5wTK6hkYMp4EHIrpWfgoK+tNi0TLeQ7njPzgH013bz8D2d1XkLx3EIbAaOReB947wfhUmaEOrIRkMCpHYRg0s6l3QSKWJ3A6KVlG0QNx38+3Na7lkxX4xa+T/AzmPkNPow049ld/8ApsrFoZctbsx9k7zsdxwd31vvVs9fmzWnSMQktpo5ELxTKfVYHAyCc45bq3BNedGnH9Mgz/iCu1085Txpy5NeOTcdxkoqmt9arJ/ZuoD/APKn6186b1ptLaLpZp0C8sEMW7FUbye6nDC6oJrJ770i31yCLC16NDwmuN2e1UH+9Uc+gL2433mkZn+xF6i927A/yip0ipZoR5ZuCzKTgMM9WRXWsDm9H0ABaCSWOYb1k2zx7ezup99E+tcl1E9vcE/KbU7EhPFxkhW7T6pB8DzoaoMeWM+B/oooqBoUUUUAFFFcLq4SNGkdgqIpZmO4KAMkk9QAoAQPTLpplt0soiOlu22D9mMb5G+A7iazTVmJZJ5Jl/ZxAQRdyjefH/VXDWLT73ElxpE5+dPye2X6q8CwHXuJ72NMGgrAQwxxcwMt3ne389lc3rstRaXl+TNmkWFFFFcUyhRRRQAq6nfNy3NufoPtL3Zx8NnzpqpSvz0Gk45OCzrsnvwF+ISm2tXVbyU+6T+PDLz5vuFU2tukuht2YHDP6i9mQST4AH3Vc0pafXp76G34qnruP83wAH71HR4vWZknxyRBb7jXqTogW9sgx68gDue0jcO4DA86tr6ximXZlRXHUwz5dVdYvZHdX1XpxLk27Eq81MeBjLYSFW4mFzlW7AT+fmKrLTSWkLmVoI1ihdB64cnaHWQDnPgPGtIqLcaOieRJWQGSP2X4MOWMjiN53HdSZ9PjnLVKKbGLN/tuKq6kyyft72RuyP1R7/0qVD6PbEe0sjnraQ/BcU1UVeMVHZKijyz7lHHqfYj/AKdPHaPxNdP+FLL+7R/hq4oq4esl3KKTU2xbjboO7aHwNQZvR5ZHeokjPWshOPxA0yX17HCheV1RRzY48B1nsFJmkdeXclbWP1f7STd+FP18qgspTq72Lu10BcRn5u+kYD6MqLJ79xq8gDBRtkFuZUEA9wJJHnWRaSubhlZ5LmUkAnCsUUdgUbq1HQAcW0O2SW6NNok5JOyOJ66mqIlUlad/An0vw3PyPTFtMN0d38xJ94kKhPiU8jTBSTr1eq6yIMrLbGOUA7toZB2kPVxB6sVDLYG1NH6DoqJou6EsMcg3iRFbzUGpdLOmFFFFAHlZV6YtOPI0ejIGw03rTsPoRgjA8d58AOe7RtM6SS3glnkOEiUufAcB2k7vGsG0FI0nyjSE/wC0nLSb/ooMkAdmBjuUUjPl9XBtc8LzF5JaUQkgWW+SFR81aIDjltbse8j8JpupY1EjLRSTt7U0jHwB/UmmeuH1crnp7bfHxMeTmuwUUUVmKBRRRQAs6/WZaBZF9qJg2ew7ifA7J8Ku9E3wmhSUfSG/sPBh55rvPCrqyMMqwIPcd1J+q1w1tO9pKdzNlDyJxu8GA8wa2RXrcLj4x3+D5+Qxe1Guw6Uq6rJ0t5dXHIHo18wD7kXzpi0jcdHFI/1EZvJSRVRqDb7NorHjIzMe3fsj4Vr9FQ3lL4FVtFv4DxF7I7hX1XxAfVHdX3XaM4UUUUEBRRXtAHlV2sGlBbQPKV2tnAA6yThcnkM1ZVEuY4Z1khYq4I2XUHeM9eN4PV3UFo1e5lk8klw3S3DbbHeq/RQcgq8K6VN0tq5Pa5KAywciN7p2MvMdoqnbSMeztBgezn3YqyaF5oZJS7rwolW1obieK3HBmDSdiKcnz4eIrWgOrhSrqHoVokaeQYkmwcH6KcVXsJ4nwpqqrdjWlFKK8PuFKfpB0GZoTNHnpYlbOPpoR669uOI8abaKCIycXaL/ANFl4JdF2jA52Ygh7ChKEHyptrHtQr02GkXs23W93mSH7Mg9pB37/Je2tgpbOtGSkrR7RRRUFjKPTppUskFgh9a4cO+PqIcj/MM/uUq6xER2MiruAjCAdQOF+FfWtt10+mrh+It0WJezcc48WfzqNrof6E/7n8QrmdXLVnhDs19TLldzSJurEGxawr9gMe9iWPxqzqLor9hF/hp/CKlVycrucn72Z5chRRRVCAooooAKp9YtBLcJx2ZF9h+rng9nw41cV47AAknAG8k8qvjnKEk48kptO0IWkdPSLbyW1whEwUKG+uM7yT3c+dO2hbfo4IU+qij3ZPvpB1k0kbqVNhT0KSBFbHtMx6+4ZA6t/OtKAxu6t1el6XHphdU3u0Xy7JFlan1RXWuNn7A8a7VpMrCo9xpCGMhXljRjwDOqnyJqn1p0tKjR21sNq5uDsoPqDm5/36ieVUmu+gbWwiS12RcX9wNqWeQk9Gud5RSdxJBAJ34UnqqG6NODpZZarx2XvHpWBGQQQeY358aVX0i9jOEmYvaysejkYkmJjv2XPNeOOod1LttY32j4kulDm3fGVb2WGMggfRyM4O7xp1YQ6QtTjfHKOfFGHWOTKf530J2Mz9LLppaZ8e7f7eKPjXS7litJHi3NlQWG8opYBnHd18s5pF1duBbTxSKTsSMI5DnO0HIwx6yGwfOnbVBZTbGG5Q7UTNEdobpFAGCDzGDjPZVPDqKwuADIPkysHC79vcciM/ZB59VBn4dXxz70PFQn0VAXEhhiMg3hthc9+ccam15Uik6OV3cpGjSSMFRRkk8qr9BaxQXW10THKcQw2TjkQOqk/XnShnm+TIfm4jmTH0n5L+78SeqoWgJhDewsMASZibluYbveBRXiXqN6Xy9/75jnpu5Z7u2tlOASZ5MH6KZ2B3Fx7qg3+tkhuvk1tHHIwOyekfY23/sozw2uW87zuq3m0ds3TXhb2YNgLjhhi5OeqlyLVcPoZb0ZEzyvIzAnJBkIU9hUgHI7aq3Rt6Pp455qL7bebOusFwbu1M0QaK5tJA5Q7njZT6wPxH3a2vVnTC3dtDcLjEiBiByPBh4HIrFZNJZitdKMN8hNnfAcGI3JI3eqjJ7QO9t9ClyYvldgxz8nl20+4/V2ZGf3jUPcZCOhuHyNSr2vKKgbufmzQ8m3cXsh4tcSfxsfzqfrAu3ZzLzVdryOarNX12Z7yM8VuH/jZfyq7kXIKngwKnuIwa4fUvT1DfZpmLJtM91Yn27WFvsbJ71JU/CrSlTUOfZWW3b2omJHcTg+/wCIprrL1MNOSS9/0e4uaqTCiiikFQooqNfXscSGSRgqj39gHM1Ki26QHeRwoLMQAN5J3Ad9KjPNpKQwwZS2U/OSEe1zxjywviaqNIabNzIBKJEtgc7MYyz44ZPDf7vfTjofXLR6qsK7UCjcAyEAd5GfM13Oj6D1ftz5+wynFbK39iNrRo6OI6OgiXCCbPacbBJJ5k78mmGvNM6ME0kEwb9izMAN+0GUAYPZuNdoICx7K6YqUrSJtquFFfUkgUFmOAoJJ6gBknyr6pe1/vOisZetwI/xHB92akXFamkWXob0f8omudJyDe7GKHP0VGNojyUfi6zSZpGf5bpmdicqZlgX7qsEOPInxra9QNGi10fbRYwViDN95vXf/Mxr8+6hXHz8crc51YnvYE/GlS4Z6b0XjvMq8E2vgj9C64WKvYzpjhGSB2qu0uPECsG1M0j8muuhJ+ZuOH2X+j+niK/Qes8oWzuGPKJz/kOK/MumYSY8jcyHaBHL+ePhRdMfg6T/ACeiy3zF2v5NlryoOgtIfKLeKbm6gnv4N7wanU08i1ToK5XcjLG7KMsFYgdZAJA8660UAYzoyQFTk5diWbPHaJ35FfekZNlQ/ON0ceDCtP0rq7bT75I1LfXX1W/EPzqgf0eQkj5+Ux5yUbZOd+cbX+1Te1FlGLnrvxsZNYpMW1w3VE5/ympdlGF1bjB/sVPiXz+dQtZVza3AHOJ/4TS4NcDJouCzCbJREDNncQvs4HWd2e7t3Knwdr0H0882ZaFw035BqDbC4t9KWB3h4lmQdTAcR4hK89HmlyukbGUn1buBoZPvptDPflY/xGpfoYH/ALrN1fJGz/3ocfnSlouXorS0uAcC3vTg/ZJUn4UIZ6QiodTJLuz9SUVH+VrRUGc/P+s9r8l01cRnctz84v7wLfxBxUymr05attLAl7EPnbb2scTHnJPbsn1u7apJ0RpBZ4lcceDDqPMVy+vxO1kXkzNmjvZS6c2redLpAcN6rgd35gea02Wt+GUMPWUjII51EurdZEKOMqwwf566WLaeSxfo5MtAx9Vhy/36x4is+lZ4JfuX1X/Clal7x8WdTzr7DDrFVFvOrqGRgyngRVfpDSbbfQwLtzHl9FBjeznsrPDppTlpjyLUbLTTenIrdfW9Zz7KDi36DtpNn6Sd+lnOfqx8k7Ki6KUuWlc7TE4DHn21ZZrv9J0UMKvl9/wIzZnBuEfi/wABUHSsZfYiUZeRgq+ePzqcas9QdHdNO10w9SH1I+1sbz4A+bDqrbJ7Cumj7Wvt/UaBZW4jjSMcERUH7qhfyrtRRVBgUn+lAZtoxyM6A+TU4VT62aGa6t2iUhXyGUnhkHIz1Z4ZoL42lNNmu2q+ov3R8BX5YsLUwyTwHcYpWXyYr+Va9ov0prAqR6Qt5YHUBTIq9JG2N2QRvGeON9Zzr3f2jX3ym1mSSK5UFwMhkcbjtKQCARsnP3qU0ek9F544upjNvbj57DNpjX6Wa0W3KYYgK75ztAY4DG4nG+kx0yCOsYrwSqeDDzFePOq7ywA76oe2x4+nw42oUk93v3Gj0WTlrRkP9XKwHcVVviWpxpP9F1uwtncjAllLL2gKq588+VOFPPk/UV610FFFFSJCiiigDndQ7aOn1lK+YIrI9GnEYUnemVbsIJBzWw1Q3ep9lJKZXhyzHLes4BPMlQcb6rKNnX9E+lP8DJKdXaquBY1I1i+TvdmGN5riVFiiVBuQAEs7vwAB2fKuusehvk+h+iJBZGRmI4bTPvx548KebKyjiUJEiovUoApG1r0wZtGPIcevOVTHNVkJU+S0VQnL1UuoyubXMr+Ze/8AGx6z+IfrRUP/AIAk+qPf+tFGw+jd3QEEEZB3EHnWCa86nS6Mma5tlLWkhy6j+p35wfs7zsty4Gt/rlKgYEEAgjBBGQewilSipKnwS0mqZ+ftH6QjmXajbPWOa9hFSJYlYFWAYHiCMg03ay+iCB3M1jIbWXjsgExnuUHK+GR2VmulIL+O4Ojy8TykDLxEnYHPaO7ZIAyd3MczXOn0EtX/AM3t9jNLC1uiAujS1x0Vizhj+0Ib1EHAk92/4CtE0Hq7DbwmNRtFwRI59p88cnkN+4V11f0JFaxCNBkne783PWezqHKrOupjhoVcvuZcmVy2XBmektT7m2yYPnouOzuDr4c+8eVVCX652WyjDirjZI862SoV/ouGYYliSTtZQSO48RTU2hctE/1LfujLOjed1gh3u/E8lXmxPVWqaJ0ckEKQx+ygx3nmx7Sd9c9F6Ggt89DEqbXEjJJ7MnfjsqfUN2DajHTHgKKKKCoVSa3ySJb9LGTtROkhA5qp9YHrGCato7lGZkDAsmNpc71yMjI7a6MoIIIyCMEHn1g0Fk6dkbR19HPEskZDIw78dasORHUajXOr1pJve3iJ69gD4VRz6kmNzJZXD27Hiu9kPv8AjmvOm0xDxjhnA5qQpPw+FA3Sv2y/gsG1JsT/AFA8GYfnXW31RskORboSPrZb4mqg643Ef7bR0q9qZYfw499dI/SHbfTjmj+8mfgagms39Y3KoAwBgDgBuxRS5Dr1YN/XY+8rD8qlprVZH/qYvFsfGpFOEuzLiuV1dJGu1I6ouQNpiFG/gMmoS6wWp4XEP/cX9a+LrStk6FHnhZG3FWdCD4ZoI0vxRaIwIBBBB3gjeD3Gvi5nWNGdtyqCx57gMndVLb6e0fDGsaTxqijAUNtY59pqJca+WvCNZZm+rGhOfE0Fljk3si80RfNNEspjaPayVVjv2fok9RPHFfWk9JwwLtzSKg7TvPcOJPdS4LrSlzuSNLRD9J/WfHYuN3kK7Qas20ANxcyGV13mWY5APH1VJxx4DfUFtCT3+S3OMmkLm/yluphtzuadxhnHMIvLv+FQ9DaKXSN7BawD+hWeGkfiGxvO/mWI2R3salQG70u5hs1MNsDiS4YEBh9Uf+IOesgVsWq2rcFjAIYFwOLMfadsYLMev4VDZsw463ar3Ft0S9QorrRVDQFFFFACj6R9bV0faGUb5ZDsQrxyxGdojqUb/Ic6z/U7QbQRtLMS1xMduVjvIzv2c+89prjpy6OkdMuTvgsRsoORcEZPeX2vCMVx1i1xaKXoYEWR1/aMxIVfs7ufX31eKMnUTb9lfEbaKQf+ObocbZG+67D4irbRGvEErrHIjxSMcANvBPIBh19uKsY1Bvdb+QxXd3HGAZGCgsFBPDJ4DPLNd6j39mksbRSLtI4wR/PMHfSRPp6WwjltpiXZUJtpcZ2wfVAbtXd5Y6qC0YauORhtdLPNePHF+ygB6Vse253KgPUN5PdV7VNqhozoLaND7bDbkPMs285PYMDwq5oKzq6QUUUUFBc1l0PKZFurVtmeMbJU8JF+qRwzvP8AOKNB64Qyno5fmJgcNG+7fz2SfgcGmOlrWPR9rPKIpFBkKbYI3HGdnc3luqB0WpKpDNXlIUWh723/AOVuSyDhHLvHgeHlipCa23kX/MWRI+vEc+7ePfUkeqv9Lsdga+XUHiAe8A0qw+kGzO5zJGepoz+WasodbLFuFzH+8SvxAoIeOa8Cwk0bC3tQxnvRf0qI+rlo3G3hP7grsmmrY8LiE/8AyJ+tenTFv/eIf+4n60Ee0u5DOqVif+mj8iPzrwao2P8Adk8j+tdJtZ7NeNzF4MG9wzVXca/2Y3RmSVupEbf4nFQWSyviy3i1dtF9m3iH7gqcqxxqSAqKOJwFA8aUH1jv591vaiJT9OU7/wAO7866R6mvMQ99cSSnj0anZQfz2YoLOP8Au/5PvSmvMYJjtUa4kAJJUHYXG8knifDd21K1A1TXSq/LL24Myq5UW6ZRUI34fG/BGOHI8TV3YWEUK7EUaovUoxnv6/GqLVK8/wDTNLdEd1vf4A6lfaOyPBmK9zjqoY/p5Q1UkbTZWkcSLHGioijCqoAA7hUmiilmwKKKKACqzWPSHQWtxP8A2UTvjrKoSB4kAVZ0nel2bZ0TdfaQL5uooAyvU12g0bNcn1pHMkhPWVJUHzBNKujY8JtE5Z/WZuJJPHfWk6owgWMCkZBiGQee1knPmaUNP6qy2xMluDJDxMe8tH93mV99OTo5WW8mqKe9/P3FdX3oa16a9hj4iM9K3YFwR79nzqCukoyhYNwHDn3U6+jrRRSJriQYefeOxAfV8+PdiiTE4YODcpKq2+I4Uka+KJbqxgwMtIWY88bSAjuwGPgKdqSbo7emowf6uHI/C3/lUDsXN9kx3qq07p+G1Xalb1j7KLgs3cOrtO6vjWrTXyWAygbTkhEHWxBIz2AAnwrMkgd3MszGSRt5J5fl4cBQlZX2YrVL/wBLHSeuV9JmSPEMa7woAJI+0SN/hitK0Xd9LDFL/aIreYBrKb72G+6fhWkanf8AJW/+EPzqWqDXrhdVuW9KOuTGK6spuRZom7m2cfEnwpupS9Ji/wBHjfmkyEe8VUti/Ui3orwHO+igDnNbI/tIrfeUH4ioEurto3GCPwXHwqzooBSa4KVtUrM/1I8C3614NUbP+xH4m/Wruign1ku5Vx6tWi8IE8Rn41Pgto03Iir91QPgK60UEOTfJKsY8naPKptcbQeqO3fXapFsKWvSDo4y2pkXdJAelUjiMe1jwGf3RVhrNpxLWEyEbTk7MafWb9BxNUOp2sU1xJJBchSWQsuFC7uDqccRgjt40Dcaa9pGyamaaF3ZQXA4yINrsYEq4/EDV3WX+g25KR3Vkx328xKj7L5x71NajSmdNO0FFFFBIUlemGMnRVzjkFPk6060v6+2Zl0ddxgZLQSYHWQhZR5gUAZ1qdKGsrcjlGoPh6p+FXNJXo5vv6Ko47LMpH7xYe405owIyKacnIqkyovtWLSVw7xLtg5JGV2vvAbm8auAKKKCjbfIUixt/wC9v/hgf5Up6pDvRs6Z+9EP4f8A60DcXj5DDrnoo3Fs6L+0QiRPvLnd4gkVndlciRA3Pgew8612J8gGs71z0N8nl+URj5mQ/OAfQY/S7m+OeupToXKOuOnxXH4KPSRxG/3TWo6tx7FrAvVEn8IrLNJjaj2RxdlUduTWwwR7Kqv1QB5DFEuSuPbF8fwfdKHpPb+iqPrTIPiab6SfSQ+09nCOLzbXgCi/6j5VA3D+tF9GNw7h8K9r015UAFFFe0EHlFQtIaXgh/ayop6s5P4RvqBYXt5fNsWFsxXnPKNlF7RyPdvPZQXjjlLhFjpLSUUKbcrhRy6z2AcSai6IvJpmMjIIoceorD13+0fqjsqovNX5LTSccV24uGeLbV2B2do8lB+qVI8QcCmygtOOjbxLS39le6ugrjaH1RXWpM5lem7/AOVXTyZzHESkQ5bj6zeJ/LqrpoF9m+tj9Yuh8UzVbb27W7Nbyeq6McZ3bQ5MvWDU/RAze2g59IT4BDmrftJd+urwp15UP+pLGLTsy/RuLUPj7SlB/pfzrYKxy3bY01YMPppKh/CTWyUmXJ08LuCCiiioGhXw6ggg8Dur7ooA/OWrsHya9u7Jt2w5ZO4EY/yMh8Ka0cjgcVz9M+hnguIdKQrkAiOcDuwrHsK+rnsWudpdJKiyIcqwyD+vaKujB1EKlZYJenmM10+WjqPuqjttMQSSGNJUZxxUHq44PA+Fdby/iiAMkioDuG0cZ7qkRp8KLY3vUKSdZpiukbSU7g/qHz2f9YpjuLtEjMjMAgGS3LH50n61aRjng2l2kkhZJFEilCwY4BUHiDuPhQNxR3+hoVjJ9HxH513ubdZEZHUMrDDA8CKo9E34mijmU+0M9x4MPA5FXsMoYZ86BElTEyx1FaO5RjKGt4220Q52sg5VTuwQDjfnlwp3ryipCUm+QrONZTNcaRK25UNbIMFuAPFuR37wOHKnvTOklggkmfggzjrPBQO84FZ1qjpaKIzNcMY5ZT0u0wIDKcuNk45kkjryMVA/CnTkkWkc2lgN8EUmOakD/UPhX38t0p/cl/H/AL1bR6XuVhS6a02bNnVelZwHwzbIk6PkmcDfv3g1Omv7iSSWOztxOYBmVmcIqnGejU/ScjwGaLLaZ3WlC50WmH4RwRDrJB/NvhULTWibiGEy3l8QvARxDBY8lBwvw3CmjQ18dJTrBBMYYxGskzjBkG1uESA7gQc7TYOKk6q6lJLpG4W8la4NkyCONwMMrqHjkfkd27HMrv4YqLG48c3u6X3OHoh9HKlPll7EGL4MMbjOBx6RlPM8s8Bv51ssUYUBQAAOAAwB3CulFVbNRmHpy0Iz28d5EPnbVton7B4nwYKe7aqh0berNEkq8HGe48x4GtnuIVdWVwGVgVIPAgjBBr8/GzbRV69lKT0Ep24XPUdwyeGd2ye0A86lMz9Rj1K0N9g/EeP61LqqjfBz1VaRuCMirHPZD0nomGddmWNXA4E5BHcw3jzqForVa2gk6SNXL4IBdmOyDxxmrlWB4EHluOapbrWaKObomD7KsqPKFJjjdvZRm5E+6gtHW9kfV1/+U0Yf/wBsg/8A51s1Yho3RMlxG2loZCbiCR2hhyDGY4iUZCOO24DHOeYrYtFaQSeGOaM5SRA69xGaozo4YuMEmTaKKKgaFFFFAEe8tElRo5FDo4KsrDIYHiCKxjWn0V3FusjWMskkDEF7bJ28bQJEbczjuJ4b62+vKmyGrMF1m0how2cD2iJDcWs0fzOyI5iCdmRGU+s56zv99e6k/I3uZX0pFsSyHZhS7QogTA3JtgLt5/241smkNXbSZ1llt4nkQgq7IpIIORvxnjUrSWjIZ0KTRpIh+i6hh76LI0q7Pz9Bo+dZTEtvJcWdjdHbaMiQsgO1GuxxbZBBOM00axXuj7+/0YcLK228UsLIytslMoXQgYCsDuO7fWnaA1etrNDHbRCNGYuQCxySAM5JJ4AbuFWPQLtbWyu114GfOiyVFLg/P2lbGXQ1w8Uis1nKxaKQAnZzyP2hwI54yOdWGir27umlNhAsscXtSO+yHOM7CDmcVt17ZxyoY5UWRG4qwDA+BrL5Uk0FNO0Vu8tlcesixjaaGXGyqsCc7DbgDnqHHcZsW8MG7ZU2+szzCFLaEyXE2QIicCPZOJDI2NwU5HLNfF5p2cA2/RCO+MywdGW2lUsNoSg802d9StFap3mjDDpGONp3dGN3CuNtNthIehGN+N4K54jnndOsNCQ6Zu7m82ZoVjEMVvL60ciugZpG2TuOCwXfnhyosqungVGkdRro3lpaXN309tKzSbZXYLFELNHgE5yBkb+BY8q1XTOq1ncxiOeCNwq7KnZAZBjACMN643cOoVRRaqXxltXnvY5UtpTIPmOjdsoyEFg+zwY/RFPFRY5RS4Mr09qjpNLOSxgaO5t5FCIZG6OWEBgVyd6uBjGdxxira31MuLF3fRssfRu221vOGI2sbJKzA7QyANxB4U/0VBJm+q/o1hFuPlcKpc9JI/SQOysoZyygSLgnAxxpi1b1QS0mlmE88zyqiEzOHwEzsgHAJ48yaZqKACiiigApY181Pi0jAYn9WRd8cmMlD+angRTPRQB+dDfXWj26C/hk2V3LMoLKwHA7XBhjG/OesV9aQ1tidFjt51V5mWPbb1REG3NIxPDA+NfoSWJWGCAR1EAjyqvn1etHBV7eFg3EGNDnv3VbUJeCDdmUay6HTRcaXdiduHCxzRGQEMx3RzBt+CWwDy4V20UDDo+SyvNHXZM220skUPTBnckiRXQnePVIz1U9n0d6M/ucXHOBtBT3qDg+IpoVQBgbgKixiik7M01A1KtpbGFri0aOX1lfPSxF9liquyZG9lAO/r6q0LRej44IlhiUJGgwqjJwPGplFQWCiiigD//Z", + "image": { + "format": "jpeg", + "source": { + "bytes": "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", + }, }, - "type": "image_url", }, ], "role": "user", }, ], - "model": "gpt-5-nano", + "modelId": "claude-sonnet-4-5-20250929", } `; -exports[`anthropic → chat-completions > multimodalRequest > response 1`] = ` +exports[`anthropic → bedrock > reasoningRequest > request 1`] = ` { - "content": [ - { - "text": "", - "type": "text", - }, - ], - "id": "msg_D8WwJGn3cD8awZvtT5DIX43pZdj91", - "model": "gpt-5-nano-2025-08-07", - "role": "assistant", - "stop_reason": "max_tokens", - "type": "message", - "usage": { - "cache_read_input_tokens": 0, - "input_tokens": 99, - "output_tokens": 300, + "inferenceConfig": { + "maxTokens": 20000, }, -} -`; - -exports[`anthropic → chat-completions > reasoningRequest > request 1`] = ` -{ - "max_completion_tokens": 20000, "messages": [ { - "content": "Solve this step by step: If a train travels 60 mph for 2 hours, then 80 mph for 1 hour, what's the average speed?", + "content": [ + { + "text": "Solve this step by step: If a train travels 60 mph for 2 hours, then 80 mph for 1 hour, what's the average speed?", + }, + ], "role": "user", }, ], - "model": "gpt-5-nano", + "modelId": "claude-sonnet-4-5-20250929", } `; -exports[`anthropic → chat-completions > reasoningRequest > response 1`] = ` +exports[`anthropic → bedrock > reasoningRequest > response 1`] = ` { "content": [ { - "text": "Step 1: Distance for first part = speed × time = 60 mph × 2 h = 120 miles. -Step 2: Distance for second part = 80 mph × 1 h = 80 miles. -Step 3: Total distance = 120 + 80 = 200 miles. -Step 4: Total time = 2 + 1 = 3 hours. -Step 5: Average speed = total distance / total time = 200 / 3 mph = 66 2/3 mph (about 66.67 mph). + "text": "# Solving for Average Speed -Answer: 66 2/3 mph.", +## Step 1: Find the distance for each segment + +**First segment:** +- Speed = 60 mph, Time = 2 hours +- Distance = Speed × Time = 60 × 2 = **120 miles** + +**Second segment:** +- Speed = 80 mph, Time = 1 hour +- Distance = Speed × Time = 80 × 1 = **80 miles** + +## Step 2: Find the total distance and total time + +- **Total distance** = 120 + 80 = **200 miles** +- **Total time** = 2 + 1 = **3 hours** + +## Step 3: Calculate average speed + +$$\\text{Average Speed} = \\frac{\\text{Total Distance}}{\\text{Total Time}} = \\frac{200}{3} = \\mathbf{66.\\overline{6} \\text{ mph}}$$ + +**Answer: 66⅔ mph (or approximately 66.67 mph)**", "type": "text", }, ], - "id": "msg_D8Ww7xQ50eq2Js3P6aJ5bA9RCsucg", - "model": "gpt-5-nano-2025-08-07", + "id": "msg_transformed", + "model": "transformed", "role": "assistant", "stop_reason": "end_turn", "type": "message", "usage": { + "cache_creation_input_tokens": 0, "cache_read_input_tokens": 0, - "input_tokens": 38, - "output_tokens": 454, + "input_tokens": 45, + "output_tokens": 238, }, } `; -exports[`anthropic → chat-completions > reasoningRequestTruncated > request 1`] = ` +exports[`anthropic → bedrock > reasoningRequestTruncated > request 1`] = ` { - "max_completion_tokens": 100, + "inferenceConfig": { + "maxTokens": 100, + }, "messages": [ { - "content": "Solve this step by step: If a train travels 60 mph for 2 hours, then 80 mph for 1 hour, what's the average speed?", + "content": [ + { + "text": "Solve this step by step: If a train travels 60 mph for 2 hours, then 80 mph for 1 hour, what's the average speed?", + }, + ], "role": "user", }, ], - "model": "gpt-5-nano", + "modelId": "claude-sonnet-4-5-20250929", } `; -exports[`anthropic → chat-completions > reasoningRequestTruncated > response 1`] = ` +exports[`anthropic → bedrock > reasoningRequestTruncated > response 1`] = ` { "content": [ { - "text": "", + "text": "# Average Speed Calculation + +**Step 1: Find the distance for the first part** +- Speed × Time = Distance +- 60 mph × 2 hours = **120 miles** + +**Step 2: Find the distance for the second part** +- 80 mph × 1 hour = **80 miles** + +**Step 3: Find total distance** +- 120 + 80 = **200 miles**", "type": "text", }, ], - "id": "msg_D8WwEXbGME8woQ2rReuPCDxRjmHkJ", - "model": "gpt-5-nano-2025-08-07", + "id": "msg_transformed", + "model": "transformed", "role": "assistant", "stop_reason": "max_tokens", "type": "message", "usage": { + "cache_creation_input_tokens": 0, "cache_read_input_tokens": 0, - "input_tokens": 38, + "input_tokens": 45, "output_tokens": 100, }, } `; -exports[`anthropic → chat-completions > reasoningWithOutput > request 1`] = ` +exports[`anthropic → bedrock > reasoningWithOutput > request 1`] = ` { - "max_completion_tokens": 20000, + "inferenceConfig": { + "maxTokens": 20000, + }, "messages": [ { - "content": "What color is the sky?", + "content": [ + { + "text": "What color is the sky?", + }, + ], "role": "user", }, ], - "model": "gpt-5-nano", + "modelId": "claude-sonnet-4-5-20250929", } `; -exports[`anthropic → chat-completions > reasoningWithOutput > response 1`] = ` +exports[`anthropic → bedrock > reasoningWithOutput > response 1`] = ` { "content": [ { - "text": "Typically blue during the day. The sky looks blue because sunlight scattering by Earth's atmosphere scatters shorter (blue) wavelengths more than longer (red). At sunrise and sunset, the light passes through more air, so more blue is scattered out and the sky takes on red/orange/pink hues. It can appear gray on cloudy days, and dark/black at night. In space, without atmosphere, the sky is black. If you want, tell me your location or time and I can describe the current color.", + "text": "The sky typically appears **blue** during the day, caused by sunlight scattering off molecules in the atmosphere (a phenomenon called Rayleigh scattering). + +However, the sky can appear different colors depending on conditions: +- **Orange, red, or pink** at sunrise and sunset +- **Gray or white** on cloudy days +- **Dark blue or black** at night +- **Reddish** during dust storms or air pollution", "type": "text", }, ], - "id": "msg_D8WxDDQyIDbSgoSKDJTtTaCxv1tts", - "model": "gpt-5-nano-2025-08-07", + "id": "msg_transformed", + "model": "transformed", "role": "assistant", "stop_reason": "end_turn", "type": "message", "usage": { + "cache_creation_input_tokens": 0, "cache_read_input_tokens": 0, - "input_tokens": 12, - "output_tokens": 752, + "input_tokens": 13, + "output_tokens": 100, }, } `; -exports[`anthropic → chat-completions > simpleRequest > request 1`] = ` +exports[`anthropic → bedrock > simpleRequest > request 1`] = ` { - "max_completion_tokens": 20000, + "inferenceConfig": { + "maxTokens": 20000, + }, "messages": [ { - "content": "What is the capital of France?", + "content": [ + { + "text": "What is the capital of France?", + }, + ], "role": "user", }, ], - "model": "gpt-5-nano", + "modelId": "claude-sonnet-4-5-20250929", } `; -exports[`anthropic → chat-completions > simpleRequest > response 1`] = ` +exports[`anthropic → bedrock > simpleRequest > response 1`] = ` { "content": [ { - "text": "Paris.", + "text": "The capital of France is Paris.", "type": "text", }, ], - "id": "msg_D8Ww5HsFKrIRw7BCuPTadlfOhw97w", - "model": "gpt-5-nano-2025-08-07", + "id": "msg_transformed", + "model": "transformed", "role": "assistant", "stop_reason": "end_turn", "type": "message", "usage": { + "cache_creation_input_tokens": 0, "cache_read_input_tokens": 0, - "input_tokens": 13, - "output_tokens": 203, + "input_tokens": 14, + "output_tokens": 10, }, } `; -exports[`anthropic → chat-completions > systemMessageArrayContent > request 1`] = ` +exports[`anthropic → bedrock > systemMessageArrayContent > request 1`] = ` { - "max_completion_tokens": 300, + "inferenceConfig": { + "maxTokens": 300, + }, "messages": [ { "content": [ { - "text": "You are a helpful data analyst. The default data source is project_logs with id abc-123.", - "type": "text", + "text": "System: You are a helpful data analyst. The default data source is project_logs with id abc-123.", }, ], - "role": "system", + "role": "user", }, { - "content": "What errors occurred recently?", + "content": [ + { + "text": "What errors occurred recently?", + }, + ], "role": "user", }, ], - "model": "gpt-5-nano", + "modelId": "claude-sonnet-4-5-20250929", } `; -exports[`anthropic → chat-completions > systemMessageArrayContent > response 1`] = ` +exports[`anthropic → bedrock > systemMessageArrayContent > response 1`] = ` { "content": [ { - "text": "", + "text": "# Recent Errors in Project Logs (abc-123) + +I'd be happy to help you analyze recent errors, but I need a bit more information to give you the most useful analysis: + +1. **Time range**: What does "recently" mean for you? + - Last 24 hours? + - Last 7 days? + - Last week? + +2. **Error type**: Are you interested in: + - All errors? + - Specific error categories (e.g., database, API, authentication)? + - Errors above a certain severity level? + +3. **Level of detail**: Would you like: + - A summary count of errors? + - Top errors by frequency? + - Full error logs with stack traces? + - Errors grouped by component/service? + +Once you provide these details, I can query the project_logs (abc-123) database and give you a comprehensive error analysis.", "type": "text", }, ], - "id": "msg_D8WxKK6CbhVrFzmz27GtpfxAANyUQ", - "model": "gpt-5-nano-2025-08-07", + "id": "msg_transformed", + "model": "transformed", "role": "assistant", - "stop_reason": "max_tokens", + "stop_reason": "end_turn", "type": "message", "usage": { + "cache_creation_input_tokens": 0, "cache_read_input_tokens": 0, - "input_tokens": 11, - "output_tokens": 300, + "input_tokens": 35, + "output_tokens": 209, }, } `; -exports[`anthropic → chat-completions > toolCallRequest > request 1`] = ` +exports[`anthropic → bedrock > toolCallRequest > request 1`] = ` { - "max_completion_tokens": 20000, + "inferenceConfig": { + "maxTokens": 20000, + }, "messages": [ { - "content": "What's the weather like in San Francisco?", + "content": [ + { + "text": "What's the weather like in San Francisco?", + }, + ], "role": "user", }, ], - "model": "gpt-5-nano", - "tool_choice": "auto", - "tools": [ - { - "function": { - "description": "Get the current weather for a location", - "name": "get_weather", - "parameters": { - "properties": { - "location": { - "description": "The city and state, e.g. San Francisco, CA", - "type": "string", + "modelId": "claude-sonnet-4-5-20250929", + "toolConfig": { + "tools": [ + { + "toolSpec": { + "description": "Get the current weather for a location", + "inputSchema": { + "json": { + "properties": { + "location": { + "description": "The city and state, e.g. San Francisco, CA", + "type": "string", + }, + }, + "required": [ + "location", + ], + "type": "object", }, }, - "required": [ - "location", - ], - "type": "object", + "name": "get_weather", }, }, - "type": "function", - }, - ], + ], + }, } `; -exports[`anthropic → chat-completions > toolCallRequest > response 1`] = ` +exports[`anthropic → bedrock > toolCallRequest > response 1`] = ` { "content": [ { - "id": "call_a3mN6ADjJKbiKIuOVc0tY4C9", + "id": "tooluse_LmwV398ieC9MtSQdcAb3dj", "input": { "location": "San Francisco, CA", }, @@ -337,69 +440,68 @@ exports[`anthropic → chat-completions > toolCallRequest > response 1`] = ` "type": "tool_use", }, ], - "id": "msg_D8WwFTHGcASl8ky2IM7XxBfEHPVw7", - "model": "gpt-5-nano-2025-08-07", + "id": "msg_transformed", + "model": "transformed", "role": "assistant", "stop_reason": "tool_use", "type": "message", "usage": { + "cache_creation_input_tokens": 0, "cache_read_input_tokens": 0, - "input_tokens": 148, - "output_tokens": 218, + "input_tokens": 585, + "output_tokens": 57, }, } `; -exports[`anthropic → responses > complexReasoningRequest > request 1`] = ` +exports[`anthropic → chat-completions > complexReasoningRequest > request 1`] = ` { - "input": [ + "max_completion_tokens": 20000, + "messages": [ { "content": "There is a digital clock, with minutes and hours in the form of 00:00. The clock shows all times from 00:00 to 23:59 and repeating. Imagine you had a list of all these times. Which digit(s) is the most common and which is the rarest? Can you find their percentage?", "role": "user", }, ], - "max_output_tokens": 20000, "model": "gpt-5-nano", } `; -exports[`anthropic → responses > complexReasoningRequest > response 1`] = ` +exports[`anthropic → chat-completions > complexReasoningRequest > response 1`] = ` { "content": [ { - "thinking": "", - "type": "thinking", - }, - { - "text": "There are 24 × 60 = 1440 times, each represented as four digits HHMM, so there are 5760 digits in total. - -Count by position: -- H1 (first hour digit): 0 appears 600 times, 1 appears 600 times, 2 appears 240 times. -- H2 (hour units): digits 0–3 appear 180 times each, digits 4–9 appear 120 times each. -- M1 (minutes tens): digits 0–5 appear 240 times each. -- M2 (minutes units): digits 0–9 appear 144 times each. - -Total counts per digit (sum of the four positions): -- 0: 1164 -- 1: 1164 -- 2: 804 -- 3: 564 -- 4: 504 -- 5: 504 -- 6: 264 -- 7: 264 -- 8: 264 -- 9: 264 + "text": "Total times: 24 hours × 60 minutes = 1440 times. Each time has 4 digits (HHMM), so 1440 × 4 = 5760 digits in total. -Most common digits: 0 and 1, each 1164 times, which is 1164/5760 = 97/480 ≈ 20.21% each. +Count digits in each position: -Rarest digits: 6, 7, 8, and 9, each 264 times, which is 264/5760 = 11/240 ≈ 4.58% each. +- Hour tens (H1): 0 for 00–09 (10 hours) and 1 for 10–19 (10 hours), 2 for 20–23 (4 hours). So H1 contributes: 0→600, 1→600, 2→240, others→0. +- Hour units (H2): digits 0,1,2,3 appear 3 times each (00,10,20 etc. for 0–3), digits 4–9 appear 2 times each. Across all hours: 0→180, 1→180, 2→180, 3→180, 4→120, 5→120, 6→120, 7→120, 8→120, 9→120. +- Minute tens (M1): digits 0–5 each appear 240 times; digits 6–9 never appear here. So 0→240, 1→240, 2→240, 3→240, 4→240, 5→240, others→0. +- Minute units (M2): each digit 0–9 appears 144 times. -(For reference, 2 occurs 804 times (~13.96%) and 3 occurs 564 times (~9.79%).)", +Sum per digit (0–9): + +- 0: 600 + 180 + 240 + 144 = 1,164 +- 1: 600 + 180 + 240 + 144 = 1,164 +- 2: 240 + 180 + 240 + 144 = 804 +- 3: 0 + 180 + 240 + 144 = 564 +- 4: 0 + 120 + 240 + 144 = 504 +- 5: 0 + 120 + 240 + 144 = 504 +- 6: 0 + 120 + 0 + 144 = 264 +- 7: 0 + 120 + 0 + 144 = 264 +- 8: 0 + 120 + 0 + 144 = 264 +- 9: 0 + 120 + 0 + 144 = 264 + +From these counts: +- The most common digits are 0 and 1, each appearing 1,164 times (out of 5,760 digits), i.e., 1,164 / 5,760 ≈ 20.21%. +- The rarest digits are 6, 7, 8, and 9, each appearing 264 times, i.e., 264 / 5,760 ≈ 4.58%. + +So: most common - digits 0 and 1 (about 20.21% each); rarest - digits 6–9 (about 4.58% each).", "type": "text", }, ], - "id": "msg_0117622307afc2e600698e2e82286c8195b4ee45eda84807b9", + "id": "msg_D8WwNOBX3OKWYX8U00UuE09bjaCEU", "model": "gpt-5-nano-2025-08-07", "role": "assistant", "stop_reason": "end_turn", @@ -407,91 +509,84 @@ Rarest digits: 6, 7, 8, and 9, each 264 times, which is 264/5760 = 11/240 ≈ 4. "usage": { "cache_read_input_tokens": 0, "input_tokens": 74, - "output_tokens": 11642, + "output_tokens": 6276, }, } `; -exports[`anthropic → responses > multimodalRequest > request 1`] = ` +exports[`anthropic → chat-completions > multimodalRequest > request 1`] = ` { - "input": [ + "max_completion_tokens": 300, + "messages": [ { "content": [ { "text": "What do you see in this image?", - "type": "input_text", + "type": "text", }, { - "image_url": "data:image/jpeg;base64,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", - "type": "input_image", + "image_url": { + "url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxMUExYUFBQXFxYWGRsZGhkZGBgZIBgjIBYYGBkbGhkhHikhHx4mHhsYIjIiJiosLy8wGSA1OjUuOSkuLywBCgoKDg0OGxAQHDAmISYsMC4uLi40MC4uLi4uNy4uLiwsNy4xLi4sLi4uLi4wLi4wLi4uLC4uLi4uLi4uLi4uLP/AABEIAOAA4QMBIgACEQEDEQH/xAAcAAACAwEBAQEAAAAAAAAAAAAABgQFBwMBAgj/xABLEAACAQMABgYFCQQIBQQDAAABAgMABBEFBhIhMUETUWFxgZEHIjKhsRQjQlJicpLB0TOCsvAkQ1NUc6LC4RY0RJPSFSWD4jVjo//EABsBAAIDAQEBAAAAAAAAAAAAAAADAQIEBQYH/8QAMREAAgIBAwICCQQDAQEAAAAAAAECEQMSITEEUUFxBRMiYYGRobHRMkLB8BRS4fEj/9oADAMBAAIRAxEAPwDcaKKKACiik/TnpJ0daytDJK3SIcMqRu2DjODgccUAOFFJlh6T9FynHykRk/2itH72GKm6361paWZuo1E42kVQjjDFmCj1wDuoAXfStrZNEY7G0OLicbRccYo8kFgeROG38gDzxVH6ItKNa3M2j55CwlxLCzE+s2D0gyTxO446wx51S2ulDe3tzdsjIfUiVX4oAuWXzrrpnRYmCsrGOWI7UUi8UYEEeGQK5+TrVDNofHj+TPLNU68DeKKy3QnpOeICPSMLqw3dPEpeN+0gb1Pn4U3WWvejZcbN7Bv5NIqHybBrdGSkri7Hpp8DLRUWDSEL+xLGw+y6n4Gu+2OsedWJPuiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDysp9L+g1hePSkY3xlY5xydGOwGx9YEgZ7uqtWrB/S7aMNITKJZVWSzEuyHOyxV2Uhl4EeoDjrqsqp3wVlVbkuSCOQesispHNQcg1UX+rYMbJBI8QYglAxMbEEMpKHhvAORU7QDk20JPHo0/hAqfXnPWzwyai+DDqcXsKur948dzNFMoSSUiRRncxxg7J55xnwNNVV2nNFLPHsn1XXejjip4jwrhq3pNpVaOTdNCdmQdfIMO/H85q2WssfWR8KtfRPyCXtK0XFQrnRMEntxRt2lRnzG+ptFIjOUd06KJ0Ub6o2ZOREVP2XcfnXo1ZhHsyTr3TPV3RTV1OZfufzLa5dypj0TMm+K9ukP+KW+NTbbTOmYTlLxJ1+pNGN/wC+Bn31JopkeuzR8b8yyyzXiSX9MUsAAurBgfrRyDZPcSPdmrLR/pqsHx0sdxCOG0yB1/ErE+6qNlBBBAIPEHeD4UtX+rzREy2Z2W+lEd6P2YO7PZ8K34fSCltNU/p/wdHPfJu+hNYrW6GbeaOTmQrDI714iravzZo63trv10Vre4jO8xnYZG4ZHWMg9opx0B6QrmydYtI/OwHctyo9ZeyVRx78Z7+WuHURlLS9n2f8dxscibp8mx0VxgnV1DowZWAIIOQQeBBrtTxgUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB5WC+mO7Bvrhgf2NnHD+9JKx+De6t1nmVFZ2OFUFiTyAGSa/M17dNdzq7DDXtwZsH6MUe5AfAHypeSSUd/wC+JSbpDdouHZhjX6saDyUZqTRRXmZO5Wc8KWdYswTxXS+yx6KXtB4E92/yFM1Vuslp0ltKmMnZLDvX1h8KZ08lHIr4ez8mWg6ZZZoqp1UveltomJyQNg96nGfEYPjVtVMkHCTi/BkNU6CiiiqEBRS1d61HpWiggecp7RXJHbjAO7tr211yh2tiVJIW+2N36jxFaf8ADzadWkv6uXYZKK5wTK6hkYMp4EHIrpWfgoK+tNi0TLeQ7njPzgH013bz8D2d1XkLx3EIbAaOReB947wfhUmaEOrIRkMCpHYRg0s6l3QSKWJ3A6KVlG0QNx38+3Na7lkxX4xa+T/AzmPkNPow049ld/8ApsrFoZctbsx9k7zsdxwd31vvVs9fmzWnSMQktpo5ELxTKfVYHAyCc45bq3BNedGnH9Mgz/iCu1085Txpy5NeOTcdxkoqmt9arJ/ZuoD/APKn6186b1ptLaLpZp0C8sEMW7FUbye6nDC6oJrJ770i31yCLC16NDwmuN2e1UH+9Uc+gL2433mkZn+xF6i927A/yip0ipZoR5ZuCzKTgMM9WRXWsDm9H0ABaCSWOYb1k2zx7ezup99E+tcl1E9vcE/KbU7EhPFxkhW7T6pB8DzoaoMeWM+B/oooqBoUUUUAFFFcLq4SNGkdgqIpZmO4KAMkk9QAoAQPTLpplt0soiOlu22D9mMb5G+A7iazTVmJZJ5Jl/ZxAQRdyjefH/VXDWLT73ElxpE5+dPye2X6q8CwHXuJ72NMGgrAQwxxcwMt3ne389lc3rstRaXl+TNmkWFFFFcUyhRRRQAq6nfNy3NufoPtL3Zx8NnzpqpSvz0Gk45OCzrsnvwF+ISm2tXVbyU+6T+PDLz5vuFU2tukuht2YHDP6i9mQST4AH3Vc0pafXp76G34qnruP83wAH71HR4vWZknxyRBb7jXqTogW9sgx68gDue0jcO4DA86tr6ximXZlRXHUwz5dVdYvZHdX1XpxLk27Eq81MeBjLYSFW4mFzlW7AT+fmKrLTSWkLmVoI1ihdB64cnaHWQDnPgPGtIqLcaOieRJWQGSP2X4MOWMjiN53HdSZ9PjnLVKKbGLN/tuKq6kyyft72RuyP1R7/0qVD6PbEe0sjnraQ/BcU1UVeMVHZKijyz7lHHqfYj/AKdPHaPxNdP+FLL+7R/hq4oq4esl3KKTU2xbjboO7aHwNQZvR5ZHeokjPWshOPxA0yX17HCheV1RRzY48B1nsFJmkdeXclbWP1f7STd+FP18qgspTq72Lu10BcRn5u+kYD6MqLJ79xq8gDBRtkFuZUEA9wJJHnWRaSubhlZ5LmUkAnCsUUdgUbq1HQAcW0O2SW6NNok5JOyOJ66mqIlUlad/An0vw3PyPTFtMN0d38xJ94kKhPiU8jTBSTr1eq6yIMrLbGOUA7toZB2kPVxB6sVDLYG1NH6DoqJou6EsMcg3iRFbzUGpdLOmFFFFAHlZV6YtOPI0ejIGw03rTsPoRgjA8d58AOe7RtM6SS3glnkOEiUufAcB2k7vGsG0FI0nyjSE/wC0nLSb/ooMkAdmBjuUUjPl9XBtc8LzF5JaUQkgWW+SFR81aIDjltbse8j8JpupY1EjLRSTt7U0jHwB/UmmeuH1crnp7bfHxMeTmuwUUUVmKBRRRQAs6/WZaBZF9qJg2ew7ifA7J8Ku9E3wmhSUfSG/sPBh55rvPCrqyMMqwIPcd1J+q1w1tO9pKdzNlDyJxu8GA8wa2RXrcLj4x3+D5+Qxe1Guw6Uq6rJ0t5dXHIHo18wD7kXzpi0jcdHFI/1EZvJSRVRqDb7NorHjIzMe3fsj4Vr9FQ3lL4FVtFv4DxF7I7hX1XxAfVHdX3XaM4UUUUEBRRXtAHlV2sGlBbQPKV2tnAA6yThcnkM1ZVEuY4Z1khYq4I2XUHeM9eN4PV3UFo1e5lk8klw3S3DbbHeq/RQcgq8K6VN0tq5Pa5KAywciN7p2MvMdoqnbSMeztBgezn3YqyaF5oZJS7rwolW1obieK3HBmDSdiKcnz4eIrWgOrhSrqHoVokaeQYkmwcH6KcVXsJ4nwpqqrdjWlFKK8PuFKfpB0GZoTNHnpYlbOPpoR669uOI8abaKCIycXaL/ANFl4JdF2jA52Ygh7ChKEHyptrHtQr02GkXs23W93mSH7Mg9pB37/Je2tgpbOtGSkrR7RRRUFjKPTppUskFgh9a4cO+PqIcj/MM/uUq6xER2MiruAjCAdQOF+FfWtt10+mrh+It0WJezcc48WfzqNrof6E/7n8QrmdXLVnhDs19TLldzSJurEGxawr9gMe9iWPxqzqLor9hF/hp/CKlVycrucn72Z5chRRRVCAooooAKp9YtBLcJx2ZF9h+rng9nw41cV47AAknAG8k8qvjnKEk48kptO0IWkdPSLbyW1whEwUKG+uM7yT3c+dO2hbfo4IU+qij3ZPvpB1k0kbqVNhT0KSBFbHtMx6+4ZA6t/OtKAxu6t1el6XHphdU3u0Xy7JFlan1RXWuNn7A8a7VpMrCo9xpCGMhXljRjwDOqnyJqn1p0tKjR21sNq5uDsoPqDm5/36ieVUmu+gbWwiS12RcX9wNqWeQk9Gud5RSdxJBAJ34UnqqG6NODpZZarx2XvHpWBGQQQeY358aVX0i9jOEmYvaysejkYkmJjv2XPNeOOod1LttY32j4kulDm3fGVb2WGMggfRyM4O7xp1YQ6QtTjfHKOfFGHWOTKf530J2Mz9LLppaZ8e7f7eKPjXS7litJHi3NlQWG8opYBnHd18s5pF1duBbTxSKTsSMI5DnO0HIwx6yGwfOnbVBZTbGG5Q7UTNEdobpFAGCDzGDjPZVPDqKwuADIPkysHC79vcciM/ZB59VBn4dXxz70PFQn0VAXEhhiMg3hthc9+ccam15Uik6OV3cpGjSSMFRRkk8qr9BaxQXW10THKcQw2TjkQOqk/XnShnm+TIfm4jmTH0n5L+78SeqoWgJhDewsMASZibluYbveBRXiXqN6Xy9/75jnpu5Z7u2tlOASZ5MH6KZ2B3Fx7qg3+tkhuvk1tHHIwOyekfY23/sozw2uW87zuq3m0ds3TXhb2YNgLjhhi5OeqlyLVcPoZb0ZEzyvIzAnJBkIU9hUgHI7aq3Rt6Pp455qL7bebOusFwbu1M0QaK5tJA5Q7njZT6wPxH3a2vVnTC3dtDcLjEiBiByPBh4HIrFZNJZitdKMN8hNnfAcGI3JI3eqjJ7QO9t9ClyYvldgxz8nl20+4/V2ZGf3jUPcZCOhuHyNSr2vKKgbufmzQ8m3cXsh4tcSfxsfzqfrAu3ZzLzVdryOarNX12Z7yM8VuH/jZfyq7kXIKngwKnuIwa4fUvT1DfZpmLJtM91Yn27WFvsbJ71JU/CrSlTUOfZWW3b2omJHcTg+/wCIprrL1MNOSS9/0e4uaqTCiiikFQooqNfXscSGSRgqj39gHM1Ki26QHeRwoLMQAN5J3Ad9KjPNpKQwwZS2U/OSEe1zxjywviaqNIabNzIBKJEtgc7MYyz44ZPDf7vfTjofXLR6qsK7UCjcAyEAd5GfM13Oj6D1ftz5+wynFbK39iNrRo6OI6OgiXCCbPacbBJJ5k78mmGvNM6ME0kEwb9izMAN+0GUAYPZuNdoICx7K6YqUrSJtquFFfUkgUFmOAoJJ6gBknyr6pe1/vOisZetwI/xHB92akXFamkWXob0f8omudJyDe7GKHP0VGNojyUfi6zSZpGf5bpmdicqZlgX7qsEOPInxra9QNGi10fbRYwViDN95vXf/Mxr8+6hXHz8crc51YnvYE/GlS4Z6b0XjvMq8E2vgj9C64WKvYzpjhGSB2qu0uPECsG1M0j8muuhJ+ZuOH2X+j+niK/Qes8oWzuGPKJz/kOK/MumYSY8jcyHaBHL+ePhRdMfg6T/ACeiy3zF2v5NlryoOgtIfKLeKbm6gnv4N7wanU08i1ToK5XcjLG7KMsFYgdZAJA8660UAYzoyQFTk5diWbPHaJ35FfekZNlQ/ON0ceDCtP0rq7bT75I1LfXX1W/EPzqgf0eQkj5+Ux5yUbZOd+cbX+1Te1FlGLnrvxsZNYpMW1w3VE5/ympdlGF1bjB/sVPiXz+dQtZVza3AHOJ/4TS4NcDJouCzCbJREDNncQvs4HWd2e7t3Knwdr0H0882ZaFw035BqDbC4t9KWB3h4lmQdTAcR4hK89HmlyukbGUn1buBoZPvptDPflY/xGpfoYH/ALrN1fJGz/3ocfnSlouXorS0uAcC3vTg/ZJUn4UIZ6QiodTJLuz9SUVH+VrRUGc/P+s9r8l01cRnctz84v7wLfxBxUymr05attLAl7EPnbb2scTHnJPbsn1u7apJ0RpBZ4lcceDDqPMVy+vxO1kXkzNmjvZS6c2redLpAcN6rgd35gea02Wt+GUMPWUjII51EurdZEKOMqwwf566WLaeSxfo5MtAx9Vhy/36x4is+lZ4JfuX1X/Clal7x8WdTzr7DDrFVFvOrqGRgyngRVfpDSbbfQwLtzHl9FBjeznsrPDppTlpjyLUbLTTenIrdfW9Zz7KDi36DtpNn6Sd+lnOfqx8k7Ki6KUuWlc7TE4DHn21ZZrv9J0UMKvl9/wIzZnBuEfi/wABUHSsZfYiUZeRgq+ePzqcas9QdHdNO10w9SH1I+1sbz4A+bDqrbJ7Cumj7Wvt/UaBZW4jjSMcERUH7qhfyrtRRVBgUn+lAZtoxyM6A+TU4VT62aGa6t2iUhXyGUnhkHIz1Z4ZoL42lNNmu2q+ov3R8BX5YsLUwyTwHcYpWXyYr+Va9ov0prAqR6Qt5YHUBTIq9JG2N2QRvGeON9Zzr3f2jX3ym1mSSK5UFwMhkcbjtKQCARsnP3qU0ek9F544upjNvbj57DNpjX6Wa0W3KYYgK75ztAY4DG4nG+kx0yCOsYrwSqeDDzFePOq7ywA76oe2x4+nw42oUk93v3Gj0WTlrRkP9XKwHcVVviWpxpP9F1uwtncjAllLL2gKq588+VOFPPk/UV610FFFFSJCiiigDndQ7aOn1lK+YIrI9GnEYUnemVbsIJBzWw1Q3ep9lJKZXhyzHLes4BPMlQcb6rKNnX9E+lP8DJKdXaquBY1I1i+TvdmGN5riVFiiVBuQAEs7vwAB2fKuusehvk+h+iJBZGRmI4bTPvx548KebKyjiUJEiovUoApG1r0wZtGPIcevOVTHNVkJU+S0VQnL1UuoyubXMr+Ze/8AGx6z+IfrRUP/AIAk+qPf+tFGw+jd3QEEEZB3EHnWCa86nS6Mma5tlLWkhy6j+p35wfs7zsty4Gt/rlKgYEEAgjBBGQewilSipKnwS0mqZ+ftH6QjmXajbPWOa9hFSJYlYFWAYHiCMg03ay+iCB3M1jIbWXjsgExnuUHK+GR2VmulIL+O4Ojy8TykDLxEnYHPaO7ZIAyd3MczXOn0EtX/AM3t9jNLC1uiAujS1x0Vizhj+0Ib1EHAk92/4CtE0Hq7DbwmNRtFwRI59p88cnkN+4V11f0JFaxCNBkne783PWezqHKrOupjhoVcvuZcmVy2XBmektT7m2yYPnouOzuDr4c+8eVVCX652WyjDirjZI862SoV/ouGYYliSTtZQSO48RTU2hctE/1LfujLOjed1gh3u/E8lXmxPVWqaJ0ckEKQx+ygx3nmx7Sd9c9F6Ggt89DEqbXEjJJ7MnfjsqfUN2DajHTHgKKKKCoVSa3ySJb9LGTtROkhA5qp9YHrGCato7lGZkDAsmNpc71yMjI7a6MoIIIyCMEHn1g0Fk6dkbR19HPEskZDIw78dasORHUajXOr1pJve3iJ69gD4VRz6kmNzJZXD27Hiu9kPv8AjmvOm0xDxjhnA5qQpPw+FA3Sv2y/gsG1JsT/AFA8GYfnXW31RskORboSPrZb4mqg643Ef7bR0q9qZYfw499dI/SHbfTjmj+8mfgagms39Y3KoAwBgDgBuxRS5Dr1YN/XY+8rD8qlprVZH/qYvFsfGpFOEuzLiuV1dJGu1I6ouQNpiFG/gMmoS6wWp4XEP/cX9a+LrStk6FHnhZG3FWdCD4ZoI0vxRaIwIBBBB3gjeD3Gvi5nWNGdtyqCx57gMndVLb6e0fDGsaTxqijAUNtY59pqJca+WvCNZZm+rGhOfE0Fljk3si80RfNNEspjaPayVVjv2fok9RPHFfWk9JwwLtzSKg7TvPcOJPdS4LrSlzuSNLRD9J/WfHYuN3kK7Qas20ANxcyGV13mWY5APH1VJxx4DfUFtCT3+S3OMmkLm/yluphtzuadxhnHMIvLv+FQ9DaKXSN7BawD+hWeGkfiGxvO/mWI2R3salQG70u5hs1MNsDiS4YEBh9Uf+IOesgVsWq2rcFjAIYFwOLMfadsYLMev4VDZsw463ar3Ft0S9QorrRVDQFFFFACj6R9bV0faGUb5ZDsQrxyxGdojqUb/Ic6z/U7QbQRtLMS1xMduVjvIzv2c+89prjpy6OkdMuTvgsRsoORcEZPeX2vCMVx1i1xaKXoYEWR1/aMxIVfs7ufX31eKMnUTb9lfEbaKQf+ObocbZG+67D4irbRGvEErrHIjxSMcANvBPIBh19uKsY1Bvdb+QxXd3HGAZGCgsFBPDJ4DPLNd6j39mksbRSLtI4wR/PMHfSRPp6WwjltpiXZUJtpcZ2wfVAbtXd5Y6qC0YauORhtdLPNePHF+ygB6Vse253KgPUN5PdV7VNqhozoLaND7bDbkPMs285PYMDwq5oKzq6QUUUUFBc1l0PKZFurVtmeMbJU8JF+qRwzvP8AOKNB64Qyno5fmJgcNG+7fz2SfgcGmOlrWPR9rPKIpFBkKbYI3HGdnc3luqB0WpKpDNXlIUWh723/AOVuSyDhHLvHgeHlipCa23kX/MWRI+vEc+7ePfUkeqv9Lsdga+XUHiAe8A0qw+kGzO5zJGepoz+WasodbLFuFzH+8SvxAoIeOa8Cwk0bC3tQxnvRf0qI+rlo3G3hP7grsmmrY8LiE/8AyJ+tenTFv/eIf+4n60Ee0u5DOqVif+mj8iPzrwao2P8Adk8j+tdJtZ7NeNzF4MG9wzVXca/2Y3RmSVupEbf4nFQWSyviy3i1dtF9m3iH7gqcqxxqSAqKOJwFA8aUH1jv591vaiJT9OU7/wAO7866R6mvMQ99cSSnj0anZQfz2YoLOP8Au/5PvSmvMYJjtUa4kAJJUHYXG8knifDd21K1A1TXSq/LL24Myq5UW6ZRUI34fG/BGOHI8TV3YWEUK7EUaovUoxnv6/GqLVK8/wDTNLdEd1vf4A6lfaOyPBmK9zjqoY/p5Q1UkbTZWkcSLHGioijCqoAA7hUmiilmwKKKKACqzWPSHQWtxP8A2UTvjrKoSB4kAVZ0nel2bZ0TdfaQL5uooAyvU12g0bNcn1pHMkhPWVJUHzBNKujY8JtE5Z/WZuJJPHfWk6owgWMCkZBiGQee1knPmaUNP6qy2xMluDJDxMe8tH93mV99OTo5WW8mqKe9/P3FdX3oa16a9hj4iM9K3YFwR79nzqCukoyhYNwHDn3U6+jrRRSJriQYefeOxAfV8+PdiiTE4YODcpKq2+I4Uka+KJbqxgwMtIWY88bSAjuwGPgKdqSbo7emowf6uHI/C3/lUDsXN9kx3qq07p+G1Xalb1j7KLgs3cOrtO6vjWrTXyWAygbTkhEHWxBIz2AAnwrMkgd3MszGSRt5J5fl4cBQlZX2YrVL/wBLHSeuV9JmSPEMa7woAJI+0SN/hitK0Xd9LDFL/aIreYBrKb72G+6fhWkanf8AJW/+EPzqWqDXrhdVuW9KOuTGK6spuRZom7m2cfEnwpupS9Ji/wBHjfmkyEe8VUti/Ui3orwHO+igDnNbI/tIrfeUH4ioEurto3GCPwXHwqzooBSa4KVtUrM/1I8C3614NUbP+xH4m/Wruign1ku5Vx6tWi8IE8Rn41Pgto03Iir91QPgK60UEOTfJKsY8naPKptcbQeqO3fXapFsKWvSDo4y2pkXdJAelUjiMe1jwGf3RVhrNpxLWEyEbTk7MafWb9BxNUOp2sU1xJJBchSWQsuFC7uDqccRgjt40Dcaa9pGyamaaF3ZQXA4yINrsYEq4/EDV3WX+g25KR3Vkx328xKj7L5x71NajSmdNO0FFFFBIUlemGMnRVzjkFPk6060v6+2Zl0ddxgZLQSYHWQhZR5gUAZ1qdKGsrcjlGoPh6p+FXNJXo5vv6Ko47LMpH7xYe405owIyKacnIqkyovtWLSVw7xLtg5JGV2vvAbm8auAKKKCjbfIUixt/wC9v/hgf5Up6pDvRs6Z+9EP4f8A60DcXj5DDrnoo3Fs6L+0QiRPvLnd4gkVndlciRA3Pgew8612J8gGs71z0N8nl+URj5mQ/OAfQY/S7m+OeupToXKOuOnxXH4KPSRxG/3TWo6tx7FrAvVEn8IrLNJjaj2RxdlUduTWwwR7Kqv1QB5DFEuSuPbF8fwfdKHpPb+iqPrTIPiab6SfSQ+09nCOLzbXgCi/6j5VA3D+tF9GNw7h8K9r015UAFFFe0EHlFQtIaXgh/ayop6s5P4RvqBYXt5fNsWFsxXnPKNlF7RyPdvPZQXjjlLhFjpLSUUKbcrhRy6z2AcSai6IvJpmMjIIoceorD13+0fqjsqovNX5LTSccV24uGeLbV2B2do8lB+qVI8QcCmygtOOjbxLS39le6ugrjaH1RXWpM5lem7/AOVXTyZzHESkQ5bj6zeJ/LqrpoF9m+tj9Yuh8UzVbb27W7Nbyeq6McZ3bQ5MvWDU/RAze2g59IT4BDmrftJd+urwp15UP+pLGLTsy/RuLUPj7SlB/pfzrYKxy3bY01YMPppKh/CTWyUmXJ08LuCCiiioGhXw6ggg8Dur7ooA/OWrsHya9u7Jt2w5ZO4EY/yMh8Ka0cjgcVz9M+hnguIdKQrkAiOcDuwrHsK+rnsWudpdJKiyIcqwyD+vaKujB1EKlZYJenmM10+WjqPuqjttMQSSGNJUZxxUHq44PA+Fdby/iiAMkioDuG0cZ7qkRp8KLY3vUKSdZpiukbSU7g/qHz2f9YpjuLtEjMjMAgGS3LH50n61aRjng2l2kkhZJFEilCwY4BUHiDuPhQNxR3+hoVjJ9HxH513ubdZEZHUMrDDA8CKo9E34mijmU+0M9x4MPA5FXsMoYZ86BElTEyx1FaO5RjKGt4220Q52sg5VTuwQDjfnlwp3ryipCUm+QrONZTNcaRK25UNbIMFuAPFuR37wOHKnvTOklggkmfggzjrPBQO84FZ1qjpaKIzNcMY5ZT0u0wIDKcuNk45kkjryMVA/CnTkkWkc2lgN8EUmOakD/UPhX38t0p/cl/H/AL1bR6XuVhS6a02bNnVelZwHwzbIk6PkmcDfv3g1Omv7iSSWOztxOYBmVmcIqnGejU/ScjwGaLLaZ3WlC50WmH4RwRDrJB/NvhULTWibiGEy3l8QvARxDBY8lBwvw3CmjQ18dJTrBBMYYxGskzjBkG1uESA7gQc7TYOKk6q6lJLpG4W8la4NkyCONwMMrqHjkfkd27HMrv4YqLG48c3u6X3OHoh9HKlPll7EGL4MMbjOBx6RlPM8s8Bv51ssUYUBQAAOAAwB3CulFVbNRmHpy0Iz28d5EPnbVton7B4nwYKe7aqh0berNEkq8HGe48x4GtnuIVdWVwGVgVIPAgjBBr8/GzbRV69lKT0Ep24XPUdwyeGd2ye0A86lMz9Rj1K0N9g/EeP61LqqjfBz1VaRuCMirHPZD0nomGddmWNXA4E5BHcw3jzqForVa2gk6SNXL4IBdmOyDxxmrlWB4EHluOapbrWaKObomD7KsqPKFJjjdvZRm5E+6gtHW9kfV1/+U0Yf/wBsg/8A51s1Yho3RMlxG2loZCbiCR2hhyDGY4iUZCOO24DHOeYrYtFaQSeGOaM5SRA69xGaozo4YuMEmTaKKKgaFFFFAEe8tElRo5FDo4KsrDIYHiCKxjWn0V3FusjWMskkDEF7bJ28bQJEbczjuJ4b62+vKmyGrMF1m0how2cD2iJDcWs0fzOyI5iCdmRGU+s56zv99e6k/I3uZX0pFsSyHZhS7QogTA3JtgLt5/241smkNXbSZ1llt4nkQgq7IpIIORvxnjUrSWjIZ0KTRpIh+i6hh76LI0q7Pz9Bo+dZTEtvJcWdjdHbaMiQsgO1GuxxbZBBOM00axXuj7+/0YcLK228UsLIytslMoXQgYCsDuO7fWnaA1etrNDHbRCNGYuQCxySAM5JJ4AbuFWPQLtbWyu114GfOiyVFLg/P2lbGXQ1w8Uis1nKxaKQAnZzyP2hwI54yOdWGir27umlNhAsscXtSO+yHOM7CDmcVt17ZxyoY5UWRG4qwDA+BrL5Uk0FNO0Vu8tlcesixjaaGXGyqsCc7DbgDnqHHcZsW8MG7ZU2+szzCFLaEyXE2QIicCPZOJDI2NwU5HLNfF5p2cA2/RCO+MywdGW2lUsNoSg802d9StFap3mjDDpGONp3dGN3CuNtNthIehGN+N4K54jnndOsNCQ6Zu7m82ZoVjEMVvL60ciugZpG2TuOCwXfnhyosqungVGkdRro3lpaXN309tKzSbZXYLFELNHgE5yBkb+BY8q1XTOq1ncxiOeCNwq7KnZAZBjACMN643cOoVRRaqXxltXnvY5UtpTIPmOjdsoyEFg+zwY/RFPFRY5RS4Mr09qjpNLOSxgaO5t5FCIZG6OWEBgVyd6uBjGdxxira31MuLF3fRssfRu221vOGI2sbJKzA7QyANxB4U/0VBJm+q/o1hFuPlcKpc9JI/SQOysoZyygSLgnAxxpi1b1QS0mlmE88zyqiEzOHwEzsgHAJ48yaZqKACiiigApY181Pi0jAYn9WRd8cmMlD+angRTPRQB+dDfXWj26C/hk2V3LMoLKwHA7XBhjG/OesV9aQ1tidFjt51V5mWPbb1REG3NIxPDA+NfoSWJWGCAR1EAjyqvn1etHBV7eFg3EGNDnv3VbUJeCDdmUay6HTRcaXdiduHCxzRGQEMx3RzBt+CWwDy4V20UDDo+SyvNHXZM220skUPTBnckiRXQnePVIz1U9n0d6M/ucXHOBtBT3qDg+IpoVQBgbgKixiik7M01A1KtpbGFri0aOX1lfPSxF9liquyZG9lAO/r6q0LRej44IlhiUJGgwqjJwPGplFQWCiiigD//Z", + }, + "type": "image_url", }, ], "role": "user", }, ], - "max_output_tokens": 300, "model": "gpt-5-nano", } `; -exports[`anthropic → responses > multimodalRequest > response 1`] = ` +exports[`anthropic → chat-completions > multimodalRequest > response 1`] = ` { "content": [ { - "thinking": "", - "type": "thinking", + "text": "", + "type": "text", }, ], - "id": "msg_06fb099fde9d608000698e2e7f142881a09a7271709983d5ff", + "id": "msg_D8WwJGn3cD8awZvtT5DIX43pZdj91", "model": "gpt-5-nano-2025-08-07", "role": "assistant", "stop_reason": "max_tokens", "type": "message", "usage": { "cache_read_input_tokens": 0, - "input_tokens": 98, - "output_tokens": 256, + "input_tokens": 99, + "output_tokens": 300, }, } `; -exports[`anthropic → responses > reasoningRequest > request 1`] = ` +exports[`anthropic → chat-completions > reasoningRequest > request 1`] = ` { - "input": [ + "max_completion_tokens": 20000, + "messages": [ { "content": "Solve this step by step: If a train travels 60 mph for 2 hours, then 80 mph for 1 hour, what's the average speed?", "role": "user", }, ], - "max_output_tokens": 20000, "model": "gpt-5-nano", } `; -exports[`anthropic → responses > reasoningRequest > response 1`] = ` +exports[`anthropic → chat-completions > reasoningRequest > response 1`] = ` { "content": [ { - "thinking": "", - "type": "thinking", - }, - { - "text": "Step 1: Compute distance for each leg -- Leg 1: 60 mph × 2 h = 120 miles -- Leg 2: 80 mph × 1 h = 80 miles - -Step 2: Total distance and total time -- Total distance = 120 + 80 = 200 miles -- Total time = 2 + 1 = 3 hours - -Step 3: Average speed -- Average speed = total distance / total time = 200 / 3 mph = 66 2/3 mph ≈ 66.7 mph + "text": "Step 1: Distance for first part = speed × time = 60 mph × 2 h = 120 miles. +Step 2: Distance for second part = 80 mph × 1 h = 80 miles. +Step 3: Total distance = 120 + 80 = 200 miles. +Step 4: Total time = 2 + 1 = 3 hours. +Step 5: Average speed = total distance / total time = 200 / 3 mph = 66 2/3 mph (about 66.67 mph). -Answer: 66 2/3 mph (about 66.7 mph).", +Answer: 66 2/3 mph.", "type": "text", }, ], - "id": "msg_0f02a89827e304bb00698e2e73e17c819692eb4063ae564397", + "id": "msg_D8Ww7xQ50eq2Js3P6aJ5bA9RCsucg", "model": "gpt-5-nano-2025-08-07", "role": "assistant", "stop_reason": "end_turn", @@ -499,33 +594,33 @@ Answer: 66 2/3 mph (about 66.7 mph).", "usage": { "cache_read_input_tokens": 0, "input_tokens": 38, - "output_tokens": 619, + "output_tokens": 454, }, } `; -exports[`anthropic → responses > reasoningRequestTruncated > request 1`] = ` +exports[`anthropic → chat-completions > reasoningRequestTruncated > request 1`] = ` { - "input": [ + "max_completion_tokens": 100, + "messages": [ { "content": "Solve this step by step: If a train travels 60 mph for 2 hours, then 80 mph for 1 hour, what's the average speed?", "role": "user", }, ], - "max_output_tokens": 100, "model": "gpt-5-nano", } `; -exports[`anthropic → responses > reasoningRequestTruncated > response 1`] = ` +exports[`anthropic → chat-completions > reasoningRequestTruncated > response 1`] = ` { "content": [ { - "thinking": "", - "type": "thinking", + "text": "", + "type": "text", }, ], - "id": "msg_00be14d6bfe6ea9500698e2e7952a08194bb92eda8bc3dddd3", + "id": "msg_D8WwEXbGME8woQ2rReuPCDxRjmHkJ", "model": "gpt-5-nano-2025-08-07", "role": "assistant", "stop_reason": "max_tokens", @@ -533,45 +628,33 @@ exports[`anthropic → responses > reasoningRequestTruncated > response 1`] = ` "usage": { "cache_read_input_tokens": 0, "input_tokens": 38, - "output_tokens": 64, + "output_tokens": 100, }, } `; -exports[`anthropic → responses > reasoningWithOutput > request 1`] = ` +exports[`anthropic → chat-completions > reasoningWithOutput > request 1`] = ` { - "input": [ + "max_completion_tokens": 20000, + "messages": [ { "content": "What color is the sky?", "role": "user", }, ], - "max_output_tokens": 20000, "model": "gpt-5-nano", } `; -exports[`anthropic → responses > reasoningWithOutput > response 1`] = ` +exports[`anthropic → chat-completions > reasoningWithOutput > response 1`] = ` { "content": [ { - "thinking": "", - "type": "thinking", - }, - { - "text": "Typically blue during the day. The sky’s color comes from sunlight scattering in the atmosphere. It can change: - -- Clear daytime: blue -- Sunrise/sunset: red/orange/pink -- Cloudy/overcast: gray -- Night: dark/black (with stars) -- Other conditions: greenish around severe storms, yellow/brown if there’s a lot of dust or pollution - -If you tell me the time and location, I can describe what the sky would look like then.", + "text": "Typically blue during the day. The sky looks blue because sunlight scattering by Earth's atmosphere scatters shorter (blue) wavelengths more than longer (red). At sunrise and sunset, the light passes through more air, so more blue is scattered out and the sky takes on red/orange/pink hues. It can appear gray on cloudy days, and dark/black at night. In space, without atmosphere, the sky is black. If you want, tell me your location or time and I can describe the current color.", "type": "text", }, ], - "id": "msg_0e13a5d8d895821f00698e2ed95eac8191844495ab66e3050e", + "id": "msg_D8WxDDQyIDbSgoSKDJTtTaCxv1tts", "model": "gpt-5-nano-2025-08-07", "role": "assistant", "stop_reason": "end_turn", @@ -579,37 +662,33 @@ If you tell me the time and location, I can describe what the sky would look lik "usage": { "cache_read_input_tokens": 0, "input_tokens": 12, - "output_tokens": 528, + "output_tokens": 752, }, } `; -exports[`anthropic → responses > simpleRequest > request 1`] = ` +exports[`anthropic → chat-completions > simpleRequest > request 1`] = ` { - "input": [ + "max_completion_tokens": 20000, + "messages": [ { "content": "What is the capital of France?", "role": "user", }, ], - "max_output_tokens": 20000, "model": "gpt-5-nano", } `; -exports[`anthropic → responses > simpleRequest > response 1`] = ` +exports[`anthropic → chat-completions > simpleRequest > response 1`] = ` { "content": [ - { - "thinking": "", - "type": "thinking", - }, { "text": "Paris.", "type": "text", }, ], - "id": "msg_04b27043e9220b8d00698e2e714b0481908726538dc478990b", + "id": "msg_D8Ww5HsFKrIRw7BCuPTadlfOhw97w", "model": "gpt-5-nano-2025-08-07", "role": "assistant", "stop_reason": "end_turn", @@ -617,19 +696,20 @@ exports[`anthropic → responses > simpleRequest > response 1`] = ` "usage": { "cache_read_input_tokens": 0, "input_tokens": 13, - "output_tokens": 155, + "output_tokens": 203, }, } `; -exports[`anthropic → responses > systemMessageArrayContent > request 1`] = ` +exports[`anthropic → chat-completions > systemMessageArrayContent > request 1`] = ` { - "input": [ + "max_completion_tokens": 300, + "messages": [ { "content": [ { "text": "You are a helpful data analyst. The default data source is project_logs with id abc-123.", - "type": "input_text", + "type": "text", }, ], "role": "system", @@ -639,20 +719,19 @@ exports[`anthropic → responses > systemMessageArrayContent > request 1`] = ` "role": "user", }, ], - "max_output_tokens": 300, "model": "gpt-5-nano", } `; -exports[`anthropic → responses > systemMessageArrayContent > response 1`] = ` +exports[`anthropic → chat-completions > systemMessageArrayContent > response 1`] = ` { "content": [ { - "thinking": "", - "type": "thinking", + "text": "", + "type": "text", }, ], - "id": "msg_0ff4188070da971600698e2eddad4c8195bbddb496ef2255d5", + "id": "msg_D8WxKK6CbhVrFzmz27GtpfxAANyUQ", "model": "gpt-5-nano-2025-08-07", "role": "assistant", "stop_reason": "max_tokens", @@ -660,37 +739,39 @@ exports[`anthropic → responses > systemMessageArrayContent > response 1`] = ` "usage": { "cache_read_input_tokens": 0, "input_tokens": 11, - "output_tokens": 256, + "output_tokens": 300, }, } `; -exports[`anthropic → responses > toolCallRequest > request 1`] = ` +exports[`anthropic → chat-completions > toolCallRequest > request 1`] = ` { - "input": [ + "max_completion_tokens": 20000, + "messages": [ { "content": "What's the weather like in San Francisco?", "role": "user", }, ], - "max_output_tokens": 20000, "model": "gpt-5-nano", "tool_choice": "auto", "tools": [ { - "description": "Get the current weather for a location", - "name": "get_weather", - "parameters": { - "properties": { - "location": { - "description": "The city and state, e.g. San Francisco, CA", - "type": "string", + "function": { + "description": "Get the current weather for a location", + "name": "get_weather", + "parameters": { + "properties": { + "location": { + "description": "The city and state, e.g. San Francisco, CA", + "type": "string", + }, }, + "required": [ + "location", + ], + "type": "object", }, - "required": [ - "location", - ], - "type": "object", }, "type": "function", }, @@ -698,15 +779,11 @@ exports[`anthropic → responses > toolCallRequest > request 1`] = ` } `; -exports[`anthropic → responses > toolCallRequest > response 1`] = ` +exports[`anthropic → chat-completions > toolCallRequest > response 1`] = ` { "content": [ { - "thinking": "", - "type": "thinking", - }, - { - "id": "call_VJRqLXE6cVsKg12vyEBKK0Sm", + "id": "call_a3mN6ADjJKbiKIuOVc0tY4C9", "input": { "location": "San Francisco, CA", }, @@ -714,55 +791,432 @@ exports[`anthropic → responses > toolCallRequest > response 1`] = ` "type": "tool_use", }, ], - "id": "msg_09f3770f700bd9f000698e2e7a9f64819cafd8da8883acc7f2", + "id": "msg_D8WwFTHGcASl8ky2IM7XxBfEHPVw7", "model": "gpt-5-nano-2025-08-07", "role": "assistant", "stop_reason": "tool_use", "type": "message", "usage": { "cache_read_input_tokens": 0, - "input_tokens": 66, - "output_tokens": 169, + "input_tokens": 148, + "output_tokens": 218, }, } `; -exports[`chat-completions → anthropic > complexReasoningRequest > request 1`] = ` +exports[`anthropic → responses > complexReasoningRequest > request 1`] = ` { - "max_tokens": 20000, - "messages": [ + "input": [ { "content": "There is a digital clock, with minutes and hours in the form of 00:00. The clock shows all times from 00:00 to 23:59 and repeating. Imagine you had a list of all these times. Which digit(s) is the most common and which is the rarest? Can you find their percentage?", "role": "user", }, ], - "model": "claude-sonnet-4-5-20250929", + "max_output_tokens": 20000, + "model": "gpt-5-nano", } `; -exports[`chat-completions → anthropic > complexReasoningRequest > response 1`] = ` +exports[`anthropic → responses > complexReasoningRequest > response 1`] = ` { - "choices": [ + "content": [ { - "finish_reason": "stop", - "index": 0, - "message": { - "annotations": [], - "content": "I need to count how often each digit (0-9) appears across all times from 00:00 to 23:59. + "thinking": "", + "type": "thinking", + }, + { + "text": "There are 24 × 60 = 1440 times, each represented as four digits HHMM, so there are 5760 digits in total. -Let me break this down by position: +Count by position: +- H1 (first hour digit): 0 appears 600 times, 1 appears 600 times, 2 appears 240 times. +- H2 (hour units): digits 0–3 appear 180 times each, digits 4–9 appear 120 times each. +- M1 (minutes tens): digits 0–5 appear 240 times each. +- M2 (minutes units): digits 0–9 appear 144 times each. -**Hours (00 to 23):** -- First digit of hours: 0 (00-09), 1 (10-19), 2 (20-23) - - 0 appears: 10 times (00-09) - - 1 appears: 10 times (10-19) - - 2 appears: 4 times (20-23) +Total counts per digit (sum of the four positions): +- 0: 1164 +- 1: 1164 +- 2: 804 +- 3: 564 +- 4: 504 +- 5: 504 +- 6: 264 +- 7: 264 +- 8: 264 +- 9: 264 -- Second digit of hours: 0-9 for 00-19, then 0-3 for 20-23 - - 0 appears: 3 times (00, 10, 20) - - 1 appears: 3 times (01, 11, 21) - - 2 appears: 3 times (02, 12, 22) - - 3 appears: 3 times (03, 13, 23) +Most common digits: 0 and 1, each 1164 times, which is 1164/5760 = 97/480 ≈ 20.21% each. + +Rarest digits: 6, 7, 8, and 9, each 264 times, which is 264/5760 = 11/240 ≈ 4.58% each. + +(For reference, 2 occurs 804 times (~13.96%) and 3 occurs 564 times (~9.79%).)", + "type": "text", + }, + ], + "id": "msg_0117622307afc2e600698e2e82286c8195b4ee45eda84807b9", + "model": "gpt-5-nano-2025-08-07", + "role": "assistant", + "stop_reason": "end_turn", + "type": "message", + "usage": { + "cache_read_input_tokens": 0, + "input_tokens": 74, + "output_tokens": 11642, + }, +} +`; + +exports[`anthropic → responses > multimodalRequest > request 1`] = ` +{ + "input": [ + { + "content": [ + { + "text": "What do you see in this image?", + "type": "input_text", + }, + { + "image_url": "data:image/jpeg;base64,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", + "type": "input_image", + }, + ], + "role": "user", + }, + ], + "max_output_tokens": 300, + "model": "gpt-5-nano", +} +`; + +exports[`anthropic → responses > multimodalRequest > response 1`] = ` +{ + "content": [ + { + "thinking": "", + "type": "thinking", + }, + ], + "id": "msg_06fb099fde9d608000698e2e7f142881a09a7271709983d5ff", + "model": "gpt-5-nano-2025-08-07", + "role": "assistant", + "stop_reason": "max_tokens", + "type": "message", + "usage": { + "cache_read_input_tokens": 0, + "input_tokens": 98, + "output_tokens": 256, + }, +} +`; + +exports[`anthropic → responses > reasoningRequest > request 1`] = ` +{ + "input": [ + { + "content": "Solve this step by step: If a train travels 60 mph for 2 hours, then 80 mph for 1 hour, what's the average speed?", + "role": "user", + }, + ], + "max_output_tokens": 20000, + "model": "gpt-5-nano", +} +`; + +exports[`anthropic → responses > reasoningRequest > response 1`] = ` +{ + "content": [ + { + "thinking": "", + "type": "thinking", + }, + { + "text": "Step 1: Compute distance for each leg +- Leg 1: 60 mph × 2 h = 120 miles +- Leg 2: 80 mph × 1 h = 80 miles + +Step 2: Total distance and total time +- Total distance = 120 + 80 = 200 miles +- Total time = 2 + 1 = 3 hours + +Step 3: Average speed +- Average speed = total distance / total time = 200 / 3 mph = 66 2/3 mph ≈ 66.7 mph + +Answer: 66 2/3 mph (about 66.7 mph).", + "type": "text", + }, + ], + "id": "msg_0f02a89827e304bb00698e2e73e17c819692eb4063ae564397", + "model": "gpt-5-nano-2025-08-07", + "role": "assistant", + "stop_reason": "end_turn", + "type": "message", + "usage": { + "cache_read_input_tokens": 0, + "input_tokens": 38, + "output_tokens": 619, + }, +} +`; + +exports[`anthropic → responses > reasoningRequestTruncated > request 1`] = ` +{ + "input": [ + { + "content": "Solve this step by step: If a train travels 60 mph for 2 hours, then 80 mph for 1 hour, what's the average speed?", + "role": "user", + }, + ], + "max_output_tokens": 100, + "model": "gpt-5-nano", +} +`; + +exports[`anthropic → responses > reasoningRequestTruncated > response 1`] = ` +{ + "content": [ + { + "thinking": "", + "type": "thinking", + }, + ], + "id": "msg_00be14d6bfe6ea9500698e2e7952a08194bb92eda8bc3dddd3", + "model": "gpt-5-nano-2025-08-07", + "role": "assistant", + "stop_reason": "max_tokens", + "type": "message", + "usage": { + "cache_read_input_tokens": 0, + "input_tokens": 38, + "output_tokens": 64, + }, +} +`; + +exports[`anthropic → responses > reasoningWithOutput > request 1`] = ` +{ + "input": [ + { + "content": "What color is the sky?", + "role": "user", + }, + ], + "max_output_tokens": 20000, + "model": "gpt-5-nano", +} +`; + +exports[`anthropic → responses > reasoningWithOutput > response 1`] = ` +{ + "content": [ + { + "thinking": "", + "type": "thinking", + }, + { + "text": "Typically blue during the day. The sky’s color comes from sunlight scattering in the atmosphere. It can change: + +- Clear daytime: blue +- Sunrise/sunset: red/orange/pink +- Cloudy/overcast: gray +- Night: dark/black (with stars) +- Other conditions: greenish around severe storms, yellow/brown if there’s a lot of dust or pollution + +If you tell me the time and location, I can describe what the sky would look like then.", + "type": "text", + }, + ], + "id": "msg_0e13a5d8d895821f00698e2ed95eac8191844495ab66e3050e", + "model": "gpt-5-nano-2025-08-07", + "role": "assistant", + "stop_reason": "end_turn", + "type": "message", + "usage": { + "cache_read_input_tokens": 0, + "input_tokens": 12, + "output_tokens": 528, + }, +} +`; + +exports[`anthropic → responses > simpleRequest > request 1`] = ` +{ + "input": [ + { + "content": "What is the capital of France?", + "role": "user", + }, + ], + "max_output_tokens": 20000, + "model": "gpt-5-nano", +} +`; + +exports[`anthropic → responses > simpleRequest > response 1`] = ` +{ + "content": [ + { + "thinking": "", + "type": "thinking", + }, + { + "text": "Paris.", + "type": "text", + }, + ], + "id": "msg_04b27043e9220b8d00698e2e714b0481908726538dc478990b", + "model": "gpt-5-nano-2025-08-07", + "role": "assistant", + "stop_reason": "end_turn", + "type": "message", + "usage": { + "cache_read_input_tokens": 0, + "input_tokens": 13, + "output_tokens": 155, + }, +} +`; + +exports[`anthropic → responses > systemMessageArrayContent > request 1`] = ` +{ + "input": [ + { + "content": [ + { + "text": "You are a helpful data analyst. The default data source is project_logs with id abc-123.", + "type": "input_text", + }, + ], + "role": "system", + }, + { + "content": "What errors occurred recently?", + "role": "user", + }, + ], + "max_output_tokens": 300, + "model": "gpt-5-nano", +} +`; + +exports[`anthropic → responses > systemMessageArrayContent > response 1`] = ` +{ + "content": [ + { + "thinking": "", + "type": "thinking", + }, + ], + "id": "msg_0ff4188070da971600698e2eddad4c8195bbddb496ef2255d5", + "model": "gpt-5-nano-2025-08-07", + "role": "assistant", + "stop_reason": "max_tokens", + "type": "message", + "usage": { + "cache_read_input_tokens": 0, + "input_tokens": 11, + "output_tokens": 256, + }, +} +`; + +exports[`anthropic → responses > toolCallRequest > request 1`] = ` +{ + "input": [ + { + "content": "What's the weather like in San Francisco?", + "role": "user", + }, + ], + "max_output_tokens": 20000, + "model": "gpt-5-nano", + "tool_choice": "auto", + "tools": [ + { + "description": "Get the current weather for a location", + "name": "get_weather", + "parameters": { + "properties": { + "location": { + "description": "The city and state, e.g. San Francisco, CA", + "type": "string", + }, + }, + "required": [ + "location", + ], + "type": "object", + }, + "type": "function", + }, + ], +} +`; + +exports[`anthropic → responses > toolCallRequest > response 1`] = ` +{ + "content": [ + { + "thinking": "", + "type": "thinking", + }, + { + "id": "call_VJRqLXE6cVsKg12vyEBKK0Sm", + "input": { + "location": "San Francisco, CA", + }, + "name": "get_weather", + "type": "tool_use", + }, + ], + "id": "msg_09f3770f700bd9f000698e2e7a9f64819cafd8da8883acc7f2", + "model": "gpt-5-nano-2025-08-07", + "role": "assistant", + "stop_reason": "tool_use", + "type": "message", + "usage": { + "cache_read_input_tokens": 0, + "input_tokens": 66, + "output_tokens": 169, + }, +} +`; + +exports[`chat-completions → anthropic > complexReasoningRequest > request 1`] = ` +{ + "max_tokens": 20000, + "messages": [ + { + "content": "There is a digital clock, with minutes and hours in the form of 00:00. The clock shows all times from 00:00 to 23:59 and repeating. Imagine you had a list of all these times. Which digit(s) is the most common and which is the rarest? Can you find their percentage?", + "role": "user", + }, + ], + "model": "claude-sonnet-4-5-20250929", +} +`; + +exports[`chat-completions → anthropic > complexReasoningRequest > response 1`] = ` +{ + "choices": [ + { + "finish_reason": "stop", + "index": 0, + "message": { + "annotations": [], + "content": "I need to count how often each digit (0-9) appears across all times from 00:00 to 23:59. + +Let me break this down by position: + +**Hours (00 to 23):** +- First digit of hours: 0 (00-09), 1 (10-19), 2 (20-23) + - 0 appears: 10 times (00-09) + - 1 appears: 10 times (10-19) + - 2 appears: 4 times (20-23) + +- Second digit of hours: 0-9 for 00-19, then 0-3 for 20-23 + - 0 appears: 3 times (00, 10, 20) + - 1 appears: 3 times (01, 11, 21) + - 2 appears: 3 times (02, 12, 22) + - 3 appears: 3 times (03, 13, 23) - 4 appears: 2 times (04, 14) - 5 appears: 2 times (05, 15) - 6 appears: 2 times (06, 16) @@ -1589,56 +2043,272 @@ exports[`chat-completions → anthropic > reasoningRequestTruncated > response 1 { "choices": [ { - "finish_reason": "length", + "finish_reason": "length", + "index": 0, + "message": { + "annotations": [], + "content": "I'll solve this step by step using the formula: Average speed = Total distance ÷ Total time + +**Step 1: Calculate distance for each segment** + +Segment 1: 60 mph for 2 hours +- Distance = speed × time = 60 × 2 = 120 miles + +Segment 2: 80 mph for 1 hour +- Distance = speed × time = 80 × 1 ", + "role": "assistant", + }, + }, + ], + "created": 0, + "id": "chatcmpl-014YKYg1bSEtH599VMxZeFsX", + "model": "claude-sonnet-4-20250514", + "object": "chat.completion", + "usage": { + "completion_tokens": 100, + "prompt_tokens": 45, + "prompt_tokens_details": { + "cached_tokens": 0, + }, + "total_tokens": 145, + }, +} +`; + +exports[`chat-completions → anthropic > reasoningSummaryParam > request 1`] = ` +{ + "max_tokens": 4096, + "messages": [ + { + "content": "What is 2+2?", + "role": "user", + }, + ], + "model": "claude-opus-4-6", + "thinking": { + "budget_tokens": 2048, + "type": "enabled", + }, +} +`; + +exports[`chat-completions → anthropic > reasoningSummaryParam > response 1`] = ` +{ + "choices": [ + { + "finish_reason": "stop", + "index": 0, + "message": { + "annotations": [], + "content": "2 + 2 = **4**", + "reasoning": "4", + "reasoning_signature": "EqkBCkYICxgCKkDo5w3BcOFDM2J7MsIKxgUfuba9NpwDavusotnNesPeZa7anZZRQjr0ND/Y4T9kgQgbRz4ipY8/DiooFD5PtwvCEgxNeQ+pto9joPeH73MaDA9tTUpGztalgdSaaiIwUoRvdORYKB3aDndfIO3NukKYHZCWyiFJ9mh9SxxvpTljnKXsski8zzK1VTvR5lZtKhE2T/D3aq9M6qMOOlqKb/HpoxgB", + "role": "assistant", + }, + }, + ], + "created": 0, + "id": "chatcmpl-01X5MNeDTFPPZaQ8imNiW26G", + "model": "claude-opus-4-6", + "object": "chat.completion", + "usage": { + "completion_tokens": 22, + "prompt_tokens": 43, + "prompt_tokens_details": { + "cached_tokens": 0, + }, + "total_tokens": 65, + }, +} +`; + +exports[`chat-completions → anthropic > reasoningWithOutput > request 1`] = ` +{ + "max_tokens": 4096, + "messages": [ + { + "content": "What color is the sky?", + "role": "user", + }, + ], + "model": "claude-sonnet-4-5-20250929", +} +`; + +exports[`chat-completions → anthropic > reasoningWithOutput > response 1`] = ` +{ + "choices": [ + { + "finish_reason": "stop", + "index": 0, + "message": { + "annotations": [], + "content": "The sky appears blue during a clear day. This blue color is caused by a phenomenon called Rayleigh scattering, where molecules in Earth's atmosphere scatter blue light from the sun more than other colors. + +Of course, the sky can appear different colors depending on conditions - it might look gray during overcast weather, or display beautiful reds, oranges, and pinks during sunrise or sunset.", + "role": "assistant", + }, + }, + ], + "created": 0, + "id": "chatcmpl-01LPvBDAuFGxxAxvaAEuR3m6", + "model": "claude-sonnet-4-20250514", + "object": "chat.completion", + "usage": { + "completion_tokens": 86, + "prompt_tokens": 13, + "prompt_tokens_details": { + "cached_tokens": 0, + }, + "total_tokens": 99, + }, +} +`; + +exports[`chat-completions → anthropic > safetyIdentifierParam > request 1`] = ` +{ + "max_tokens": 4096, + "messages": [ + { + "content": "Say ok.", + "role": "user", + }, + ], + "model": "claude-sonnet-4-5-20250929", +} +`; + +exports[`chat-completions → anthropic > safetyIdentifierParam > response 1`] = ` +{ + "choices": [ + { + "finish_reason": "stop", + "index": 0, + "message": { + "annotations": [], + "content": "ok.", + "role": "assistant", + }, + }, + ], + "created": 0, + "id": "chatcmpl-01HHBdiCDMUqRmMNQSnYjFd4", + "model": "claude-sonnet-4-20250514", + "object": "chat.completion", + "usage": { + "completion_tokens": 5, + "prompt_tokens": 10, + "prompt_tokens_details": { + "cached_tokens": 0, + }, + "total_tokens": 15, + }, +} +`; + +exports[`chat-completions → anthropic > seedParam > request 1`] = ` +{ + "max_tokens": 4096, + "messages": [ + { + "content": "Pick a number.", + "role": "user", + }, + ], + "model": "claude-sonnet-4-5-20250929", +} +`; + +exports[`chat-completions → anthropic > seedParam > response 1`] = ` +{ + "choices": [ + { + "finish_reason": "stop", + "index": 0, + "message": { + "annotations": [], + "content": "42 + +(A classic choice - it's the "Answer to the Ultimate Question of Life, the Universe, and Everything" according to Douglas Adams!)", + "role": "assistant", + }, + }, + ], + "created": 0, + "id": "chatcmpl-01PtQBbMCbwkeU1BgJs2Y9XS", + "model": "claude-sonnet-4-20250514", + "object": "chat.completion", + "usage": { + "completion_tokens": 34, + "prompt_tokens": 11, + "prompt_tokens_details": { + "cached_tokens": 0, + }, + "total_tokens": 45, + }, +} +`; + +exports[`chat-completions → anthropic > serviceTierParam > request 1`] = ` +{ + "max_tokens": 4096, + "messages": [ + { + "content": "Say ok.", + "role": "user", + }, + ], + "model": "claude-sonnet-4-5-20250929", + "service_tier": "auto", +} +`; + +exports[`chat-completions → anthropic > serviceTierParam > response 1`] = ` +{ + "choices": [ + { + "finish_reason": "stop", "index": 0, "message": { "annotations": [], - "content": "I'll solve this step by step using the formula: Average speed = Total distance ÷ Total time - -**Step 1: Calculate distance for each segment** - -Segment 1: 60 mph for 2 hours -- Distance = speed × time = 60 × 2 = 120 miles - -Segment 2: 80 mph for 1 hour -- Distance = speed × time = 80 × 1 ", + "content": "ok", "role": "assistant", }, }, ], "created": 0, - "id": "chatcmpl-014YKYg1bSEtH599VMxZeFsX", + "id": "chatcmpl-01WwLt9WwNea18BZhUKcS2r3", "model": "claude-sonnet-4-20250514", "object": "chat.completion", "usage": { - "completion_tokens": 100, - "prompt_tokens": 45, + "completion_tokens": 4, + "prompt_tokens": 10, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 145, + "total_tokens": 14, }, } `; -exports[`chat-completions → anthropic > reasoningSummaryParam > request 1`] = ` +exports[`chat-completions → anthropic > simpleRequest > request 1`] = ` { "max_tokens": 4096, "messages": [ { - "content": "What is 2+2?", + "content": "What is the capital of France?", "role": "user", }, ], - "model": "claude-opus-4-6", + "model": "claude-sonnet-4-5-20250929", "thinking": { - "budget_tokens": 2048, + "budget_tokens": 1024, "type": "enabled", }, } `; -exports[`chat-completions → anthropic > reasoningSummaryParam > response 1`] = ` +exports[`chat-completions → anthropic > simpleRequest > response 1`] = ` { "choices": [ { @@ -1646,42 +2316,46 @@ exports[`chat-completions → anthropic > reasoningSummaryParam > response 1`] = "index": 0, "message": { "annotations": [], - "content": "2 + 2 = **4**", - "reasoning": "4", - "reasoning_signature": "EqkBCkYICxgCKkDo5w3BcOFDM2J7MsIKxgUfuba9NpwDavusotnNesPeZa7anZZRQjr0ND/Y4T9kgQgbRz4ipY8/DiooFD5PtwvCEgxNeQ+pto9joPeH73MaDA9tTUpGztalgdSaaiIwUoRvdORYKB3aDndfIO3NukKYHZCWyiFJ9mh9SxxvpTljnKXsski8zzK1VTvR5lZtKhE2T/D3aq9M6qMOOlqKb/HpoxgB", + "content": "The capital of France is Paris.", + "reasoning": "This is a straightforward factual question. The capital of France is Paris. This is basic geographical knowledge that I can provide confidently.", + "reasoning_signature": "ErkCCkYICxgCKkB/VSMzHr1UoQiyNS0z7cJQM6BUFmFfI2emnP7YJgW/lhBPOtjvgUAaq5tXWH9FJCIzCXCs/hw0sKY+2KAvpcLJEgy7Nh1ybvk1zdrdliYaDA9DnbQuJa5XiIDFLiIwI3UpxlJrF5Hf/K+I1BBcmXs0llgTNDWTMPUjXqhj4068w4q6ScMMI/+IlkrDh98EKqABi5/fmhsiopylBjnTvYwgiHstHv/G2jH+bestbnXSKUVvaIK3DNtViAFoZQLnpzpF3PbMx7cCDvLEqV6Qnnkx9As1xUWIYoMLDE8MyTyWKaOKTBu8JO9lKNDyeX6BO0KiusBzfIk1PCEwfZCe8mqRX1+YHBjJJ/odyKu6yHlzw6Zqd0uCFMP3PatkEuSyOkAqCX34KuuucMgLxEB5IvMfYBgB", "role": "assistant", }, }, ], "created": 0, - "id": "chatcmpl-01X5MNeDTFPPZaQ8imNiW26G", - "model": "claude-opus-4-6", + "id": "chatcmpl-01SZEDyY3xx3vRwhu6NuQ37d", + "model": "claude-sonnet-4-20250514", "object": "chat.completion", "usage": { - "completion_tokens": 22, + "completion_tokens": 46, "prompt_tokens": 43, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 65, + "total_tokens": 89, }, } `; -exports[`chat-completions → anthropic > reasoningWithOutput > request 1`] = ` +exports[`chat-completions → anthropic > stopSequencesParam > request 1`] = ` { "max_tokens": 4096, "messages": [ { - "content": "What color is the sky?", + "content": "Count from 1 to 20.", "role": "user", }, ], "model": "claude-sonnet-4-5-20250929", + "stop_sequences": [ + "10", + "ten", + ], } `; -exports[`chat-completions → anthropic > reasoningWithOutput > response 1`] = ` +exports[`chat-completions → anthropic > stopSequencesParam > response 1`] = ` { "choices": [ { @@ -1689,29 +2363,27 @@ exports[`chat-completions → anthropic > reasoningWithOutput > response 1`] = ` "index": 0, "message": { "annotations": [], - "content": "The sky appears blue during a clear day. This blue color is caused by a phenomenon called Rayleigh scattering, where molecules in Earth's atmosphere scatter blue light from the sun more than other colors. - -Of course, the sky can appear different colors depending on conditions - it might look gray during overcast weather, or display beautiful reds, oranges, and pinks during sunrise or sunset.", + "content": "1, 2, 3, 4, 5, 6, 7, 8, 9, ", "role": "assistant", }, }, ], "created": 0, - "id": "chatcmpl-01LPvBDAuFGxxAxvaAEuR3m6", + "id": "chatcmpl-01BgKYAWRWVeSGfwDpuhJB7i", "model": "claude-sonnet-4-20250514", "object": "chat.completion", "usage": { - "completion_tokens": 86, - "prompt_tokens": 13, + "completion_tokens": 29, + "prompt_tokens": 16, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 99, + "total_tokens": 45, }, } `; -exports[`chat-completions → anthropic > safetyIdentifierParam > request 1`] = ` +exports[`chat-completions → anthropic > storeDisabledParam > request 1`] = ` { "max_tokens": 4096, "messages": [ @@ -1724,7 +2396,7 @@ exports[`chat-completions → anthropic > safetyIdentifierParam > request 1`] = } `; -exports[`chat-completions → anthropic > safetyIdentifierParam > response 1`] = ` +exports[`chat-completions → anthropic > storeDisabledParam > response 1`] = ` { "choices": [ { @@ -1738,7 +2410,7 @@ exports[`chat-completions → anthropic > safetyIdentifierParam > response 1`] = }, ], "created": 0, - "id": "chatcmpl-01HHBdiCDMUqRmMNQSnYjFd4", + "id": "chatcmpl-018dxGcMTWqJ59RRoqeL2hjE", "model": "claude-sonnet-4-20250514", "object": "chat.completion", "usage": { @@ -1752,20 +2424,21 @@ exports[`chat-completions → anthropic > safetyIdentifierParam > response 1`] = } `; -exports[`chat-completions → anthropic > seedParam > request 1`] = ` +exports[`chat-completions → anthropic > systemMessageArrayContent > request 1`] = ` { - "max_tokens": 4096, + "max_tokens": 300, "messages": [ { - "content": "Pick a number.", + "content": "What errors occurred recently?", "role": "user", }, ], "model": "claude-sonnet-4-5-20250929", + "system": "You are a helpful data analyst. The default data source is project_logs with id abc-123.", } `; -exports[`chat-completions → anthropic > seedParam > response 1`] = ` +exports[`chat-completions → anthropic > systemMessageArrayContent > response 1`] = ` { "choices": [ { @@ -1773,43 +2446,70 @@ exports[`chat-completions → anthropic > seedParam > response 1`] = ` "index": 0, "message": { "annotations": [], - "content": "42 + "content": "I'll help you find recent errors from the project logs. Let me query the data to identify error events. -(A classic choice - it's the "Answer to the Ultimate Question of Life, the Universe, and Everything" according to Douglas Adams!)", +\`\`\`sql +SELECT + timestamp, + level, + message, + source, + error_code, + user_id +FROM project_logs +WHERE level IN ('ERROR', 'FATAL', 'CRITICAL') + AND timestamp >= DATETIME_SUB(CURRENT_DATETIME(), INTERVAL 24 HOURS) +ORDER BY timestamp DESC +LIMIT 20; +\`\`\` + +This query will show you: +- The most recent errors from the last 24 hours +- Error severity levels (ERROR, FATAL, CRITICAL) +- Timestamps, messages, and source information +- Any associated error codes and user IDs + +Would you like me to: +1. Extend the time range (e.g., last week)? +2. Filter by specific error types or sources? +3. Group the errors by frequency or type? +4. Look for error patterns or trends? + +Let me know what specific aspects of the recent errors you'd like to explore further!", "role": "assistant", }, }, ], "created": 0, - "id": "chatcmpl-01PtQBbMCbwkeU1BgJs2Y9XS", + "id": "chatcmpl-014JmxEhBbQ7MwgjtqbjRd3t", "model": "claude-sonnet-4-20250514", "object": "chat.completion", "usage": { - "completion_tokens": 34, - "prompt_tokens": 11, + "completion_tokens": 246, + "prompt_tokens": 33, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 45, + "total_tokens": 279, }, } `; -exports[`chat-completions → anthropic > serviceTierParam > request 1`] = ` +exports[`chat-completions → anthropic > temperatureParam > request 1`] = ` { "max_tokens": 4096, "messages": [ { - "content": "Say ok.", + "content": "Say hi.", "role": "user", }, ], "model": "claude-sonnet-4-5-20250929", - "service_tier": "auto", + "temperature": 0.7, } `; -exports[`chat-completions → anthropic > serviceTierParam > response 1`] = ` +exports[`chat-completions → anthropic > temperatureParam > response 1`] = ` { "choices": [ { @@ -1817,44 +2517,49 @@ exports[`chat-completions → anthropic > serviceTierParam > response 1`] = ` "index": 0, "message": { "annotations": [], - "content": "ok", + "content": "Hi there! How are you doing today?", "role": "assistant", }, }, ], "created": 0, - "id": "chatcmpl-01WwLt9WwNea18BZhUKcS2r3", + "id": "chatcmpl-01U3EJr69iVQgws41UtX33tr", "model": "claude-sonnet-4-20250514", "object": "chat.completion", "usage": { - "completion_tokens": 4, + "completion_tokens": 12, "prompt_tokens": 10, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 14, + "total_tokens": 22, }, } `; -exports[`chat-completions → anthropic > simpleRequest > request 1`] = ` +exports[`chat-completions → anthropic > textFormatJsonObjectParam > request 1`] = ` { "max_tokens": 4096, "messages": [ { - "content": "What is the capital of France?", + "content": "Return {"status": "ok"} as JSON.", "role": "user", }, ], "model": "claude-sonnet-4-5-20250929", - "thinking": { - "budget_tokens": 1024, - "type": "enabled", + "output_config": { + "format": { + "schema": { + "additionalProperties": false, + "type": "object", + }, + "type": "json_schema", + }, }, } `; -exports[`chat-completions → anthropic > simpleRequest > response 1`] = ` +exports[`chat-completions → anthropic > textFormatJsonObjectParam > response 1`] = ` { "choices": [ { @@ -1862,46 +2567,61 @@ exports[`chat-completions → anthropic > simpleRequest > response 1`] = ` "index": 0, "message": { "annotations": [], - "content": "The capital of France is Paris.", - "reasoning": "This is a straightforward factual question. The capital of France is Paris. This is basic geographical knowledge that I can provide confidently.", - "reasoning_signature": "ErkCCkYICxgCKkB/VSMzHr1UoQiyNS0z7cJQM6BUFmFfI2emnP7YJgW/lhBPOtjvgUAaq5tXWH9FJCIzCXCs/hw0sKY+2KAvpcLJEgy7Nh1ybvk1zdrdliYaDA9DnbQuJa5XiIDFLiIwI3UpxlJrF5Hf/K+I1BBcmXs0llgTNDWTMPUjXqhj4068w4q6ScMMI/+IlkrDh98EKqABi5/fmhsiopylBjnTvYwgiHstHv/G2jH+bestbnXSKUVvaIK3DNtViAFoZQLnpzpF3PbMx7cCDvLEqV6Qnnkx9As1xUWIYoMLDE8MyTyWKaOKTBu8JO9lKNDyeX6BO0KiusBzfIk1PCEwfZCe8mqRX1+YHBjJJ/odyKu6yHlzw6Zqd0uCFMP3PatkEuSyOkAqCX34KuuucMgLxEB5IvMfYBgB", + "content": "{}", "role": "assistant", }, }, ], "created": 0, - "id": "chatcmpl-01SZEDyY3xx3vRwhu6NuQ37d", - "model": "claude-sonnet-4-20250514", + "id": "chatcmpl-01HsvDHsmB5HM6huqARAVhcu", + "model": "claude-sonnet-4-5-20250929", "object": "chat.completion", "usage": { - "completion_tokens": 46, - "prompt_tokens": 43, + "completion_tokens": 4, + "prompt_tokens": 119, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 89, + "total_tokens": 123, }, } `; -exports[`chat-completions → anthropic > stopSequencesParam > request 1`] = ` +exports[`chat-completions → anthropic > textFormatJsonSchemaParam > request 1`] = ` { "max_tokens": 4096, "messages": [ { - "content": "Count from 1 to 20.", + "content": "Extract: John is 25.", "role": "user", }, ], "model": "claude-sonnet-4-5-20250929", - "stop_sequences": [ - "10", - "ten", - ], + "output_config": { + "format": { + "schema": { + "additionalProperties": false, + "properties": { + "age": { + "type": "number", + }, + "name": { + "type": "string", + }, + }, + "required": [ + "name", + "age", + ], + "type": "object", + }, + "type": "json_schema", + }, + }, } `; -exports[`chat-completions → anthropic > stopSequencesParam > response 1`] = ` +exports[`chat-completions → anthropic > textFormatJsonSchemaParam > response 1`] = ` { "choices": [ { @@ -1909,40 +2629,61 @@ exports[`chat-completions → anthropic > stopSequencesParam > response 1`] = ` "index": 0, "message": { "annotations": [], - "content": "1, 2, 3, 4, 5, 6, 7, 8, 9, ", + "content": "{"age":25,"name":"John"}", "role": "assistant", }, }, ], "created": 0, - "id": "chatcmpl-01BgKYAWRWVeSGfwDpuhJB7i", - "model": "claude-sonnet-4-20250514", + "id": "chatcmpl-01Y8aR6kSByjC9kb1uwG8wYA", + "model": "claude-sonnet-4-5-20250929", "object": "chat.completion", "usage": { - "completion_tokens": 29, - "prompt_tokens": 16, + "completion_tokens": 12, + "prompt_tokens": 177, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 45, + "total_tokens": 189, }, } `; -exports[`chat-completions → anthropic > storeDisabledParam > request 1`] = ` +exports[`chat-completions → anthropic > textFormatJsonSchemaWithDescriptionParam > request 1`] = ` { "max_tokens": 4096, "messages": [ { - "content": "Say ok.", + "content": "Extract: John is 25.", "role": "user", }, ], "model": "claude-sonnet-4-5-20250929", + "output_config": { + "format": { + "schema": { + "additionalProperties": false, + "properties": { + "age": { + "type": "number", + }, + "name": { + "type": "string", + }, + }, + "required": [ + "name", + "age", + ], + "type": "object", + }, + "type": "json_schema", + }, + }, } `; -exports[`chat-completions → anthropic > storeDisabledParam > response 1`] = ` +exports[`chat-completions → anthropic > textFormatJsonSchemaWithDescriptionParam > response 1`] = ` { "choices": [ { @@ -1950,41 +2691,40 @@ exports[`chat-completions → anthropic > storeDisabledParam > response 1`] = ` "index": 0, "message": { "annotations": [], - "content": "ok.", + "content": "{"age":25,"name":"John"}", "role": "assistant", }, }, ], "created": 0, - "id": "chatcmpl-018dxGcMTWqJ59RRoqeL2hjE", - "model": "claude-sonnet-4-20250514", + "id": "chatcmpl-01LnvqYE282aquDyCJpdcWvN", + "model": "claude-sonnet-4-5-20250929", "object": "chat.completion", "usage": { - "completion_tokens": 5, - "prompt_tokens": 10, + "completion_tokens": 12, + "prompt_tokens": 177, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 15, + "total_tokens": 189, }, } `; -exports[`chat-completions → anthropic > systemMessageArrayContent > request 1`] = ` +exports[`chat-completions → anthropic > textFormatTextParam > request 1`] = ` { - "max_tokens": 300, + "max_tokens": 4096, "messages": [ { - "content": "What errors occurred recently?", + "content": "Say hello.", "role": "user", }, ], "model": "claude-sonnet-4-5-20250929", - "system": "You are a helpful data analyst. The default data source is project_logs with id abc-123.", } `; -exports[`chat-completions → anthropic > systemMessageArrayContent > response 1`] = ` +exports[`chat-completions → anthropic > textFormatTextParam > response 1`] = ` { "choices": [ { @@ -1992,244 +2732,306 @@ exports[`chat-completions → anthropic > systemMessageArrayContent > response 1 "index": 0, "message": { "annotations": [], - "content": "I'll help you find recent errors from the project logs. Let me query the data to identify error events. - -\`\`\`sql -SELECT - timestamp, - level, - message, - source, - error_code, - user_id -FROM project_logs -WHERE level IN ('ERROR', 'FATAL', 'CRITICAL') - AND timestamp >= DATETIME_SUB(CURRENT_DATETIME(), INTERVAL 24 HOURS) -ORDER BY timestamp DESC -LIMIT 20; -\`\`\` - -This query will show you: -- The most recent errors from the last 24 hours -- Error severity levels (ERROR, FATAL, CRITICAL) -- Timestamps, messages, and source information -- Any associated error codes and user IDs - -Would you like me to: -1. Extend the time range (e.g., last week)? -2. Filter by specific error types or sources? -3. Group the errors by frequency or type? -4. Look for error patterns or trends? - -Let me know what specific aspects of the recent errors you'd like to explore further!", + "content": "Hello! How are you doing today?", "role": "assistant", }, }, ], "created": 0, - "id": "chatcmpl-014JmxEhBbQ7MwgjtqbjRd3t", + "id": "chatcmpl-01Ua217Q9nmvXX33Wc8Se6Eh", "model": "claude-sonnet-4-20250514", "object": "chat.completion", "usage": { - "completion_tokens": 246, - "prompt_tokens": 33, + "completion_tokens": 11, + "prompt_tokens": 10, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 279, + "total_tokens": 21, }, } `; -exports[`chat-completions → anthropic > temperatureParam > request 1`] = ` +exports[`chat-completions → anthropic > toolCallRequest > request 1`] = ` { "max_tokens": 4096, "messages": [ { - "content": "Say hi.", + "content": "What's the weather like in San Francisco?", "role": "user", }, ], "model": "claude-sonnet-4-5-20250929", - "temperature": 0.7, + "tool_choice": { + "type": "auto", + }, + "tools": [ + { + "description": "Get the current weather for a location", + "input_schema": { + "properties": { + "location": { + "description": "The city and state, e.g. San Francisco, CA", + "type": "string", + }, + }, + "required": [ + "location", + ], + "type": "object", + }, + "name": "get_weather", + }, + ], } `; -exports[`chat-completions → anthropic > temperatureParam > response 1`] = ` +exports[`chat-completions → anthropic > toolCallRequest > response 1`] = ` { "choices": [ { - "finish_reason": "stop", + "finish_reason": "tool_calls", "index": 0, "message": { "annotations": [], - "content": "Hi there! How are you doing today?", + "content": "I'll check the current weather in San Francisco for you.", "role": "assistant", + "tool_calls": [ + { + "function": { + "arguments": "{"location":"San Francisco, CA"}", + "name": "get_weather", + }, + "id": "toolu_01PqaAfxSMw4i3arxmVVAscE", + "type": "function", + }, + ], }, }, ], "created": 0, - "id": "chatcmpl-01U3EJr69iVQgws41UtX33tr", + "id": "chatcmpl-01DGYFTTL43Dk497PDoSA3dT", "model": "claude-sonnet-4-20250514", "object": "chat.completion", "usage": { - "completion_tokens": 12, - "prompt_tokens": 10, + "completion_tokens": 69, + "prompt_tokens": 402, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 22, + "total_tokens": 471, }, } `; -exports[`chat-completions → anthropic > textFormatJsonObjectParam > request 1`] = ` +exports[`chat-completions → anthropic > toolChoiceRequiredParam > request 1`] = ` { "max_tokens": 4096, "messages": [ { - "content": "Return {"status": "ok"} as JSON.", + "content": "Tokyo weather", "role": "user", }, ], "model": "claude-sonnet-4-5-20250929", - "output_config": { - "format": { - "schema": { + "tool_choice": { + "name": "get_weather", + "type": "tool", + }, + "tools": [ + { + "description": "Get weather", + "input_schema": { "additionalProperties": false, + "properties": { + "location": { + "type": "string", + }, + }, + "required": [ + "location", + ], "type": "object", }, - "type": "json_schema", + "name": "get_weather", + "strict": true, }, - }, + ], } `; -exports[`chat-completions → anthropic > textFormatJsonObjectParam > response 1`] = ` +exports[`chat-completions → anthropic > toolChoiceRequiredParam > response 1`] = ` { "choices": [ { - "finish_reason": "stop", + "finish_reason": "tool_calls", "index": 0, "message": { "annotations": [], - "content": "{}", "role": "assistant", + "tool_calls": [ + { + "function": { + "arguments": "{"location":"Tokyo"}", + "name": "get_weather", + }, + "id": "toolu_014tEQdRC4Y4vWxHL3S2Jdmw", + "type": "function", + }, + ], }, }, ], "created": 0, - "id": "chatcmpl-01HsvDHsmB5HM6huqARAVhcu", + "id": "chatcmpl-0174FQ9HbqDsmatxUqpempAc", "model": "claude-sonnet-4-5-20250929", "object": "chat.completion", "usage": { - "completion_tokens": 4, - "prompt_tokens": 119, + "completion_tokens": 33, + "prompt_tokens": 659, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 123, + "total_tokens": 692, }, } `; -exports[`chat-completions → anthropic > textFormatJsonSchemaParam > request 1`] = ` +exports[`chat-completions → anthropic > toolChoiceRequiredWithReasoningParam > request 1`] = ` { "max_tokens": 4096, "messages": [ { - "content": "Extract: John is 25.", + "content": "Tokyo weather", "role": "user", }, ], "model": "claude-sonnet-4-5-20250929", - "output_config": { - "format": { - "schema": { + "tool_choice": { + "name": "get_weather", + "type": "tool", + }, + "tools": [ + { + "description": "Get weather", + "input_schema": { "additionalProperties": false, "properties": { - "age": { - "type": "number", - }, - "name": { + "location": { "type": "string", }, }, "required": [ - "name", - "age", + "location", ], "type": "object", }, - "type": "json_schema", + "name": "get_weather", + "strict": true, }, - }, + ], } `; -exports[`chat-completions → anthropic > textFormatJsonSchemaParam > response 1`] = ` +exports[`chat-completions → anthropic > toolChoiceRequiredWithReasoningParam > response 1`] = ` { "choices": [ { - "finish_reason": "stop", + "finish_reason": "tool_calls", "index": 0, "message": { "annotations": [], - "content": "{"age":25,"name":"John"}", "role": "assistant", + "tool_calls": [ + { + "function": { + "arguments": "{"location":"Tokyo"}", + "name": "get_weather", + }, + "id": "toolu_01U9vJCPNTaaHh9JXfFH8v54", + "type": "function", + }, + ], }, }, ], "created": 0, - "id": "chatcmpl-01Y8aR6kSByjC9kb1uwG8wYA", + "id": "chatcmpl-017f5RTMoGsZcmM494YpPd8W", "model": "claude-sonnet-4-5-20250929", "object": "chat.completion", "usage": { - "completion_tokens": 12, - "prompt_tokens": 177, + "completion_tokens": 33, + "prompt_tokens": 659, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 189, + "total_tokens": 692, }, } `; -exports[`chat-completions → anthropic > textFormatJsonSchemaWithDescriptionParam > request 1`] = ` +exports[`chat-completions → anthropic > topPParam > request 1`] = ` { "max_tokens": 4096, "messages": [ { - "content": "Extract: John is 25.", + "content": "Say hi.", "role": "user", }, ], "model": "claude-sonnet-4-5-20250929", - "output_config": { - "format": { - "schema": { - "additionalProperties": false, - "properties": { - "age": { - "type": "number", - }, - "name": { - "type": "string", - }, - }, - "required": [ - "name", - "age", - ], - "type": "object", + "top_p": 0.9, +} +`; + +exports[`chat-completions → anthropic > topPParam > response 1`] = ` +{ + "choices": [ + { + "finish_reason": "stop", + "index": 0, + "message": { + "annotations": [], + "content": "Hi! How are you doing today?", + "role": "assistant", }, - "type": "json_schema", }, + ], + "created": 0, + "id": "chatcmpl-011fFxkkz1DRMcUR3KrCKpkj", + "model": "claude-sonnet-4-20250514", + "object": "chat.completion", + "usage": { + "completion_tokens": 11, + "prompt_tokens": 10, + "prompt_tokens_details": { + "cached_tokens": 0, + }, + "total_tokens": 21, + }, +} +`; + +exports[`chat-completions → bedrock > complexReasoningRequest > request 1`] = ` +{ + "inferenceConfig": { + "maxTokens": 20000, }, + "messages": [ + { + "content": [ + { + "text": "There is a digital clock, with minutes and hours in the form of 00:00. The clock shows all times from 00:00 to 23:59 and repeating. Imagine you had a list of all these times. Which digit(s) is the most common and which is the rarest? Can you find their percentage?", + }, + ], + "role": "user", + }, + ], + "modelId": "gpt-5-nano", } `; -exports[`chat-completions → anthropic > textFormatJsonSchemaWithDescriptionParam > response 1`] = ` +exports[`chat-completions → bedrock > complexReasoningRequest > response 1`] = ` { "choices": [ { @@ -2237,40 +3039,122 @@ exports[`chat-completions → anthropic > textFormatJsonSchemaWithDescriptionPar "index": 0, "message": { "annotations": [], - "content": "{"age":25,"name":"John"}", + "content": "# Digital Clock Digit Frequency Analysis + +Let me work through this systematically by counting how often each digit (0-9) appears in a complete 24-hour cycle. + +## Breaking Down the Clock Format: HH:MM + +The clock cycles through: +- **Hours**: 00 to 23 (24 values) +- **Minutes**: 00 to 59 (60 values) +- **Total times**: 24 × 60 = 1,440 times per day +- **Total digit positions**: 1,440 × 4 = 5,760 digits + +## Counting Each Digit + +Let me count occurrences in each position: + +**Hours (00-23):** +- Each hour appears 60 times (once per minute) +- Digit frequency in hours: 0,1,2 appear 120 times each; 3,4,5,6,7,8,9 don't appear in tens place +- Tens place: 0(120), 1(120), 2(120) +- Units place: 0(120), 1(120), 2(120), 3(60), 4(60), 5(60), 6(60), 7(60), 8(60), 9(60) + +**Minutes (00-59):** +- Each minute appears 24 times (once per hour) +- Tens place: 0-5 each appear 240 times (24×10) +- Units place: 0-9 each appear 144 times (24×6) + +## Final Count + +| Digit | Count | +|-------|-------| +| **0** | 120+120+240+144 = **624** | +| **1** | 120+120+240+144 = **624** | +| **2** | 120+120+240+144 = **624** | +| **3** | 60+240+144 = **444** | +| **4** | 60+240+144 = **444** | +| **5** | 60+240+144 = **444** | +| **6** | 60+0+144 = **204** | +| **7** | 60+0+144 = **204** | +| **8** | 60+0+144 = **204** | +| **9** | 60+0+144 = **204** | + +## Results + +**Most Common**: **0, 1, 2** +- Frequency: 624 each +- Percentage: **624 ÷ 5,760 = 10.83%** + +**Rarest**: **6, 7, 8, 9** +- Frequency: 204 each +- Percentage: **204 ÷ 5,760 = 3.54%** + +The reason is that higher digits (6-9) can't appear in the hours tens place (only 0-2), making them significantly rarer!", "role": "assistant", }, }, ], "created": 0, - "id": "chatcmpl-01LnvqYE282aquDyCJpdcWvN", - "model": "claude-sonnet-4-5-20250929", + "id": "chatcmpl-transformed", + "model": "transformed", "object": "chat.completion", "usage": { - "completion_tokens": 12, - "prompt_tokens": 177, + "completion_tokens": 700, + "prompt_tokens": 80, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 189, + "total_tokens": 780, }, } `; -exports[`chat-completions → anthropic > textFormatTextParam > request 1`] = ` +exports[`chat-completions → bedrock > multimodalRequest > request 1`] = ` { - "max_tokens": 4096, + "inferenceConfig": { + "maxTokens": 300, + }, "messages": [ { - "content": "Say hello.", + "content": [ + { + "text": "What do you see in this image?", + }, + { + "image": { + "format": "jpeg", + "source": { + "bytes": "https://t3.ftcdn.net/jpg/02/36/99/22/360_F_236992283_sNOxCVQeFLd5pdqaKGh8DRGMZy7P4XKm.jpg", + }, + }, + }, + ], "role": "user", }, ], - "model": "claude-sonnet-4-5-20250929", + "modelId": "gpt-5-nano", } `; -exports[`chat-completions → anthropic > textFormatTextParam > response 1`] = ` +exports[`chat-completions → bedrock > reasoningRequest > request 1`] = ` +{ + "messages": [ + { + "content": [ + { + "text": "Solve this step by step: If a train travels 60 mph for 2 hours, then 80 mph for 1 hour, what's the average speed?", + }, + ], + "role": "user", + }, + ], + "modelId": "gpt-5-nano", +} +`; + +exports[`chat-completions → bedrock > reasoningRequest > response 1`] = ` { "choices": [ { @@ -2278,282 +3162,337 @@ exports[`chat-completions → anthropic > textFormatTextParam > response 1`] = ` "index": 0, "message": { "annotations": [], - "content": "Hello! How are you doing today?", + "content": "# Average Speed Calculation + +## Step 1: Find the distance for each segment + +**First segment:** +- Speed = 60 mph, Time = 2 hours +- Distance = 60 × 2 = **120 miles** + +**Second segment:** +- Speed = 80 mph, Time = 1 hour +- Distance = 80 × 1 = **80 miles** + +## Step 2: Calculate total distance and total time + +- **Total distance** = 120 + 80 = **200 miles** +- **Total time** = 2 + 1 = **3 hours** + +## Step 3: Calculate average speed + +$$\\text{Average Speed} = \\frac{\\text{Total Distance}}{\\text{Total Time}} = \\frac{200}{3} = 66.\\overline{6} \\text{ mph}$$ + +**Answer: The average speed is approximately 66.67 mph** (or 66⅔ mph)", "role": "assistant", }, }, ], "created": 0, - "id": "chatcmpl-01Ua217Q9nmvXX33Wc8Se6Eh", - "model": "claude-sonnet-4-20250514", + "id": "chatcmpl-transformed", + "model": "transformed", "object": "chat.completion", "usage": { - "completion_tokens": 11, - "prompt_tokens": 10, + "completion_tokens": 229, + "prompt_tokens": 45, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 21, + "total_tokens": 274, }, } `; -exports[`chat-completions → anthropic > toolCallRequest > request 1`] = ` +exports[`chat-completions → bedrock > reasoningRequestTruncated > request 1`] = ` { - "max_tokens": 4096, - "messages": [ - { - "content": "What's the weather like in San Francisco?", - "role": "user", - }, - ], - "model": "claude-sonnet-4-5-20250929", - "tool_choice": { - "type": "auto", + "inferenceConfig": { + "maxTokens": 100, }, - "tools": [ + "messages": [ { - "description": "Get the current weather for a location", - "input_schema": { - "properties": { - "location": { - "description": "The city and state, e.g. San Francisco, CA", - "type": "string", - }, + "content": [ + { + "text": "Solve this step by step: If a train travels 60 mph for 2 hours, then 80 mph for 1 hour, what's the average speed?", }, - "required": [ - "location", - ], - "type": "object", - }, - "name": "get_weather", + ], + "role": "user", }, ], + "modelId": "gpt-5-nano", } `; -exports[`chat-completions → anthropic > toolCallRequest > response 1`] = ` +exports[`chat-completions → bedrock > reasoningRequestTruncated > response 1`] = ` { "choices": [ { - "finish_reason": "tool_calls", + "finish_reason": "length", "index": 0, "message": { "annotations": [], - "content": "I'll check the current weather in San Francisco for you.", + "content": "# Average Speed Calculation + +## Step 1: Find the distance for each segment + +**First segment:** +- Speed = 60 mph, Time = 2 hours +- Distance = 60 × 2 = **120 miles** + +**Second segment:** +- Speed = 80 mph, Time = 1 hour +- Distance = 80 × 1 = **80 miles** + +## Step 2: Calculate total distance", "role": "assistant", - "tool_calls": [ - { - "function": { - "arguments": "{"location":"San Francisco, CA"}", - "name": "get_weather", - }, - "id": "toolu_01PqaAfxSMw4i3arxmVVAscE", - "type": "function", - }, - ], }, }, ], "created": 0, - "id": "chatcmpl-01DGYFTTL43Dk497PDoSA3dT", - "model": "claude-sonnet-4-20250514", + "id": "chatcmpl-transformed", + "model": "transformed", "object": "chat.completion", "usage": { - "completion_tokens": 69, - "prompt_tokens": 402, + "completion_tokens": 100, + "prompt_tokens": 45, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 471, + "total_tokens": 145, }, } `; -exports[`chat-completions → anthropic > toolChoiceRequiredParam > request 1`] = ` +exports[`chat-completions → bedrock > reasoningWithOutput > request 1`] = ` { - "max_tokens": 4096, "messages": [ { - "content": "Tokyo weather", - "role": "user", - }, - ], - "model": "claude-sonnet-4-5-20250929", - "tool_choice": { - "name": "get_weather", - "type": "tool", - }, - "tools": [ - { - "description": "Get weather", - "input_schema": { - "additionalProperties": false, - "properties": { - "location": { - "type": "string", - }, + "content": [ + { + "text": "What color is the sky?", }, - "required": [ - "location", - ], - "type": "object", - }, - "name": "get_weather", - "strict": true, + ], + "role": "user", }, ], + "modelId": "gpt-5-nano", } `; -exports[`chat-completions → anthropic > toolChoiceRequiredParam > response 1`] = ` +exports[`chat-completions → bedrock > reasoningWithOutput > response 1`] = ` { "choices": [ { - "finish_reason": "tool_calls", + "finish_reason": "stop", "index": 0, "message": { "annotations": [], + "content": "The sky typically appears **blue** during the day due to Rayleigh scattering, which scatters shorter blue wavelengths of light more than longer red wavelengths. + +However, the sky can appear different colors depending on conditions: +- **Orange, pink, or red** at sunrise and sunset +- **Gray or white** on cloudy days +- **Deep blue or purple** at high altitudes +- **Black** at night (when the sun isn't illuminating the atmosphere)", "role": "assistant", - "tool_calls": [ - { - "function": { - "arguments": "{"location":"Tokyo"}", - "name": "get_weather", - }, - "id": "toolu_014tEQdRC4Y4vWxHL3S2Jdmw", - "type": "function", - }, - ], }, }, ], "created": 0, - "id": "chatcmpl-0174FQ9HbqDsmatxUqpempAc", - "model": "claude-sonnet-4-5-20250929", + "id": "chatcmpl-transformed", + "model": "transformed", "object": "chat.completion", "usage": { - "completion_tokens": 33, - "prompt_tokens": 659, + "completion_tokens": 110, + "prompt_tokens": 13, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 692, + "total_tokens": 123, }, } `; -exports[`chat-completions → anthropic > toolChoiceRequiredWithReasoningParam > request 1`] = ` +exports[`chat-completions → bedrock > simpleRequest > request 1`] = ` { - "max_tokens": 4096, + "additionalModelRequestFields": { + "thinking": { + "budget_tokens": 1024, + "type": "enabled", + }, + }, "messages": [ { - "content": "Tokyo weather", + "content": [ + { + "text": "What is the capital of France?", + }, + ], "role": "user", }, ], - "model": "claude-sonnet-4-5-20250929", - "tool_choice": { - "name": "get_weather", - "type": "tool", + "modelId": "gpt-5-nano", +} +`; + +exports[`chat-completions → bedrock > systemMessageArrayContent > request 1`] = ` +{ + "inferenceConfig": { + "maxTokens": 300, }, - "tools": [ + "messages": [ { - "description": "Get weather", - "input_schema": { - "additionalProperties": false, - "properties": { - "location": { - "type": "string", - }, + "content": [ + { + "text": "System: You are a helpful data analyst. The default data source is project_logs with id abc-123.", }, - "required": [ - "location", - ], - "type": "object", - }, - "name": "get_weather", - "strict": true, + ], + "role": "user", + }, + { + "content": [ + { + "text": "What errors occurred recently?", + }, + ], + "role": "user", }, ], + "modelId": "gpt-5-nano", } `; -exports[`chat-completions → anthropic > toolChoiceRequiredWithReasoningParam > response 1`] = ` +exports[`chat-completions → bedrock > systemMessageArrayContent > response 1`] = ` { "choices": [ { - "finish_reason": "tool_calls", + "finish_reason": "stop", "index": 0, "message": { "annotations": [], + "content": "# Recent Errors in Project Logs (abc-123) + +I'd be happy to help you analyze recent errors! However, I don't have actual access to your database or project logs. To provide you with specific error information, I would need you to: + +1. **Share the error data** - You could provide: + - Recent log entries or error messages + - Error timestamps and frequency + - Error types or categories + - Stack traces or error details + +2. **Clarify the timeframe** - What counts as "recently"? + - Last hour? + - Last 24 hours? + - Last week? + +3. **Specify what you're looking for**: + - Most frequent errors? + - Critical/high-severity errors only? + - Errors affecting specific features or services? + +## Suggested Query (if you can run it) +If you have database access, something like this might help: +\`\`\`sql +SELECT error_type, COUNT(*) as frequency, MAX(timestamp) as last_occurrence +FROM project_logs +WHERE project_id = 'abc-123' + AND timestamp > NOW() - INTERVAL '24 hours' +GROUP BY error_type +ORDER BY frequency DESC; +\`\`\` + +**Please share your error logs or data, and I'll provide a detailed analysis!**", "role": "assistant", - "tool_calls": [ - { - "function": { - "arguments": "{"location":"Tokyo"}", - "name": "get_weather", - }, - "id": "toolu_01U9vJCPNTaaHh9JXfFH8v54", - "type": "function", - }, - ], }, }, ], "created": 0, - "id": "chatcmpl-017f5RTMoGsZcmM494YpPd8W", - "model": "claude-sonnet-4-5-20250929", + "id": "chatcmpl-transformed", + "model": "transformed", "object": "chat.completion", "usage": { - "completion_tokens": 33, - "prompt_tokens": 659, + "completion_tokens": 297, + "prompt_tokens": 35, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 692, + "total_tokens": 332, }, } `; -exports[`chat-completions → anthropic > topPParam > request 1`] = ` +exports[`chat-completions → bedrock > toolCallRequest > request 1`] = ` { - "max_tokens": 4096, "messages": [ { - "content": "Say hi.", + "content": [ + { + "text": "What's the weather like in San Francisco?", + }, + ], "role": "user", }, ], - "model": "claude-sonnet-4-5-20250929", - "top_p": 0.9, + "modelId": "gpt-5-nano", + "toolConfig": { + "tools": [ + { + "toolSpec": { + "description": "Get the current weather for a location", + "inputSchema": { + "json": { + "properties": { + "location": { + "description": "The city and state, e.g. San Francisco, CA", + "type": "string", + }, + }, + "required": [ + "location", + ], + "type": "object", + }, + }, + "name": "get_weather", + }, + }, + ], + }, } `; -exports[`chat-completions → anthropic > topPParam > response 1`] = ` +exports[`chat-completions → bedrock > toolCallRequest > response 1`] = ` { "choices": [ { - "finish_reason": "stop", + "finish_reason": "tool_calls", "index": 0, "message": { "annotations": [], - "content": "Hi! How are you doing today?", "role": "assistant", + "tool_calls": [ + { + "function": { + "arguments": "{"location":"San Francisco, CA"}", + "name": "get_weather", + }, + "id": "tooluse_fIh9Q7KbroQrZmDBVydzTL", + "type": "function", + }, + ], }, }, ], "created": 0, - "id": "chatcmpl-011fFxkkz1DRMcUR3KrCKpkj", - "model": "claude-sonnet-4-20250514", + "id": "chatcmpl-transformed", + "model": "transformed", "object": "chat.completion", "usage": { - "completion_tokens": 11, - "prompt_tokens": 10, + "completion_tokens": 57, + "prompt_tokens": 585, "prompt_tokens_details": { "cached_tokens": 0, }, - "total_tokens": 21, + "total_tokens": 642, }, } `; @@ -5445,3 +6384,334 @@ exports[`responses → anthropic > toolCallRequest > response 1`] = ` }, } `; + +exports[`responses → bedrock > complexReasoningRequest > request 1`] = ` +{ + "additionalModelRequestFields": { + "thinking": { + "budget_tokens": 15000, + "type": "enabled", + }, + }, + "inferenceConfig": { + "maxTokens": 20000, + }, + "messages": [ + { + "content": [ + { + "text": "There is a digital clock, with minutes and hours in the form of 00:00. The clock shows all times from 00:00 to 23:59 and repeating. Imagine you had a list of all these times. Which digit(s) is the most common and which is the rarest? Can you find their percentage?", + }, + ], + "role": "user", + }, + ], + "modelId": "gpt-5-nano", +} +`; + +exports[`responses → bedrock > multimodalRequest > request 1`] = ` +{ + "inferenceConfig": { + "maxTokens": 300, + }, + "messages": [ + { + "content": [ + { + "text": "What do you see in this image?", + }, + { + "image": { + "format": "jpeg", + "source": { + "bytes": "https://t3.ftcdn.net/jpg/02/36/99/22/360_F_236992283_sNOxCVQeFLd5pdqaKGh8DRGMZy7P4XKm.jpg", + }, + }, + }, + ], + "role": "user", + }, + ], + "modelId": "gpt-5-nano", +} +`; + +exports[`responses → bedrock > reasoningRequest > request 1`] = ` +{ + "additionalModelRequestFields": { + "thinking": { + "budget_tokens": 3072, + "type": "enabled", + }, + }, + "messages": [ + { + "content": [ + { + "text": "Solve this step by step: If a train travels 60 mph for 2 hours, then 80 mph for 1 hour, what's the average speed?", + }, + ], + "role": "user", + }, + ], + "modelId": "gpt-5-nano", +} +`; + +exports[`responses → bedrock > reasoningRequestTruncated > request 1`] = ` +{ + "additionalModelRequestFields": { + "thinking": { + "budget_tokens": 1024, + "type": "enabled", + }, + }, + "inferenceConfig": { + "maxTokens": 100, + }, + "messages": [ + { + "content": [ + { + "text": "Solve this step by step: If a train travels 60 mph for 2 hours, then 80 mph for 1 hour, what's the average speed?", + }, + ], + "role": "user", + }, + ], + "modelId": "gpt-5-nano", +} +`; + +exports[`responses → bedrock > reasoningWithOutput > request 1`] = ` +{ + "additionalModelRequestFields": { + "thinking": { + "budget_tokens": 1024, + "type": "enabled", + }, + }, + "messages": [ + { + "content": [ + { + "text": "What color is the sky?", + }, + ], + "role": "user", + }, + ], + "modelId": "gpt-5-nano", +} +`; + +exports[`responses → bedrock > simpleRequest > request 1`] = ` +{ + "additionalModelRequestFields": { + "thinking": { + "budget_tokens": 1024, + "type": "enabled", + }, + }, + "messages": [ + { + "content": [ + { + "text": "What is the capital of France?", + }, + ], + "role": "user", + }, + ], + "modelId": "gpt-5-nano", +} +`; + +exports[`responses → bedrock > systemMessageArrayContent > request 1`] = ` +{ + "inferenceConfig": { + "maxTokens": 300, + }, + "messages": [ + { + "content": [ + { + "text": "System: You are a helpful data analyst. The default data source is project_logs with id abc-123.", + }, + ], + "role": "user", + }, + { + "content": [ + { + "text": "What errors occurred recently?", + }, + ], + "role": "user", + }, + ], + "modelId": "gpt-5-nano", +} +`; + +exports[`responses → bedrock > systemMessageArrayContent > response 1`] = ` +{ + "created_at": 0, + "id": "resp_transformed", + "incomplete_details": null, + "model": "transformed", + "object": "response", + "output": [ + { + "content": [ + { + "annotations": [], + "text": "# Recent Errors in Project Logs (abc-123) + +I'd be happy to help you analyze recent errors, but I need a bit more information to provide the most useful results: + +1. **Time Range**: How far back should I look? + - Last 24 hours? + - Last 7 days? + - Last 30 days? + - Custom date range? + +2. **Error Scope**: Are you interested in: + - All errors? + - Specific error types? + - Errors from particular services/components? + - Errors above a certain severity level? + +3. **Analysis Focus**: What would be most helpful? + - Error frequency/trends? + - Most common error messages? + - Affected users or features? + - Error timeline/patterns? + +Once you provide these details, I can query the \`project_logs\` dataset and give you a comprehensive error analysis!", + "type": "output_text", + }, + ], + "id": "msg_transformed_item_0", + "role": "assistant", + "status": "completed", + "type": "message", + }, + ], + "output_text": "# Recent Errors in Project Logs (abc-123) + +I'd be happy to help you analyze recent errors, but I need a bit more information to provide the most useful results: + +1. **Time Range**: How far back should I look? + - Last 24 hours? + - Last 7 days? + - Last 30 days? + - Custom date range? + +2. **Error Scope**: Are you interested in: + - All errors? + - Specific error types? + - Errors from particular services/components? + - Errors above a certain severity level? + +3. **Analysis Focus**: What would be most helpful? + - Error frequency/trends? + - Most common error messages? + - Affected users or features? + - Error timeline/patterns? + +Once you provide these details, I can query the \`project_logs\` dataset and give you a comprehensive error analysis!", + "parallel_tool_calls": false, + "status": "completed", + "tool_choice": "none", + "tools": [], + "usage": { + "input_tokens": 35, + "input_tokens_details": { + "cached_tokens": 0, + }, + "output_tokens": 210, + "output_tokens_details": { + "reasoning_tokens": 0, + }, + "total_tokens": 245, + }, +} +`; + +exports[`responses → bedrock > toolCallRequest > request 1`] = ` +{ + "messages": [ + { + "content": [ + { + "text": "What's the weather like in San Francisco?", + }, + ], + "role": "user", + }, + ], + "modelId": "gpt-5-nano", + "toolConfig": { + "tools": [ + { + "toolSpec": { + "description": "Get the current weather for a location", + "inputSchema": { + "json": { + "properties": { + "location": { + "description": "The city and state, e.g. San Francisco, CA", + "type": "string", + }, + }, + "required": [ + "location", + ], + "type": "object", + }, + }, + "name": "get_weather", + }, + }, + ], + }, +} +`; + +exports[`responses → bedrock > toolCallRequest > response 1`] = ` +{ + "created_at": 0, + "id": "resp_transformed", + "incomplete_details": null, + "model": "transformed", + "object": "response", + "output": [ + { + "arguments": "{"location":"San Francisco, CA"}", + "call_id": "tooluse_cpNBxKzSF7PRX54s6VyUjk", + "id": "msg_transformed_item_0", + "name": "get_weather", + "status": "completed", + "type": "function_call", + }, + ], + "output_text": "", + "parallel_tool_calls": false, + "status": "completed", + "tool_choice": "none", + "tools": [], + "usage": { + "input_tokens": 585, + "input_tokens_details": { + "cached_tokens": 0, + }, + "output_tokens": 57, + "output_tokens_details": { + "reasoning_tokens": 0, + }, + "total_tokens": 642, + }, +} +`; diff --git a/payloads/scripts/transforms/capture-transforms.ts b/payloads/scripts/transforms/capture-transforms.ts index d65282ea..07f25215 100644 --- a/payloads/scripts/transforms/capture-transforms.ts +++ b/payloads/scripts/transforms/capture-transforms.ts @@ -4,7 +4,13 @@ import { existsSync, mkdirSync, writeFileSync } from "fs"; import { dirname } from "path"; import Anthropic from "@anthropic-ai/sdk"; import OpenAI from "openai"; -import { allTestCases, getCaseForProvider, GOOGLE_MODEL } from "../../cases"; +import { + allTestCases, + getCaseForProvider, + GOOGLE_MODEL, + type BedrockConverseRequest, +} from "../../cases"; +import { executeBedrock } from "../providers/bedrock"; import { TRANSFORM_PAIRS, STREAMING_PAIRS, @@ -24,6 +30,16 @@ const GOOGLE_API_BASE = "https://generativelanguage.googleapis.com/v1beta"; let _anthropic: Anthropic | undefined; let _openai: OpenAI | undefined; +function isBedrockConverseRequest( + value: unknown +): value is BedrockConverseRequest { + if (typeof value !== "object" || value === null) return false; + if (!("modelId" in value)) return false; + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- type guard needs safe property access on unknown object + const modelId = (value as { modelId?: unknown }).modelId; + return typeof modelId === "string" && modelId.length > 0; +} + function getAnthropic(): Anthropic { if (!_anthropic) _anthropic = new Anthropic(); return _anthropic; @@ -85,6 +101,20 @@ async function callProvider( ); case "google": return callGoogleProvider(request); + case "bedrock": { + if (!isBedrockConverseRequest(request)) { + throw new Error( + "Bedrock capture failed: request is missing required field 'modelId'" + ); + } + const result = await executeBedrock("transform-capture", request, { + stream: false, + }); + if (result.response) { + return result.response; + } + throw new Error(result.error ?? "Bedrock capture failed"); + } } } /* eslint-enable @typescript-eslint/consistent-type-assertions */ @@ -132,12 +162,23 @@ export async function captureTransforms( caseName, p.target ); - request.model = - targetCase && - typeof targetCase === "object" && - "model" in targetCase - ? targetCase.model - : TARGET_MODELS[p.target]; + if (p.target === "bedrock") { + request.modelId = + targetCase && + typeof targetCase === "object" && + targetCase !== null && + "modelId" in targetCase + ? targetCase.modelId + : TARGET_MODELS[p.target]; + } else { + request.model = + targetCase && + typeof targetCase === "object" && + targetCase !== null && + "model" in targetCase + ? targetCase.model + : TARGET_MODELS[p.target]; + } const response = await callProvider(p.target, request); diff --git a/payloads/scripts/transforms/helpers.ts b/payloads/scripts/transforms/helpers.ts index fab6653e..ec5bf919 100644 --- a/payloads/scripts/transforms/helpers.ts +++ b/payloads/scripts/transforms/helpers.ts @@ -5,6 +5,8 @@ import { transform_response, validate_anthropic_request, validate_anthropic_response, + validate_bedrock_request, + validate_bedrock_response, validate_chat_completions_request, validate_chat_completions_response, validate_google_request, @@ -15,6 +17,7 @@ import { import { allTestCases, getCaseNames, getCaseForProvider } from "../../cases"; import { ANTHROPIC_MODEL, + BEDROCK_MODEL, GOOGLE_MODEL, OPENAI_CHAT_COMPLETIONS_MODEL, OPENAI_RESPONSES_MODEL, @@ -24,8 +27,14 @@ export type SourceFormat = | "chat-completions" | "responses" | "anthropic" - | "google"; -export type WasmFormat = "OpenAI" | "Responses" | "Anthropic" | "Google"; + | "google" + | "bedrock"; +export type WasmFormat = + | "OpenAI" + | "Responses" + | "Anthropic" + | "Google" + | "bedrock"; export interface TransformPair { source: SourceFormat; @@ -65,6 +74,24 @@ export const TRANSFORM_PAIRS: TransformPair[] = [ wasmSource: "OpenAI", wasmTarget: "Google", }, + { + source: "chat-completions", + target: "bedrock", + wasmSource: "OpenAI", + wasmTarget: "bedrock", + }, + { + source: "responses", + target: "bedrock", + wasmSource: "Responses", + wasmTarget: "bedrock", + }, + { + source: "anthropic", + target: "bedrock", + wasmSource: "Anthropic", + wasmTarget: "bedrock", + }, ]; // Validation functions by format @@ -73,6 +100,7 @@ const REQUEST_VALIDATORS: Record unknown> = { responses: validate_responses_request, anthropic: validate_anthropic_request, google: validate_google_request, + bedrock: validate_bedrock_request, }; const RESPONSE_VALIDATORS: Record unknown> = { @@ -80,6 +108,7 @@ const RESPONSE_VALIDATORS: Record unknown> = { responses: validate_responses_response, anthropic: validate_anthropic_response, google: validate_google_response, + bedrock: validate_bedrock_response, }; interface TransformResultData { @@ -99,7 +128,11 @@ export function transformAndValidateRequest( wasmTarget: WasmFormat, targetFormat: SourceFormat ): unknown { - const result = transform_request(JSON.stringify(input), wasmTarget); + const result = transform_request( + JSON.stringify(input), + wasmTarget, + TARGET_MODELS[targetFormat] + ); if (!isTransformResultData(result)) { throw new Error("Invalid transform result"); } @@ -130,6 +163,7 @@ const WASM_TO_SOURCE: Record = { Responses: "responses", Anthropic: "anthropic", Google: "google", + bedrock: "bedrock", }; // Transform and validate response @@ -183,6 +217,7 @@ export const TARGET_MODELS: Record = { "chat-completions": OPENAI_CHAT_COMPLETIONS_MODEL, responses: OPENAI_RESPONSES_MODEL, google: GOOGLE_MODEL, + bedrock: BEDROCK_MODEL, }; export function getTransformableCases( diff --git a/payloads/transforms/anthropic_to_bedrock/complexReasoningRequest.json b/payloads/transforms/anthropic_to_bedrock/complexReasoningRequest.json new file mode 100644 index 00000000..c41c9e22 --- /dev/null +++ b/payloads/transforms/anthropic_to_bedrock/complexReasoningRequest.json @@ -0,0 +1,29 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "text": "# Digital Clock Digit Analysis\n\nLet me work through this systematically by counting digit occurrences across all 24-hour times.\n\n## Setting Up the Problem\n\nA full day has **1,440 minutes** (00:00 through 23:59), and each time displays 4 digits.\n\n**Total digit positions: 1,440 × 4 = 5,760 digits**\n\n## Counting Each Position\n\nLet me count how often each digit (0-9) appears in each of the 4 positions:\n\n### Hours (00-23)\n- **Tens place**: 0(00-09)×10, 1(10-19)×10, 2(20-23)×4 = cycles 24 times/day\n- **Ones place**: Each digit 0-9 appears in every 10-hour cycle, repeated 2.4 times\n\n### Minutes (00-59)\n- **Tens place**: Each digit 0-5 appears 10 times per hour, so 240 times/day\n- **Ones place**: Each digit 0-9 appears 6 times per hour, so 144 times/day\n\n## Complete Count per Digit\n\n| Digit | Tens(H) | Ones(H) | Tens(M) | Ones(M) | **Total** |\n|-------|---------|---------|---------|---------|-----------|\n| 0 | 264 | 144 | 240 | 144 | **792** |\n| 1 | 240 | 144 | 240 | 144 | **768** |\n| 2 | 240 | 144 | 240 | 144 | **768** |\n| 3 | 144 | 144 | 240 | 144 | **672** |\n| 4 | 144 | 144 | 240 | 144 | **672** |\n| 5 | 144 | 144 | 240 | 144 | **672** |\n| 6 | 0 | 0 | 0 | 144 | **144** |\n| 7 | 0 | 0 | 0 | 144 | **144** |\n| 8 | 0 | 0 | 0 | 144 | **144** |\n| 9 | 0 | 0 | 0 | 144 | **144** |\n\n## Results\n\n**Most Common: 0**\n- Appears: **792 times**\n- Percentage: 792 ÷ 5,760 = **13.75%**\n\n**Rarest: 6, 7, 8, and 9** (tied)\n- Each appears: **144 times**\n- Percentage: 144 ÷ 5,760 = **2.5%**\n\nThe digit 0 dominates because it appears frequently in leading positions (00-09 hours, 00-09 and 00-59 minutes), while 6-9 only appear in the ones place of minutes." + } + ] + } + }, + "stopReason": "end_turn", + "usage": { + "inputTokens": 80, + "outputTokens": 735, + "totalTokens": 815, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 5112 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "c221271b-78af-4158-b643-a849dcd6eb9c", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/anthropic_to_bedrock/multimodalRequest.json b/payloads/transforms/anthropic_to_bedrock/multimodalRequest.json new file mode 100644 index 00000000..26546f93 --- /dev/null +++ b/payloads/transforms/anthropic_to_bedrock/multimodalRequest.json @@ -0,0 +1,4 @@ +{ + "error": "ValidationException: The model returned the following errors: Could not process image", + "name": "Error" +} \ No newline at end of file diff --git a/payloads/transforms/anthropic_to_bedrock/reasoningRequest.json b/payloads/transforms/anthropic_to_bedrock/reasoningRequest.json new file mode 100644 index 00000000..b170e85e --- /dev/null +++ b/payloads/transforms/anthropic_to_bedrock/reasoningRequest.json @@ -0,0 +1,29 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "text": "# Solving for Average Speed\n\n## Step 1: Find the distance for each segment\n\n**First segment:**\n- Speed = 60 mph, Time = 2 hours\n- Distance = Speed × Time = 60 × 2 = **120 miles**\n\n**Second segment:**\n- Speed = 80 mph, Time = 1 hour\n- Distance = Speed × Time = 80 × 1 = **80 miles**\n\n## Step 2: Find the total distance and total time\n\n- **Total distance** = 120 + 80 = **200 miles**\n- **Total time** = 2 + 1 = **3 hours**\n\n## Step 3: Calculate average speed\n\n$$\\text{Average Speed} = \\frac{\\text{Total Distance}}{\\text{Total Time}} = \\frac{200}{3} = \\mathbf{66.\\overline{6} \\text{ mph}}$$\n\n**Answer: 66⅔ mph (or approximately 66.67 mph)**" + } + ] + } + }, + "stopReason": "end_turn", + "usage": { + "inputTokens": 45, + "outputTokens": 238, + "totalTokens": 283, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 2124 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "494aa934-c5c6-4439-99e4-ed754b1a4afb", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/anthropic_to_bedrock/reasoningRequestTruncated.json b/payloads/transforms/anthropic_to_bedrock/reasoningRequestTruncated.json new file mode 100644 index 00000000..528e99f0 --- /dev/null +++ b/payloads/transforms/anthropic_to_bedrock/reasoningRequestTruncated.json @@ -0,0 +1,29 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "text": "# Average Speed Calculation\n\n**Step 1: Find the distance for the first part**\n- Speed × Time = Distance\n- 60 mph × 2 hours = **120 miles**\n\n**Step 2: Find the distance for the second part**\n- 80 mph × 1 hour = **80 miles**\n\n**Step 3: Find total distance**\n- 120 + 80 = **200 miles**" + } + ] + } + }, + "stopReason": "max_tokens", + "usage": { + "inputTokens": 45, + "outputTokens": 100, + "totalTokens": 145, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 1952 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "ef8d8b34-ab88-4d9a-9730-e0bdb4842188", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/anthropic_to_bedrock/reasoningWithOutput.json b/payloads/transforms/anthropic_to_bedrock/reasoningWithOutput.json new file mode 100644 index 00000000..ab11d5f5 --- /dev/null +++ b/payloads/transforms/anthropic_to_bedrock/reasoningWithOutput.json @@ -0,0 +1,29 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "text": "The sky typically appears **blue** during the day, caused by sunlight scattering off molecules in the atmosphere (a phenomenon called Rayleigh scattering).\n\nHowever, the sky can appear different colors depending on conditions:\n- **Orange, red, or pink** at sunrise and sunset\n- **Gray or white** on cloudy days\n- **Dark blue or black** at night\n- **Reddish** during dust storms or air pollution" + } + ] + } + }, + "stopReason": "end_turn", + "usage": { + "inputTokens": 13, + "outputTokens": 100, + "totalTokens": 113, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 1810 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "6df2e674-e545-458f-95b4-1bb00f10c6be", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/anthropic_to_bedrock/simpleRequest.json b/payloads/transforms/anthropic_to_bedrock/simpleRequest.json new file mode 100644 index 00000000..5ff9cb89 --- /dev/null +++ b/payloads/transforms/anthropic_to_bedrock/simpleRequest.json @@ -0,0 +1,29 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "text": "The capital of France is Paris." + } + ] + } + }, + "stopReason": "end_turn", + "usage": { + "inputTokens": 14, + "outputTokens": 10, + "totalTokens": 24, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 1720 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "f7b9e33f-fa75-4bcc-9c2e-ed2c7286bead", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/anthropic_to_bedrock/systemMessageArrayContent.json b/payloads/transforms/anthropic_to_bedrock/systemMessageArrayContent.json new file mode 100644 index 00000000..f0dfb6c4 --- /dev/null +++ b/payloads/transforms/anthropic_to_bedrock/systemMessageArrayContent.json @@ -0,0 +1,29 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "text": "# Recent Errors in Project Logs (abc-123)\n\nI'd be happy to help you analyze recent errors, but I need a bit more information to give you the most useful analysis:\n\n1. **Time range**: What does \"recently\" mean for you? \n - Last 24 hours?\n - Last 7 days?\n - Last week?\n\n2. **Error type**: Are you interested in:\n - All errors?\n - Specific error categories (e.g., database, API, authentication)?\n - Errors above a certain severity level?\n\n3. **Level of detail**: Would you like:\n - A summary count of errors?\n - Top errors by frequency?\n - Full error logs with stack traces?\n - Errors grouped by component/service?\n\nOnce you provide these details, I can query the project_logs (abc-123) database and give you a comprehensive error analysis." + } + ] + } + }, + "stopReason": "end_turn", + "usage": { + "inputTokens": 35, + "outputTokens": 209, + "totalTokens": 244, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 2406 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "4d94fb79-c465-4532-bb65-9953e795f56a", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/anthropic_to_bedrock/toolCallRequest.json b/payloads/transforms/anthropic_to_bedrock/toolCallRequest.json new file mode 100644 index 00000000..e27c483e --- /dev/null +++ b/payloads/transforms/anthropic_to_bedrock/toolCallRequest.json @@ -0,0 +1,36 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "toolUse": { + "toolUseId": "tooluse_LmwV398ieC9MtSQdcAb3dj", + "name": "get_weather", + "input": { + "location": "San Francisco, CA" + }, + "type": "tool_use" + } + } + ] + } + }, + "stopReason": "tool_use", + "usage": { + "inputTokens": 585, + "outputTokens": 57, + "totalTokens": 642, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 993 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "5565c282-8495-4bc5-bb35-977a223de712", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/chat-completions_to_bedrock/complexReasoningRequest.json b/payloads/transforms/chat-completions_to_bedrock/complexReasoningRequest.json new file mode 100644 index 00000000..1149a1b2 --- /dev/null +++ b/payloads/transforms/chat-completions_to_bedrock/complexReasoningRequest.json @@ -0,0 +1,29 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "text": "# Digital Clock Digit Frequency Analysis\n\nLet me work through this systematically by counting how often each digit (0-9) appears in a complete 24-hour cycle.\n\n## Breaking Down the Clock Format: HH:MM\n\nThe clock cycles through:\n- **Hours**: 00 to 23 (24 values)\n- **Minutes**: 00 to 59 (60 values)\n- **Total times**: 24 × 60 = 1,440 times per day\n- **Total digit positions**: 1,440 × 4 = 5,760 digits\n\n## Counting Each Digit\n\nLet me count occurrences in each position:\n\n**Hours (00-23):**\n- Each hour appears 60 times (once per minute)\n- Digit frequency in hours: 0,1,2 appear 120 times each; 3,4,5,6,7,8,9 don't appear in tens place\n- Tens place: 0(120), 1(120), 2(120)\n- Units place: 0(120), 1(120), 2(120), 3(60), 4(60), 5(60), 6(60), 7(60), 8(60), 9(60)\n\n**Minutes (00-59):**\n- Each minute appears 24 times (once per hour)\n- Tens place: 0-5 each appear 240 times (24×10)\n- Units place: 0-9 each appear 144 times (24×6)\n\n## Final Count\n\n| Digit | Count |\n|-------|-------|\n| **0** | 120+120+240+144 = **624** |\n| **1** | 120+120+240+144 = **624** |\n| **2** | 120+120+240+144 = **624** |\n| **3** | 60+240+144 = **444** |\n| **4** | 60+240+144 = **444** |\n| **5** | 60+240+144 = **444** |\n| **6** | 60+0+144 = **204** |\n| **7** | 60+0+144 = **204** |\n| **8** | 60+0+144 = **204** |\n| **9** | 60+0+144 = **204** |\n\n## Results\n\n**Most Common**: **0, 1, 2**\n- Frequency: 624 each\n- Percentage: **624 ÷ 5,760 = 10.83%**\n\n**Rarest**: **6, 7, 8, 9**\n- Frequency: 204 each\n- Percentage: **204 ÷ 5,760 = 3.54%**\n\nThe reason is that higher digits (6-9) can't appear in the hours tens place (only 0-2), making them significantly rarer!" + } + ] + } + }, + "stopReason": "end_turn", + "usage": { + "inputTokens": 80, + "outputTokens": 700, + "totalTokens": 780, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 4921 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "d94fd954-505a-4657-9555-9a9c5bc23c19", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/chat-completions_to_bedrock/multimodalRequest.json b/payloads/transforms/chat-completions_to_bedrock/multimodalRequest.json new file mode 100644 index 00000000..26546f93 --- /dev/null +++ b/payloads/transforms/chat-completions_to_bedrock/multimodalRequest.json @@ -0,0 +1,4 @@ +{ + "error": "ValidationException: The model returned the following errors: Could not process image", + "name": "Error" +} \ No newline at end of file diff --git a/payloads/transforms/chat-completions_to_bedrock/reasoningRequest.json b/payloads/transforms/chat-completions_to_bedrock/reasoningRequest.json new file mode 100644 index 00000000..f6c7b92d --- /dev/null +++ b/payloads/transforms/chat-completions_to_bedrock/reasoningRequest.json @@ -0,0 +1,29 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "text": "# Average Speed Calculation\n\n## Step 1: Find the distance for each segment\n\n**First segment:**\n- Speed = 60 mph, Time = 2 hours\n- Distance = 60 × 2 = **120 miles**\n\n**Second segment:**\n- Speed = 80 mph, Time = 1 hour\n- Distance = 80 × 1 = **80 miles**\n\n## Step 2: Calculate total distance and total time\n\n- **Total distance** = 120 + 80 = **200 miles**\n- **Total time** = 2 + 1 = **3 hours**\n\n## Step 3: Calculate average speed\n\n$$\\text{Average Speed} = \\frac{\\text{Total Distance}}{\\text{Total Time}} = \\frac{200}{3} = 66.\\overline{6} \\text{ mph}$$\n\n**Answer: The average speed is approximately 66.67 mph** (or 66⅔ mph)" + } + ] + } + }, + "stopReason": "end_turn", + "usage": { + "inputTokens": 45, + "outputTokens": 229, + "totalTokens": 274, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 1926 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "4312f962-8fe7-40f6-9e88-108778057975", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/chat-completions_to_bedrock/reasoningRequestTruncated.json b/payloads/transforms/chat-completions_to_bedrock/reasoningRequestTruncated.json new file mode 100644 index 00000000..2bf615ad --- /dev/null +++ b/payloads/transforms/chat-completions_to_bedrock/reasoningRequestTruncated.json @@ -0,0 +1,29 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "text": "# Average Speed Calculation\n\n## Step 1: Find the distance for each segment\n\n**First segment:**\n- Speed = 60 mph, Time = 2 hours\n- Distance = 60 × 2 = **120 miles**\n\n**Second segment:**\n- Speed = 80 mph, Time = 1 hour\n- Distance = 80 × 1 = **80 miles**\n\n## Step 2: Calculate total distance" + } + ] + } + }, + "stopReason": "max_tokens", + "usage": { + "inputTokens": 45, + "outputTokens": 100, + "totalTokens": 145, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 1559 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "edec9094-7778-4b89-b6e2-fe0acd659463", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/chat-completions_to_bedrock/reasoningWithOutput.json b/payloads/transforms/chat-completions_to_bedrock/reasoningWithOutput.json new file mode 100644 index 00000000..dabccf81 --- /dev/null +++ b/payloads/transforms/chat-completions_to_bedrock/reasoningWithOutput.json @@ -0,0 +1,29 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "text": "The sky typically appears **blue** during the day due to Rayleigh scattering, which scatters shorter blue wavelengths of light more than longer red wavelengths.\n\nHowever, the sky can appear different colors depending on conditions:\n- **Orange, pink, or red** at sunrise and sunset\n- **Gray or white** on cloudy days\n- **Deep blue or purple** at high altitudes\n- **Black** at night (when the sun isn't illuminating the atmosphere)" + } + ] + } + }, + "stopReason": "end_turn", + "usage": { + "inputTokens": 13, + "outputTokens": 110, + "totalTokens": 123, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 1735 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "cff218a9-79a5-45b6-9df3-08e24f89282a", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/chat-completions_to_bedrock/simpleRequest.json b/payloads/transforms/chat-completions_to_bedrock/simpleRequest.json new file mode 100644 index 00000000..96e9e2c0 --- /dev/null +++ b/payloads/transforms/chat-completions_to_bedrock/simpleRequest.json @@ -0,0 +1,3 @@ +{ + "error": "Deserialization failed: data did not match any variant of untagged enum BedrockOutputContentBlock at line 14 column 8" +} \ No newline at end of file diff --git a/payloads/transforms/chat-completions_to_bedrock/systemMessageArrayContent.json b/payloads/transforms/chat-completions_to_bedrock/systemMessageArrayContent.json new file mode 100644 index 00000000..27de60df --- /dev/null +++ b/payloads/transforms/chat-completions_to_bedrock/systemMessageArrayContent.json @@ -0,0 +1,29 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "text": "# Recent Errors in Project Logs (abc-123)\n\nI'd be happy to help you analyze recent errors! However, I don't have actual access to your database or project logs. To provide you with specific error information, I would need you to:\n\n1. **Share the error data** - You could provide:\n - Recent log entries or error messages\n - Error timestamps and frequency\n - Error types or categories\n - Stack traces or error details\n\n2. **Clarify the timeframe** - What counts as \"recently\"?\n - Last hour?\n - Last 24 hours?\n - Last week?\n\n3. **Specify what you're looking for**:\n - Most frequent errors?\n - Critical/high-severity errors only?\n - Errors affecting specific features or services?\n\n## Suggested Query (if you can run it)\nIf you have database access, something like this might help:\n```sql\nSELECT error_type, COUNT(*) as frequency, MAX(timestamp) as last_occurrence\nFROM project_logs\nWHERE project_id = 'abc-123'\n AND timestamp > NOW() - INTERVAL '24 hours'\nGROUP BY error_type\nORDER BY frequency DESC;\n```\n\n**Please share your error logs or data, and I'll provide a detailed analysis!**" + } + ] + } + }, + "stopReason": "end_turn", + "usage": { + "inputTokens": 35, + "outputTokens": 297, + "totalTokens": 332, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 3049 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "24b81a2c-d863-4549-80b0-d6ea30aa092a", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/chat-completions_to_bedrock/toolCallRequest.json b/payloads/transforms/chat-completions_to_bedrock/toolCallRequest.json new file mode 100644 index 00000000..aed2a967 --- /dev/null +++ b/payloads/transforms/chat-completions_to_bedrock/toolCallRequest.json @@ -0,0 +1,36 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "toolUse": { + "toolUseId": "tooluse_fIh9Q7KbroQrZmDBVydzTL", + "name": "get_weather", + "input": { + "location": "San Francisco, CA" + }, + "type": "tool_use" + } + } + ] + } + }, + "stopReason": "tool_use", + "usage": { + "inputTokens": 585, + "outputTokens": 57, + "totalTokens": 642, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 1632 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "5bc81afa-df3d-46da-95bd-8f00b1a595a1", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/responses_to_bedrock/complexReasoningRequest.json b/payloads/transforms/responses_to_bedrock/complexReasoningRequest.json new file mode 100644 index 00000000..96e9e2c0 --- /dev/null +++ b/payloads/transforms/responses_to_bedrock/complexReasoningRequest.json @@ -0,0 +1,3 @@ +{ + "error": "Deserialization failed: data did not match any variant of untagged enum BedrockOutputContentBlock at line 14 column 8" +} \ No newline at end of file diff --git a/payloads/transforms/responses_to_bedrock/multimodalRequest.json b/payloads/transforms/responses_to_bedrock/multimodalRequest.json new file mode 100644 index 00000000..26546f93 --- /dev/null +++ b/payloads/transforms/responses_to_bedrock/multimodalRequest.json @@ -0,0 +1,4 @@ +{ + "error": "ValidationException: The model returned the following errors: Could not process image", + "name": "Error" +} \ No newline at end of file diff --git a/payloads/transforms/responses_to_bedrock/reasoningRequest.json b/payloads/transforms/responses_to_bedrock/reasoningRequest.json new file mode 100644 index 00000000..96e9e2c0 --- /dev/null +++ b/payloads/transforms/responses_to_bedrock/reasoningRequest.json @@ -0,0 +1,3 @@ +{ + "error": "Deserialization failed: data did not match any variant of untagged enum BedrockOutputContentBlock at line 14 column 8" +} \ No newline at end of file diff --git a/payloads/transforms/responses_to_bedrock/reasoningRequestTruncated.json b/payloads/transforms/responses_to_bedrock/reasoningRequestTruncated.json new file mode 100644 index 00000000..6758d9e8 --- /dev/null +++ b/payloads/transforms/responses_to_bedrock/reasoningRequestTruncated.json @@ -0,0 +1,4 @@ +{ + "error": "ValidationException: The model returned the following errors: `max_tokens` must be greater than `thinking.budget_tokens`. Please consult our documentation at https://docs.claude.com/en/docs/build-with-claude/extended-thinking#max-tokens-and-context-window-size", + "name": "Error" +} \ No newline at end of file diff --git a/payloads/transforms/responses_to_bedrock/reasoningWithOutput.json b/payloads/transforms/responses_to_bedrock/reasoningWithOutput.json new file mode 100644 index 00000000..96e9e2c0 --- /dev/null +++ b/payloads/transforms/responses_to_bedrock/reasoningWithOutput.json @@ -0,0 +1,3 @@ +{ + "error": "Deserialization failed: data did not match any variant of untagged enum BedrockOutputContentBlock at line 14 column 8" +} \ No newline at end of file diff --git a/payloads/transforms/responses_to_bedrock/simpleRequest.json b/payloads/transforms/responses_to_bedrock/simpleRequest.json new file mode 100644 index 00000000..96e9e2c0 --- /dev/null +++ b/payloads/transforms/responses_to_bedrock/simpleRequest.json @@ -0,0 +1,3 @@ +{ + "error": "Deserialization failed: data did not match any variant of untagged enum BedrockOutputContentBlock at line 14 column 8" +} \ No newline at end of file diff --git a/payloads/transforms/responses_to_bedrock/systemMessageArrayContent.json b/payloads/transforms/responses_to_bedrock/systemMessageArrayContent.json new file mode 100644 index 00000000..152b1b09 --- /dev/null +++ b/payloads/transforms/responses_to_bedrock/systemMessageArrayContent.json @@ -0,0 +1,29 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "text": "# Recent Errors in Project Logs (abc-123)\n\nI'd be happy to help you analyze recent errors, but I need a bit more information to provide the most useful results:\n\n1. **Time Range**: How far back should I look?\n - Last 24 hours?\n - Last 7 days?\n - Last 30 days?\n - Custom date range?\n\n2. **Error Scope**: Are you interested in:\n - All errors?\n - Specific error types?\n - Errors from particular services/components?\n - Errors above a certain severity level?\n\n3. **Analysis Focus**: What would be most helpful?\n - Error frequency/trends?\n - Most common error messages?\n - Affected users or features?\n - Error timeline/patterns?\n\nOnce you provide these details, I can query the `project_logs` dataset and give you a comprehensive error analysis!" + } + ] + } + }, + "stopReason": "end_turn", + "usage": { + "inputTokens": 35, + "outputTokens": 210, + "totalTokens": 245, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 2531 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "c5adeff1-9253-467c-8371-2e42a7b4b83f", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/responses_to_bedrock/toolCallRequest.json b/payloads/transforms/responses_to_bedrock/toolCallRequest.json new file mode 100644 index 00000000..002738c6 --- /dev/null +++ b/payloads/transforms/responses_to_bedrock/toolCallRequest.json @@ -0,0 +1,36 @@ +{ + "output": { + "message": { + "role": "assistant", + "content": [ + { + "toolUse": { + "toolUseId": "tooluse_cpNBxKzSF7PRX54s6VyUjk", + "name": "get_weather", + "input": { + "location": "San Francisco, CA" + }, + "type": "tool_use" + } + } + ] + } + }, + "stopReason": "tool_use", + "usage": { + "inputTokens": 585, + "outputTokens": 57, + "totalTokens": 642, + "cacheReadInputTokens": 0, + "cacheWriteInputTokens": 0 + }, + "metrics": { + "latencyMs": 984 + }, + "$metadata": { + "httpStatusCode": 200, + "requestId": "7b4ebb62-d1fd-42f6-81fb-20feb4fe3490", + "attempts": 1, + "totalRetryDelay": 0 + } +} \ No newline at end of file diff --git a/payloads/transforms/transform_errors.json b/payloads/transforms/transform_errors.json index 4c8ba0dc..a6ebe77f 100644 --- a/payloads/transforms/transform_errors.json +++ b/payloads/transforms/transform_errors.json @@ -1,5 +1,20 @@ { "responses_to_anthropic": { "reasoningRequestTruncated": "Anthropic requires max_tokens > budget_tokens; min budget (1024) exceeds max_tokens (100)" + }, + "chat-completions_to_bedrock": { + "simpleRequest": "Deserialization failed: missing field `output` at line 3 column 1", + "multimodalRequest": "Deserialization failed: missing field `output` at line 4 column 1" + }, + "responses_to_bedrock": { + "simpleRequest": "Deserialization failed: missing field `output` at line 3 column 1", + "reasoningRequest": "Deserialization failed: missing field `output` at line 3 column 1", + "reasoningRequestTruncated": "Deserialization failed: missing field `output` at line 4 column 1", + "multimodalRequest": "Deserialization failed: missing field `output` at line 4 column 1", + "complexReasoningRequest": "Deserialization failed: missing field `output` at line 3 column 1", + "reasoningWithOutput": "Deserialization failed: missing field `output` at line 3 column 1" + }, + "anthropic_to_bedrock": { + "multimodalRequest": "Deserialization failed: missing field `output` at line 4 column 1" } } From ed86bff2a1b139d59feba8e77fbccdba25f79a10 Mon Sep 17 00:00:00 2001 From: Ken Jiang Date: Tue, 31 Mar 2026 16:26:49 -0400 Subject: [PATCH 2/2] better error messages --- payloads/transforms/transform_errors.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/payloads/transforms/transform_errors.json b/payloads/transforms/transform_errors.json index a6ebe77f..cd858937 100644 --- a/payloads/transforms/transform_errors.json +++ b/payloads/transforms/transform_errors.json @@ -3,18 +3,18 @@ "reasoningRequestTruncated": "Anthropic requires max_tokens > budget_tokens; min budget (1024) exceeds max_tokens (100)" }, "chat-completions_to_bedrock": { - "simpleRequest": "Deserialization failed: missing field `output` at line 3 column 1", - "multimodalRequest": "Deserialization failed: missing field `output` at line 4 column 1" + "simpleRequest": "BedrockOutputContentBlock enum missing reasoningContent variant; Claude 3.7 Sonnet returns thinking blocks even for simple requests", + "multimodalRequest": "Bedrock ValidationException: Could not process image; likely a URL-based or unsupported image encoding" }, "responses_to_bedrock": { - "simpleRequest": "Deserialization failed: missing field `output` at line 3 column 1", - "reasoningRequest": "Deserialization failed: missing field `output` at line 3 column 1", - "reasoningRequestTruncated": "Deserialization failed: missing field `output` at line 4 column 1", - "multimodalRequest": "Deserialization failed: missing field `output` at line 4 column 1", - "complexReasoningRequest": "Deserialization failed: missing field `output` at line 3 column 1", - "reasoningWithOutput": "Deserialization failed: missing field `output` at line 3 column 1" + "simpleRequest": "BedrockOutputContentBlock enum missing reasoningContent variant; Claude 3.7 Sonnet returns thinking blocks even for simple requests", + "reasoningRequest": "BedrockOutputContentBlock enum missing reasoningContent variant; Bedrock extended thinking response cannot be deserialized", + "reasoningRequestTruncated": "Bedrock ValidationException: max_tokens (100) must be greater than thinking.budget_tokens (minimum 1024)", + "multimodalRequest": "Bedrock ValidationException: Could not process image; likely a URL-based or unsupported image encoding", + "complexReasoningRequest": "BedrockOutputContentBlock enum missing reasoningContent variant; Bedrock extended thinking response cannot be deserialized", + "reasoningWithOutput": "BedrockOutputContentBlock enum missing reasoningContent variant; Bedrock extended thinking response cannot be deserialized" }, "anthropic_to_bedrock": { - "multimodalRequest": "Deserialization failed: missing field `output` at line 4 column 1" + "multimodalRequest": "Bedrock ValidationException: Could not process image; likely a URL-based or unsupported image encoding" } }