diff --git a/.github/workflows/cross-transformation-coverage.yml b/.github/workflows/cross-transformation-coverage.yml
new file mode 100644
index 00000000..3009efc6
--- /dev/null
+++ b/.github/workflows/cross-transformation-coverage.yml
@@ -0,0 +1,62 @@
+name: Cross-Transformation Coverage
+
+on:
+ push:
+ branches: [main]
+ paths:
+ - 'src/**'
+ - 'payloads/**'
+ - 'Cargo.toml'
+ pull_request:
+ paths:
+ - 'src/**'
+ - 'payloads/**'
+ - 'Cargo.toml'
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ coverage:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Set up Rust
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Cache cargo registry
+ uses: actions/cache@v3
+ with:
+ path: |
+ ~/.cargo/registry
+ ~/.cargo/git
+ target
+ key: ${{ runner.os }}-cargo-coverage-${{ hashFiles('**/Cargo.lock') }}
+ restore-keys: |
+ ${{ runner.os }}-cargo-coverage-
+
+ - name: Install protobuf compiler
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y protobuf-compiler
+
+ - name: Generate coverage report
+ run: |
+ cargo run --bin coverage-report > coverage_report.md
+ # This job is informational only - it always succeeds
+ # Click into the job summary to see the actual coverage report
+
+ - name: Post coverage to job summary
+ run: |
+ echo "# π Cross-Provider Transformation Coverage" >> $GITHUB_STEP_SUMMARY
+ echo "" >> $GITHUB_STEP_SUMMARY
+ cat coverage_report.md >> $GITHUB_STEP_SUMMARY
+
+ - name: Upload coverage artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: transformation-coverage-report
+ path: coverage_report.md
+ retention-days: 30
diff --git a/Cargo.toml b/Cargo.toml
index a260afba..5018163d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -66,6 +66,10 @@ env_logger = "0.11"
name = "generate-types"
path = "scripts/generate_types/main.rs"
+[[bin]]
+name = "coverage-report"
+path = "src/bin/coverage-report/main.rs"
+
[lib]
name = "lingua"
path = "src/lib.rs"
diff --git a/coverage_report.md b/coverage_report.md
new file mode 100644
index 00000000..153ea5ed
--- /dev/null
+++ b/coverage_report.md
@@ -0,0 +1,518 @@
+warning: profiles for the non root package will be ignored, specify profiles at the workspace root:
+package: /Users/kenjiang/Development/braintrust/gateway/braintrust-llm-router/lingua/Cargo.toml
+workspace: /Users/kenjiang/Development/braintrust/gateway/Cargo.toml
+warning: methods `is_valid_request` and `is_valid_response` are never used
+ --> braintrust-llm-router/lingua/src/bin/coverage-report/main.rs:65:8
+ |
+64 | impl SemanticCheck {
+ | ------------------ methods in this implementation
+65 | fn is_valid_request(&self) -> bool {
+ | ^^^^^^^^^^^^^^^^
+...
+69 | fn is_valid_response(&self) -> bool {
+ | ^^^^^^^^^^^^^^^^^
+ |
+ = note: `#[warn(dead_code)]` on by default
+
+warning: `lingua` (bin "generate-coverage-report") generated 1 warning
+ Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.55s
+ Running `/Users/kenjiang/Development/braintrust/gateway/target/debug/generate-coverage-report`
+## Cross-Provider Transformation Coverage
+
+**Validation levels:**
+- β
Full: Schema valid + semantics preserved
+- β οΈ Partial: Schema valid but semantic issues (or mixed results)
+- β Failed: Transform error or schema invalid
+
+### Request Transformations
+
+| Source β / Target β | ChatCompletions | Anthropic | Responses | Google | Bedrock |
+|---------------------|-------------|-------------|-------------|-------------|-------------|
+| ChatCompletions | - | β οΈ 12/14 | β
14/14 | β
14/14 | β 0/14 |
+| Anthropic | β οΈ 12/14 | - | β οΈ 12/14 | β
14/14 | β 0/14 |
+| Responses | β 0/13 | β 0/13 | - | β 0/13 | β 0/13 |
+| Google | β 0/14 | β 0/14 | β 0/14 | - | β 0/14 |
+| Bedrock | β 0/13 | β 0/13 | β 0/13 | β 0/13 | - |
+
+### Response Transformations
+
+| Source β / Target β | ChatCompletions | Anthropic | Responses | Google | Bedrock |
+|---------------------|-------------|-------------|-------------|-------------|-------------|
+| ChatCompletions | - | β 0/7 | β
7/7 | β οΈ 0/7 | β 0/7 |
+| Anthropic | β οΈ 0/7 | - | β οΈ 0/7 | β οΈ 0/7 | β 0/7 |
+| Responses | β 0/7 | β 0/7 | - | β 0/7 | β οΈ 2/7 |
+| Google | β οΈ 0/7 | β 0/7 | β οΈ 0/7 | - | β 0/7 |
+| Bedrock | β 0/6 | β 0/6 | β 0/6 | β 0/6 | - |
+
+### Summary
+
+- **Full Coverage (schema + semantics):** 87/408 (21.3%)
+- **Schema Only:** 42 (valid schema but semantic issues)
+- **Failed:** 279
+
+**Requests:** 78/272 full, 0 schema-only, 194 failed
+**Responses:** 9/136 full, 42 schema-only, 85 failed
+
+### Issues by Source
+
+
+β Google (84 issues)
+
+
+β Bedrock (21)
+
+- `complexReasoningRequest (request)` - Unsupported target format: Converse
+- `complexReasoningRequest (followup)` - Unsupported target format: Converse
+- `multimodalRequest (request)` - Unsupported target format: Converse
+- `multimodalRequest (followup)` - Unsupported target format: Converse
+- `reasoningRequest (request)` - Unsupported target format: Converse
+- `reasoningRequest (followup)` - Unsupported target format: Converse
+- `reasoningRequestTruncated (request)` - Unsupported target format: Converse
+- `reasoningRequestTruncated (followup)` - Unsupported target format: Converse
+- `reasoningWithOutput (request)` - Unsupported target format: Converse
+- `reasoningWithOutput (followup)` - Unsupported target format: Converse
+- `simpleRequest (request)` - Unsupported target format: Converse
+- `simpleRequest (followup)` - Unsupported target format: Converse
+- `toolCallRequest (request)` - Unsupported target format: Converse
+- `toolCallRequest (followup)` - Unsupported target format: Converse
+- `complexReasoningRequest (response)` - Unsupported target format: Converse
+- `multimodalRequest (response)` - Unsupported target format: Converse
+- `reasoningRequest (response)` - Unsupported target format: Converse
+- `reasoningRequestTruncated (response)` - Unsupported target format: Converse
+- `reasoningWithOutput (response)` - Unsupported target format: Converse
+- `simpleRequest (response)` - Unsupported target format: Converse
+- `toolCallRequest (response)` - Unsupported target format: Converse
+
+
+
+
+β ChatCompletions (21)
+
+- `complexReasoningRequest (request)` - OpenAI schema: missing field `model`
+- `complexReasoningRequest (followup)` - OpenAI schema: missing field `model`
+- `multimodalRequest (request)` - OpenAI schema: missing field `model`
+- `multimodalRequest (followup)` - OpenAI schema: missing field `model`
+- `reasoningRequest (request)` - OpenAI schema: missing field `model`
+- `reasoningRequest (followup)` - OpenAI schema: missing field `model`
+- `reasoningRequestTruncated (request)` - OpenAI schema: missing field `model`
+- `reasoningRequestTruncated (followup)` - OpenAI schema: missing field `model`
+- `reasoningWithOutput (request)` - OpenAI schema: missing field `model`
+- `reasoningWithOutput (followup)` - OpenAI schema: missing field `model`
+- `simpleRequest (request)` - OpenAI schema: missing field `model`
+- `simpleRequest (followup)` - OpenAI schema: missing field `model`
+- `toolCallRequest (request)` - OpenAI schema: missing field `type`
+- `toolCallRequest (followup)` - OpenAI schema: missing field `type`
+- `complexReasoningRequest (response)` - semantic: missing usage
+- `multimodalRequest (response)` - semantic: missing usage
+- `reasoningRequest (response)` - semantic: missing usage
+- `reasoningRequestTruncated (response)` - semantic: missing usage
+- `reasoningWithOutput (response)` - semantic: missing usage
+- `simpleRequest (response)` - semantic: missing usage
+- `toolCallRequest (response)` - semantic: missing usage
+
+
+
+
+β Anthropic (21)
+
+- `complexReasoningRequest (request)` - Anthropic schema: missing field `model`
+- `complexReasoningRequest (followup)` - Anthropic schema: missing field `model`
+- `multimodalRequest (request)` - Anthropic schema: missing field `model`
+- `multimodalRequest (followup)` - Anthropic schema: missing field `model`
+- `reasoningRequest (request)` - Anthropic schema: missing field `model`
+- `reasoningRequest (followup)` - Anthropic schema: missing field `model`
+- `reasoningRequestTruncated (request)` - Anthropic schema: missing field `model`
+- `reasoningRequestTruncated (followup)` - Anthropic schema: missing field `model`
+- `reasoningWithOutput (request)` - Anthropic schema: missing field `model`
+- `reasoningWithOutput (followup)` - Anthropic schema: missing field `model`
+- `simpleRequest (request)` - Anthropic schema: missing field `model`
+- `simpleRequest (followup)` - Anthropic schema: missing field `model`
+- `toolCallRequest (request)` - Anthropic schema: data did not match any variant of untagged enum Tool
+- `toolCallRequest (followup)` - Anthropic schema: data did not match any variant of untagged enum Tool
+- `complexReasoningRequest (response)` - Anthropic response schema: missing field `usage`
+- `multimodalRequest (response)` - Anthropic response schema: missing field `usage`
+- `reasoningRequest (response)` - Anthropic response schema: missing field `usage`
+- `reasoningRequestTruncated (response)` - Anthropic response schema: missing field `usage`
+- `reasoningWithOutput (response)` - Anthropic response schema: missing field `usage`
+- `simpleRequest (response)` - Anthropic response schema: missing field `usage`
+- `toolCallRequest (response)` - Anthropic response schema: missing field `usage`
+
+
+
+
+β Responses (21)
+
+- `complexReasoningRequest (request)` - OpenAI schema: missing field `model`
+- `complexReasoningRequest (followup)` - OpenAI schema: missing field `model`
+- `multimodalRequest (request)` - OpenAI schema: missing field `model`
+- `multimodalRequest (followup)` - OpenAI schema: missing field `model`
+- `reasoningRequest (request)` - OpenAI schema: missing field `model`
+- `reasoningRequest (followup)` - OpenAI schema: missing field `model`
+- `reasoningRequestTruncated (request)` - OpenAI schema: missing field `model`
+- `reasoningRequestTruncated (followup)` - OpenAI schema: missing field `model`
+- `reasoningWithOutput (request)` - OpenAI schema: missing field `model`
+- `reasoningWithOutput (followup)` - OpenAI schema: missing field `model`
+- `simpleRequest (request)` - OpenAI schema: missing field `model`
+- `simpleRequest (followup)` - OpenAI schema: missing field `model`
+- `toolCallRequest (request)` - OpenAI schema: missing field `type`
+- `toolCallRequest (followup)` - OpenAI schema: missing field `type`
+- `complexReasoningRequest (response)` - semantic: missing usage
+- `multimodalRequest (response)` - semantic: missing usage
+- `reasoningRequest (response)` - semantic: missing usage
+- `reasoningRequestTruncated (response)` - semantic: missing usage
+- `reasoningWithOutput (response)` - semantic: missing usage
+- `simpleRequest (response)` - semantic: missing usage
+- `toolCallRequest (response)` - semantic: missing usage
+
+
+
+
+
+
+β Responses (78 issues)
+
+
+β Google (20)
+
+- `complexReasoningRequest (request)` - Responses API (input[]) not yet supported
+- `complexReasoningRequest (followup)` - Responses API (input[]) not yet supported
+- `multimodalRequest (request)` - Responses API (input[]) not yet supported
+- `multimodalRequest (followup)` - Responses API (input[]) not yet supported
+- `reasoningRequest (request)` - Responses API (input[]) not yet supported
+- `reasoningRequest (followup)` - Responses API (input[]) not yet supported
+- `reasoningRequestTruncated (request)` - Responses API (input[]) not yet supported
+- `reasoningWithOutput (request)` - Responses API (input[]) not yet supported
+- `reasoningWithOutput (followup)` - Responses API (input[]) not yet supported
+- `simpleRequest (request)` - Responses API (input[]) not yet supported
+- `simpleRequest (followup)` - Responses API (input[]) not yet supported
+- `toolCallRequest (request)` - Responses API (input[]) not yet supported
+- `toolCallRequest (followup)` - Responses API (input[]) not yet supported
+- `complexReasoningRequest (response)` - Unable to detect source format
+- `multimodalRequest (response)` - Unsupported source format: Converse
+- `reasoningRequest (response)` - Unable to detect source format
+- `reasoningRequestTruncated (response)` - Unsupported source format: Converse
+- `reasoningWithOutput (response)` - Unable to detect source format
+- `simpleRequest (response)` - Unable to detect source format
+- `toolCallRequest (response)` - Unable to detect source format
+
+
+
+
+β ChatCompletions (20)
+
+- `complexReasoningRequest (request)` - Responses API (input[]) not yet supported
+- `complexReasoningRequest (followup)` - Responses API (input[]) not yet supported
+- `multimodalRequest (request)` - Responses API (input[]) not yet supported
+- `multimodalRequest (followup)` - Responses API (input[]) not yet supported
+- `reasoningRequest (request)` - Responses API (input[]) not yet supported
+- `reasoningRequest (followup)` - Responses API (input[]) not yet supported
+- `reasoningRequestTruncated (request)` - Responses API (input[]) not yet supported
+- `reasoningWithOutput (request)` - Responses API (input[]) not yet supported
+- `reasoningWithOutput (followup)` - Responses API (input[]) not yet supported
+- `simpleRequest (request)` - Responses API (input[]) not yet supported
+- `simpleRequest (followup)` - Responses API (input[]) not yet supported
+- `toolCallRequest (request)` - Responses API (input[]) not yet supported
+- `toolCallRequest (followup)` - Responses API (input[]) not yet supported
+- `complexReasoningRequest (response)` - Unable to detect source format
+- `multimodalRequest (response)` - Unsupported source format: Converse
+- `reasoningRequest (response)` - Unable to detect source format
+- `reasoningRequestTruncated (response)` - Unsupported source format: Converse
+- `reasoningWithOutput (response)` - Unable to detect source format
+- `simpleRequest (response)` - Unable to detect source format
+- `toolCallRequest (response)` - Unable to detect source format
+
+
+
+
+β Anthropic (20)
+
+- `complexReasoningRequest (request)` - Responses API (input[]) not yet supported
+- `complexReasoningRequest (followup)` - Responses API (input[]) not yet supported
+- `multimodalRequest (request)` - Responses API (input[]) not yet supported
+- `multimodalRequest (followup)` - Responses API (input[]) not yet supported
+- `reasoningRequest (request)` - Responses API (input[]) not yet supported
+- `reasoningRequest (followup)` - Responses API (input[]) not yet supported
+- `reasoningRequestTruncated (request)` - Responses API (input[]) not yet supported
+- `reasoningWithOutput (request)` - Responses API (input[]) not yet supported
+- `reasoningWithOutput (followup)` - Responses API (input[]) not yet supported
+- `simpleRequest (request)` - Responses API (input[]) not yet supported
+- `simpleRequest (followup)` - Responses API (input[]) not yet supported
+- `toolCallRequest (request)` - Responses API (input[]) not yet supported
+- `toolCallRequest (followup)` - Responses API (input[]) not yet supported
+- `complexReasoningRequest (response)` - Unable to detect source format
+- `multimodalRequest (response)` - Unsupported source format: Converse
+- `reasoningRequest (response)` - Unable to detect source format
+- `reasoningRequestTruncated (response)` - Unsupported source format: Converse
+- `reasoningWithOutput (response)` - Unable to detect source format
+- `simpleRequest (response)` - Unable to detect source format
+- `toolCallRequest (response)` - Unable to detect source format
+
+
+
+
+β Bedrock (18)
+
+- `complexReasoningRequest (request)` - Responses API (input[]) not yet supported
+- `complexReasoningRequest (followup)` - Responses API (input[]) not yet supported
+- `multimodalRequest (request)` - Responses API (input[]) not yet supported
+- `multimodalRequest (followup)` - Responses API (input[]) not yet supported
+- `reasoningRequest (request)` - Responses API (input[]) not yet supported
+- `reasoningRequest (followup)` - Responses API (input[]) not yet supported
+- `reasoningRequestTruncated (request)` - Responses API (input[]) not yet supported
+- `reasoningWithOutput (request)` - Responses API (input[]) not yet supported
+- `reasoningWithOutput (followup)` - Responses API (input[]) not yet supported
+- `simpleRequest (request)` - Responses API (input[]) not yet supported
+- `simpleRequest (followup)` - Responses API (input[]) not yet supported
+- `toolCallRequest (request)` - Responses API (input[]) not yet supported
+- `toolCallRequest (followup)` - Responses API (input[]) not yet supported
+- `complexReasoningRequest (response)` - Unable to detect source format
+- `reasoningRequest (response)` - Unable to detect source format
+- `reasoningWithOutput (response)` - Unable to detect source format
+- `simpleRequest (response)` - Unable to detect source format
+- `toolCallRequest (response)` - Unable to detect source format
+
+
+
+
+
+
+β Bedrock (76 issues)
+
+
+β Google (19)
+
+- `complexReasoningRequest (request)` - Unable to detect source format
+- `complexReasoningRequest (followup)` - Unable to detect source format
+- `multimodalRequest (request)` - Unable to detect source format
+- `reasoningRequest (request)` - Unable to detect source format
+- `reasoningRequest (followup)` - Unable to detect source format
+- `reasoningRequestTruncated (request)` - Unable to detect source format
+- `reasoningRequestTruncated (followup)` - Unable to detect source format
+- `reasoningWithOutput (request)` - Unable to detect source format
+- `reasoningWithOutput (followup)` - Unable to detect source format
+- `simpleRequest (request)` - Unable to detect source format
+- `simpleRequest (followup)` - Unable to detect source format
+- `toolCallRequest (request)` - Unable to detect source format
+- `toolCallRequest (followup)` - Unable to detect source format
+- `complexReasoningRequest (response)` - Unsupported source format: Converse
+- `reasoningRequest (response)` - Unsupported source format: Converse
+- `reasoningRequestTruncated (response)` - Unsupported source format: Converse
+- `reasoningWithOutput (response)` - Unsupported source format: Converse
+- `simpleRequest (response)` - Unsupported source format: Converse
+- `toolCallRequest (response)` - Unsupported source format: Converse
+
+
+
+
+β Anthropic (19)
+
+- `complexReasoningRequest (request)` - Unable to detect source format
+- `complexReasoningRequest (followup)` - Unable to detect source format
+- `multimodalRequest (request)` - Unable to detect source format
+- `reasoningRequest (request)` - Unable to detect source format
+- `reasoningRequest (followup)` - Unable to detect source format
+- `reasoningRequestTruncated (request)` - Unable to detect source format
+- `reasoningRequestTruncated (followup)` - Unable to detect source format
+- `reasoningWithOutput (request)` - Unable to detect source format
+- `reasoningWithOutput (followup)` - Unable to detect source format
+- `simpleRequest (request)` - Unable to detect source format
+- `simpleRequest (followup)` - Unable to detect source format
+- `toolCallRequest (request)` - Unable to detect source format
+- `toolCallRequest (followup)` - Unable to detect source format
+- `complexReasoningRequest (response)` - Unsupported source format: Converse
+- `reasoningRequest (response)` - Unsupported source format: Converse
+- `reasoningRequestTruncated (response)` - Unsupported source format: Converse
+- `reasoningWithOutput (response)` - Unsupported source format: Converse
+- `simpleRequest (response)` - Unsupported source format: Converse
+- `toolCallRequest (response)` - Unsupported source format: Converse
+
+
+
+
+β ChatCompletions (19)
+
+- `complexReasoningRequest (request)` - Unable to detect source format
+- `complexReasoningRequest (followup)` - Unable to detect source format
+- `multimodalRequest (request)` - Unable to detect source format
+- `reasoningRequest (request)` - Unable to detect source format
+- `reasoningRequest (followup)` - Unable to detect source format
+- `reasoningRequestTruncated (request)` - Unable to detect source format
+- `reasoningRequestTruncated (followup)` - Unable to detect source format
+- `reasoningWithOutput (request)` - Unable to detect source format
+- `reasoningWithOutput (followup)` - Unable to detect source format
+- `simpleRequest (request)` - Unable to detect source format
+- `simpleRequest (followup)` - Unable to detect source format
+- `toolCallRequest (request)` - Unable to detect source format
+- `toolCallRequest (followup)` - Unable to detect source format
+- `complexReasoningRequest (response)` - Unsupported source format: Converse
+- `reasoningRequest (response)` - Unsupported source format: Converse
+- `reasoningRequestTruncated (response)` - Unsupported source format: Converse
+- `reasoningWithOutput (response)` - Unsupported source format: Converse
+- `simpleRequest (response)` - Unsupported source format: Converse
+- `toolCallRequest (response)` - Unsupported source format: Converse
+
+
+
+
+β Responses (19)
+
+- `complexReasoningRequest (request)` - Unable to detect source format
+- `complexReasoningRequest (followup)` - Unable to detect source format
+- `multimodalRequest (request)` - Unable to detect source format
+- `reasoningRequest (request)` - Unable to detect source format
+- `reasoningRequest (followup)` - Unable to detect source format
+- `reasoningRequestTruncated (request)` - Unable to detect source format
+- `reasoningRequestTruncated (followup)` - Unable to detect source format
+- `reasoningWithOutput (request)` - Unable to detect source format
+- `reasoningWithOutput (followup)` - Unable to detect source format
+- `simpleRequest (request)` - Unable to detect source format
+- `simpleRequest (followup)` - Unable to detect source format
+- `toolCallRequest (request)` - Unable to detect source format
+- `toolCallRequest (followup)` - Unable to detect source format
+- `complexReasoningRequest (response)` - Unsupported source format: Converse
+- `reasoningRequest (response)` - Unsupported source format: Converse
+- `reasoningRequestTruncated (response)` - Unsupported source format: Converse
+- `reasoningWithOutput (response)` - Unsupported source format: Converse
+- `simpleRequest (response)` - Unsupported source format: Converse
+- `toolCallRequest (response)` - Unsupported source format: Converse
+
+
+
+
+
+
+β Anthropic (46 issues)
+
+
+β Bedrock (21)
+
+- `complexReasoningRequest (request)` - Unsupported target format: Converse
+- `complexReasoningRequest (followup)` - Unsupported target format: Converse
+- `multimodalRequest (request)` - Unsupported target format: Converse
+- `multimodalRequest (followup)` - Unsupported target format: Converse
+- `reasoningRequest (request)` - Unsupported target format: Converse
+- `reasoningRequest (followup)` - Unsupported target format: Converse
+- `reasoningRequestTruncated (request)` - Unsupported target format: Converse
+- `reasoningRequestTruncated (followup)` - Unsupported target format: Converse
+- `reasoningWithOutput (request)` - Unsupported target format: Converse
+- `reasoningWithOutput (followup)` - Unsupported target format: Converse
+- `simpleRequest (request)` - Unsupported target format: Converse
+- `simpleRequest (followup)` - Unsupported target format: Converse
+- `toolCallRequest (request)` - Unsupported target format: Converse
+- `toolCallRequest (followup)` - Unsupported target format: Converse
+- `complexReasoningRequest (response)` - Unsupported target format: Converse
+- `multimodalRequest (response)` - Unsupported target format: Converse
+- `reasoningRequest (response)` - Unsupported target format: Converse
+- `reasoningRequestTruncated (response)` - Unsupported target format: Converse
+- `reasoningWithOutput (response)` - Unsupported target format: Converse
+- `simpleRequest (response)` - Unsupported target format: Converse
+- `toolCallRequest (response)` - Unsupported target format: Converse
+
+
+
+
+β ChatCompletions (9)
+
+- `toolCallRequest (request)` - OpenAI schema: data did not match any variant of untagged enum ChatCompletionToolChoiceOption
+- `toolCallRequest (followup)` - OpenAI schema: data did not match any variant of untagged enum ChatCompletionToolChoiceOption
+- `complexReasoningRequest (response)` - semantic: missing usage
+- `multimodalRequest (response)` - semantic: missing usage
+- `reasoningRequest (response)` - semantic: missing usage
+- `reasoningRequestTruncated (response)` - semantic: missing usage
+- `reasoningWithOutput (response)` - semantic: missing usage
+- `simpleRequest (response)` - semantic: missing usage
+- `toolCallRequest (response)` - semantic: missing usage
+
+
+
+
+β Responses (9)
+
+- `toolCallRequest (request)` - OpenAI schema: data did not match any variant of untagged enum ChatCompletionToolChoiceOption
+- `toolCallRequest (followup)` - OpenAI schema: data did not match any variant of untagged enum ChatCompletionToolChoiceOption
+- `complexReasoningRequest (response)` - semantic: missing usage
+- `multimodalRequest (response)` - semantic: missing usage
+- `reasoningRequest (response)` - semantic: missing usage
+- `reasoningRequestTruncated (response)` - semantic: missing usage
+- `reasoningWithOutput (response)` - semantic: missing usage
+- `simpleRequest (response)` - semantic: missing usage
+- `toolCallRequest (response)` - semantic: missing usage
+
+
+
+
+β Google (7)
+
+- `complexReasoningRequest (response)` - semantic: missing usage
+- `multimodalRequest (response)` - semantic: missing usage
+- `reasoningRequest (response)` - semantic: missing usage
+- `reasoningRequestTruncated (response)` - semantic: missing usage
+- `reasoningWithOutput (response)` - semantic: missing usage
+- `simpleRequest (response)` - semantic: missing usage
+- `toolCallRequest (response)` - semantic: missing usage
+
+
+
+
+
+
+β ChatCompletions (37 issues)
+
+
+β Bedrock (21)
+
+- `complexReasoningRequest (request)` - Unsupported target format: Converse
+- `complexReasoningRequest (followup)` - Unsupported target format: Converse
+- `multimodalRequest (request)` - Unsupported target format: Converse
+- `multimodalRequest (followup)` - Unsupported target format: Converse
+- `reasoningRequest (request)` - Unsupported target format: Converse
+- `reasoningRequest (followup)` - Unsupported target format: Converse
+- `reasoningRequestTruncated (request)` - Unsupported target format: Converse
+- `reasoningRequestTruncated (followup)` - Unsupported target format: Converse
+- `reasoningWithOutput (request)` - Unsupported target format: Converse
+- `reasoningWithOutput (followup)` - Unsupported target format: Converse
+- `simpleRequest (request)` - Unsupported target format: Converse
+- `simpleRequest (followup)` - Unsupported target format: Converse
+- `toolCallRequest (request)` - Unsupported target format: Converse
+- `toolCallRequest (followup)` - Unsupported target format: Converse
+- `complexReasoningRequest (response)` - Unsupported target format: Converse
+- `multimodalRequest (response)` - Unsupported target format: Converse
+- `reasoningRequest (response)` - Unsupported target format: Converse
+- `reasoningRequestTruncated (response)` - Unsupported target format: Converse
+- `reasoningWithOutput (response)` - Unsupported target format: Converse
+- `simpleRequest (response)` - Unsupported target format: Converse
+- `toolCallRequest (response)` - Unsupported target format: Converse
+
+
+
+
+β Anthropic (9)
+
+- `toolCallRequest (request)` - Anthropic schema: invalid type: string "auto", expected struct ToolChoice
+- `toolCallRequest (followup)` - Anthropic schema: invalid type: string "auto", expected struct ToolChoice
+- `complexReasoningRequest (response)` - Anthropic response schema: missing field `usage`
+- `multimodalRequest (response)` - Anthropic response schema: missing field `usage`
+- `reasoningRequest (response)` - Anthropic response schema: missing field `usage`
+- `reasoningRequestTruncated (response)` - Anthropic response schema: missing field `usage`
+- `reasoningWithOutput (response)` - Anthropic response schema: missing field `usage`
+- `simpleRequest (response)` - Anthropic response schema: missing field `usage`
+- `toolCallRequest (response)` - Anthropic response schema: missing field `usage`
+
+
+
+
+β Google (7)
+
+- `complexReasoningRequest (response)` - semantic: missing usage
+- `multimodalRequest (response)` - semantic: missing usage
+- `reasoningRequest (response)` - semantic: missing usage
+- `reasoningRequestTruncated (response)` - semantic: missing usage
+- `reasoningWithOutput (response)` - semantic: missing usage
+- `simpleRequest (response)` - semantic: missing usage
+- `toolCallRequest (response)` - semantic: missing usage
+
+
+
+
+
+
diff --git a/payloads/cases/advanced.ts b/payloads/cases/advanced.ts
index 21f91bdf..b20b3cf3 100644
--- a/payloads/cases/advanced.ts
+++ b/payloads/cases/advanced.ts
@@ -1,10 +1,15 @@
+import { Type } from "@google/genai";
import { TestCaseCollection } from "./types";
import {
OPENAI_CHAT_COMPLETIONS_MODEL,
OPENAI_RESPONSES_MODEL,
ANTHROPIC_MODEL,
+ BEDROCK_MODEL,
} from "./models";
+const IMAGE_BASE64 =
+ "/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxMUExYUFBQXFxYWGRsZGhkZGBgZIBgjIBYYGBkbGhkhHikhHx4mHhsYIjIiJiosLy8wGSA1OjUuOSkuLywBCgoKDg0OGxAQHDAmISYsMC4uLi40MC4uLi4uNy4uLiwsNy4xLi4sLi4uLi4wLi4wLi4uLC4uLi4uLi4uLi4uLP/AABEIAOAA4QMBIgACEQEDEQH/xAAcAAACAwEBAQEAAAAAAAAAAAAABgQFBwMBCAj/xABLEAACAQMABgYFCQYIBQQDAAABAgMABBEFBhIhMUETUWFxgZEHIjKhsRQjQlJicpLB0TOCovAkQ1NUc6LC4RY0RJPSFSWD4jVjo//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+lEd6P2YO7PZ8K24fSCltNU/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+dPye2X6q8CwHXuJ72NMGgrAQwxxcwMt3ne389lc7rstRaXl+TNmkWFFFFcUyhRRRQAs6nfNy3NufoPtL3Zx8NnzpqpSvz0Gk45OCzrsnvwF+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+NOFPPk/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+rGhOfE0Ee0u5DOqVif+mj8iPzrwao2P8Adk8j+tdJtZ7NeNzF4MG9wzVXca/2Y3RmSVupEbf4nFQWSyviy3i1dtF9m3iH7gqcqxxqSAqKOJwFA8aUH1jv591vaiJT9OU7/wAO7866R6mvMQ99cSSnj0anZQfz2YoLOP8Au/5PvSmvMYJjtUa4kAJJUHYXG8knifDd21K1A1TXSq/LL24Myq5UW6ZRUI34fG/BGOHI8TV3YWEUK7EUaovUoxnv6/GqLVK8/wDTNLdEd1vf4A6lfaOyPBmK9zjqoY/p5Q1UkbTZWkcSLHGioijCqoAA7hUmiilmwKKKKACqzWPSHQWtxP8A2UTvjrKoSB4kAVZ0nel2bZ0TdfaQL5uooAyvU52g0bNcn1pHMkhPWVJUHzBNKujY8JtE5Z/WZuJJPHfWk6owgWMCkZBiGQee1knPmaUNP6qy2xMluDJDxMe8tH93mV99OTo5WW8mqKe9/P3FdX3oa16a9hj4iM9K3YFwR79nzqCukoyhYNwHDn3U6+jrRRSJriQYefeOxAfV8+PdiiTE4YODcpKq2+I4Uka+KJbqxgwMtIWY88bSAjuwGPgKdqSbo7emowf6uHI/C3/lUDsXN9kx3qq07p+G1Xalb1j7KLgs3cOrtO6vjWrTXyWAygbTkhEHWxBIz2AAnwrMkgd3MszGSRt5J5fl4cBQlZX2YrVL/wBLHSeuV9JmSPEMa7woAJI+0SN/hitK0Xd9LDFL/aIreYBrKb72G+6fhWkanf8AJW/+EPzqWqDXrhdVuW9KOuTGK6spuRZom7m2cfEnwpupS9Ji/wBHjfmkyEe8VUti/Ui3orwHO+igDnNbI/tIrfeUH4ioEurto3GCPwXHwqzooBSa4KVtUrM/1I8C3614NUbP+xH4m/Wruign1ku5Vx6tWi8IE8Rn41Pgto03Iir91QPgK60UEOTfJKsY8naPKptcbQeqO3fXapFsKWvSDo4y2pkXdJAelUjiMe1jwGf3RVhrNpxLWEyEbTk7MafWb9BxNUOp2sU1xJJBchSWQsuFC7uDqccRgjt40Dcaa9pGyamaaF3ZQXA4yINrsYEq4/EDV3YWEUK7EUaovUoxnv6/GqLVK8/wDTNLdEd1vf4A6lfaOyPBmK9zjqoY/p5Q1UkbTZWkcSLHGioijCqoAA7hUmiilmwKKKKACiiigApY181Pi0jAYn9WRd8cmMlD+angRTPRQB+dDfXWj26C/hk2V3LMoLKwHA7XBhjG/OesV9aQ1tidFjt51V5mWPbb1REG3NIxPDA+NfoSWJWGCAR1EAjyqvn1etHBV7eFg3EGNDnv3VbUJeCDdmUay6HTRcaXdiduHCxzRGQEMx3RzBt+CWwDy4V20UDDo+SyvNHXZM220skUPTBnckiRXQnePVIz1U9n0d6M/ucXHOBtBT3qDg+IpoVQBgbgKixiik7M01A1KtpbGFri0aOX1lfPSxF9nieuyZG9lAO/r6q0LRej44IlhiUJGgwqjJwPGplFQWCiiigD//Z";
+
// Advanced test cases - complex functionality testing
export const advancedCases: TestCaseCollection = {
multimodalRequest: {
@@ -73,6 +78,50 @@ export const advancedCases: TestCaseCollection = {
},
],
},
+
+ google: {
+ contents: [
+ {
+ role: "user",
+ parts: [
+ { text: "What do you see in this image?" },
+ {
+ fileData: {
+ mimeType: "image/jpeg",
+ fileUri:
+ "https://t3.ftcdn.net/jpg/02/36/99/22/360_F_236992283_sNOxCVQeFLd5pdqaKGh8DRGMZy7P4XKm.jpg",
+ },
+ },
+ ],
+ },
+ ],
+ config: {
+ maxOutputTokens: 300,
+ },
+ },
+
+ bedrock: {
+ modelId: BEDROCK_MODEL,
+ messages: [
+ {
+ role: "user",
+ content: [
+ { text: "What do you see in this image?" },
+ {
+ image: {
+ format: "jpeg",
+ source: {
+ bytes: Buffer.from(IMAGE_BASE64, "base64"),
+ },
+ },
+ },
+ ],
+ },
+ ],
+ inferenceConfig: {
+ maxTokens: 300,
+ },
+ },
},
complexReasoningRequest: {
@@ -112,6 +161,39 @@ export const advancedCases: TestCaseCollection = {
},
],
},
+
+ google: {
+ contents: [
+ {
+ role: "user",
+ parts: [
+ {
+ 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?",
+ },
+ ],
+ },
+ ],
+ config: {
+ maxOutputTokens: 20_000,
+ },
+ },
+
+ bedrock: {
+ modelId: BEDROCK_MODEL,
+ messages: [
+ {
+ role: "user",
+ 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?",
+ },
+ ],
+ },
+ ],
+ inferenceConfig: {
+ maxTokens: 20_000,
+ },
+ },
},
reasoningWithOutput: {
@@ -144,6 +226,25 @@ export const advancedCases: TestCaseCollection = {
},
],
},
+
+ google: {
+ contents: [
+ {
+ role: "user",
+ parts: [{ text: "What color is the sky?" }],
+ },
+ ],
+ },
+
+ bedrock: {
+ modelId: BEDROCK_MODEL,
+ messages: [
+ {
+ role: "user",
+ content: [{ text: "What color is the sky?" }],
+ },
+ ],
+ },
},
toolCallRequest: {
@@ -233,5 +334,66 @@ export const advancedCases: TestCaseCollection = {
],
tool_choice: "auto",
},
+
+ google: {
+ contents: [
+ {
+ role: "user",
+ parts: [{ text: "What's the weather like in San Francisco?" }],
+ },
+ ],
+ tools: [
+ {
+ functionDeclarations: [
+ {
+ name: "get_weather",
+ description: "Get the current weather for a location",
+ parameters: {
+ type: Type.OBJECT,
+ properties: {
+ location: {
+ type: Type.STRING,
+ description: "The city and state, e.g. San Francisco, CA",
+ },
+ },
+ required: ["location"],
+ },
+ },
+ ],
+ },
+ ],
+ },
+
+ bedrock: {
+ modelId: BEDROCK_MODEL,
+ messages: [
+ {
+ role: "user",
+ content: [{ text: "What's the weather like in San Francisco?" }],
+ },
+ ],
+ toolConfig: {
+ tools: [
+ {
+ toolSpec: {
+ name: "get_weather",
+ description: "Get the current weather for a location",
+ inputSchema: {
+ json: {
+ type: "object",
+ properties: {
+ location: {
+ type: "string",
+ description: "The city and state, e.g. San Francisco, CA",
+ },
+ },
+ required: ["location"],
+ },
+ },
+ },
+ },
+ ],
+ },
+ },
},
};
diff --git a/payloads/cases/index.ts b/payloads/cases/index.ts
index 16c0741b..2b859250 100644
--- a/payloads/cases/index.ts
+++ b/payloads/cases/index.ts
@@ -1,6 +1,7 @@
// Export types and utilities
export * from "./types";
export * from "./utils";
+export * from "./models";
// Export all case collections
export { simpleCases } from "./simple";
diff --git a/payloads/cases/models.ts b/payloads/cases/models.ts
index b8ccfae9..efa31748 100644
--- a/payloads/cases/models.ts
+++ b/payloads/cases/models.ts
@@ -2,3 +2,5 @@
export const OPENAI_CHAT_COMPLETIONS_MODEL = "gpt-5-nano";
export const OPENAI_RESPONSES_MODEL = "gpt-5-nano";
export const ANTHROPIC_MODEL = "claude-sonnet-4-20250514";
+export const GOOGLE_MODEL = "gemini-2.5-flash";
+export const BEDROCK_MODEL = "us.anthropic.claude-haiku-4-5-20251001-v1:0";
diff --git a/payloads/cases/simple.ts b/payloads/cases/simple.ts
index d409ee8c..8fbdf0f6 100644
--- a/payloads/cases/simple.ts
+++ b/payloads/cases/simple.ts
@@ -1,8 +1,10 @@
+import { Type } from "@google/genai";
import { TestCaseCollection } from "./types";
import {
OPENAI_CHAT_COMPLETIONS_MODEL,
OPENAI_RESPONSES_MODEL,
ANTHROPIC_MODEL,
+ BEDROCK_MODEL,
} from "./models";
// Simple test cases - basic functionality testing
@@ -41,6 +43,25 @@ export const simpleCases: TestCaseCollection = {
},
],
},
+
+ google: {
+ contents: [
+ {
+ role: "user",
+ parts: [{ text: "What is the capital of France?" }],
+ },
+ ],
+ },
+
+ bedrock: {
+ modelId: BEDROCK_MODEL,
+ messages: [
+ {
+ role: "user",
+ content: [{ text: "What is the capital of France?" }],
+ },
+ ],
+ },
},
reasoningRequest: {
@@ -77,6 +98,33 @@ export const simpleCases: TestCaseCollection = {
},
],
},
+
+ google: {
+ contents: [
+ {
+ role: "user",
+ parts: [
+ {
+ 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?",
+ },
+ ],
+ },
+ ],
+ },
+
+ bedrock: {
+ modelId: BEDROCK_MODEL,
+ messages: [
+ {
+ role: "user",
+ 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?",
+ },
+ ],
+ },
+ ],
+ },
},
reasoningRequestTruncated: {
@@ -115,6 +163,39 @@ export const simpleCases: TestCaseCollection = {
},
],
},
+
+ google: {
+ contents: [
+ {
+ role: "user",
+ parts: [
+ {
+ 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?",
+ },
+ ],
+ },
+ ],
+ config: {
+ maxOutputTokens: 100,
+ },
+ },
+
+ bedrock: {
+ modelId: BEDROCK_MODEL,
+ messages: [
+ {
+ role: "user",
+ 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?",
+ },
+ ],
+ },
+ ],
+ inferenceConfig: {
+ maxTokens: 100,
+ },
+ },
},
toolCallRequest: {
@@ -201,5 +282,66 @@ export const simpleCases: TestCaseCollection = {
},
],
},
+
+ google: {
+ contents: [
+ {
+ role: "user",
+ parts: [{ text: "What's the weather like in San Francisco?" }],
+ },
+ ],
+ tools: [
+ {
+ functionDeclarations: [
+ {
+ name: "get_weather",
+ description: "Get the current weather for a location",
+ parameters: {
+ type: Type.OBJECT,
+ properties: {
+ location: {
+ type: Type.STRING,
+ description: "The city and state, e.g. San Francisco, CA",
+ },
+ },
+ required: ["location"],
+ },
+ },
+ ],
+ },
+ ],
+ },
+
+ bedrock: {
+ modelId: BEDROCK_MODEL,
+ messages: [
+ {
+ role: "user",
+ content: [{ text: "What's the weather like in San Francisco?" }],
+ },
+ ],
+ toolConfig: {
+ tools: [
+ {
+ toolSpec: {
+ name: "get_weather",
+ description: "Get the current weather for a location",
+ inputSchema: {
+ json: {
+ type: "object",
+ properties: {
+ location: {
+ type: "string",
+ description: "The city and state, e.g. San Francisco, CA",
+ },
+ },
+ required: ["location"],
+ },
+ },
+ },
+ },
+ ],
+ },
+ },
},
};
diff --git a/payloads/cases/types.ts b/payloads/cases/types.ts
index 80d4f322..7765ab4f 100644
--- a/payloads/cases/types.ts
+++ b/payloads/cases/types.ts
@@ -1,11 +1,26 @@
import OpenAI from "openai";
import Anthropic from "@anthropic-ai/sdk";
+import type { Content, GenerateContentConfig, Tool } from "@google/genai";
+import type { ConverseCommandInput } from "@aws-sdk/client-bedrock-runtime";
+
+// Google Gemini API request type (matching the js-genai library)
+export interface GoogleGenerateContentRequest {
+ contents: Content[];
+ config?: GenerateContentConfig;
+ tools?: Tool[];
+ systemInstruction?: Content;
+}
+
+// Re-export Bedrock type for convenience
+export type BedrockConverseRequest = ConverseCommandInput;
// Well-defined types for test cases
export interface TestCase {
"chat-completions": OpenAI.Chat.Completions.ChatCompletionCreateParams | null;
responses: OpenAI.Responses.ResponseCreateParams | null;
anthropic: Anthropic.Messages.MessageCreateParams | null;
+ google: GoogleGenerateContentRequest | null;
+ bedrock: BedrockConverseRequest | null;
}
// Collection of test cases organized by name
@@ -20,4 +35,6 @@ export const PROVIDER_TYPES = [
"chat-completions",
"responses",
"anthropic",
+ "google",
+ "bedrock",
] as const;
diff --git a/payloads/package-lock.json b/payloads/package-lock.json
new file mode 100644
index 00000000..c4464d9a
--- /dev/null
+++ b/payloads/package-lock.json
@@ -0,0 +1,4453 @@
+{
+ "name": "@braintrust/payload-capture",
+ "version": "0.1.0",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "@braintrust/payload-capture",
+ "version": "0.1.0",
+ "dependencies": {
+ "@anthropic-ai/sdk": "^0.63.0",
+ "@aws-sdk/client-bedrock-runtime": "^3.700.0",
+ "@google/genai": "^1.34.0",
+ "openai": "^5.22.0"
+ },
+ "devDependencies": {
+ "@types/node": "^22.9.0",
+ "@typescript-eslint/eslint-plugin": "^8.10.0",
+ "@typescript-eslint/parser": "^8.10.0",
+ "eslint": "^8.56.0",
+ "eslint-config-prettier": "^9.1.0",
+ "prettier": "^3.4.1",
+ "tsx": "^4.19.2",
+ "typescript": "^5.6.3"
+ }
+ },
+ "node_modules/@anthropic-ai/sdk": {
+ "version": "0.63.1",
+ "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.63.1.tgz",
+ "integrity": "sha512-wMA/Xx5GLO+npV992YKUfsmlI6699XG/jFjCPTf/nsMBfUh3e3KmNiOKuhqSMZibOjoLOlhYc7L4pfLPI8A+RA==",
+ "license": "MIT",
+ "dependencies": {
+ "json-schema-to-ts": "^3.1.1"
+ },
+ "bin": {
+ "anthropic-ai-sdk": "bin/cli"
+ },
+ "peerDependencies": {
+ "zod": "^3.25.0 || ^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@aws-crypto/crc32": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz",
+ "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/util": "^5.2.0",
+ "@aws-sdk/types": "^3.222.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-crypto/sha256-browser": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz",
+ "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-js": "^5.2.0",
+ "@aws-crypto/supports-web-crypto": "^5.2.0",
+ "@aws-crypto/util": "^5.2.0",
+ "@aws-sdk/types": "^3.222.0",
+ "@aws-sdk/util-locate-window": "^3.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.6.2"
+ }
+ },
+ "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz",
+ "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz",
+ "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^2.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
+ "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-crypto/sha256-js": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz",
+ "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/util": "^5.2.0",
+ "@aws-sdk/types": "^3.222.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
+ "node_modules/@aws-crypto/supports-web-crypto": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz",
+ "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ }
+ },
+ "node_modules/@aws-crypto/util": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz",
+ "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "^3.222.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.6.2"
+ }
+ },
+ "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz",
+ "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz",
+ "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^2.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
+ "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-bedrock-runtime": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.956.0.tgz",
+ "integrity": "sha512-8cD53FBKn7uvc4QZtYZr87KcuSrEFMwS/O3HC+Y7+disgePlTXxtOo0naCj5O1yVZPuU3FCVLGzxFk5fhbzAJg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.956.0",
+ "@aws-sdk/credential-provider-node": "3.956.0",
+ "@aws-sdk/eventstream-handler-node": "3.956.0",
+ "@aws-sdk/middleware-eventstream": "3.956.0",
+ "@aws-sdk/middleware-host-header": "3.956.0",
+ "@aws-sdk/middleware-logger": "3.956.0",
+ "@aws-sdk/middleware-recursion-detection": "3.956.0",
+ "@aws-sdk/middleware-user-agent": "3.956.0",
+ "@aws-sdk/middleware-websocket": "3.956.0",
+ "@aws-sdk/region-config-resolver": "3.956.0",
+ "@aws-sdk/token-providers": "3.956.0",
+ "@aws-sdk/types": "3.956.0",
+ "@aws-sdk/util-endpoints": "3.956.0",
+ "@aws-sdk/util-user-agent-browser": "3.956.0",
+ "@aws-sdk/util-user-agent-node": "3.956.0",
+ "@smithy/config-resolver": "^4.4.5",
+ "@smithy/core": "^3.20.0",
+ "@smithy/eventstream-serde-browser": "^4.2.7",
+ "@smithy/eventstream-serde-config-resolver": "^4.3.7",
+ "@smithy/eventstream-serde-node": "^4.2.7",
+ "@smithy/fetch-http-handler": "^5.3.8",
+ "@smithy/hash-node": "^4.2.7",
+ "@smithy/invalid-dependency": "^4.2.7",
+ "@smithy/middleware-content-length": "^4.2.7",
+ "@smithy/middleware-endpoint": "^4.4.1",
+ "@smithy/middleware-retry": "^4.4.17",
+ "@smithy/middleware-serde": "^4.2.8",
+ "@smithy/middleware-stack": "^4.2.7",
+ "@smithy/node-config-provider": "^4.3.7",
+ "@smithy/node-http-handler": "^4.4.7",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/smithy-client": "^4.10.2",
+ "@smithy/types": "^4.11.0",
+ "@smithy/url-parser": "^4.2.7",
+ "@smithy/util-base64": "^4.3.0",
+ "@smithy/util-body-length-browser": "^4.2.0",
+ "@smithy/util-body-length-node": "^4.2.1",
+ "@smithy/util-defaults-mode-browser": "^4.3.16",
+ "@smithy/util-defaults-mode-node": "^4.2.19",
+ "@smithy/util-endpoints": "^3.2.7",
+ "@smithy/util-middleware": "^4.2.7",
+ "@smithy/util-retry": "^4.2.7",
+ "@smithy/util-stream": "^4.5.8",
+ "@smithy/util-utf8": "^4.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.956.0.tgz",
+ "integrity": "sha512-TCxCa9B1IMILvk/7sig0fRQzff+M2zBQVZGWOJL8SAZq/gfElIMAf/nYjQwMhXjyq8PFDRGm4GN8ZhNKPeNleQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.956.0",
+ "@aws-sdk/middleware-host-header": "3.956.0",
+ "@aws-sdk/middleware-logger": "3.956.0",
+ "@aws-sdk/middleware-recursion-detection": "3.956.0",
+ "@aws-sdk/middleware-user-agent": "3.956.0",
+ "@aws-sdk/region-config-resolver": "3.956.0",
+ "@aws-sdk/types": "3.956.0",
+ "@aws-sdk/util-endpoints": "3.956.0",
+ "@aws-sdk/util-user-agent-browser": "3.956.0",
+ "@aws-sdk/util-user-agent-node": "3.956.0",
+ "@smithy/config-resolver": "^4.4.5",
+ "@smithy/core": "^3.20.0",
+ "@smithy/fetch-http-handler": "^5.3.8",
+ "@smithy/hash-node": "^4.2.7",
+ "@smithy/invalid-dependency": "^4.2.7",
+ "@smithy/middleware-content-length": "^4.2.7",
+ "@smithy/middleware-endpoint": "^4.4.1",
+ "@smithy/middleware-retry": "^4.4.17",
+ "@smithy/middleware-serde": "^4.2.8",
+ "@smithy/middleware-stack": "^4.2.7",
+ "@smithy/node-config-provider": "^4.3.7",
+ "@smithy/node-http-handler": "^4.4.7",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/smithy-client": "^4.10.2",
+ "@smithy/types": "^4.11.0",
+ "@smithy/url-parser": "^4.2.7",
+ "@smithy/util-base64": "^4.3.0",
+ "@smithy/util-body-length-browser": "^4.2.0",
+ "@smithy/util-body-length-node": "^4.2.1",
+ "@smithy/util-defaults-mode-browser": "^4.3.16",
+ "@smithy/util-defaults-mode-node": "^4.2.19",
+ "@smithy/util-endpoints": "^3.2.7",
+ "@smithy/util-middleware": "^4.2.7",
+ "@smithy/util-retry": "^4.2.7",
+ "@smithy/util-utf8": "^4.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/core": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.956.0.tgz",
+ "integrity": "sha512-BMOCXZNz5z4cR3/SaNHUfeoZQUG/y39bLscdLUgg3RL6mDOhuINIqMc0qc6G3kpwDTLVdXikF4nmx2UrRK9y5A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.956.0",
+ "@aws-sdk/xml-builder": "3.956.0",
+ "@smithy/core": "^3.20.0",
+ "@smithy/node-config-provider": "^4.3.7",
+ "@smithy/property-provider": "^4.2.7",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/signature-v4": "^5.3.7",
+ "@smithy/smithy-client": "^4.10.2",
+ "@smithy/types": "^4.11.0",
+ "@smithy/util-base64": "^4.3.0",
+ "@smithy/util-middleware": "^4.2.7",
+ "@smithy/util-utf8": "^4.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-env": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.956.0.tgz",
+ "integrity": "sha512-aLJavJMPVTvhmggJ0pcdCKEWJk3sL9QkJkUIEoTzOou7HnxWS66N4sC5e8y27AF2nlnYfIxq3hkEiZlGi/vlfA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.956.0",
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/property-provider": "^4.2.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-http": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.956.0.tgz",
+ "integrity": "sha512-VsKzBNhwT6XJdW3HQX6o4KOHj1MAzSwA8/zCsT9mOGecozw1yeCcQPtlWDSlfsfygKVCXz7fiJzU03yl11NKMA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.956.0",
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/fetch-http-handler": "^5.3.8",
+ "@smithy/node-http-handler": "^4.4.7",
+ "@smithy/property-provider": "^4.2.7",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/smithy-client": "^4.10.2",
+ "@smithy/types": "^4.11.0",
+ "@smithy/util-stream": "^4.5.8",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-ini": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.956.0.tgz",
+ "integrity": "sha512-TlDy+IGr0JIRBwnPdV31J1kWXEcfsR3OzcNVWQrguQdHeTw2lU5eft16kdizo6OruqcZRF/LvHBDwAWx4u51ww==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.956.0",
+ "@aws-sdk/credential-provider-env": "3.956.0",
+ "@aws-sdk/credential-provider-http": "3.956.0",
+ "@aws-sdk/credential-provider-login": "3.956.0",
+ "@aws-sdk/credential-provider-process": "3.956.0",
+ "@aws-sdk/credential-provider-sso": "3.956.0",
+ "@aws-sdk/credential-provider-web-identity": "3.956.0",
+ "@aws-sdk/nested-clients": "3.956.0",
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/credential-provider-imds": "^4.2.7",
+ "@smithy/property-provider": "^4.2.7",
+ "@smithy/shared-ini-file-loader": "^4.4.2",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-login": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.956.0.tgz",
+ "integrity": "sha512-p2Y62mdIlUpiyi5tvn8cKTja5kq1e3Rm5gm4wpNQ9caTayfkIEXyKrbP07iepTv60Coaylq9Fx6b5En/siAeGA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.956.0",
+ "@aws-sdk/nested-clients": "3.956.0",
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/property-provider": "^4.2.7",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/shared-ini-file-loader": "^4.4.2",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-node": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.956.0.tgz",
+ "integrity": "sha512-ITjp7uAQh17ljUsCWkPRmLjyFfupGlJVUfTLHnZJ+c7G0P0PDRquaM+fBSh0y33tauHsBa5fGnCCLRo5hy9sGQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/credential-provider-env": "3.956.0",
+ "@aws-sdk/credential-provider-http": "3.956.0",
+ "@aws-sdk/credential-provider-ini": "3.956.0",
+ "@aws-sdk/credential-provider-process": "3.956.0",
+ "@aws-sdk/credential-provider-sso": "3.956.0",
+ "@aws-sdk/credential-provider-web-identity": "3.956.0",
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/credential-provider-imds": "^4.2.7",
+ "@smithy/property-provider": "^4.2.7",
+ "@smithy/shared-ini-file-loader": "^4.4.2",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-process": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.956.0.tgz",
+ "integrity": "sha512-wpAex+/LGVWkHPchsn9FWy1ahFualIeSYq3ADFc262ljJjrltOWGh3+cu3OK3gTMkX6VEsl+lFvy1P7Bk7cgXA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.956.0",
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/property-provider": "^4.2.7",
+ "@smithy/shared-ini-file-loader": "^4.4.2",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-sso": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.956.0.tgz",
+ "integrity": "sha512-IRFSDF32x8TpOEYSGMcGQVJUiYuJaFkek0aCjW0klNIZHBF1YpflVpUarK9DJe4v4ryfVq3c0bqR/JFui8QFmw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/client-sso": "3.956.0",
+ "@aws-sdk/core": "3.956.0",
+ "@aws-sdk/token-providers": "3.956.0",
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/property-provider": "^4.2.7",
+ "@smithy/shared-ini-file-loader": "^4.4.2",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-web-identity": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.956.0.tgz",
+ "integrity": "sha512-4YkmjwZC+qoUKlVOY9xNx7BTKRdJ1R1/Zjk2QSW5aWtwkk2e07ZUQvUpbW4vGpAxGm1K4EgRcowuSpOsDTh44Q==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.956.0",
+ "@aws-sdk/nested-clients": "3.956.0",
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/property-provider": "^4.2.7",
+ "@smithy/shared-ini-file-loader": "^4.4.2",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/eventstream-handler-node": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.956.0.tgz",
+ "integrity": "sha512-OdnzsiCyMcK9fkMI3II7+q8qu3hY5iK4coV8VjXI5u05UEbg3iosQynlkv0FXztSodPYYwnuZ0lFtIthsUy0Tw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/eventstream-codec": "^4.2.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-eventstream": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.956.0.tgz",
+ "integrity": "sha512-xBhNmBCJxB4ho7ATmhniv3PK3qN5ZEgknUI+7XTM/cnQBzuYG5twAQSkGdInzEjygTSTmKpkdBVh67AxKTotAQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-host-header": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.956.0.tgz",
+ "integrity": "sha512-JujNJDp/dj1DbsI0ntzhrz2uJ4jpumcKtr743eMpEhdboYjuu/UzY8/7n1h5JbgU9TNXgqE9lgQNa5QPG0Tvsg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-logger": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.956.0.tgz",
+ "integrity": "sha512-Qff39yEOPYgRsm4SrkHOvS0nSoxXILYnC8Akp0uMRi2lOcZVyXL3WCWqIOtI830qVI4GPa796sleKguxx50RHg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-recursion-detection": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.956.0.tgz",
+ "integrity": "sha512-/f4JxL2kSCYhy63wovqts6SJkpalSLvuFe78ozt3ClrGoHGyr69o7tPRYx5U7azLgvrIGjsWUyTayeAk3YHIVQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.956.0",
+ "@aws/lambda-invoke-store": "^0.2.2",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-user-agent": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.956.0.tgz",
+ "integrity": "sha512-azH8OJ0AIe3NafaTNvJorG/ALaLNTYwVKtyaSeQKOvaL8TNuBVuDnM5iHCiWryIaRgZotomqycwyfNKLw2D3JQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.956.0",
+ "@aws-sdk/types": "3.956.0",
+ "@aws-sdk/util-endpoints": "3.956.0",
+ "@smithy/core": "^3.20.0",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-websocket": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.956.0.tgz",
+ "integrity": "sha512-yH8D1z5stLDPZPXoDsgzyMIwziMUj6v5riHARJ4cECJBtdREJwDmp56c+iCzkhvtWKqeL/viAlj4Kwe2fAmTxw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.956.0",
+ "@aws-sdk/util-format-url": "3.956.0",
+ "@smithy/eventstream-codec": "^4.2.7",
+ "@smithy/eventstream-serde-browser": "^4.2.7",
+ "@smithy/fetch-http-handler": "^5.3.8",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/signature-v4": "^5.3.7",
+ "@smithy/types": "^4.11.0",
+ "@smithy/util-hex-encoding": "^4.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/nested-clients": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.956.0.tgz",
+ "integrity": "sha512-GHDQMkxoWpi3eTrhWGmghw0gsZJ5rM1ERHfBFhlhduCdtV3TyhKVmDgFG84KhU8v18dcVpSp3Pu3KwH7j1tgIg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.956.0",
+ "@aws-sdk/middleware-host-header": "3.956.0",
+ "@aws-sdk/middleware-logger": "3.956.0",
+ "@aws-sdk/middleware-recursion-detection": "3.956.0",
+ "@aws-sdk/middleware-user-agent": "3.956.0",
+ "@aws-sdk/region-config-resolver": "3.956.0",
+ "@aws-sdk/types": "3.956.0",
+ "@aws-sdk/util-endpoints": "3.956.0",
+ "@aws-sdk/util-user-agent-browser": "3.956.0",
+ "@aws-sdk/util-user-agent-node": "3.956.0",
+ "@smithy/config-resolver": "^4.4.5",
+ "@smithy/core": "^3.20.0",
+ "@smithy/fetch-http-handler": "^5.3.8",
+ "@smithy/hash-node": "^4.2.7",
+ "@smithy/invalid-dependency": "^4.2.7",
+ "@smithy/middleware-content-length": "^4.2.7",
+ "@smithy/middleware-endpoint": "^4.4.1",
+ "@smithy/middleware-retry": "^4.4.17",
+ "@smithy/middleware-serde": "^4.2.8",
+ "@smithy/middleware-stack": "^4.2.7",
+ "@smithy/node-config-provider": "^4.3.7",
+ "@smithy/node-http-handler": "^4.4.7",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/smithy-client": "^4.10.2",
+ "@smithy/types": "^4.11.0",
+ "@smithy/url-parser": "^4.2.7",
+ "@smithy/util-base64": "^4.3.0",
+ "@smithy/util-body-length-browser": "^4.2.0",
+ "@smithy/util-body-length-node": "^4.2.1",
+ "@smithy/util-defaults-mode-browser": "^4.3.16",
+ "@smithy/util-defaults-mode-node": "^4.2.19",
+ "@smithy/util-endpoints": "^3.2.7",
+ "@smithy/util-middleware": "^4.2.7",
+ "@smithy/util-retry": "^4.2.7",
+ "@smithy/util-utf8": "^4.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/region-config-resolver": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.956.0.tgz",
+ "integrity": "sha512-byU5XYekW7+rZ3e067y038wlrpnPkdI4fMxcHCHrv+TAfzl8CCk5xLyzerQtXZR8cVPVOXuaYWe1zKW0uCnXUA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/config-resolver": "^4.4.5",
+ "@smithy/node-config-provider": "^4.3.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/token-providers": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.956.0.tgz",
+ "integrity": "sha512-I01Q9yDeG9oXge14u/bubtSdBpok/rTsPp2AQwy5xj/5PatRTHPbUTP6tef3AH/lFCAqkI0nncIcgx6zikDdUQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.956.0",
+ "@aws-sdk/nested-clients": "3.956.0",
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/property-provider": "^4.2.7",
+ "@smithy/shared-ini-file-loader": "^4.4.2",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/types": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.956.0.tgz",
+ "integrity": "sha512-DMRU/p9wAlAJxEjegnLwduCA8YP2pcT/sIJ+17KSF38c5cC6CbBhykwbZLECTo+zYzoFrOqeLbqE6paH8Gx3ug==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-endpoints": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.956.0.tgz",
+ "integrity": "sha512-xZ5CBoubS4rs9JkFniKNShDtfqxaMUnwaebYMoybZm070q9+omFkQkJYXl7kopTViEgZgQl1sAsAkrawBM8qEQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/types": "^4.11.0",
+ "@smithy/url-parser": "^4.2.7",
+ "@smithy/util-endpoints": "^3.2.7",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-format-url": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.956.0.tgz",
+ "integrity": "sha512-Piap0XvvmZMtCjeCStuAG/Meq7/U5SR3X+ZDduRYMKlkNtkLcc98e9Sih5AThIJLUdffRS/M+gQRiWvc1sm1ww==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/querystring-builder": "^4.2.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-locate-window": {
+ "version": "3.953.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.953.0.tgz",
+ "integrity": "sha512-mPxK+I1LcrgC/RSa3G5AMAn8eN2Ay0VOgw8lSRmV1jCtO+iYvNeCqOdxoJUjOW6I5BA4niIRWqVORuRP07776Q==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-user-agent-browser": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.956.0.tgz",
+ "integrity": "sha512-s8KwYR3HqiGNni7a1DN2P3RUog64QoBQ6VCSzJkHBWb6++8KSOpqeeDkfmEz+22y1LOne+bRrpDGKa0aqOc3rQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/types": "^4.11.0",
+ "bowser": "^2.11.0",
+ "tslib": "^2.6.2"
+ }
+ },
+ "node_modules/@aws-sdk/util-user-agent-node": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.956.0.tgz",
+ "integrity": "sha512-H0r6ol3Rr63/3xvrUsLqHps+cA7VkM7uCU5NtuTHnMbv3uYYTKf9M2XFHAdVewmmRgssTzvqemrARc8Ji3SNvg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/middleware-user-agent": "3.956.0",
+ "@aws-sdk/types": "3.956.0",
+ "@smithy/node-config-provider": "^4.3.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "aws-crt": ">=1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "aws-crt": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@aws-sdk/xml-builder": {
+ "version": "3.956.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.956.0.tgz",
+ "integrity": "sha512-x/IvXUeQYNUEQojpRIQpFt4X7XGxqzjUlXFRdwaTCtTz3q1droXVJvYOhnX3KiMgzeHGlBJfY4Nmq3oZNEUGFw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.11.0",
+ "fast-xml-parser": "5.2.5",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws/lambda-invoke-store": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz",
+ "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.28.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz",
+ "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz",
+ "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "aix"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz",
+ "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz",
+ "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz",
+ "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz",
+ "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz",
+ "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz",
+ "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz",
+ "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz",
+ "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz",
+ "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz",
+ "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz",
+ "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz",
+ "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz",
+ "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz",
+ "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz",
+ "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz",
+ "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz",
+ "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz",
+ "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/openharmony-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz",
+ "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "openharmony"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz",
+ "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz",
+ "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz",
+ "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz",
+ "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
+ "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
+ }
+ },
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.2",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
+ "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^9.6.0",
+ "globals": "^13.19.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@eslint/js": {
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz",
+ "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/@google/genai": {
+ "version": "1.34.0",
+ "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.34.0.tgz",
+ "integrity": "sha512-vu53UMPvjmb7PGzlYu6Tzxso8Dfhn+a7eQFaS2uNemVtDZKwzSpJ5+ikqBbXplF7RGB1STcVDqCkPvquiwb2sw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "google-auth-library": "^10.3.0",
+ "ws": "^8.18.0"
+ },
+ "engines": {
+ "node": ">=20.0.0"
+ },
+ "peerDependencies": {
+ "@modelcontextprotocol/sdk": "^1.24.0"
+ },
+ "peerDependenciesMeta": {
+ "@modelcontextprotocol/sdk": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.13.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz",
+ "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==",
+ "deprecated": "Use @eslint/config-array instead",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.3",
+ "debug": "^4.3.1",
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=10.10.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz",
+ "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==",
+ "deprecated": "Use @eslint/object-schema instead",
+ "dev": true,
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@isaacs/cliui": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^5.1.2",
+ "string-width-cjs": "npm:string-width@^4.2.0",
+ "strip-ansi": "^7.0.1",
+ "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
+ "wrap-ansi": "^8.1.0",
+ "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@pkgjs/parseargs": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
+ "license": "MIT",
+ "optional": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/@smithy/abort-controller": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.7.tgz",
+ "integrity": "sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/config-resolver": {
+ "version": "4.4.5",
+ "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.5.tgz",
+ "integrity": "sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^4.3.7",
+ "@smithy/types": "^4.11.0",
+ "@smithy/util-config-provider": "^4.2.0",
+ "@smithy/util-endpoints": "^3.2.7",
+ "@smithy/util-middleware": "^4.2.7",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/core": {
+ "version": "3.20.0",
+ "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.20.0.tgz",
+ "integrity": "sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/middleware-serde": "^4.2.8",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/types": "^4.11.0",
+ "@smithy/util-base64": "^4.3.0",
+ "@smithy/util-body-length-browser": "^4.2.0",
+ "@smithy/util-middleware": "^4.2.7",
+ "@smithy/util-stream": "^4.5.8",
+ "@smithy/util-utf8": "^4.2.0",
+ "@smithy/uuid": "^1.1.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/credential-provider-imds": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.7.tgz",
+ "integrity": "sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^4.3.7",
+ "@smithy/property-provider": "^4.2.7",
+ "@smithy/types": "^4.11.0",
+ "@smithy/url-parser": "^4.2.7",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/eventstream-codec": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.7.tgz",
+ "integrity": "sha512-DrpkEoM3j9cBBWhufqBwnbbn+3nf1N9FP6xuVJ+e220jbactKuQgaZwjwP5CP1t+O94brm2JgVMD2atMGX3xIQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/crc32": "5.2.0",
+ "@smithy/types": "^4.11.0",
+ "@smithy/util-hex-encoding": "^4.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/eventstream-serde-browser": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.7.tgz",
+ "integrity": "sha512-ujzPk8seYoDBmABDE5YqlhQZAXLOrtxtJLrbhHMKjBoG5b4dK4i6/mEU+6/7yXIAkqOO8sJ6YxZl+h0QQ1IJ7g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/eventstream-serde-universal": "^4.2.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/eventstream-serde-config-resolver": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.7.tgz",
+ "integrity": "sha512-x7BtAiIPSaNaWuzm24Q/mtSkv+BrISO/fmheiJ39PKRNH3RmH2Hph/bUKSOBOBC9unqfIYDhKTHwpyZycLGPVQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/eventstream-serde-node": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.7.tgz",
+ "integrity": "sha512-roySCtHC5+pQq5lK4be1fZ/WR6s/AxnPaLfCODIPArtN2du8s5Ot4mKVK3pPtijL/L654ws592JHJ1PbZFF6+A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/eventstream-serde-universal": "^4.2.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/eventstream-serde-universal": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.7.tgz",
+ "integrity": "sha512-QVD+g3+icFkThoy4r8wVFZMsIP08taHVKjE6Jpmz8h5CgX/kk6pTODq5cht0OMtcapUx+xrPzUTQdA+TmO0m1g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/eventstream-codec": "^4.2.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/fetch-http-handler": {
+ "version": "5.3.8",
+ "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.8.tgz",
+ "integrity": "sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/querystring-builder": "^4.2.7",
+ "@smithy/types": "^4.11.0",
+ "@smithy/util-base64": "^4.3.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/hash-node": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.7.tgz",
+ "integrity": "sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.11.0",
+ "@smithy/util-buffer-from": "^4.2.0",
+ "@smithy/util-utf8": "^4.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/invalid-dependency": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.7.tgz",
+ "integrity": "sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/is-array-buffer": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz",
+ "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-content-length": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.7.tgz",
+ "integrity": "sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-endpoint": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.1.tgz",
+ "integrity": "sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/core": "^3.20.0",
+ "@smithy/middleware-serde": "^4.2.8",
+ "@smithy/node-config-provider": "^4.3.7",
+ "@smithy/shared-ini-file-loader": "^4.4.2",
+ "@smithy/types": "^4.11.0",
+ "@smithy/url-parser": "^4.2.7",
+ "@smithy/util-middleware": "^4.2.7",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-retry": {
+ "version": "4.4.17",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.17.tgz",
+ "integrity": "sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^4.3.7",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/service-error-classification": "^4.2.7",
+ "@smithy/smithy-client": "^4.10.2",
+ "@smithy/types": "^4.11.0",
+ "@smithy/util-middleware": "^4.2.7",
+ "@smithy/util-retry": "^4.2.7",
+ "@smithy/uuid": "^1.1.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-serde": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.8.tgz",
+ "integrity": "sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-stack": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.7.tgz",
+ "integrity": "sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/node-config-provider": {
+ "version": "4.3.7",
+ "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.7.tgz",
+ "integrity": "sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^4.2.7",
+ "@smithy/shared-ini-file-loader": "^4.4.2",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/node-http-handler": {
+ "version": "4.4.7",
+ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.7.tgz",
+ "integrity": "sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/abort-controller": "^4.2.7",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/querystring-builder": "^4.2.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/property-provider": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.7.tgz",
+ "integrity": "sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/protocol-http": {
+ "version": "5.3.7",
+ "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.7.tgz",
+ "integrity": "sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/querystring-builder": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.7.tgz",
+ "integrity": "sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.11.0",
+ "@smithy/util-uri-escape": "^4.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/querystring-parser": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.7.tgz",
+ "integrity": "sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/service-error-classification": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.7.tgz",
+ "integrity": "sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.11.0"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/shared-ini-file-loader": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.2.tgz",
+ "integrity": "sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/signature-v4": {
+ "version": "5.3.7",
+ "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.7.tgz",
+ "integrity": "sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^4.2.0",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/types": "^4.11.0",
+ "@smithy/util-hex-encoding": "^4.2.0",
+ "@smithy/util-middleware": "^4.2.7",
+ "@smithy/util-uri-escape": "^4.2.0",
+ "@smithy/util-utf8": "^4.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/smithy-client": {
+ "version": "4.10.2",
+ "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.2.tgz",
+ "integrity": "sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/core": "^3.20.0",
+ "@smithy/middleware-endpoint": "^4.4.1",
+ "@smithy/middleware-stack": "^4.2.7",
+ "@smithy/protocol-http": "^5.3.7",
+ "@smithy/types": "^4.11.0",
+ "@smithy/util-stream": "^4.5.8",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/types": {
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.11.0.tgz",
+ "integrity": "sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/url-parser": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.7.tgz",
+ "integrity": "sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/querystring-parser": "^4.2.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-base64": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz",
+ "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^4.2.0",
+ "@smithy/util-utf8": "^4.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-body-length-browser": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz",
+ "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-body-length-node": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz",
+ "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-buffer-from": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz",
+ "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^4.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-config-provider": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz",
+ "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-defaults-mode-browser": {
+ "version": "4.3.16",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.16.tgz",
+ "integrity": "sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^4.2.7",
+ "@smithy/smithy-client": "^4.10.2",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-defaults-mode-node": {
+ "version": "4.2.19",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.19.tgz",
+ "integrity": "sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/config-resolver": "^4.4.5",
+ "@smithy/credential-provider-imds": "^4.2.7",
+ "@smithy/node-config-provider": "^4.3.7",
+ "@smithy/property-provider": "^4.2.7",
+ "@smithy/smithy-client": "^4.10.2",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-endpoints": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.7.tgz",
+ "integrity": "sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^4.3.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-hex-encoding": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz",
+ "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-middleware": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.7.tgz",
+ "integrity": "sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-retry": {
+ "version": "4.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.7.tgz",
+ "integrity": "sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/service-error-classification": "^4.2.7",
+ "@smithy/types": "^4.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-stream": {
+ "version": "4.5.8",
+ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.8.tgz",
+ "integrity": "sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/fetch-http-handler": "^5.3.8",
+ "@smithy/node-http-handler": "^4.4.7",
+ "@smithy/types": "^4.11.0",
+ "@smithy/util-base64": "^4.3.0",
+ "@smithy/util-buffer-from": "^4.2.0",
+ "@smithy/util-hex-encoding": "^4.2.0",
+ "@smithy/util-utf8": "^4.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-uri-escape": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz",
+ "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-utf8": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz",
+ "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^4.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/uuid": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz",
+ "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@types/node": {
+ "version": "22.19.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz",
+ "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~6.21.0"
+ }
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.50.0.tgz",
+ "integrity": "sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.50.0",
+ "@typescript-eslint/type-utils": "8.50.0",
+ "@typescript-eslint/utils": "8.50.0",
+ "@typescript-eslint/visitor-keys": "8.50.0",
+ "ignore": "^7.0.0",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.50.0",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.50.0.tgz",
+ "integrity": "sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "8.50.0",
+ "@typescript-eslint/types": "8.50.0",
+ "@typescript-eslint/typescript-estree": "8.50.0",
+ "@typescript-eslint/visitor-keys": "8.50.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/project-service": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.50.0.tgz",
+ "integrity": "sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/tsconfig-utils": "^8.50.0",
+ "@typescript-eslint/types": "^8.50.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.50.0.tgz",
+ "integrity": "sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.50.0",
+ "@typescript-eslint/visitor-keys": "8.50.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/tsconfig-utils": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.50.0.tgz",
+ "integrity": "sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.50.0.tgz",
+ "integrity": "sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.50.0",
+ "@typescript-eslint/typescript-estree": "8.50.0",
+ "@typescript-eslint/utils": "8.50.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.50.0.tgz",
+ "integrity": "sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.50.0.tgz",
+ "integrity": "sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/project-service": "8.50.0",
+ "@typescript-eslint/tsconfig-utils": "8.50.0",
+ "@typescript-eslint/types": "8.50.0",
+ "@typescript-eslint/visitor-keys": "8.50.0",
+ "debug": "^4.3.4",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "tinyglobby": "^0.2.15",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.50.0.tgz",
+ "integrity": "sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.7.0",
+ "@typescript-eslint/scope-manager": "8.50.0",
+ "@typescript-eslint/types": "8.50.0",
+ "@typescript-eslint/typescript-estree": "8.50.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <6.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.50.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.50.0.tgz",
+ "integrity": "sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.50.0",
+ "eslint-visitor-keys": "^4.2.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
+ "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/acorn": {
+ "version": "8.15.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/agent-base": {
+ "version": "7.1.4",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
+ "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/bignumber.js": {
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz",
+ "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/bowser": {
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz",
+ "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==",
+ "license": "MIT"
+ },
+ "node_modules/brace-expansion": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
+ "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/data-uri-to-buffer": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
+ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "node_modules/debug": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
+ "license": "MIT"
+ },
+ "node_modules/ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "license": "MIT"
+ },
+ "node_modules/esbuild": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz",
+ "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.27.2",
+ "@esbuild/android-arm": "0.27.2",
+ "@esbuild/android-arm64": "0.27.2",
+ "@esbuild/android-x64": "0.27.2",
+ "@esbuild/darwin-arm64": "0.27.2",
+ "@esbuild/darwin-x64": "0.27.2",
+ "@esbuild/freebsd-arm64": "0.27.2",
+ "@esbuild/freebsd-x64": "0.27.2",
+ "@esbuild/linux-arm": "0.27.2",
+ "@esbuild/linux-arm64": "0.27.2",
+ "@esbuild/linux-ia32": "0.27.2",
+ "@esbuild/linux-loong64": "0.27.2",
+ "@esbuild/linux-mips64el": "0.27.2",
+ "@esbuild/linux-ppc64": "0.27.2",
+ "@esbuild/linux-riscv64": "0.27.2",
+ "@esbuild/linux-s390x": "0.27.2",
+ "@esbuild/linux-x64": "0.27.2",
+ "@esbuild/netbsd-arm64": "0.27.2",
+ "@esbuild/netbsd-x64": "0.27.2",
+ "@esbuild/openbsd-arm64": "0.27.2",
+ "@esbuild/openbsd-x64": "0.27.2",
+ "@esbuild/openharmony-arm64": "0.27.2",
+ "@esbuild/sunos-x64": "0.27.2",
+ "@esbuild/win32-arm64": "0.27.2",
+ "@esbuild/win32-ia32": "0.27.2",
+ "@esbuild/win32-x64": "0.27.2"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.57.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz",
+ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==",
+ "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.6.1",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.57.1",
+ "@humanwhocodes/config-array": "^0.13.0",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.2",
+ "debug": "^4.3.2",
+ "doctrine": "^3.0.0",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^7.2.2",
+ "eslint-visitor-keys": "^3.4.3",
+ "espree": "^9.6.1",
+ "esquery": "^1.4.2",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "globals": "^13.19.0",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
+ "js-yaml": "^4.1.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.4.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3",
+ "strip-ansi": "^6.0.1",
+ "text-table": "^0.2.0"
+ },
+ "bin": {
+ "eslint": "bin/eslint.js"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz",
+ "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
+ "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/eslint/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/eslint/node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/eslint/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.6.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
+ "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.9.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.4.1"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ }
+ },
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "license": "MIT"
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/fast-xml-parser": {
+ "version": "5.2.5",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz",
+ "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "strnum": "^2.1.0"
+ },
+ "bin": {
+ "fxparser": "src/cli/cli.js"
+ }
+ },
+ "node_modules/fastq": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fdir": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "picomatch": "^3 || ^4"
+ },
+ "peerDependenciesMeta": {
+ "picomatch": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/fetch-blob": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
+ "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "node-domexception": "^1.0.0",
+ "web-streams-polyfill": "^3.0.3"
+ },
+ "engines": {
+ "node": "^12.20 || >= 14.13"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.3",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/foreground-child": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
+ "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
+ "license": "ISC",
+ "dependencies": {
+ "cross-spawn": "^7.0.6",
+ "signal-exit": "^4.0.1"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/formdata-polyfill": {
+ "version": "4.0.10",
+ "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+ "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+ "license": "MIT",
+ "dependencies": {
+ "fetch-blob": "^3.1.2"
+ },
+ "engines": {
+ "node": ">=12.20.0"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/gaxios": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.3.tgz",
+ "integrity": "sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "extend": "^3.0.2",
+ "https-proxy-agent": "^7.0.1",
+ "node-fetch": "^3.3.2",
+ "rimraf": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/gaxios/node_modules/glob": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz",
+ "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==",
+ "license": "ISC",
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/gaxios/node_modules/rimraf": {
+ "version": "5.0.10",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz",
+ "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==",
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^10.3.7"
+ },
+ "bin": {
+ "rimraf": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/gcp-metadata": {
+ "version": "8.1.2",
+ "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz",
+ "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "gaxios": "^7.0.0",
+ "google-logging-utils": "^1.0.0",
+ "json-bigint": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/get-tsconfig": {
+ "version": "4.13.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz",
+ "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
+ "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/google-auth-library": {
+ "version": "10.5.0",
+ "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.5.0.tgz",
+ "integrity": "sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "base64-js": "^1.3.0",
+ "ecdsa-sig-formatter": "^1.0.11",
+ "gaxios": "^7.0.0",
+ "gcp-metadata": "^8.0.0",
+ "google-logging-utils": "^1.0.0",
+ "gtoken": "^8.0.0",
+ "jws": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/google-logging-utils": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz",
+ "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=14"
+ }
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/gtoken": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-8.0.0.tgz",
+ "integrity": "sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==",
+ "license": "MIT",
+ "dependencies": {
+ "gaxios": "^7.0.0",
+ "jws": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
+ "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
+ "license": "MIT",
+ "dependencies": {
+ "agent-base": "^7.1.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+ "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "license": "ISC"
+ },
+ "node_modules/jackspeak": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
+ }
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz",
+ "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/json-bigint": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
+ "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "bignumber.js": "^9.0.0"
+ }
+ },
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-schema-to-ts": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz",
+ "integrity": "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "ts-algebra": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/jwa": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz",
+ "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==",
+ "license": "MIT",
+ "dependencies": {
+ "buffer-equal-constant-time": "^1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/jws": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz",
+ "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==",
+ "license": "MIT",
+ "dependencies": {
+ "jwa": "^2.0.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/lru-cache": {
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "license": "ISC"
+ },
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/node-domexception": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
+ "deprecated": "Use your platform's native DOMException instead",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "github",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.5.0"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
+ "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
+ "license": "MIT",
+ "dependencies": {
+ "data-uri-to-buffer": "^4.0.0",
+ "fetch-blob": "^3.1.4",
+ "formdata-polyfill": "^4.0.10"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/node-fetch"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/openai": {
+ "version": "5.23.2",
+ "resolved": "https://registry.npmjs.org/openai/-/openai-5.23.2.tgz",
+ "integrity": "sha512-MQBzmTulj+MM5O8SKEk/gL8a7s5mktS9zUtAkU257WjvobGc9nKcBuVwjyEEcb9SI8a8Y2G/mzn3vm9n1Jlleg==",
+ "license": "Apache-2.0",
+ "bin": {
+ "openai": "bin/cli"
+ },
+ "peerDependencies": {
+ "ws": "^8.18.0",
+ "zod": "^3.23.8"
+ },
+ "peerDependenciesMeta": {
+ "ws": {
+ "optional": true
+ },
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "license": "BlueOak-1.0.0"
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-scurry": {
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
+ "license": "BlueOak-1.0.0",
+ "dependencies": {
+ "lru-cache": "^10.2.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/picomatch": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz",
+ "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/semver": {
+ "version": "7.7.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
+ "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "dev": true,
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "license": "MIT",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/string-width-cjs": {
+ "name": "string-width",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
+ },
+ "node_modules/string-width/node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/string-width/node_modules/strip-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-ansi-cjs": {
+ "name": "strip-ansi",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/strnum": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz",
+ "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/tinyglobby": {
+ "version": "0.2.15",
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
+ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "fdir": "^6.5.0",
+ "picomatch": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/SuperchupuDev"
+ }
+ },
+ "node_modules/ts-algebra": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz",
+ "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==",
+ "license": "MIT"
+ },
+ "node_modules/ts-api-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+ "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "license": "0BSD"
+ },
+ "node_modules/tsx": {
+ "version": "4.21.0",
+ "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz",
+ "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "esbuild": "~0.27.0",
+ "get-tsconfig": "^4.7.5"
+ },
+ "bin": {
+ "tsx": "dist/cli.mjs"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ }
+ },
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "5.9.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/web-streams-polyfill": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs": {
+ "name": "wrap-ansi",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
+ },
+ "node_modules/wrap-ansi-cjs/node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-regex": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+ "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "version": "6.2.3",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz",
+ "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/strip-ansi": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
+ "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/ws": {
+ "version": "8.18.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
+ "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "bufferutil": "^4.0.1",
+ "utf-8-validate": ">=5.0.2"
+ },
+ "peerDependenciesMeta": {
+ "bufferutil": {
+ "optional": true
+ },
+ "utf-8-validate": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ }
+}
diff --git a/payloads/package.json b/payloads/package.json
index fff909e7..e5951ec1 100644
--- a/payloads/package.json
+++ b/payloads/package.json
@@ -12,8 +12,10 @@
"format:check": "prettier --check ."
},
"dependencies": {
- "openai": "^5.22.0",
- "@anthropic-ai/sdk": "^0.63.0"
+ "@anthropic-ai/sdk": "^0.63.0",
+ "@aws-sdk/client-bedrock-runtime": "^3.700.0",
+ "@google/genai": "^1.34.0",
+ "openai": "^5.22.0"
},
"devDependencies": {
"@types/node": "^22.9.0",
diff --git a/payloads/scripts/capture.ts b/payloads/scripts/capture.ts
index 65f17dcb..9c71cc2c 100644
--- a/payloads/scripts/capture.ts
+++ b/payloads/scripts/capture.ts
@@ -9,6 +9,8 @@ import { saveAllFiles } from "./file-manager";
import { openaiExecutor } from "./providers/openai";
import { openaiResponsesExecutor } from "./providers/openai-responses";
import { anthropicExecutor } from "./providers/anthropic";
+import { googleExecutor } from "./providers/google";
+import { bedrockExecutor } from "./providers/bedrock";
import { ProviderExecutor } from "./types";
// Update provider names to be more descriptive
@@ -16,6 +18,8 @@ const allProviders = [
{ ...openaiExecutor, name: "chat-completions" },
openaiResponsesExecutor,
anthropicExecutor,
+ googleExecutor,
+ bedrockExecutor,
] as const;
interface CaptureOptions {
diff --git a/payloads/scripts/providers/bedrock.ts b/payloads/scripts/providers/bedrock.ts
new file mode 100644
index 00000000..1de512bf
--- /dev/null
+++ b/payloads/scripts/providers/bedrock.ts
@@ -0,0 +1,251 @@
+import {
+ BedrockRuntimeClient,
+ ConverseCommand,
+ ConverseStreamCommand,
+ type ConverseCommandInput,
+ type ConverseResponse,
+ type ConverseStreamOutput,
+ type Message,
+ type ContentBlock,
+} from "@aws-sdk/client-bedrock-runtime";
+import { CaptureResult, ProviderExecutor } from "../types";
+import {
+ allTestCases,
+ getCaseNames,
+ getCaseForProvider,
+ BedrockConverseRequest,
+ BEDROCK_MODEL,
+} from "../../cases";
+
+// Bedrock cases - extracted from unified cases
+export const bedrockCases: Record = {};
+
+// Populate cases from unified structure
+getCaseNames(allTestCases).forEach((caseName) => {
+ const caseData = getCaseForProvider(allTestCases, caseName, "bedrock");
+ if (caseData) {
+ bedrockCases[caseName] = caseData;
+ }
+});
+
+// Create client with bearer token middleware
+function createBedrockClient(): BedrockRuntimeClient {
+ const client = new BedrockRuntimeClient({ region: "us-east-1" });
+
+ // Add middleware to inject bearer token if present
+ const token = process.env.AWS_BEARER_TOKEN_BEDROCK;
+ if (token) {
+ client.middlewareStack.add(
+ (next) => async (args) => {
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- AWS SDK middleware requires type assertion for request object
+ const request = (args as { request?: { headers?: Record } }).request;
+ if (request) {
+ if (!request.headers) {
+ request.headers = {};
+ }
+ request.headers["Authorization"] = `Bearer ${token}`;
+ }
+ return next(args);
+ },
+ { step: "build", name: "addBearerToken" }
+ );
+ }
+
+ return client;
+}
+
+type ParallelBedrockResult =
+ | {
+ type: "response";
+ data: ConverseResponse;
+ }
+ | {
+ type: "streamingResponse";
+ data: Array;
+ };
+
+export async function executeBedrock(
+ caseName: string,
+ payload: BedrockConverseRequest,
+ stream?: boolean
+): Promise<
+ CaptureResult<
+ BedrockConverseRequest,
+ ConverseResponse,
+ ConverseStreamOutput
+ >
+> {
+ const client = createBedrockClient();
+ const result: CaptureResult<
+ BedrockConverseRequest,
+ ConverseResponse,
+ ConverseStreamOutput
+ > = { request: payload };
+
+ try {
+ // Create promises for parallel execution
+ const promises: Promise[] = [];
+
+ // Add non-streaming call if requested
+ if (stream !== true) {
+ promises.push(
+ client
+ .send(new ConverseCommand(payload as ConverseCommandInput))
+ .then((response) => ({ type: "response" as const, data: response }))
+ );
+ }
+
+ // Add streaming call if requested
+ if (stream !== false) {
+ promises.push(
+ (async () => {
+ const streamChunks: Array = [];
+ const streamResponse = await client.send(
+ new ConverseStreamCommand(payload as ConverseCommandInput)
+ );
+
+ if (streamResponse.stream) {
+ for await (const event of streamResponse.stream) {
+ streamChunks.push(event);
+ }
+ }
+ return { type: "streamingResponse" as const, data: streamChunks };
+ })()
+ );
+ }
+
+ // Execute initial calls in parallel
+ const initialResults = await Promise.all(promises);
+
+ // Process results
+ for (const result_ of initialResults) {
+ if (result_.type === "response") {
+ result.response = result_.data;
+ } else if (result_.type === "streamingResponse") {
+ result.streamingResponse = result_.data;
+ }
+ }
+
+ // Create follow-up conversation if we have a non-streaming response
+ if (result.response) {
+ const outputMessage = result.response.output?.message;
+
+ if (outputMessage) {
+ // Build follow-up messages
+ const followUpMessages: Message[] = [
+ ...(payload.messages || []),
+ outputMessage,
+ ];
+
+ // Check if the assistant message contains tool use
+ const assistantContent = outputMessage.content || [];
+ let hasToolCalls = false;
+
+ for (const block of assistantContent) {
+ if ("toolUse" in block && block.toolUse) {
+ hasToolCalls = true;
+ // Add tool result for each tool use
+ followUpMessages.push({
+ role: "user",
+ content: [
+ {
+ toolResult: {
+ toolUseId: block.toolUse.toolUseId,
+ content: [{ text: "71 degrees" }],
+ },
+ } as ContentBlock,
+ ],
+ });
+ }
+ }
+
+ // If no tool calls were found, add the generic follow-up message
+ if (!hasToolCalls) {
+ followUpMessages.push({
+ role: "user",
+ content: [{ text: "What should I do next?" }],
+ });
+ }
+
+ const followUpPayload: BedrockConverseRequest = {
+ ...payload,
+ messages: followUpMessages,
+ };
+
+ result.followupRequest = followUpPayload;
+
+ // Create follow-up promises for parallel execution
+ type FollowupBedrockResult =
+ | {
+ type: "followupResponse";
+ data: ConverseResponse;
+ }
+ | {
+ type: "followupStreamingResponse";
+ data: Array;
+ };
+
+ const followupPromises: Promise[] = [];
+
+ if (stream !== true) {
+ followupPromises.push(
+ client
+ .send(new ConverseCommand(followUpPayload as ConverseCommandInput))
+ .then((response) => ({
+ type: "followupResponse" as const,
+ data: response,
+ }))
+ );
+ }
+
+ if (stream !== false) {
+ followupPromises.push(
+ (async () => {
+ const followupStreamChunks: Array = [];
+ const followupStreamResponse = await client.send(
+ new ConverseStreamCommand(followUpPayload as ConverseCommandInput)
+ );
+
+ if (followupStreamResponse.stream) {
+ for await (const event of followupStreamResponse.stream) {
+ followupStreamChunks.push(event);
+ }
+ }
+ return {
+ type: "followupStreamingResponse" as const,
+ data: followupStreamChunks,
+ };
+ })()
+ );
+ }
+
+ // Execute follow-up calls in parallel
+ if (followupPromises.length > 0) {
+ const followupResults = await Promise.all(followupPromises);
+
+ for (const result_ of followupResults) {
+ if (result_.type === "followupResponse") {
+ result.followupResponse = result_.data;
+ } else if (result_.type === "followupStreamingResponse") {
+ result.followupStreamingResponse = result_.data;
+ }
+ }
+ }
+ }
+ }
+ } catch (error) {
+ result.error = String(error);
+ }
+
+ return result;
+}
+
+export const bedrockExecutor: ProviderExecutor<
+ BedrockConverseRequest,
+ ConverseResponse,
+ ConverseStreamOutput
+> = {
+ name: "bedrock",
+ cases: bedrockCases,
+ execute: executeBedrock,
+};
diff --git a/payloads/scripts/providers/google.ts b/payloads/scripts/providers/google.ts
new file mode 100644
index 00000000..591381e1
--- /dev/null
+++ b/payloads/scripts/providers/google.ts
@@ -0,0 +1,240 @@
+import { GoogleGenAI } from "@google/genai";
+import type { GenerateContentResponse, Content } from "@google/genai";
+import { CaptureResult, ProviderExecutor } from "../types";
+import {
+ allTestCases,
+ getCaseNames,
+ getCaseForProvider,
+ GoogleGenerateContentRequest,
+ GOOGLE_MODEL,
+} from "../../cases";
+
+// Google cases - extracted from unified cases
+export const googleCases: Record = {};
+
+// Populate cases from unified structure
+getCaseNames(allTestCases).forEach((caseName) => {
+ const caseData = getCaseForProvider(allTestCases, caseName, "google");
+ if (caseData) {
+ googleCases[caseName] = caseData;
+ }
+});
+
+type ParallelGoogleResult =
+ | {
+ type: "response";
+ data: GenerateContentResponse;
+ }
+ | {
+ type: "streamingResponse";
+ data: Array;
+ };
+
+export async function executeGoogle(
+ caseName: string,
+ payload: GoogleGenerateContentRequest,
+ stream?: boolean
+): Promise<
+ CaptureResult<
+ GoogleGenerateContentRequest,
+ GenerateContentResponse,
+ GenerateContentResponse
+ >
+> {
+ const client = new GoogleGenAI({ apiKey: process.env.GOOGLE_API_KEY });
+ const result: CaptureResult<
+ GoogleGenerateContentRequest,
+ GenerateContentResponse,
+ GenerateContentResponse
+ > = { request: payload };
+
+ try {
+ // Create promises for parallel execution
+ const promises: Promise[] = [];
+
+ // Build config with tools and other settings
+ const config = {
+ ...payload.config,
+ tools: payload.tools,
+ systemInstruction: payload.systemInstruction,
+ };
+
+ // Add non-streaming call if requested
+ if (stream !== true) {
+ promises.push(
+ client.models
+ .generateContent({
+ model: GOOGLE_MODEL,
+ contents: payload.contents,
+ config,
+ })
+ .then((response) => ({ type: "response", data: response }))
+ );
+ }
+
+ // Add streaming call if requested
+ if (stream !== false) {
+ promises.push(
+ (async () => {
+ const streamChunks: Array = [];
+ const streamResponse = await client.models.generateContentStream({
+ model: GOOGLE_MODEL,
+ contents: payload.contents,
+ config,
+ });
+
+ for await (const chunk of streamResponse) {
+ streamChunks.push(chunk);
+ }
+ return { type: "streamingResponse", data: streamChunks };
+ })()
+ );
+ }
+
+ // Execute initial calls in parallel
+ const initialResults = await Promise.all(promises);
+
+ // Process results
+ for (const result_ of initialResults) {
+ if (result_.type === "response") {
+ result.response = result_.data;
+ } else if (result_.type === "streamingResponse") {
+ result.streamingResponse = result_.data;
+ }
+ }
+
+ // Create follow-up conversation if we have a non-streaming response
+ if (result.response) {
+ const assistantContent = result.response.candidates?.[0]?.content;
+
+ if (assistantContent) {
+ // Build follow-up messages
+ const followUpContents: Content[] = [
+ ...payload.contents,
+ assistantContent,
+ ];
+
+ // Check if the assistant message contains function calls
+ const assistantParts = assistantContent.parts || [];
+ let hasToolCalls = false;
+
+ for (const part of assistantParts) {
+ if ("functionCall" in part && part.functionCall) {
+ hasToolCalls = true;
+ // Add function response for each function call
+ followUpContents.push({
+ role: "user",
+ parts: [
+ {
+ functionResponse: {
+ name: part.functionCall.name,
+ response: { temperature: "71 degrees" },
+ },
+ },
+ ],
+ });
+ }
+ }
+
+ // If no tool calls were found, add the generic follow-up message
+ if (!hasToolCalls) {
+ followUpContents.push({
+ role: "user",
+ parts: [{ text: "What should I do next?" }],
+ });
+ }
+
+ const followUpPayload: GoogleGenerateContentRequest = {
+ ...payload,
+ contents: followUpContents,
+ };
+
+ result.followupRequest = followUpPayload;
+
+ // Create follow-up promises for parallel execution
+ type FollowupGoogleResult =
+ | {
+ type: "followupResponse";
+ data: GenerateContentResponse;
+ }
+ | {
+ type: "followupStreamingResponse";
+ data: Array;
+ };
+
+ const followupPromises: Promise[] = [];
+
+ // Build followup config with tools and other settings
+ const followupConfig = {
+ ...followUpPayload.config,
+ tools: followUpPayload.tools,
+ systemInstruction: followUpPayload.systemInstruction,
+ };
+
+ if (stream !== true) {
+ followupPromises.push(
+ client.models
+ .generateContent({
+ model: GOOGLE_MODEL,
+ contents: followUpPayload.contents,
+ config: followupConfig,
+ })
+ .then((response) => ({
+ type: "followupResponse",
+ data: response,
+ }))
+ );
+ }
+
+ if (stream !== false) {
+ followupPromises.push(
+ (async () => {
+ const followupStreamChunks: Array = [];
+ const followupStreamResponse =
+ await client.models.generateContentStream({
+ model: GOOGLE_MODEL,
+ contents: followUpPayload.contents,
+ config: followupConfig,
+ });
+
+ for await (const chunk of followupStreamResponse) {
+ followupStreamChunks.push(chunk);
+ }
+ return {
+ type: "followupStreamingResponse",
+ data: followupStreamChunks,
+ };
+ })()
+ );
+ }
+
+ // Execute follow-up calls in parallel
+ if (followupPromises.length > 0) {
+ const followupResults = await Promise.all(followupPromises);
+
+ for (const result_ of followupResults) {
+ if (result_.type === "followupResponse") {
+ result.followupResponse = result_.data;
+ } else if (result_.type === "followupStreamingResponse") {
+ result.followupStreamingResponse = result_.data;
+ }
+ }
+ }
+ }
+ }
+ } catch (error) {
+ result.error = String(error);
+ }
+
+ return result;
+}
+
+export const googleExecutor: ProviderExecutor<
+ GoogleGenerateContentRequest,
+ GenerateContentResponse,
+ GenerateContentResponse
+> = {
+ name: "google",
+ cases: googleCases,
+ execute: executeGoogle,
+};
diff --git a/payloads/snapshots/.snapshot-cache.json b/payloads/snapshots/.snapshot-cache.json
new file mode 100644
index 00000000..a862a0af
--- /dev/null
+++ b/payloads/snapshots/.snapshot-cache.json
@@ -0,0 +1,194 @@
+{
+ "google:multimodalRequest": {
+ "payloadHash": "40f06a9cbe9592bb6aa266bebec8e562d9c8edb236564cd271cdc2c46eb2e3bf",
+ "capturedAt": "2025-12-21T13:15:37.149Z",
+ "provider": "google",
+ "name": "multimodalRequest",
+ "files": [
+ "multimodalRequest/google/request.json",
+ "multimodalRequest/google/response.json",
+ "multimodalRequest/google/response-streaming.json",
+ "multimodalRequest/google/followup-request.json",
+ "multimodalRequest/google/followup-response.json",
+ "multimodalRequest/google/followup-response-streaming.json"
+ ]
+ },
+ "google:reasoningRequestTruncated": {
+ "payloadHash": "b8d9360fd749c5e8f698b6e5c122879b39fe46aac5678727cda9d46d15915c0e",
+ "capturedAt": "2025-12-21T13:11:58.753Z",
+ "provider": "google",
+ "name": "reasoningRequestTruncated",
+ "files": [
+ "reasoningRequestTruncated/google/request.json",
+ "reasoningRequestTruncated/google/response.json",
+ "reasoningRequestTruncated/google/response-streaming.json",
+ "reasoningRequestTruncated/google/followup-request.json",
+ "reasoningRequestTruncated/google/followup-response.json",
+ "reasoningRequestTruncated/google/followup-response-streaming.json"
+ ]
+ },
+ "google:toolCallRequest": {
+ "payloadHash": "332b85eeab39b7506561bdcf487798ca986fd5d408676ca1a38b93fdc9e30789",
+ "capturedAt": "2025-12-21T13:11:59.685Z",
+ "provider": "google",
+ "name": "toolCallRequest",
+ "files": [
+ "toolCallRequest/google/request.json",
+ "toolCallRequest/google/response.json",
+ "toolCallRequest/google/response-streaming.json",
+ "toolCallRequest/google/followup-request.json",
+ "toolCallRequest/google/followup-response.json",
+ "toolCallRequest/google/followup-response-streaming.json"
+ ]
+ },
+ "google:simpleRequest": {
+ "payloadHash": "bd6967ffdb0d0caaec53b983bb6e67fc7903db7e828ac1638c5e929d4f6638b8",
+ "capturedAt": "2025-12-21T13:12:03.685Z",
+ "provider": "google",
+ "name": "simpleRequest",
+ "files": [
+ "simpleRequest/google/request.json",
+ "simpleRequest/google/response.json",
+ "simpleRequest/google/response-streaming.json",
+ "simpleRequest/google/followup-request.json",
+ "simpleRequest/google/followup-response.json",
+ "simpleRequest/google/followup-response-streaming.json"
+ ]
+ },
+ "google:reasoningRequest": {
+ "payloadHash": "d4bd82974ab4c44ad23a11d2dbac972d82764e44c2592d7ed987a76c4464921c",
+ "capturedAt": "2025-12-21T13:12:07.868Z",
+ "provider": "google",
+ "name": "reasoningRequest",
+ "files": [
+ "reasoningRequest/google/request.json",
+ "reasoningRequest/google/response.json",
+ "reasoningRequest/google/response-streaming.json",
+ "reasoningRequest/google/followup-request.json",
+ "reasoningRequest/google/followup-response.json",
+ "reasoningRequest/google/followup-response-streaming.json"
+ ]
+ },
+ "google:reasoningWithOutput": {
+ "payloadHash": "2d35c44d48060a52712c3a44dd2dc03bfef1eeb4a5368bcf2a3ea63acc506b8e",
+ "capturedAt": "2025-12-21T13:12:10.524Z",
+ "provider": "google",
+ "name": "reasoningWithOutput",
+ "files": [
+ "reasoningWithOutput/google/request.json",
+ "reasoningWithOutput/google/response.json",
+ "reasoningWithOutput/google/response-streaming.json",
+ "reasoningWithOutput/google/followup-request.json",
+ "reasoningWithOutput/google/followup-response.json",
+ "reasoningWithOutput/google/followup-response-streaming.json"
+ ]
+ },
+ "google:complexReasoningRequest": {
+ "payloadHash": "2a8f4d696314adbf3ecc82dd99e3e8ef9ced24b0a74cbfeb0037f15beaa7283b",
+ "capturedAt": "2025-12-21T13:12:29.238Z",
+ "provider": "google",
+ "name": "complexReasoningRequest",
+ "files": [
+ "complexReasoningRequest/google/request.json",
+ "complexReasoningRequest/google/response.json",
+ "complexReasoningRequest/google/response-streaming.json",
+ "complexReasoningRequest/google/followup-request.json",
+ "complexReasoningRequest/google/followup-response.json",
+ "complexReasoningRequest/google/followup-response-streaming.json"
+ ]
+ },
+ "bedrock:simpleRequest": {
+ "payloadHash": "3ff04195f9acac4b7a24ddce33a540be59dc9d2ac5f1e5736fb4d65f60605527",
+ "capturedAt": "2025-12-21T14:23:26.020Z",
+ "provider": "bedrock",
+ "name": "simpleRequest",
+ "files": [
+ "simpleRequest/bedrock/request.json",
+ "simpleRequest/bedrock/response.json",
+ "simpleRequest/bedrock/response-streaming.json",
+ "simpleRequest/bedrock/followup-request.json",
+ "simpleRequest/bedrock/followup-response.json",
+ "simpleRequest/bedrock/followup-response-streaming.json"
+ ]
+ },
+ "bedrock:multimodalRequest": {
+ "payloadHash": "55860b820fe1517023b3a78ad31c82020cf123ff104d1c601a0638b78dbe4b56",
+ "capturedAt": "2025-12-21T14:23:23.980Z",
+ "provider": "bedrock",
+ "name": "multimodalRequest",
+ "files": [
+ "multimodalRequest/bedrock/request.json",
+ "multimodalRequest/bedrock/error.json"
+ ]
+ },
+ "bedrock:toolCallRequest": {
+ "payloadHash": "7774f7eb8fd789278c1a25a9fd478311f0665b2333870a73c926ace96364c20e",
+ "capturedAt": "2025-12-21T14:23:26.944Z",
+ "provider": "bedrock",
+ "name": "toolCallRequest",
+ "files": [
+ "toolCallRequest/bedrock/request.json",
+ "toolCallRequest/bedrock/response.json",
+ "toolCallRequest/bedrock/response-streaming.json",
+ "toolCallRequest/bedrock/followup-request.json",
+ "toolCallRequest/bedrock/followup-response.json",
+ "toolCallRequest/bedrock/followup-response-streaming.json"
+ ]
+ },
+ "bedrock:reasoningRequestTruncated": {
+ "payloadHash": "0cfea2d6f49296d0843e2c213a074061df06d0b4ed92a1bf1aacb1931d9642ff",
+ "capturedAt": "2025-12-21T14:23:27.001Z",
+ "provider": "bedrock",
+ "name": "reasoningRequestTruncated",
+ "files": [
+ "reasoningRequestTruncated/bedrock/request.json",
+ "reasoningRequestTruncated/bedrock/response.json",
+ "reasoningRequestTruncated/bedrock/response-streaming.json",
+ "reasoningRequestTruncated/bedrock/followup-request.json",
+ "reasoningRequestTruncated/bedrock/followup-response.json",
+ "reasoningRequestTruncated/bedrock/followup-response-streaming.json"
+ ]
+ },
+ "bedrock:reasoningWithOutput": {
+ "payloadHash": "9a19b9ee8103344320e00eceab5e8ba08b097aa3870560394c1bbbeb4b150e01",
+ "capturedAt": "2025-12-21T14:23:27.602Z",
+ "provider": "bedrock",
+ "name": "reasoningWithOutput",
+ "files": [
+ "reasoningWithOutput/bedrock/request.json",
+ "reasoningWithOutput/bedrock/response.json",
+ "reasoningWithOutput/bedrock/response-streaming.json",
+ "reasoningWithOutput/bedrock/followup-request.json",
+ "reasoningWithOutput/bedrock/followup-response.json",
+ "reasoningWithOutput/bedrock/followup-response-streaming.json"
+ ]
+ },
+ "bedrock:reasoningRequest": {
+ "payloadHash": "32cda0209751e516b0c34808c44c983057d716e8aae0a6d952fff1ecedb77e4c",
+ "capturedAt": "2025-12-21T14:23:28.356Z",
+ "provider": "bedrock",
+ "name": "reasoningRequest",
+ "files": [
+ "reasoningRequest/bedrock/request.json",
+ "reasoningRequest/bedrock/response.json",
+ "reasoningRequest/bedrock/response-streaming.json",
+ "reasoningRequest/bedrock/followup-request.json",
+ "reasoningRequest/bedrock/followup-response.json",
+ "reasoningRequest/bedrock/followup-response-streaming.json"
+ ]
+ },
+ "bedrock:complexReasoningRequest": {
+ "payloadHash": "122168042ac457b0669b829af0e0efe5cde845af7d140c1119fbabc175a771c6",
+ "capturedAt": "2025-12-21T14:23:34.371Z",
+ "provider": "bedrock",
+ "name": "complexReasoningRequest",
+ "files": [
+ "complexReasoningRequest/bedrock/request.json",
+ "complexReasoningRequest/bedrock/response.json",
+ "complexReasoningRequest/bedrock/response-streaming.json",
+ "complexReasoningRequest/bedrock/followup-request.json",
+ "complexReasoningRequest/bedrock/followup-response.json",
+ "complexReasoningRequest/bedrock/followup-response-streaming.json"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/complexReasoningRequest/bedrock/followup-request.json b/payloads/snapshots/complexReasoningRequest/bedrock/followup-request.json
new file mode 100644
index 00000000..4e0a13bc
--- /dev/null
+++ b/payloads/snapshots/complexReasoningRequest/bedrock/followup-request.json
@@ -0,0 +1,32 @@
+{
+ "modelId": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
+ "messages": [
+ {
+ "role": "user",
+ "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": "assistant",
+ "content": [
+ {
+ "text": "# Digital Clock Digit Analysis\n\nI need to count how often each digit (0-9) appears in all times from 00:00 to 23:59.\n\n## Setting Up the Problem\n\nThere are **24 Γ 60 = 1,440 different times** in a full day.\n\nEach time has **4 digit positions**: HH:MM (ignoring the colon)\n\nSo there are **5,760 total digits** displayed.\n\n## Counting Each Digit by Position\n\nLet me analyze each of the 4 positions:\n\n### Position 1 (tens of hours): 0-2\n- **0**: appears in 00-09 (10 times/hour) Γ 10 hours = 100 times\n- **1**: appears in 10-19 (10 times/hour) Γ 10 hours = 100 times\n- **2**: appears in 20-23 (4 times/hour) Γ 1 hour = 4 times\n\n### Position 2 (ones of hours): 0-9\n- Each digit **0-9** appears in 6 different hours Γ 60 minutes = **360 times each**\n\n### Position 3 (tens of minutes): 0-5\n- **0**: 0-09 minutes = 10 min/hour Γ 24 hours = 240 times\n- **1**: 10-19 minutes = 10 min/hour Γ 24 hours = 240 times\n- **2**: 20-29 minutes = 10 min/hour Γ 24 hours = 240 times\n- **3**: 30-39 minutes = 10 min/hour Γ 24 hours = 240 times\n- **4**: 40-49 minutes = 10 min/hour Γ 24 hours = 240 times\n- **5**: 50-59 minutes = 10 min/hour Γ 24 hours = 240 times\n\n### Position 4 (ones of minutes): 0-9\n- Each digit **0-9** appears in all 24 hours Γ 6 times/hour = **144 times each**\n\n## Total Counts\n\n| Digit | Count |\n|-------|-------|\n| 0 | 100 + 360 + 240 + 144 = **844** |\n| 1 | 100 + 360 + 240 + 144 = **844** |\n| 2 | 4 + 360 + 240 + 144 = **748** |\n| 3 | 0 + 360 + 240 + 144 = **744** |\n| 4 | 0 + 360 + 240 + 144 = **744** |\n| 5 | 0 + 360 + 240 + 144 = **744** |\n| 6 | 0 + 360 + 0 + 144 = **504** |\n| 7 | 0 + 360 + 0 + 144 = **504** |\n| 8 | 0 + 360 + 0 + 144 = **504** |\n| 9 | 0 + 360 + 0 + 144 = **504** |\n\n## Answer\n\n**Most Common**: **0 and 1** (tied)\n- **844 times each**\n- **14.64%** each\n\n**Rarest**: **6, 7, 8, and 9** (tied)\n- **504 times each**\n- **8.75%** each\n\nThe reason 0 and 1 dominate is because they appear frequently in the hours position (00-19), while 6-9 never appear in the hours position at all!"
+ }
+ ]
+ },
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What should I do next?"
+ }
+ ]
+ }
+ ],
+ "inferenceConfig": {
+ "maxTokens": 20000
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/complexReasoningRequest/bedrock/followup-response-streaming.json b/payloads/snapshots/complexReasoningRequest/bedrock/followup-response-streaming.json
new file mode 100644
index 00000000..c0dce038
--- /dev/null
+++ b/payloads/snapshots/complexReasoningRequest/bedrock/followup-response-streaming.json
@@ -0,0 +1,1157 @@
+[
+ {
+ "messageStart": {
+ "role": "assistant"
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "#"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Suggeste"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d Next Steps\n\nHere"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " are some interesting"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " directions"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " you could explore:\n\n## "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "1. **Verify"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " the"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Math"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "**\n "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "- Double-check my"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " calculations by"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " writing"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " simple"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " program to count"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " all"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " digits"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " in"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " times"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "00:"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "00-"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "23:59\n - This"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " is"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " great"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " coding"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " exercise ("
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "Python"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ", JavaScript, etc"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ".)\n\n## 2. **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "Exten"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d the"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Analysis"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "**\n - **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "12"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "-"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "hour format"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "**: How"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "do results"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " change with"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " AM"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "/PM cl"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "ocks"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "?\n - **With"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " seconds"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "**:"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Analyze"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " H"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "H:MM:SS format ("
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "86"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ","
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "400 times"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " in"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " day)\n - **Other"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " number"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " systems"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "**: What"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " about"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 24"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "-hour days"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " on"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " other planets"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "?\n\n## 3. **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "Visual"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "ize the Data**\n - Create"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a bar"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " chart showing digit frequencies"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n - Make"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a h"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "eatmap showing"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " which positions"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " favor"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " which"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " digits\n -"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Animate"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a clock"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " an"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d track"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " digit"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " appearances"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " in"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " real"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "-time\n\n## 4. **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "Relate"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d Math"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Problems**\n - Fin"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d the"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " most common digit in **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "all"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " numbers"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "0"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "-999"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "**\n -"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Analyze"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " digit"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " frequency"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " in **license"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " plates** (common"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " formats"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ")\n - Study"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "Ben"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "ford's Law** (digit distribution in"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " real"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "-"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "world data)\n\n## 5."
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " **Practical"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Application"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "**\n - Use"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " this"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " for"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "coding interview"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "** practice"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " problem"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n - Create"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a **tri"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "via question"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "** for"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " friends"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n - Build an"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " **interactive tool"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "** where"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " users"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " guess"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " before"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " seeing answers"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n\n## What"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " interests"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " you most?\nWoul"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d you like help"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " with any of"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " these, or di"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d you have something"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " else in mind?"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockStop": {
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "messageStop": {
+ "stopReason": "end_turn"
+ }
+ },
+ {
+ "metadata": {
+ "usage": {
+ "inputTokens": 980,
+ "outputTokens": 338,
+ "totalTokens": 1318
+ },
+ "metrics": {
+ "latencyMs": 4062
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/complexReasoningRequest/bedrock/followup-response.json b/payloads/snapshots/complexReasoningRequest/bedrock/followup-response.json
new file mode 100644
index 00000000..1ac49139
--- /dev/null
+++ b/payloads/snapshots/complexReasoningRequest/bedrock/followup-response.json
@@ -0,0 +1,29 @@
+{
+ "output": {
+ "message": {
+ "role": "assistant",
+ "content": [
+ {
+ "text": "# Great Question! Here are some natural next steps:\n\n## 1. **Verify the Math**\n - Double-check the calculations by writing a simple program (Python, JavaScript, etc.) to count all digits in every time from 00:00 to 23:59\n - This confirms the logic is correct\n\n## 2. **Visualize the Results**\n - Create a bar chart showing the frequency of each digit\n - Make it visually clear why certain digits dominate\n\n## 3. **Explore Variations**\n - **12-hour format (00:00 to 11:59)**: How do the results change?\n - **With seconds (00:00:00 to 23:59:59)**: What's the impact?\n - **Different time formats**: What if you used HH-MM or different separators?\n\n## 4. **Deeper Analysis**\n - Calculate which **pairs of digits** appear most/least together\n - Find the most common **times** (like 11:11)\n - Analyze patterns in **specific positions** separately\n\n## 5. **Real-World Applications**\n - How could this apply to **LED/LCD wear patterns** on actual clocks?\n - Which segments in a 7-segment display wear out most?\n - Use this for **digital display manufacturing** insights\n\n## 6. **Programming Challenge**\n - Write code to solve this for any time format or calendar system\n - Make it a general solution for 12-hour, 24-hour, with/without seconds\n\n**Which interests you most?** Or would you like me to code one of these solutions?"
+ }
+ ]
+ }
+ },
+ "stopReason": "end_turn",
+ "usage": {
+ "inputTokens": 980,
+ "outputTokens": 375,
+ "totalTokens": 1355,
+ "cacheReadInputTokens": 0,
+ "cacheWriteInputTokens": 0
+ },
+ "metrics": {
+ "latencyMs": 4297
+ },
+ "$metadata": {
+ "httpStatusCode": 200,
+ "requestId": "f7c2381d-d77b-4380-bcd3-80fd619f85b8",
+ "attempts": 1,
+ "totalRetryDelay": 0
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/complexReasoningRequest/bedrock/request.json b/payloads/snapshots/complexReasoningRequest/bedrock/request.json
new file mode 100644
index 00000000..8fdceb8a
--- /dev/null
+++ b/payloads/snapshots/complexReasoningRequest/bedrock/request.json
@@ -0,0 +1,16 @@
+{
+ "modelId": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
+ "messages": [
+ {
+ "role": "user",
+ "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?"
+ }
+ ]
+ }
+ ],
+ "inferenceConfig": {
+ "maxTokens": 20000
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/complexReasoningRequest/bedrock/response-streaming.json b/payloads/snapshots/complexReasoningRequest/bedrock/response-streaming.json
new file mode 100644
index 00000000..802e3eec
--- /dev/null
+++ b/payloads/snapshots/complexReasoningRequest/bedrock/response-streaming.json
@@ -0,0 +1,1053 @@
+[
+ {
+ "messageStart": {
+ "role": "assistant"
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "#"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Digital"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Clock"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Digit Analysis\n\nI"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " need to count"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " how many times each digit ("
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "0-9) appears in all times"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " from 00:00 to "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "23:59.\n\n##"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Setup"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- Total"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " times"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " in 24 "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "hours: 24 Γ 60"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " = **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "1,"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "440 times**\n- Total"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " digit"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " positions"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ": 1"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ",440 Γ 4"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " = **5,760 digits"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "**\n\n## Counting"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " by Position"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n\nLet"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " me analyze"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " each position separately:\n\n### Hours ("
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "00"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "-23):\n- **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "Tens"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " place**: 0("
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "0-"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "9):"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "10"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "times,"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 1(10"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "-19):"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "10 times, 2(20"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "-23"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "):4"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " times\n- **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "Ones place**: Each"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " digit 0-9 appears in"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 00"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "-09, 10-19,"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 20-23"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n\n### Minutes (00-59):"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- **Tens place**: Each"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " digit 0-5"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " appears "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "10"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " times each"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- **Ones place**: Each digit"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 0-9 appears 6"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " times each\n\n## Complete"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Count"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Across"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " All "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "1"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ",440 Times\n\n|"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Digit | Count | Percentage |"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n|-------|-------|-----------|"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n| **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "0** | 924"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " | **16"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ".04"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "%** |\n| "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "1 | 552"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " | "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "9.58"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "% |\n| 2 |"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 552"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " | 9.58% |"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n| 3 | 480"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " | 8"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ".33"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "% |\n| 4 |"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 480 | 8.33"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "% |\n| 5 |"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 480 | 8.33"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "% |\n| 6 |"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 360"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " | 6"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ".25"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "% |\n| 7 |"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 360 | 6.25"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "% |\n| 8 |"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 360 | 6.25"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "% |\n| 9 |"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 312"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " | 5.42"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "% |\n\n## Answer"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n\n-"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " **Most common digit:"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 0** at"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "16"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ".04%**"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " (appears"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 924 times)\n- **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "R"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "arest digit: 9** at **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "5.42%** (appears "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "312 times)\n\nThe"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " digit 0"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " domin"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "ates because"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " it appears frequently"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " in the"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " tens"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " place of"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " both"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " hours and minutes, particularly"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " in times"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " like 00:xx"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ","
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 01:xx, 02:"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "xx, an"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d throughout"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " the :"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "0"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "x"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " an"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d :x"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "0"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " minutes"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "."
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockStop": {
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "messageStop": {
+ "stopReason": "end_turn"
+ }
+ },
+ {
+ "metadata": {
+ "usage": {
+ "inputTokens": 80,
+ "outputTokens": 528,
+ "totalTokens": 608
+ },
+ "metrics": {
+ "latencyMs": 3902
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/complexReasoningRequest/bedrock/response.json b/payloads/snapshots/complexReasoningRequest/bedrock/response.json
new file mode 100644
index 00000000..956c3367
--- /dev/null
+++ b/payloads/snapshots/complexReasoningRequest/bedrock/response.json
@@ -0,0 +1,29 @@
+{
+ "output": {
+ "message": {
+ "role": "assistant",
+ "content": [
+ {
+ "text": "# Digital Clock Digit Analysis\n\nI need to count how often each digit (0-9) appears in all times from 00:00 to 23:59.\n\n## Setting Up the Problem\n\nThere are **24 Γ 60 = 1,440 different times** in a full day.\n\nEach time has **4 digit positions**: HH:MM (ignoring the colon)\n\nSo there are **5,760 total digits** displayed.\n\n## Counting Each Digit by Position\n\nLet me analyze each of the 4 positions:\n\n### Position 1 (tens of hours): 0-2\n- **0**: appears in 00-09 (10 times/hour) Γ 10 hours = 100 times\n- **1**: appears in 10-19 (10 times/hour) Γ 10 hours = 100 times\n- **2**: appears in 20-23 (4 times/hour) Γ 1 hour = 4 times\n\n### Position 2 (ones of hours): 0-9\n- Each digit **0-9** appears in 6 different hours Γ 60 minutes = **360 times each**\n\n### Position 3 (tens of minutes): 0-5\n- **0**: 0-09 minutes = 10 min/hour Γ 24 hours = 240 times\n- **1**: 10-19 minutes = 10 min/hour Γ 24 hours = 240 times\n- **2**: 20-29 minutes = 10 min/hour Γ 24 hours = 240 times\n- **3**: 30-39 minutes = 10 min/hour Γ 24 hours = 240 times\n- **4**: 40-49 minutes = 10 min/hour Γ 24 hours = 240 times\n- **5**: 50-59 minutes = 10 min/hour Γ 24 hours = 240 times\n\n### Position 4 (ones of minutes): 0-9\n- Each digit **0-9** appears in all 24 hours Γ 6 times/hour = **144 times each**\n\n## Total Counts\n\n| Digit | Count |\n|-------|-------|\n| 0 | 100 + 360 + 240 + 144 = **844** |\n| 1 | 100 + 360 + 240 + 144 = **844** |\n| 2 | 4 + 360 + 240 + 144 = **748** |\n| 3 | 0 + 360 + 240 + 144 = **744** |\n| 4 | 0 + 360 + 240 + 144 = **744** |\n| 5 | 0 + 360 + 240 + 144 = **744** |\n| 6 | 0 + 360 + 0 + 144 = **504** |\n| 7 | 0 + 360 + 0 + 144 = **504** |\n| 8 | 0 + 360 + 0 + 144 = **504** |\n| 9 | 0 + 360 + 0 + 144 = **504** |\n\n## Answer\n\n**Most Common**: **0 and 1** (tied)\n- **844 times each**\n- **14.64%** each\n\n**Rarest**: **6, 7, 8, and 9** (tied)\n- **504 times each**\n- **8.75%** each\n\nThe reason 0 and 1 dominate is because they appear frequently in the hours position (00-19), while 6-9 never appear in the hours position at all!"
+ }
+ ]
+ }
+ },
+ "stopReason": "end_turn",
+ "usage": {
+ "inputTokens": 80,
+ "outputTokens": 891,
+ "totalTokens": 971,
+ "cacheReadInputTokens": 0,
+ "cacheWriteInputTokens": 0
+ },
+ "metrics": {
+ "latencyMs": 6172
+ },
+ "$metadata": {
+ "httpStatusCode": 200,
+ "requestId": "034156ad-8e86-4f9d-83ff-eb736ce67506",
+ "attempts": 1,
+ "totalRetryDelay": 0
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/complexReasoningRequest/google/followup-request.json b/payloads/snapshots/complexReasoningRequest/google/followup-request.json
new file mode 100644
index 00000000..f69b64b5
--- /dev/null
+++ b/payloads/snapshots/complexReasoningRequest/google/followup-request.json
@@ -0,0 +1,31 @@
+{
+ "contents": [
+ {
+ "role": "user",
+ "parts": [
+ {
+ "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?"
+ }
+ ]
+ },
+ {
+ "parts": [
+ {
+ "text": "Let's break this down step by step:\n\n1. **Total Number of Times:**\n * Hours go from 00 to 23 (24 distinct hours).\n * Minutes go from 00 to 59 (60 distinct minutes).\n * Total number of times displayed = 24 hours * 60 minutes = 1440 times.\n\n2. **Total Number of Digits Displayed:**\n * Each time (e.g., 00:00) consists of 4 digits.\n * Total digits displayed across all times = 1440 times * 4 digits/time = 5760 digits.\n * This will be the denominator for our percentages.\n\n3. **Counting Occurrences for Each Digit (0-9):**\n\n Let's consider each digit position:\n * `H1 H2 : M1 M2`\n\n **A. Occurrences in the Minutes (M1, M2):**\n There are 24 hours in a day. For each hour, the minutes go from 00 to 59.\n\n * **M2 (Minutes Units Place, 0-59):**\n In the range 00-59, each digit (0-9) appears exactly 6 times (e.g., 00, 10, 20, 30, 40, 50 for digit 0; 01, 11, 21, 31, 41, 51 for digit 1, etc.).\n So, for each hour, each digit 0-9 appears 6 times in the M2 position.\n Over 24 hours: 6 occurrences/hour * 24 hours = **144** times for each digit (0-9) in M2.\n\n * **M1 (Minutes Tens Place, 0-59):**\n In the range 00-59:\n * Digit 0 appears 10 times (00-09)\n * Digit 1 appears 10 times (10-19)\n * Digit 2 appears 10 times (20-29)\n * Digit 3 appears 10 times (30-39)\n * Digit 4 appears 10 times (40-49)\n * Digit 5 appears 10 times (50-59)\n * Digits 6, 7, 8, 9 appear 0 times.\n Over 24 hours:\n * Digits 0-5: 10 occurrences/hour * 24 hours = **240** times each.\n * Digits 6-9: **0** times each.\n\n **B. Occurrences in the Hours (H1, H2):**\n There are 60 minutes in an hour. For each minute, the hours go from 00 to 23.\n\n * **H2 (Hours Units Place, 0-23):**\n In the range 00-23:\n * Digits 0, 1, 2, 3 each appear 3 times (e.g., 00, 10, 20 for digit 0; 01, 11, 21 for digit 1; etc. and 03, 13, 23 for digit 3).\n * Digits 4, 5, 6, 7, 8, 9 each appear 2 times (e.g., 04, 14 for digit 4; 09, 19 for digit 9).\n Over 60 minutes:\n * Digits 0, 1, 2, 3: 3 occurrences/minute * 60 minutes = **180** times each.\n * Digits 4, 5, 6, 7, 8, 9: 2 occurrences/minute * 60 minutes = **120** times each.\n\n * **H1 (Hours Tens Place, 0-23):**\n In the range 00-23:\n * Digit 0 appears 10 times (00-09).\n * Digit 1 appears 10 times (10-19).\n * Digit 2 appears 4 times (20-23).\n * Digits 3, 4, 5, 6, 7, 8, 9 appear 0 times.\n Over 60 minutes:\n * Digits 0, 1: 10 occurrences/minute * 60 minutes = **600** times each.\n * Digit 2: 4 occurrences/minute * 60 minutes = **240** times.\n * Digits 3-9: **0** times each.\n\n4. **Total Occurrences for Each Digit:**\n\n * **Digit 0:** (M2) 144 + (M1) 240 + (H2) 180 + (H1) 600 = **1164**\n * **Digit 1:** (M2) 144 + (M1) 240 + (H2) 180 + (H1) 600 = **1164**\n * **Digit 2:** (M2) 144 + (M1) 240 + (H2) 180 + (H1) 240 = **804**\n * **Digit 3:** (M2) 144 + (M1) 240 + (H2) 180 + (H1) 0 = **564**\n * **Digit 4:** (M2) 144 + (M1) 240 + (H2) 120 + (H1) 0 = **504**\n * **Digit 5:** (M2) 144 + (M1) 240 + (H2) 120 + (H1) 0 = **504**\n * **Digit 6:** (M2) 144 + (M1) 0 + (H2) 120 + (H1) 0 = **264**\n * **Digit 7:** (M2) 144 + (M1) 0 + (H2) 120 + (H1) 0 = **264**\n * **Digit 8:** (M2) 144 + (M1) 0 + (H2) 120 + (H1) 0 = **264**\n * **Digit 9:** (M2) 144 + (M1) 0 + (H2) 120 + (H1) 0 = **264**\n\n *Self-check: Sum of all occurrences = 1164 + 1164 + 804 + 564 + 504 + 504 + 264 + 264 + 264 + 264 = 5760. This matches our total digits!*\n\n5. **Most Common and Rarest Digits:**\n\n * **Most Common Digit(s):** Digits **0** and **1** (1164 occurrences each).\n * **Rarest Digit(s):** Digits **6**, **7**, **8**, and **9** (264 occurrences each).\n\n6. **Calculate Percentages:**\n\n * **Percentage for Most Common (Digits 0 and 1):**\n (1164 / 5760) * 100% $\\approx$ **20.21%**\n\n * **Percentage for Rarest (Digits 6, 7, 8, and 9):**\n (264 / 5760) * 100% $\\approx$ **4.58%**\n\n---\n\n**Summary:**\n\n* **Most Common Digit(s):** **0** and **1**\n * Each appears 1164 times.\n * Percentage: **20.21%** each.\n\n* **Rarest Digit(s):** **6**, **7**, **8**, and **9**\n * Each appears 264 times.\n * Percentage: **4.58%** each."
+ }
+ ],
+ "role": "model"
+ },
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What should I do next?"
+ }
+ ]
+ }
+ ],
+ "config": {
+ "maxOutputTokens": 20000
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/complexReasoningRequest/google/followup-response-streaming.json b/payloads/snapshots/complexReasoningRequest/google/followup-response-streaming.json
new file mode 100644
index 00000000..c9bfb99f
--- /dev/null
+++ b/payloads/snapshots/complexReasoningRequest/google/followup-response-streaming.json
@@ -0,0 +1,619 @@
+[
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "That's a great question! Now that you have the detailed solution, here are several things you could do next, depending on your interest:\n\n1. **Verify or Double-Check:**\n * **Write a small"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "NfJHaY3mK8rSjrEPlYyAmQk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 48,
+ "totalTokenCount": 2962,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 833
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:26 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5085",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " program:** If you know a programming language (like Python), you could write a script to iterate through all 1440 times, count the occurrences of each digit, and compare the results with my calculations. This is an excellent way to independently"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "NfJHaY3mK8rSjrEPlYyAmQk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 98,
+ "totalTokenCount": 3012,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 833
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:26 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5085",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " verify the answer and practice your coding skills.\n * **Manually sample:** Pick a smaller range (e.g., just the hours from 00:00 to 01:59) and manually count digits"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "NfJHaY3mK8rSjrEPlYyAmQk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 147,
+ "totalTokenCount": 3061,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 833
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:26 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5085",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " to ensure you understand the logic for each position.\n\n2. **Explore Variations / Generalize the Problem:**\n * **12-hour clock:** How would the results change if it were a 12-hour clock ("
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "NfJHaY3mK8rSjrEPlYyAmQk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 197,
+ "totalTokenCount": 3111,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 833
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:26 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5085",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "01:00 to 12:59, then repeating, perhaps with AM/PM)? Or 00:00 to 11:59? (This would significantly change the hour digits).\n *"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "NfJHaY3mK8rSjrEPlYyAmQk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 246,
+ "totalTokenCount": 3160,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 833
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:26 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5085",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " **Different clock format:** What if the clock displayed seconds too (00:00:00 to 23:59:59)? Which digits would be most/least common then?\n * **"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "NfJHaY3mK8rSjrEPlYyAmQk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 293,
+ "totalTokenCount": 3207,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 833
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:26 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5085",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "Different base system:** (More advanced) What if the clock worked in a base-8 system (octal) or base-16 system (hexadecimal)? How would you even represent time then? (This would be a much harder problem"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "NfJHaY3mK8rSjrEPlYyAmQk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 342,
+ "totalTokenCount": 3256,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 833
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:26 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5085",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": ", involving redefining time units).\n * **Specific digit analysis:** Pick one of the \"rare\" digits (e.g., 9). Can you specifically pinpoint *why* it appears so infrequently by looking at the ranges for"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "NfJHaY3mK8rSjrEPlYyAmQk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 390,
+ "totalTokenCount": 3304,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 833
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:26 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5085",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " H1, H2, M1, M2?\n\n3. **Visualize the Data:**\n * Create a bar chart showing the frequency of each digit (0-9). This can make the differences between the most common"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "NfJHaY3mK8rSjrEPlYyAmQk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 439,
+ "totalTokenCount": 3353,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 833
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:26 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5085",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " and rarest digits very clear visually.\n\n4. **Think about related problems:**\n * **Palindromic times:** How many times in a day are palindromes (e.g., 01:10,"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "NfJHaY3mK8rSjrEPlYyAmQk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 488,
+ "totalTokenCount": 3402,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 833
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:26 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5085",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " 02:20, 12:21)?\n * **Times with repeating digits:** How many times have all four digits the same (e.g., 11:11)? Or two pairs"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "NfJHaY3mK8rSjrEPlYyAmQk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 535,
+ "totalTokenCount": 3449,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 833
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:26 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5085",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " of the same digits (e.g., 22:33)?\n * **Times with sequential digits:** How many times show digits in sequence (e.g., 01:23, 12:34"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "NfJHaY3mK8rSjrEPlYyAmQk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 586,
+ "totalTokenCount": 3500,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 833
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:26 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5085",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": ")?\n\n5. **Move on to a completely different type of puzzle/problem:**\n * If you're tired of clocks, we can explore logic puzzles, probability, geometry, or other mathematical challenges.\n\nWhat sounds"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "NfJHaY3mK8rSjrEPlYyAmQk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 634,
+ "totalTokenCount": 3548,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 833
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:26 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5085",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " most interesting to you? Or do you have another problem in mind?"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "NfJHaY3mK8rSjrEPlYyAmQk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 648,
+ "totalTokenCount": 3562,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 833
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:26 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5085",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/complexReasoningRequest/google/followup-response.json b/payloads/snapshots/complexReasoningRequest/google/followup-response.json
new file mode 100644
index 00000000..c68f1de8
--- /dev/null
+++ b/payloads/snapshots/complexReasoningRequest/google/followup-response.json
@@ -0,0 +1,45 @@
+{
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-encoding": "gzip",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Sun, 21 Dec 2025 13:12:29 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=7745",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ },
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "That's a great question! Since you've successfully solved the original problem, here are a few ideas for what you could do next, ranging from refining your understanding to exploring related challenges:\n\n**1. Review and Consolidate Your Understanding of THIS Problem:**\n\n* **Double-Check Your Work:** Go through the calculations again, perhaps focusing on one specific digit, to ensure you completely agree with every step.\n* **Explain it to Someone Else:** Try to explain the solution process to a friend, family member, or even just articulate it out loud to yourself. This is a fantastic way to solidify your understanding and identify any areas where your logic might be fuzzy.\n* **Visualize the Data:** If you have spreadsheet software, try inputting the digit counts and creating a bar graph. Seeing the distribution visually can often provide new insights.\n\n**2. Explore Variations and Extensions of the Problem:**\n\n* **12-Hour Clock:** What if it's a 12-hour clock (e.g., 1:00 AM to 12:59 PM, then 1:00 PM to 12:59 AM)? How would the frequencies change? (Remember to consider leading zeros for single-digit hours, or lack thereof, which changes the problem slightly. Assume 01:00-12:59, twice).\n* **Add Seconds:** What if the clock displayed 00:00:00 to 23:59:59? How would the frequencies and percentages change?\n* **Different Display Technology:** Imagine a 7-segment display. Instead of counting digit occurrences, which *segment* (top, top-left, top-right, middle, bottom-left, bottom-right, bottom) is lit up the most often across all times? Which is the rarest? (This is a much harder problem!)\n* **Palindromic Times:** How many times in a day are palindromes (e.g., 01:10, 02:20, 12:21, 23:32)?\n* **Sum of Digits:** Which sum of the four digits is the most common? (e.g., for 12:34, the sum is 1+2+3+4=10).\n* **Specific Digit Pairs:** Which two-digit combination (e.g., \"00\", \"11\", \"12\", \"23\") is most common in the hour or minute parts?\n\n**3. General Problem-Solving Skill Development:**\n\n* **Practice Similar Counting Problems:** Look for other combinatorial or counting problems that require careful enumeration of possibilities.\n* **Automate It:** If you have programming skills, write a script (in Python, JavaScript, etc.) to iterate through all times and count the digits. This can confirm your manual calculations and is a great exercise in itself.\n\nWhich of these sounds most interesting to you? Or do you have another idea in mind?"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "PPJHadvsO8n4jrEP-P_FwAk",
+ "usageMetadata": {
+ "promptTokenCount": 2081,
+ "candidatesTokenCount": 647,
+ "totalTokenCount": 3630,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 2081
+ }
+ ],
+ "thoughtsTokenCount": 902
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/complexReasoningRequest/google/request.json b/payloads/snapshots/complexReasoningRequest/google/request.json
new file mode 100644
index 00000000..9d3c6372
--- /dev/null
+++ b/payloads/snapshots/complexReasoningRequest/google/request.json
@@ -0,0 +1,15 @@
+{
+ "contents": [
+ {
+ "role": "user",
+ "parts": [
+ {
+ "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?"
+ }
+ ]
+ }
+ ],
+ "config": {
+ "maxOutputTokens": 20000
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/complexReasoningRequest/google/response-streaming.json b/payloads/snapshots/complexReasoningRequest/google/response-streaming.json
new file mode 100644
index 00000000..a2fa8999
--- /dev/null
+++ b/payloads/snapshots/complexReasoningRequest/google/response-streaming.json
@@ -0,0 +1,1675 @@
+[
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "Let's break down the problem by counting the occurrences of each digit (0-9) across all possible times from 00:00 to 23:59.\n\nFirst, let's determine the total number"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 48,
+ "totalTokenCount": 5060,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " of digits displayed in a full cycle:\n* There are 24 hours (00 to 23).\n* There are 60 minutes (00 to 59).\n* Total number of unique time"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 98,
+ "totalTokenCount": 5110,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " displays = 24 hours * 60 minutes = 1440 times.\n* Each time display has 4 digits (e.g., 12:34 has 1, 2, 3, "
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 148,
+ "totalTokenCount": 5160,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "4).\n* Total number of digits displayed = 1440 times * 4 digits/time = 5760 digits.\n\nNow, let's count the occurrences of each digit for the \"hours\" part ("
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 198,
+ "totalTokenCount": 5210,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "HH) and the \"minutes\" part (MM) separately, and then combine them.\n\n---\n\n**1. Counting Digits in the \"Hours\" part (HH):**\nThis ranges from 00 to 23"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 246,
+ "totalTokenCount": 5258,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": ". For each hour, the digits are shown 60 times (for each minute).\n\n* **Tens digit of hours (H1):**\n * '0' appears 10 times (00, 01"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 296,
+ "totalTokenCount": 5308,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": ", ..., 09).\n * '1' appears 10 times (10, 11, ..., 19).\n * '2' appears 4 times (20, 21,"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 346,
+ "totalTokenCount": 5358,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " 22, 23).\n * Digits '3' through '9' appear 0 times.\n * Total H1 count for each hour over 60 minutes:\n * 0: "
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 393,
+ "totalTokenCount": 5405,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "10 * 60 = 600\n * 1: 10 * 60 = 600\n * 2: 4 * 60 = 240\n "
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 439,
+ "totalTokenCount": 5451,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "* 3-9: 0\n\n* **Units digit of hours (H2):**\n * '0' appears 3 times (00, 10, 20).\n * '"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 488,
+ "totalTokenCount": 5500,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "1' appears 3 times (01, 11, 21).\n * '2' appears 3 times (02, 12, 22).\n * '3'"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 536,
+ "totalTokenCount": 5548,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " appears 3 times (03, 13, 23).\n * '4' through '9' each appear 2 times (e.g., '4' in 04, 14)."
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 585,
+ "totalTokenCount": 5597,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "\n * Total H2 count for each hour over 60 minutes:\n * 0, 1, 2, 3: 3 * 60 = 180 each\n * "
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 630,
+ "totalTokenCount": 5642,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "4, 5, 6, 7, 8, 9: 2 * 60 = 120 each\n\n---\n\n**2. Counting Digits in the \"Minutes\" part (MM):**"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 678,
+ "totalTokenCount": 5690,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "\nThis ranges from 00 to 59. For each minute, the digits are shown 24 times (for each hour).\n\n* **Tens digit of minutes (M1):**\n * '0"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 725,
+ "totalTokenCount": 5737,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "' appears 10 times (00, 01, ..., 09).\n * '1' appears 10 times (10, 11, ..., 19).\n * "
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 772,
+ "totalTokenCount": 5784,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "'2' appears 10 times (20, 21, ..., 29).\n * '3' appears 10 times (30, 31, ..., 39).\n "
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 818,
+ "totalTokenCount": 5830,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "* '4' appears 10 times (40, 41, ..., 49).\n * '5' appears 10 times (50, 51, ..., 59)."
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 866,
+ "totalTokenCount": 5878,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "\n * Digits '6' through '9' appear 0 times.\n * Total M1 count for each minute over 24 hours:\n * 0, 1, 2, 3"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 912,
+ "totalTokenCount": 5924,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": ", 4, 5: 10 * 24 = 240 each\n * 6-9: 0\n\n* **Units digit of minutes (M2):**\n * Each digit '"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 962,
+ "totalTokenCount": 5974,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "0' through '9' appears 6 times (e.g., '0' in 00, 10, 20, 30, 40, 50).\n * Total"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1010,
+ "totalTokenCount": 6022,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " M2 count for each minute over 24 hours:\n * 0, 1, 2, 3, 4, 5, 6, 7, 8, 9: 6 *"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1058,
+ "totalTokenCount": 6070,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " 24 = 144 each\n\n---\n\n**3. Total Occurrences for Each Digit (Summing all positions):**\n\n* **Digit 0:** (H1: 600) + (H"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1105,
+ "totalTokenCount": 6117,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "2: 180) + (M1: 240) + (M2: 144) = **1164**\n* **Digit 1:** (H1: 6"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1153,
+ "totalTokenCount": 6165,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "00) + (H2: 180) + (M1: 240) + (M2: 144) = **1164**\n* **Digit 2:**"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1201,
+ "totalTokenCount": 6213,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " (H1: 240) + (H2: 180) + (M1: 240) + (M2: 144) = **804**\n* "
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1248,
+ "totalTokenCount": 6260,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "**Digit 3:** (H1: 0) + (H2: 180) + (M1: 240) + (M2: 144) = **564**"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1296,
+ "totalTokenCount": 6308,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "\n* **Digit 4:** (H1: 0) + (H2: 120) + (M1: 240) + (M2: 144) = **5"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1343,
+ "totalTokenCount": 6355,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "04**\n* **Digit 5:** (H1: 0) + (H2: 120) + (M1: 240) + (M2: 144)"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1391,
+ "totalTokenCount": 6403,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " = **504**\n* **Digit 6:** (H1: 0) + (H2: 120) + (M1: 0) + (M2: 144"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1439,
+ "totalTokenCount": 6451,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": ") = **264**\n* **Digit 7:** (H1: 0) + (H2: 120) + (M1: 0) + (M2: 14"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1487,
+ "totalTokenCount": 6499,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "4) = **264**\n* **Digit 8:** (H1: 0) + (H2: 120) + (M1: 0) + (M2: 1"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1535,
+ "totalTokenCount": 6547,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "44) = **264**\n* **Digit 9:** (H1: 0) + (H2: 120) + (M1: 0) + (M2: "
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1582,
+ "totalTokenCount": 6594,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "144) = **264**\n\n*Self-check: Sum of all occurrences = 1164*2 + 804 + 564 + 504*2 + 264*"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1633,
+ "totalTokenCount": 6645,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "4 = 2328 + 804 + 564 + 1008 + 1056 = 5760. This matches the total number of digits we calculated earlier.*\n\n---\n\n"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1682,
+ "totalTokenCount": 6694,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "**Most Common Digit(s):**\nDigits **0** and **1** are the most common, each appearing **1164** times.\nPercentage: (1164 / 5760) * "
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1730,
+ "totalTokenCount": 6742,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "100% = **20.21%**\n\n**Rarest Digit(s):**\nDigits **6, 7, 8,** and **9** are the rarest, each appearing **264** times"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1780,
+ "totalTokenCount": 6792,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": ".\nPercentage: (264 / 5760) * 100% = **4.58%**"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZ6oHaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1809,
+ "totalTokenCount": 6821,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 4937
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=17950",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/complexReasoningRequest/google/response.json b/payloads/snapshots/complexReasoningRequest/google/response.json
new file mode 100644
index 00000000..1cbc1e7d
--- /dev/null
+++ b/payloads/snapshots/complexReasoningRequest/google/response.json
@@ -0,0 +1,45 @@
+{
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-encoding": "gzip",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Sun, 21 Dec 2025 13:12:15 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=18450",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ },
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "Let's break this down step by step:\n\n1. **Total Number of Times:**\n * Hours go from 00 to 23 (24 distinct hours).\n * Minutes go from 00 to 59 (60 distinct minutes).\n * Total number of times displayed = 24 hours * 60 minutes = 1440 times.\n\n2. **Total Number of Digits Displayed:**\n * Each time (e.g., 00:00) consists of 4 digits.\n * Total digits displayed across all times = 1440 times * 4 digits/time = 5760 digits.\n * This will be the denominator for our percentages.\n\n3. **Counting Occurrences for Each Digit (0-9):**\n\n Let's consider each digit position:\n * `H1 H2 : M1 M2`\n\n **A. Occurrences in the Minutes (M1, M2):**\n There are 24 hours in a day. For each hour, the minutes go from 00 to 59.\n\n * **M2 (Minutes Units Place, 0-59):**\n In the range 00-59, each digit (0-9) appears exactly 6 times (e.g., 00, 10, 20, 30, 40, 50 for digit 0; 01, 11, 21, 31, 41, 51 for digit 1, etc.).\n So, for each hour, each digit 0-9 appears 6 times in the M2 position.\n Over 24 hours: 6 occurrences/hour * 24 hours = **144** times for each digit (0-9) in M2.\n\n * **M1 (Minutes Tens Place, 0-59):**\n In the range 00-59:\n * Digit 0 appears 10 times (00-09)\n * Digit 1 appears 10 times (10-19)\n * Digit 2 appears 10 times (20-29)\n * Digit 3 appears 10 times (30-39)\n * Digit 4 appears 10 times (40-49)\n * Digit 5 appears 10 times (50-59)\n * Digits 6, 7, 8, 9 appear 0 times.\n Over 24 hours:\n * Digits 0-5: 10 occurrences/hour * 24 hours = **240** times each.\n * Digits 6-9: **0** times each.\n\n **B. Occurrences in the Hours (H1, H2):**\n There are 60 minutes in an hour. For each minute, the hours go from 00 to 23.\n\n * **H2 (Hours Units Place, 0-23):**\n In the range 00-23:\n * Digits 0, 1, 2, 3 each appear 3 times (e.g., 00, 10, 20 for digit 0; 01, 11, 21 for digit 1; etc. and 03, 13, 23 for digit 3).\n * Digits 4, 5, 6, 7, 8, 9 each appear 2 times (e.g., 04, 14 for digit 4; 09, 19 for digit 9).\n Over 60 minutes:\n * Digits 0, 1, 2, 3: 3 occurrences/minute * 60 minutes = **180** times each.\n * Digits 4, 5, 6, 7, 8, 9: 2 occurrences/minute * 60 minutes = **120** times each.\n\n * **H1 (Hours Tens Place, 0-23):**\n In the range 00-23:\n * Digit 0 appears 10 times (00-09).\n * Digit 1 appears 10 times (10-19).\n * Digit 2 appears 4 times (20-23).\n * Digits 3, 4, 5, 6, 7, 8, 9 appear 0 times.\n Over 60 minutes:\n * Digits 0, 1: 10 occurrences/minute * 60 minutes = **600** times each.\n * Digit 2: 4 occurrences/minute * 60 minutes = **240** times.\n * Digits 3-9: **0** times each.\n\n4. **Total Occurrences for Each Digit:**\n\n * **Digit 0:** (M2) 144 + (M1) 240 + (H2) 180 + (H1) 600 = **1164**\n * **Digit 1:** (M2) 144 + (M1) 240 + (H2) 180 + (H1) 600 = **1164**\n * **Digit 2:** (M2) 144 + (M1) 240 + (H2) 180 + (H1) 240 = **804**\n * **Digit 3:** (M2) 144 + (M1) 240 + (H2) 180 + (H1) 0 = **564**\n * **Digit 4:** (M2) 144 + (M1) 240 + (H2) 120 + (H1) 0 = **504**\n * **Digit 5:** (M2) 144 + (M1) 240 + (H2) 120 + (H1) 0 = **504**\n * **Digit 6:** (M2) 144 + (M1) 0 + (H2) 120 + (H1) 0 = **264**\n * **Digit 7:** (M2) 144 + (M1) 0 + (H2) 120 + (H1) 0 = **264**\n * **Digit 8:** (M2) 144 + (M1) 0 + (H2) 120 + (H1) 0 = **264**\n * **Digit 9:** (M2) 144 + (M1) 0 + (H2) 120 + (H1) 0 = **264**\n\n *Self-check: Sum of all occurrences = 1164 + 1164 + 804 + 564 + 504 + 504 + 264 + 264 + 264 + 264 = 5760. This matches our total digits!*\n\n5. **Most Common and Rarest Digits:**\n\n * **Most Common Digit(s):** Digits **0** and **1** (1164 occurrences each).\n * **Rarest Digit(s):** Digits **6**, **7**, **8**, and **9** (264 occurrences each).\n\n6. **Calculate Percentages:**\n\n * **Percentage for Most Common (Digits 0 and 1):**\n (1164 / 5760) * 100% $\\approx$ **20.21%**\n\n * **Percentage for Rarest (Digits 6, 7, 8, and 9):**\n (264 / 5760) * 100% $\\approx$ **4.58%**\n\n---\n\n**Summary:**\n\n* **Most Common Digit(s):** **0** and **1**\n * Each appears 1164 times.\n * Percentage: **20.21%** each.\n\n* **Rarest Digit(s):** **6**, **7**, **8**, and **9**\n * Each appears 264 times.\n * Percentage: **4.58%** each."
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "L_JHaYq4HK_3jrEPyq3x6Ao",
+ "usageMetadata": {
+ "promptTokenCount": 75,
+ "candidatesTokenCount": 1998,
+ "totalTokenCount": 5026,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 75
+ }
+ ],
+ "thoughtsTokenCount": 2953
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/multimodalRequest/bedrock/error.json b/payloads/snapshots/multimodalRequest/bedrock/error.json
new file mode 100644
index 00000000..bc6a73eb
--- /dev/null
+++ b/payloads/snapshots/multimodalRequest/bedrock/error.json
@@ -0,0 +1,3 @@
+{
+ "error": "ValidationException: The model returned the following errors: Could not process image"
+}
\ No newline at end of file
diff --git a/payloads/snapshots/multimodalRequest/bedrock/request.json b/payloads/snapshots/multimodalRequest/bedrock/request.json
new file mode 100644
index 00000000..c989b5c6
--- /dev/null
+++ b/payloads/snapshots/multimodalRequest/bedrock/request.json
@@ -0,0 +1,7036 @@
+{
+ "modelId": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What do you see in this image?"
+ },
+ {
+ "image": {
+ "format": "jpeg",
+ "source": {
+ "bytes": {
+ "type": "Buffer",
+ "data": [
+ 255,
+ 216,
+ 255,
+ 224,
+ 0,
+ 16,
+ 74,
+ 70,
+ 73,
+ 70,
+ 0,
+ 1,
+ 1,
+ 0,
+ 0,
+ 1,
+ 0,
+ 1,
+ 0,
+ 0,
+ 255,
+ 219,
+ 0,
+ 132,
+ 0,
+ 9,
+ 6,
+ 7,
+ 19,
+ 20,
+ 19,
+ 22,
+ 20,
+ 20,
+ 20,
+ 23,
+ 23,
+ 22,
+ 22,
+ 25,
+ 27,
+ 25,
+ 26,
+ 25,
+ 25,
+ 24,
+ 24,
+ 25,
+ 32,
+ 24,
+ 35,
+ 32,
+ 22,
+ 24,
+ 24,
+ 25,
+ 27,
+ 26,
+ 25,
+ 33,
+ 30,
+ 41,
+ 33,
+ 31,
+ 30,
+ 38,
+ 30,
+ 27,
+ 24,
+ 34,
+ 50,
+ 34,
+ 38,
+ 42,
+ 44,
+ 47,
+ 47,
+ 48,
+ 25,
+ 32,
+ 53,
+ 58,
+ 53,
+ 46,
+ 57,
+ 41,
+ 46,
+ 47,
+ 44,
+ 1,
+ 10,
+ 10,
+ 10,
+ 14,
+ 13,
+ 14,
+ 27,
+ 16,
+ 16,
+ 28,
+ 48,
+ 38,
+ 33,
+ 38,
+ 44,
+ 48,
+ 46,
+ 46,
+ 46,
+ 46,
+ 52,
+ 48,
+ 46,
+ 46,
+ 46,
+ 46,
+ 46,
+ 55,
+ 46,
+ 46,
+ 46,
+ 44,
+ 44,
+ 55,
+ 46,
+ 49,
+ 46,
+ 46,
+ 44,
+ 46,
+ 46,
+ 46,
+ 46,
+ 46,
+ 48,
+ 46,
+ 46,
+ 48,
+ 46,
+ 46,
+ 46,
+ 44,
+ 46,
+ 46,
+ 46,
+ 46,
+ 46,
+ 46,
+ 46,
+ 46,
+ 46,
+ 46,
+ 46,
+ 44,
+ 255,
+ 192,
+ 0,
+ 17,
+ 8,
+ 0,
+ 224,
+ 0,
+ 225,
+ 3,
+ 1,
+ 34,
+ 0,
+ 2,
+ 17,
+ 1,
+ 3,
+ 17,
+ 1,
+ 255,
+ 196,
+ 0,
+ 28,
+ 0,
+ 0,
+ 2,
+ 3,
+ 1,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 6,
+ 4,
+ 5,
+ 7,
+ 3,
+ 1,
+ 8,
+ 8,
+ 255,
+ 196,
+ 0,
+ 75,
+ 16,
+ 0,
+ 2,
+ 1,
+ 3,
+ 0,
+ 6,
+ 6,
+ 5,
+ 9,
+ 6,
+ 8,
+ 5,
+ 4,
+ 3,
+ 0,
+ 0,
+ 1,
+ 2,
+ 3,
+ 0,
+ 4,
+ 17,
+ 5,
+ 6,
+ 18,
+ 33,
+ 49,
+ 65,
+ 19,
+ 81,
+ 97,
+ 113,
+ 129,
+ 145,
+ 7,
+ 34,
+ 50,
+ 161,
+ 177,
+ 20,
+ 35,
+ 66,
+ 82,
+ 98,
+ 114,
+ 146,
+ 193,
+ 209,
+ 51,
+ 130,
+ 162,
+ 240,
+ 36,
+ 67,
+ 83,
+ 84,
+ 115,
+ 162,
+ 194,
+ 225,
+ 22,
+ 52,
+ 68,
+ 147,
+ 210,
+ 21,
+ 37,
+ 131,
+ 226,
+ 53,
+ 99,
+ 163,
+ 255,
+ 196,
+ 0,
+ 27,
+ 1,
+ 0,
+ 2,
+ 3,
+ 1,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 3,
+ 1,
+ 2,
+ 4,
+ 5,
+ 6,
+ 7,
+ 255,
+ 196,
+ 0,
+ 49,
+ 17,
+ 0,
+ 2,
+ 2,
+ 1,
+ 3,
+ 2,
+ 2,
+ 9,
+ 4,
+ 3,
+ 1,
+ 1,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 1,
+ 2,
+ 17,
+ 3,
+ 18,
+ 33,
+ 49,
+ 4,
+ 81,
+ 65,
+ 113,
+ 5,
+ 19,
+ 34,
+ 97,
+ 129,
+ 145,
+ 161,
+ 177,
+ 209,
+ 50,
+ 66,
+ 193,
+ 240,
+ 20,
+ 82,
+ 225,
+ 241,
+ 35,
+ 255,
+ 218,
+ 0,
+ 12,
+ 3,
+ 1,
+ 0,
+ 2,
+ 17,
+ 3,
+ 17,
+ 0,
+ 63,
+ 0,
+ 220,
+ 104,
+ 162,
+ 138,
+ 0,
+ 40,
+ 162,
+ 147,
+ 244,
+ 231,
+ 164,
+ 157,
+ 29,
+ 107,
+ 43,
+ 67,
+ 36,
+ 173,
+ 210,
+ 33,
+ 195,
+ 42,
+ 70,
+ 237,
+ 131,
+ 140,
+ 224,
+ 224,
+ 113,
+ 197,
+ 0,
+ 56,
+ 81,
+ 73,
+ 150,
+ 30,
+ 147,
+ 244,
+ 92,
+ 167,
+ 31,
+ 41,
+ 17,
+ 147,
+ 253,
+ 162,
+ 180,
+ 126,
+ 246,
+ 24,
+ 169,
+ 186,
+ 223,
+ 173,
+ 105,
+ 105,
+ 102,
+ 110,
+ 163,
+ 81,
+ 56,
+ 218,
+ 69,
+ 80,
+ 142,
+ 48,
+ 197,
+ 152,
+ 40,
+ 245,
+ 192,
+ 59,
+ 168,
+ 1,
+ 119,
+ 210,
+ 182,
+ 182,
+ 77,
+ 17,
+ 142,
+ 198,
+ 208,
+ 226,
+ 226,
+ 113,
+ 180,
+ 92,
+ 113,
+ 138,
+ 60,
+ 144,
+ 88,
+ 30,
+ 68,
+ 225,
+ 183,
+ 242,
+ 0,
+ 243,
+ 197,
+ 81,
+ 250,
+ 34,
+ 210,
+ 141,
+ 107,
+ 115,
+ 54,
+ 143,
+ 158,
+ 66,
+ 194,
+ 92,
+ 75,
+ 11,
+ 49,
+ 62,
+ 179,
+ 96,
+ 244,
+ 131,
+ 36,
+ 241,
+ 59,
+ 142,
+ 58,
+ 195,
+ 30,
+ 117,
+ 75,
+ 107,
+ 165,
+ 13,
+ 237,
+ 237,
+ 205,
+ 219,
+ 35,
+ 33,
+ 245,
+ 34,
+ 85,
+ 126,
+ 40,
+ 2,
+ 229,
+ 151,
+ 206,
+ 186,
+ 233,
+ 157,
+ 22,
+ 38,
+ 10,
+ 202,
+ 198,
+ 57,
+ 98,
+ 59,
+ 81,
+ 72,
+ 188,
+ 81,
+ 129,
+ 4,
+ 120,
+ 100,
+ 10,
+ 231,
+ 228,
+ 235,
+ 84,
+ 51,
+ 104,
+ 124,
+ 120,
+ 254,
+ 76,
+ 242,
+ 205,
+ 83,
+ 175,
+ 3,
+ 120,
+ 162,
+ 178,
+ 221,
+ 9,
+ 233,
+ 57,
+ 226,
+ 2,
+ 61,
+ 35,
+ 11,
+ 171,
+ 13,
+ 221,
+ 60,
+ 74,
+ 94,
+ 55,
+ 237,
+ 32,
+ 111,
+ 83,
+ 231,
+ 225,
+ 77,
+ 214,
+ 90,
+ 247,
+ 163,
+ 101,
+ 198,
+ 205,
+ 236,
+ 27,
+ 249,
+ 52,
+ 138,
+ 135,
+ 201,
+ 176,
+ 107,
+ 116,
+ 100,
+ 164,
+ 174,
+ 46,
+ 199,
+ 166,
+ 159,
+ 3,
+ 45,
+ 21,
+ 22,
+ 13,
+ 33,
+ 11,
+ 251,
+ 18,
+ 198,
+ 195,
+ 236,
+ 186,
+ 159,
+ 129,
+ 174,
+ 251,
+ 99,
+ 172,
+ 121,
+ 213,
+ 137,
+ 62,
+ 232,
+ 162,
+ 138,
+ 0,
+ 40,
+ 162,
+ 138,
+ 0,
+ 40,
+ 162,
+ 138,
+ 0,
+ 40,
+ 162,
+ 138,
+ 0,
+ 40,
+ 162,
+ 138,
+ 0,
+ 40,
+ 162,
+ 138,
+ 0,
+ 40,
+ 162,
+ 138,
+ 0,
+ 40,
+ 162,
+ 138,
+ 0,
+ 40,
+ 162,
+ 138,
+ 0,
+ 40,
+ 162,
+ 138,
+ 0,
+ 242,
+ 178,
+ 159,
+ 75,
+ 250,
+ 13,
+ 97,
+ 120,
+ 244,
+ 164,
+ 99,
+ 124,
+ 101,
+ 99,
+ 156,
+ 114,
+ 116,
+ 99,
+ 176,
+ 27,
+ 31,
+ 88,
+ 18,
+ 6,
+ 123,
+ 186,
+ 171,
+ 86,
+ 172,
+ 31,
+ 210,
+ 237,
+ 163,
+ 13,
+ 33,
+ 50,
+ 137,
+ 101,
+ 85,
+ 146,
+ 204,
+ 75,
+ 178,
+ 28,
+ 236,
+ 177,
+ 87,
+ 101,
+ 33,
+ 151,
+ 129,
+ 30,
+ 160,
+ 56,
+ 235,
+ 170,
+ 202,
+ 169,
+ 223,
+ 5,
+ 101,
+ 85,
+ 185,
+ 46,
+ 72,
+ 35,
+ 144,
+ 122,
+ 200,
+ 172,
+ 164,
+ 115,
+ 80,
+ 114,
+ 13,
+ 84,
+ 95,
+ 234,
+ 216,
+ 49,
+ 178,
+ 65,
+ 35,
+ 196,
+ 24,
+ 130,
+ 80,
+ 49,
+ 49,
+ 177,
+ 4,
+ 50,
+ 146,
+ 135,
+ 134,
+ 240,
+ 14,
+ 69,
+ 78,
+ 208,
+ 14,
+ 77,
+ 180,
+ 36,
+ 241,
+ 232,
+ 211,
+ 248,
+ 64,
+ 169,
+ 245,
+ 231,
+ 61,
+ 108,
+ 240,
+ 201,
+ 168,
+ 190,
+ 12,
+ 58,
+ 156,
+ 94,
+ 194,
+ 174,
+ 175,
+ 222,
+ 60,
+ 119,
+ 51,
+ 69,
+ 50,
+ 132,
+ 146,
+ 82,
+ 36,
+ 81,
+ 157,
+ 204,
+ 113,
+ 131,
+ 178,
+ 121,
+ 231,
+ 25,
+ 240,
+ 52,
+ 213,
+ 85,
+ 218,
+ 115,
+ 69,
+ 44,
+ 241,
+ 236,
+ 159,
+ 85,
+ 215,
+ 122,
+ 56,
+ 226,
+ 167,
+ 136,
+ 240,
+ 174,
+ 26,
+ 183,
+ 164,
+ 218,
+ 85,
+ 104,
+ 228,
+ 221,
+ 52,
+ 39,
+ 102,
+ 65,
+ 215,
+ 200,
+ 48,
+ 239,
+ 199,
+ 243,
+ 154,
+ 182,
+ 90,
+ 203,
+ 31,
+ 89,
+ 31,
+ 10,
+ 181,
+ 244,
+ 79,
+ 200,
+ 37,
+ 237,
+ 43,
+ 69,
+ 197,
+ 66,
+ 185,
+ 209,
+ 48,
+ 73,
+ 237,
+ 197,
+ 27,
+ 118,
+ 149,
+ 25,
+ 243,
+ 27,
+ 234,
+ 109,
+ 20,
+ 136,
+ 206,
+ 81,
+ 221,
+ 58,
+ 40,
+ 157,
+ 20,
+ 111,
+ 170,
+ 54,
+ 100,
+ 228,
+ 68,
+ 84,
+ 253,
+ 151,
+ 113,
+ 249,
+ 215,
+ 163,
+ 86,
+ 97,
+ 30,
+ 204,
+ 147,
+ 175,
+ 116,
+ 207,
+ 87,
+ 116,
+ 83,
+ 87,
+ 83,
+ 153,
+ 126,
+ 231,
+ 243,
+ 45,
+ 174,
+ 93,
+ 202,
+ 152,
+ 244,
+ 76,
+ 201,
+ 190,
+ 43,
+ 219,
+ 164,
+ 63,
+ 226,
+ 150,
+ 248,
+ 212,
+ 219,
+ 109,
+ 51,
+ 166,
+ 97,
+ 57,
+ 75,
+ 196,
+ 157,
+ 126,
+ 164,
+ 209,
+ 141,
+ 255,
+ 0,
+ 190,
+ 6,
+ 125,
+ 245,
+ 38,
+ 138,
+ 100,
+ 122,
+ 236,
+ 209,
+ 241,
+ 191,
+ 50,
+ 203,
+ 44,
+ 215,
+ 137,
+ 37,
+ 253,
+ 49,
+ 75,
+ 0,
+ 2,
+ 234,
+ 193,
+ 129,
+ 250,
+ 209,
+ 200,
+ 54,
+ 79,
+ 113,
+ 35,
+ 221,
+ 154,
+ 178,
+ 209,
+ 254,
+ 154,
+ 172,
+ 31,
+ 29,
+ 44,
+ 119,
+ 16,
+ 142,
+ 27,
+ 76,
+ 129,
+ 215,
+ 241,
+ 43,
+ 19,
+ 238,
+ 170,
+ 54,
+ 80,
+ 65,
+ 4,
+ 2,
+ 15,
+ 16,
+ 119,
+ 131,
+ 225,
+ 75,
+ 87,
+ 250,
+ 188,
+ 209,
+ 19,
+ 45,
+ 153,
+ 217,
+ 111,
+ 165,
+ 17,
+ 222,
+ 143,
+ 217,
+ 131,
+ 187,
+ 61,
+ 159,
+ 10,
+ 219,
+ 135,
+ 210,
+ 10,
+ 91,
+ 77,
+ 83,
+ 250,
+ 127,
+ 193,
+ 209,
+ 207,
+ 124,
+ 155,
+ 190,
+ 132,
+ 214,
+ 43,
+ 91,
+ 161,
+ 155,
+ 121,
+ 163,
+ 147,
+ 153,
+ 10,
+ 195,
+ 35,
+ 189,
+ 120,
+ 138,
+ 182,
+ 175,
+ 205,
+ 154,
+ 58,
+ 222,
+ 218,
+ 239,
+ 215,
+ 69,
+ 107,
+ 123,
+ 136,
+ 206,
+ 243,
+ 25,
+ 216,
+ 100,
+ 110,
+ 25,
+ 29,
+ 99,
+ 32,
+ 246,
+ 138,
+ 113,
+ 208,
+ 30,
+ 144,
+ 174,
+ 108,
+ 157,
+ 98,
+ 210,
+ 63,
+ 59,
+ 1,
+ 220,
+ 183,
+ 42,
+ 61,
+ 101,
+ 236,
+ 149,
+ 71,
+ 30,
+ 252,
+ 103,
+ 191,
+ 150,
+ 184,
+ 117,
+ 17,
+ 148,
+ 180,
+ 189,
+ 159,
+ 103,
+ 252,
+ 119,
+ 27,
+ 28,
+ 137,
+ 186,
+ 124,
+ 155,
+ 29,
+ 21,
+ 198,
+ 9,
+ 213,
+ 212,
+ 58,
+ 48,
+ 101,
+ 96,
+ 8,
+ 32,
+ 228,
+ 16,
+ 120,
+ 16,
+ 107,
+ 181,
+ 60,
+ 96,
+ 81,
+ 69,
+ 20,
+ 0,
+ 81,
+ 69,
+ 20,
+ 0,
+ 81,
+ 69,
+ 20,
+ 0,
+ 81,
+ 69,
+ 20,
+ 0,
+ 81,
+ 69,
+ 20,
+ 0,
+ 81,
+ 69,
+ 20,
+ 1,
+ 229,
+ 96,
+ 190,
+ 152,
+ 238,
+ 193,
+ 190,
+ 184,
+ 96,
+ 127,
+ 99,
+ 103,
+ 28,
+ 63,
+ 189,
+ 36,
+ 172,
+ 126,
+ 13,
+ 238,
+ 173,
+ 214,
+ 121,
+ 149,
+ 21,
+ 157,
+ 142,
+ 21,
+ 65,
+ 98,
+ 79,
+ 32,
+ 6,
+ 73,
+ 175,
+ 204,
+ 215,
+ 183,
+ 77,
+ 119,
+ 58,
+ 187,
+ 12,
+ 53,
+ 237,
+ 193,
+ 155,
+ 7,
+ 232,
+ 197,
+ 30,
+ 228,
+ 7,
+ 192,
+ 31,
+ 42,
+ 94,
+ 73,
+ 37,
+ 29,
+ 255,
+ 0,
+ 190,
+ 37,
+ 38,
+ 233,
+ 13,
+ 218,
+ 46,
+ 29,
+ 152,
+ 99,
+ 95,
+ 171,
+ 26,
+ 15,
+ 37,
+ 25,
+ 169,
+ 52,
+ 81,
+ 94,
+ 102,
+ 78,
+ 229,
+ 103,
+ 60,
+ 41,
+ 103,
+ 88,
+ 179,
+ 4,
+ 241,
+ 93,
+ 47,
+ 178,
+ 199,
+ 162,
+ 151,
+ 180,
+ 30,
+ 4,
+ 247,
+ 111,
+ 242,
+ 20,
+ 205,
+ 85,
+ 186,
+ 201,
+ 105,
+ 210,
+ 91,
+ 74,
+ 152,
+ 201,
+ 217,
+ 44,
+ 59,
+ 215,
+ 214,
+ 31,
+ 10,
+ 103,
+ 79,
+ 37,
+ 28,
+ 138,
+ 248,
+ 123,
+ 63,
+ 38,
+ 90,
+ 14,
+ 153,
+ 101,
+ 154,
+ 42,
+ 167,
+ 85,
+ 47,
+ 122,
+ 91,
+ 104,
+ 152,
+ 156,
+ 144,
+ 54,
+ 15,
+ 122,
+ 156,
+ 103,
+ 196,
+ 96,
+ 248,
+ 213,
+ 181,
+ 83,
+ 36,
+ 28,
+ 36,
+ 226,
+ 252,
+ 25,
+ 13,
+ 83,
+ 160,
+ 162,
+ 138,
+ 42,
+ 132,
+ 5,
+ 20,
+ 181,
+ 119,
+ 173,
+ 71,
+ 165,
+ 104,
+ 160,
+ 129,
+ 231,
+ 41,
+ 237,
+ 21,
+ 201,
+ 29,
+ 184,
+ 192,
+ 59,
+ 187,
+ 107,
+ 219,
+ 93,
+ 114,
+ 135,
+ 107,
+ 98,
+ 84,
+ 146,
+ 22,
+ 251,
+ 99,
+ 119,
+ 234,
+ 60,
+ 69,
+ 105,
+ 255,
+ 0,
+ 15,
+ 54,
+ 157,
+ 90,
+ 75,
+ 250,
+ 185,
+ 118,
+ 25,
+ 40,
+ 174,
+ 112,
+ 76,
+ 174,
+ 161,
+ 145,
+ 131,
+ 41,
+ 224,
+ 65,
+ 200,
+ 174,
+ 149,
+ 159,
+ 130,
+ 130,
+ 190,
+ 180,
+ 216,
+ 180,
+ 76,
+ 183,
+ 144,
+ 238,
+ 120,
+ 207,
+ 206,
+ 1,
+ 244,
+ 215,
+ 118,
+ 243,
+ 240,
+ 61,
+ 157,
+ 213,
+ 121,
+ 11,
+ 199,
+ 113,
+ 8,
+ 108,
+ 6,
+ 142,
+ 69,
+ 224,
+ 125,
+ 227,
+ 188,
+ 31,
+ 133,
+ 73,
+ 154,
+ 16,
+ 234,
+ 200,
+ 70,
+ 67,
+ 2,
+ 164,
+ 118,
+ 17,
+ 131,
+ 75,
+ 58,
+ 151,
+ 116,
+ 18,
+ 41,
+ 98,
+ 119,
+ 3,
+ 162,
+ 149,
+ 148,
+ 109,
+ 16,
+ 55,
+ 29,
+ 252,
+ 251,
+ 115,
+ 90,
+ 238,
+ 89,
+ 49,
+ 95,
+ 140,
+ 90,
+ 249,
+ 63,
+ 192,
+ 206,
+ 99,
+ 228,
+ 52,
+ 250,
+ 48,
+ 211,
+ 143,
+ 101,
+ 119,
+ 255,
+ 0,
+ 166,
+ 202,
+ 197,
+ 161,
+ 151,
+ 45,
+ 110,
+ 204,
+ 125,
+ 147,
+ 188,
+ 236,
+ 119,
+ 28,
+ 29,
+ 223,
+ 91,
+ 239,
+ 86,
+ 207,
+ 95,
+ 155,
+ 53,
+ 167,
+ 72,
+ 196,
+ 36,
+ 182,
+ 154,
+ 57,
+ 16,
+ 188,
+ 83,
+ 41,
+ 245,
+ 88,
+ 28,
+ 12,
+ 130,
+ 115,
+ 142,
+ 91,
+ 171,
+ 112,
+ 77,
+ 121,
+ 209,
+ 167,
+ 31,
+ 211,
+ 32,
+ 207,
+ 248,
+ 130,
+ 187,
+ 93,
+ 60,
+ 229,
+ 60,
+ 105,
+ 203,
+ 147,
+ 94,
+ 57,
+ 55,
+ 29,
+ 198,
+ 74,
+ 42,
+ 154,
+ 223,
+ 90,
+ 172,
+ 159,
+ 217,
+ 186,
+ 128,
+ 255,
+ 0,
+ 242,
+ 167,
+ 235,
+ 95,
+ 58,
+ 111,
+ 90,
+ 109,
+ 45,
+ 162,
+ 233,
+ 102,
+ 157,
+ 2,
+ 242,
+ 193,
+ 12,
+ 91,
+ 177,
+ 84,
+ 111,
+ 39,
+ 186,
+ 156,
+ 48,
+ 186,
+ 160,
+ 154,
+ 201,
+ 239,
+ 189,
+ 34,
+ 223,
+ 92,
+ 130,
+ 44,
+ 45,
+ 122,
+ 52,
+ 60,
+ 38,
+ 184,
+ 221,
+ 158,
+ 213,
+ 65,
+ 254,
+ 245,
+ 71,
+ 62,
+ 128,
+ 189,
+ 184,
+ 223,
+ 121,
+ 164,
+ 102,
+ 127,
+ 177,
+ 23,
+ 168,
+ 189,
+ 219,
+ 176,
+ 63,
+ 202,
+ 42,
+ 116,
+ 138,
+ 150,
+ 104,
+ 71,
+ 150,
+ 110,
+ 11,
+ 50,
+ 147,
+ 128,
+ 195,
+ 61,
+ 89,
+ 21,
+ 214,
+ 176,
+ 57,
+ 189,
+ 31,
+ 64,
+ 1,
+ 104,
+ 36,
+ 150,
+ 57,
+ 134,
+ 245,
+ 147,
+ 108,
+ 241,
+ 237,
+ 236,
+ 238,
+ 167,
+ 223,
+ 68,
+ 250,
+ 215,
+ 37,
+ 212,
+ 79,
+ 111,
+ 112,
+ 79,
+ 202,
+ 109,
+ 78,
+ 196,
+ 132,
+ 241,
+ 113,
+ 146,
+ 21,
+ 187,
+ 79,
+ 170,
+ 65,
+ 240,
+ 60,
+ 232,
+ 106,
+ 131,
+ 30,
+ 88,
+ 207,
+ 129,
+ 254,
+ 138,
+ 40,
+ 168,
+ 26,
+ 20,
+ 81,
+ 69,
+ 0,
+ 20,
+ 81,
+ 92,
+ 46,
+ 174,
+ 18,
+ 52,
+ 105,
+ 29,
+ 130,
+ 162,
+ 41,
+ 102,
+ 99,
+ 184,
+ 40,
+ 3,
+ 36,
+ 147,
+ 212,
+ 0,
+ 160,
+ 4,
+ 15,
+ 76,
+ 186,
+ 105,
+ 150,
+ 221,
+ 44,
+ 162,
+ 35,
+ 165,
+ 187,
+ 109,
+ 131,
+ 246,
+ 99,
+ 27,
+ 228,
+ 111,
+ 128,
+ 238,
+ 38,
+ 179,
+ 77,
+ 89,
+ 137,
+ 100,
+ 158,
+ 73,
+ 151,
+ 246,
+ 113,
+ 1,
+ 4,
+ 93,
+ 202,
+ 55,
+ 159,
+ 31,
+ 245,
+ 87,
+ 13,
+ 98,
+ 211,
+ 239,
+ 113,
+ 37,
+ 198,
+ 145,
+ 57,
+ 249,
+ 211,
+ 242,
+ 123,
+ 101,
+ 250,
+ 171,
+ 192,
+ 176,
+ 29,
+ 123,
+ 137,
+ 239,
+ 99,
+ 76,
+ 26,
+ 10,
+ 192,
+ 67,
+ 12,
+ 113,
+ 115,
+ 3,
+ 45,
+ 222,
+ 119,
+ 183,
+ 243,
+ 217,
+ 92,
+ 238,
+ 187,
+ 45,
+ 69,
+ 165,
+ 229,
+ 249,
+ 51,
+ 102,
+ 145,
+ 97,
+ 69,
+ 20,
+ 87,
+ 20,
+ 202,
+ 20,
+ 81,
+ 69,
+ 0,
+ 44,
+ 234,
+ 119,
+ 205,
+ 203,
+ 115,
+ 110,
+ 126,
+ 131,
+ 237,
+ 47,
+ 118,
+ 113,
+ 240,
+ 217,
+ 243,
+ 166,
+ 170,
+ 82,
+ 191,
+ 61,
+ 6,
+ 147,
+ 142,
+ 78,
+ 11,
+ 58,
+ 236,
+ 158,
+ 252,
+ 5,
+ 248,
+ 132,
+ 166,
+ 218,
+ 213,
+ 213,
+ 111,
+ 37,
+ 62,
+ 233,
+ 63,
+ 143,
+ 12,
+ 188,
+ 249,
+ 190,
+ 225,
+ 84,
+ 218,
+ 219,
+ 164,
+ 186,
+ 27,
+ 118,
+ 96,
+ 112,
+ 207,
+ 234,
+ 47,
+ 102,
+ 65,
+ 36,
+ 248,
+ 0,
+ 125,
+ 213,
+ 115,
+ 74,
+ 90,
+ 125,
+ 122,
+ 123,
+ 232,
+ 109,
+ 248,
+ 170,
+ 122,
+ 238,
+ 63,
+ 205,
+ 240,
+ 0,
+ 126,
+ 245,
+ 29,
+ 30,
+ 47,
+ 89,
+ 153,
+ 39,
+ 199,
+ 36,
+ 65,
+ 111,
+ 184,
+ 215,
+ 169,
+ 58,
+ 32,
+ 91,
+ 219,
+ 32,
+ 199,
+ 175,
+ 32,
+ 14,
+ 231,
+ 180,
+ 141,
+ 195,
+ 184,
+ 12,
+ 15,
+ 58,
+ 182,
+ 190,
+ 177,
+ 138,
+ 101,
+ 217,
+ 149,
+ 21,
+ 199,
+ 83,
+ 12,
+ 249,
+ 117,
+ 87,
+ 88,
+ 189,
+ 145,
+ 221,
+ 95,
+ 85,
+ 233,
+ 196,
+ 185,
+ 54,
+ 236,
+ 74,
+ 188,
+ 212,
+ 199,
+ 129,
+ 140,
+ 182,
+ 18,
+ 21,
+ 110,
+ 38,
+ 23,
+ 57,
+ 86,
+ 236,
+ 4,
+ 254,
+ 126,
+ 98,
+ 171,
+ 45,
+ 52,
+ 150,
+ 144,
+ 185,
+ 149,
+ 160,
+ 141,
+ 98,
+ 133,
+ 208,
+ 122,
+ 225,
+ 201,
+ 218,
+ 29,
+ 100,
+ 3,
+ 156,
+ 248,
+ 15,
+ 26,
+ 210,
+ 42,
+ 45,
+ 198,
+ 142,
+ 137,
+ 228,
+ 73,
+ 89,
+ 1,
+ 146,
+ 63,
+ 101,
+ 248,
+ 48,
+ 229,
+ 140,
+ 142,
+ 35,
+ 121,
+ 220,
+ 119,
+ 82,
+ 103,
+ 211,
+ 227,
+ 156,
+ 181,
+ 74,
+ 41,
+ 177,
+ 139,
+ 55,
+ 251,
+ 110,
+ 42,
+ 174,
+ 164,
+ 203,
+ 39,
+ 237,
+ 239,
+ 100,
+ 110,
+ 200,
+ 253,
+ 81,
+ 239,
+ 253,
+ 42,
+ 84,
+ 62,
+ 143,
+ 108,
+ 71,
+ 180,
+ 178,
+ 57,
+ 235,
+ 105,
+ 15,
+ 193,
+ 113,
+ 77,
+ 84,
+ 85,
+ 227,
+ 21,
+ 29,
+ 146,
+ 162,
+ 143,
+ 44,
+ 251,
+ 148,
+ 113,
+ 234,
+ 125,
+ 136,
+ 255,
+ 0,
+ 167,
+ 79,
+ 29,
+ 163,
+ 241,
+ 53,
+ 211,
+ 254,
+ 20,
+ 178,
+ 254,
+ 237,
+ 31,
+ 225,
+ 171,
+ 138,
+ 42,
+ 225,
+ 235,
+ 37,
+ 220,
+ 162,
+ 147,
+ 83,
+ 108,
+ 91,
+ 141,
+ 186,
+ 14,
+ 237,
+ 161,
+ 240,
+ 53,
+ 6,
+ 111,
+ 71,
+ 150,
+ 71,
+ 122,
+ 137,
+ 35,
+ 61,
+ 107,
+ 33,
+ 56,
+ 252,
+ 64,
+ 211,
+ 37,
+ 245,
+ 236,
+ 112,
+ 161,
+ 121,
+ 93,
+ 81,
+ 71,
+ 54,
+ 56,
+ 240,
+ 29,
+ 103,
+ 176,
+ 82,
+ 102,
+ 145,
+ 215,
+ 151,
+ 114,
+ 86,
+ 214,
+ 63,
+ 87,
+ 251,
+ 73,
+ 55,
+ 126,
+ 20,
+ 253,
+ 124,
+ 170,
+ 11,
+ 41,
+ 78,
+ 174,
+ 246,
+ 46,
+ 237,
+ 116,
+ 5,
+ 196,
+ 103,
+ 230,
+ 239,
+ 164,
+ 96,
+ 62,
+ 140,
+ 168,
+ 178,
+ 123,
+ 247,
+ 26,
+ 188,
+ 128,
+ 48,
+ 81,
+ 182,
+ 65,
+ 110,
+ 101,
+ 65,
+ 0,
+ 247,
+ 2,
+ 73,
+ 30,
+ 117,
+ 145,
+ 105,
+ 43,
+ 155,
+ 134,
+ 86,
+ 121,
+ 46,
+ 101,
+ 36,
+ 2,
+ 112,
+ 172,
+ 81,
+ 71,
+ 96,
+ 81,
+ 186,
+ 181,
+ 29,
+ 0,
+ 28,
+ 91,
+ 67,
+ 182,
+ 73,
+ 110,
+ 141,
+ 54,
+ 137,
+ 57,
+ 36,
+ 236,
+ 142,
+ 39,
+ 174,
+ 166,
+ 168,
+ 137,
+ 84,
+ 149,
+ 167,
+ 127,
+ 2,
+ 125,
+ 47,
+ 195,
+ 115,
+ 242,
+ 61,
+ 49,
+ 109,
+ 48,
+ 221,
+ 29,
+ 223,
+ 204,
+ 73,
+ 247,
+ 137,
+ 10,
+ 132,
+ 248,
+ 148,
+ 242,
+ 52,
+ 193,
+ 73,
+ 58,
+ 245,
+ 122,
+ 174,
+ 178,
+ 32,
+ 202,
+ 203,
+ 108,
+ 99,
+ 148,
+ 3,
+ 187,
+ 104,
+ 100,
+ 29,
+ 164,
+ 61,
+ 92,
+ 65,
+ 234,
+ 197,
+ 67,
+ 45,
+ 129,
+ 181,
+ 52,
+ 126,
+ 131,
+ 162,
+ 162,
+ 104,
+ 187,
+ 161,
+ 44,
+ 49,
+ 200,
+ 55,
+ 137,
+ 17,
+ 91,
+ 205,
+ 65,
+ 169,
+ 116,
+ 179,
+ 166,
+ 20,
+ 81,
+ 69,
+ 0,
+ 121,
+ 89,
+ 87,
+ 166,
+ 45,
+ 56,
+ 242,
+ 52,
+ 122,
+ 50,
+ 6,
+ 195,
+ 77,
+ 235,
+ 78,
+ 195,
+ 232,
+ 70,
+ 8,
+ 192,
+ 241,
+ 222,
+ 124,
+ 0,
+ 231,
+ 187,
+ 70,
+ 211,
+ 58,
+ 73,
+ 45,
+ 224,
+ 150,
+ 121,
+ 14,
+ 18,
+ 37,
+ 46,
+ 124,
+ 7,
+ 1,
+ 218,
+ 78,
+ 239,
+ 26,
+ 193,
+ 180,
+ 20,
+ 141,
+ 39,
+ 202,
+ 52,
+ 132,
+ 255,
+ 0,
+ 180,
+ 156,
+ 180,
+ 155,
+ 254,
+ 138,
+ 12,
+ 144,
+ 7,
+ 102,
+ 6,
+ 59,
+ 148,
+ 82,
+ 51,
+ 229,
+ 245,
+ 112,
+ 109,
+ 115,
+ 194,
+ 243,
+ 23,
+ 146,
+ 90,
+ 81,
+ 9,
+ 32,
+ 89,
+ 111,
+ 146,
+ 21,
+ 31,
+ 53,
+ 104,
+ 128,
+ 227,
+ 150,
+ 214,
+ 236,
+ 123,
+ 200,
+ 252,
+ 38,
+ 155,
+ 169,
+ 99,
+ 81,
+ 35,
+ 45,
+ 20,
+ 147,
+ 183,
+ 181,
+ 52,
+ 140,
+ 124,
+ 1,
+ 253,
+ 73,
+ 166,
+ 122,
+ 225,
+ 245,
+ 114,
+ 185,
+ 233,
+ 237,
+ 183,
+ 199,
+ 196,
+ 199,
+ 147,
+ 154,
+ 236,
+ 20,
+ 81,
+ 69,
+ 102,
+ 40,
+ 20,
+ 81,
+ 69,
+ 0,
+ 44,
+ 235,
+ 245,
+ 153,
+ 104,
+ 22,
+ 69,
+ 246,
+ 162,
+ 96,
+ 217,
+ 236,
+ 59,
+ 137,
+ 240,
+ 59,
+ 39,
+ 194,
+ 174,
+ 244,
+ 77,
+ 240,
+ 154,
+ 20,
+ 148,
+ 125,
+ 33,
+ 191,
+ 176,
+ 240,
+ 97,
+ 231,
+ 154,
+ 239,
+ 60,
+ 42,
+ 234,
+ 200,
+ 195,
+ 42,
+ 192,
+ 131,
+ 220,
+ 119,
+ 82,
+ 126,
+ 171,
+ 92,
+ 53,
+ 180,
+ 239,
+ 105,
+ 41,
+ 220,
+ 205,
+ 148,
+ 60,
+ 137,
+ 198,
+ 239,
+ 6,
+ 3,
+ 204,
+ 26,
+ 217,
+ 21,
+ 235,
+ 112,
+ 184,
+ 248,
+ 199,
+ 127,
+ 131,
+ 231,
+ 228,
+ 49,
+ 123,
+ 81,
+ 174,
+ 195,
+ 165,
+ 42,
+ 234,
+ 178,
+ 116,
+ 183,
+ 151,
+ 87,
+ 28,
+ 129,
+ 232,
+ 215,
+ 204,
+ 3,
+ 238,
+ 69,
+ 243,
+ 166,
+ 45,
+ 35,
+ 113,
+ 209,
+ 197,
+ 35,
+ 253,
+ 68,
+ 102,
+ 242,
+ 82,
+ 69,
+ 84,
+ 106,
+ 13,
+ 190,
+ 205,
+ 162,
+ 177,
+ 227,
+ 35,
+ 51,
+ 30,
+ 221,
+ 251,
+ 35,
+ 225,
+ 90,
+ 253,
+ 21,
+ 13,
+ 229,
+ 47,
+ 129,
+ 85,
+ 180,
+ 91,
+ 248,
+ 15,
+ 17,
+ 123,
+ 35,
+ 184,
+ 87,
+ 213,
+ 124,
+ 64,
+ 125,
+ 81,
+ 221,
+ 95,
+ 117,
+ 218,
+ 51,
+ 133,
+ 20,
+ 81,
+ 65,
+ 1,
+ 69,
+ 21,
+ 237,
+ 0,
+ 121,
+ 85,
+ 218,
+ 193,
+ 165,
+ 5,
+ 180,
+ 15,
+ 41,
+ 93,
+ 173,
+ 156,
+ 0,
+ 58,
+ 201,
+ 56,
+ 92,
+ 158,
+ 67,
+ 53,
+ 101,
+ 81,
+ 46,
+ 99,
+ 134,
+ 117,
+ 146,
+ 22,
+ 42,
+ 224,
+ 141,
+ 151,
+ 80,
+ 119,
+ 140,
+ 245,
+ 227,
+ 120,
+ 61,
+ 93,
+ 212,
+ 22,
+ 141,
+ 94,
+ 230,
+ 89,
+ 60,
+ 146,
+ 92,
+ 55,
+ 75,
+ 112,
+ 219,
+ 108,
+ 119,
+ 170,
+ 253,
+ 20,
+ 28,
+ 130,
+ 175,
+ 10,
+ 233,
+ 83,
+ 116,
+ 182,
+ 174,
+ 79,
+ 107,
+ 146,
+ 128,
+ 203,
+ 7,
+ 34,
+ 55,
+ 186,
+ 118,
+ 50,
+ 243,
+ 29,
+ 162,
+ 169,
+ 219,
+ 72,
+ 199,
+ 179,
+ 180,
+ 24,
+ 30,
+ 206,
+ 125,
+ 216,
+ 171,
+ 38,
+ 133,
+ 230,
+ 134,
+ 73,
+ 75,
+ 186,
+ 240,
+ 162,
+ 85,
+ 181,
+ 161,
+ 184,
+ 158,
+ 43,
+ 113,
+ 193,
+ 152,
+ 52,
+ 157,
+ 136,
+ 167,
+ 39,
+ 207,
+ 135,
+ 136,
+ 173,
+ 104,
+ 14,
+ 174,
+ 20,
+ 171,
+ 168,
+ 122,
+ 21,
+ 162,
+ 70,
+ 158,
+ 65,
+ 137,
+ 38,
+ 193,
+ 193,
+ 250,
+ 41,
+ 197,
+ 87,
+ 176,
+ 158,
+ 39,
+ 194,
+ 154,
+ 170,
+ 173,
+ 216,
+ 214,
+ 148,
+ 82,
+ 138,
+ 240,
+ 251,
+ 133,
+ 41,
+ 250,
+ 65,
+ 208,
+ 102,
+ 104,
+ 76,
+ 209,
+ 231,
+ 165,
+ 137,
+ 91,
+ 56,
+ 250,
+ 104,
+ 71,
+ 174,
+ 189,
+ 184,
+ 226,
+ 60,
+ 105,
+ 182,
+ 138,
+ 8,
+ 140,
+ 156,
+ 93,
+ 162,
+ 255,
+ 0,
+ 209,
+ 101,
+ 224,
+ 151,
+ 69,
+ 218,
+ 48,
+ 57,
+ 217,
+ 136,
+ 33,
+ 236,
+ 40,
+ 74,
+ 16,
+ 124,
+ 169,
+ 182,
+ 177,
+ 237,
+ 66,
+ 189,
+ 54,
+ 26,
+ 69,
+ 236,
+ 219,
+ 117,
+ 189,
+ 222,
+ 100,
+ 135,
+ 236,
+ 200,
+ 61,
+ 164,
+ 29,
+ 251,
+ 252,
+ 151,
+ 182,
+ 182,
+ 10,
+ 91,
+ 58,
+ 209,
+ 146,
+ 146,
+ 180,
+ 123,
+ 69,
+ 20,
+ 84,
+ 22,
+ 50,
+ 143,
+ 78,
+ 154,
+ 84,
+ 178,
+ 65,
+ 96,
+ 135,
+ 214,
+ 184,
+ 112,
+ 239,
+ 143,
+ 168,
+ 135,
+ 35,
+ 252,
+ 195,
+ 63,
+ 185,
+ 74,
+ 186,
+ 196,
+ 68,
+ 118,
+ 50,
+ 42,
+ 238,
+ 2,
+ 48,
+ 128,
+ 117,
+ 3,
+ 133,
+ 248,
+ 87,
+ 214,
+ 182,
+ 221,
+ 116,
+ 250,
+ 106,
+ 225,
+ 248,
+ 139,
+ 116,
+ 88,
+ 151,
+ 179,
+ 113,
+ 206,
+ 60,
+ 89,
+ 252,
+ 234,
+ 54,
+ 186,
+ 31,
+ 232,
+ 79,
+ 251,
+ 159,
+ 196,
+ 43,
+ 153,
+ 213,
+ 203,
+ 86,
+ 120,
+ 67,
+ 179,
+ 95,
+ 83,
+ 46,
+ 87,
+ 115,
+ 72,
+ 155,
+ 171,
+ 16,
+ 108,
+ 90,
+ 194,
+ 191,
+ 96,
+ 49,
+ 239,
+ 98,
+ 88,
+ 252,
+ 106,
+ 206,
+ 162,
+ 232,
+ 175,
+ 216,
+ 69,
+ 254,
+ 26,
+ 127,
+ 8,
+ 169,
+ 85,
+ 201,
+ 202,
+ 238,
+ 114,
+ 126,
+ 246,
+ 103,
+ 151,
+ 33,
+ 69,
+ 20,
+ 85,
+ 8,
+ 10,
+ 40,
+ 162,
+ 128,
+ 10,
+ 167,
+ 214,
+ 45,
+ 4,
+ 183,
+ 9,
+ 199,
+ 102,
+ 69,
+ 246,
+ 31,
+ 171,
+ 158,
+ 15,
+ 103,
+ 195,
+ 141,
+ 92,
+ 87,
+ 142,
+ 192,
+ 2,
+ 73,
+ 192,
+ 27,
+ 201,
+ 60,
+ 170,
+ 248,
+ 231,
+ 40,
+ 73,
+ 56,
+ 242,
+ 74,
+ 109,
+ 59,
+ 66,
+ 22,
+ 145,
+ 211,
+ 210,
+ 45,
+ 188,
+ 150,
+ 215,
+ 8,
+ 68,
+ 193,
+ 66,
+ 134,
+ 250,
+ 227,
+ 59,
+ 201,
+ 61,
+ 220,
+ 249,
+ 211,
+ 182,
+ 133,
+ 183,
+ 232,
+ 224,
+ 133,
+ 62,
+ 170,
+ 40,
+ 247,
+ 100,
+ 251,
+ 233,
+ 7,
+ 89,
+ 52,
+ 145,
+ 186,
+ 149,
+ 54,
+ 20,
+ 244,
+ 41,
+ 32,
+ 69,
+ 108,
+ 123,
+ 76,
+ 199,
+ 175,
+ 184,
+ 100,
+ 14,
+ 173,
+ 252,
+ 235,
+ 74,
+ 3,
+ 27,
+ 186,
+ 183,
+ 87,
+ 165,
+ 233,
+ 113,
+ 233,
+ 133,
+ 213,
+ 55,
+ 187,
+ 69,
+ 242,
+ 236,
+ 145,
+ 101,
+ 106,
+ 125,
+ 81,
+ 93,
+ 107,
+ 141,
+ 159,
+ 176,
+ 60,
+ 107,
+ 181,
+ 105,
+ 50,
+ 176,
+ 168,
+ 247,
+ 26,
+ 66,
+ 24,
+ 200,
+ 87,
+ 150,
+ 52,
+ 99,
+ 192,
+ 51,
+ 170,
+ 159,
+ 34,
+ 106,
+ 159,
+ 90,
+ 116,
+ 180,
+ 168,
+ 209,
+ 219,
+ 91,
+ 13,
+ 171,
+ 155,
+ 131,
+ 178,
+ 131,
+ 234,
+ 14,
+ 110,
+ 127,
+ 223,
+ 168,
+ 158,
+ 85,
+ 73,
+ 174,
+ 250,
+ 6,
+ 214,
+ 194,
+ 36,
+ 181,
+ 217,
+ 23,
+ 23,
+ 247,
+ 3,
+ 106,
+ 89,
+ 228,
+ 36,
+ 244,
+ 107,
+ 157,
+ 229,
+ 20,
+ 157,
+ 196,
+ 144,
+ 64,
+ 39,
+ 126,
+ 20,
+ 158,
+ 170,
+ 134,
+ 232,
+ 211,
+ 131,
+ 165,
+ 150,
+ 90,
+ 175,
+ 29,
+ 151,
+ 188,
+ 122,
+ 86,
+ 4,
+ 100,
+ 16,
+ 65,
+ 230,
+ 55,
+ 231,
+ 198,
+ 149,
+ 95,
+ 72,
+ 189,
+ 140,
+ 225,
+ 38,
+ 98,
+ 246,
+ 178,
+ 177,
+ 232,
+ 228,
+ 98,
+ 73,
+ 137,
+ 142,
+ 253,
+ 151,
+ 60,
+ 215,
+ 142,
+ 58,
+ 135,
+ 117,
+ 46,
+ 219,
+ 88,
+ 223,
+ 104,
+ 248,
+ 146,
+ 233,
+ 67,
+ 155,
+ 119,
+ 198,
+ 85,
+ 189,
+ 150,
+ 24,
+ 200,
+ 32,
+ 125,
+ 28,
+ 140,
+ 224,
+ 238,
+ 241,
+ 167,
+ 86,
+ 16,
+ 233,
+ 11,
+ 83,
+ 141,
+ 241,
+ 202,
+ 57,
+ 241,
+ 70,
+ 29,
+ 99,
+ 147,
+ 41,
+ 254,
+ 119,
+ 208,
+ 157,
+ 140,
+ 207,
+ 210,
+ 203,
+ 166,
+ 150,
+ 153,
+ 241,
+ 238,
+ 223,
+ 237,
+ 226,
+ 143,
+ 141,
+ 116,
+ 187,
+ 150,
+ 43,
+ 73,
+ 30,
+ 45,
+ 205,
+ 149,
+ 5,
+ 134,
+ 242,
+ 138,
+ 88,
+ 6,
+ 113,
+ 221,
+ 215,
+ 203,
+ 57,
+ 164,
+ 93,
+ 93,
+ 184,
+ 22,
+ 211,
+ 197,
+ 34,
+ 147,
+ 177,
+ 35,
+ 8,
+ 228,
+ 57,
+ 206,
+ 208,
+ 114,
+ 48,
+ 199,
+ 172,
+ 134,
+ 193,
+ 243,
+ 167,
+ 109,
+ 80,
+ 89,
+ 77,
+ 177,
+ 134,
+ 229,
+ 14,
+ 212,
+ 76,
+ 209,
+ 29,
+ 161,
+ 186,
+ 69,
+ 0,
+ 96,
+ 131,
+ 204,
+ 96,
+ 227,
+ 61,
+ 149,
+ 79,
+ 14,
+ 162,
+ 176,
+ 184,
+ 0,
+ 200,
+ 62,
+ 76,
+ 172,
+ 28,
+ 46,
+ 253,
+ 189,
+ 199,
+ 34,
+ 51,
+ 246,
+ 65,
+ 231,
+ 213,
+ 65,
+ 159,
+ 135,
+ 87,
+ 199,
+ 62,
+ 244,
+ 60,
+ 84,
+ 39,
+ 209,
+ 80,
+ 23,
+ 18,
+ 24,
+ 98,
+ 50,
+ 13,
+ 225,
+ 182,
+ 23,
+ 61,
+ 249,
+ 199,
+ 26,
+ 155,
+ 94,
+ 84,
+ 138,
+ 78,
+ 142,
+ 87,
+ 119,
+ 41,
+ 26,
+ 52,
+ 146,
+ 48,
+ 84,
+ 81,
+ 146,
+ 79,
+ 42,
+ 175,
+ 208,
+ 90,
+ 197,
+ 5,
+ 214,
+ 215,
+ 68,
+ 199,
+ 41,
+ 196,
+ 48,
+ 217,
+ 56,
+ 228,
+ 64,
+ 234,
+ 164,
+ 253,
+ 121,
+ 210,
+ 134,
+ 121,
+ 190,
+ 76,
+ 135,
+ 230,
+ 226,
+ 57,
+ 147,
+ 31,
+ 73,
+ 249,
+ 47,
+ 238,
+ 252,
+ 73,
+ 234,
+ 168,
+ 90,
+ 2,
+ 97,
+ 13,
+ 236,
+ 44,
+ 48,
+ 4,
+ 153,
+ 137,
+ 185,
+ 110,
+ 97,
+ 187,
+ 222,
+ 5,
+ 21,
+ 226,
+ 94,
+ 163,
+ 122,
+ 95,
+ 47,
+ 127,
+ 239,
+ 152,
+ 231,
+ 166,
+ 238,
+ 89,
+ 238,
+ 237,
+ 173,
+ 148,
+ 224,
+ 18,
+ 103,
+ 147,
+ 7,
+ 232,
+ 166,
+ 118,
+ 7,
+ 113,
+ 113,
+ 238,
+ 168,
+ 55,
+ 250,
+ 217,
+ 33,
+ 186,
+ 249,
+ 53,
+ 180,
+ 113,
+ 200,
+ 192,
+ 236,
+ 158,
+ 145,
+ 246,
+ 54,
+ 223,
+ 251,
+ 40,
+ 207,
+ 13,
+ 174,
+ 91,
+ 206,
+ 243,
+ 186,
+ 173,
+ 230,
+ 209,
+ 219,
+ 55,
+ 77,
+ 120,
+ 91,
+ 217,
+ 131,
+ 96,
+ 46,
+ 56,
+ 97,
+ 139,
+ 147,
+ 158,
+ 170,
+ 92,
+ 139,
+ 85,
+ 195,
+ 232,
+ 101,
+ 189,
+ 25,
+ 19,
+ 60,
+ 175,
+ 35,
+ 48,
+ 39,
+ 36,
+ 25,
+ 8,
+ 83,
+ 216,
+ 84,
+ 128,
+ 114,
+ 59,
+ 106,
+ 173,
+ 209,
+ 183,
+ 163,
+ 233,
+ 227,
+ 158,
+ 106,
+ 47,
+ 182,
+ 222,
+ 108,
+ 235,
+ 172,
+ 23,
+ 6,
+ 238,
+ 212,
+ 205,
+ 16,
+ 104,
+ 174,
+ 109,
+ 36,
+ 14,
+ 80,
+ 238,
+ 120,
+ 217,
+ 79,
+ 172,
+ 15,
+ 196,
+ 125,
+ 218,
+ 218,
+ 245,
+ 103,
+ 76,
+ 45,
+ 221,
+ 180,
+ 55,
+ 11,
+ 140,
+ 72,
+ 129,
+ 136,
+ 28,
+ 143,
+ 6,
+ 30,
+ 7,
+ 34,
+ 177,
+ 89,
+ 52,
+ 150,
+ 98,
+ 181,
+ 210,
+ 140,
+ 55,
+ 200,
+ 77,
+ 157,
+ 240,
+ 28,
+ 24,
+ 141,
+ 201,
+ 35,
+ 119,
+ 170,
+ 140,
+ 158,
+ 208,
+ 59,
+ 219,
+ 125,
+ 10,
+ 92,
+ 152,
+ 190,
+ 87,
+ 96,
+ 199,
+ 63,
+ 39,
+ 151,
+ 109,
+ 62,
+ 227,
+ 245,
+ 118,
+ 100,
+ 103,
+ 247,
+ 141,
+ 67,
+ 220,
+ 100,
+ 35,
+ 161,
+ 184,
+ 124,
+ 141,
+ 74,
+ 189,
+ 175,
+ 40,
+ 168,
+ 27,
+ 185,
+ 249,
+ 179,
+ 67,
+ 201,
+ 183,
+ 113,
+ 123,
+ 33,
+ 226,
+ 215,
+ 18,
+ 127,
+ 27,
+ 31,
+ 206,
+ 167,
+ 235,
+ 2,
+ 237,
+ 217,
+ 204,
+ 188,
+ 213,
+ 118,
+ 188,
+ 142,
+ 106,
+ 179,
+ 87,
+ 215,
+ 102,
+ 123,
+ 200,
+ 207,
+ 21,
+ 184,
+ 127,
+ 227,
+ 101,
+ 252,
+ 170,
+ 238,
+ 69,
+ 200,
+ 42,
+ 120,
+ 48,
+ 42,
+ 123,
+ 136,
+ 193,
+ 174,
+ 31,
+ 82,
+ 244,
+ 245,
+ 13,
+ 246,
+ 105,
+ 152,
+ 178,
+ 109,
+ 51,
+ 221,
+ 88,
+ 159,
+ 110,
+ 214,
+ 22,
+ 251,
+ 27,
+ 39,
+ 189,
+ 73,
+ 83,
+ 240,
+ 171,
+ 74,
+ 84,
+ 212,
+ 57,
+ 246,
+ 86,
+ 91,
+ 118,
+ 246,
+ 162,
+ 98,
+ 71,
+ 113,
+ 56,
+ 62,
+ 255,
+ 0,
+ 136,
+ 166,
+ 186,
+ 203,
+ 212,
+ 195,
+ 78,
+ 73,
+ 47,
+ 127,
+ 209,
+ 238,
+ 46,
+ 106,
+ 164,
+ 194,
+ 138,
+ 40,
+ 164,
+ 21,
+ 10,
+ 40,
+ 168,
+ 215,
+ 215,
+ 177,
+ 196,
+ 134,
+ 73,
+ 24,
+ 42,
+ 143,
+ 127,
+ 96,
+ 28,
+ 205,
+ 74,
+ 139,
+ 110,
+ 144,
+ 29,
+ 228,
+ 112,
+ 160,
+ 179,
+ 16,
+ 0,
+ 222,
+ 73,
+ 220,
+ 7,
+ 125,
+ 42,
+ 51,
+ 205,
+ 164,
+ 164,
+ 48,
+ 193,
+ 148,
+ 182,
+ 83,
+ 243,
+ 146,
+ 17,
+ 237,
+ 115,
+ 198,
+ 60,
+ 176,
+ 190,
+ 38,
+ 170,
+ 52,
+ 134,
+ 155,
+ 55,
+ 50,
+ 1,
+ 40,
+ 145,
+ 45,
+ 129,
+ 206,
+ 204,
+ 99,
+ 44,
+ 248,
+ 225,
+ 147,
+ 195,
+ 127,
+ 187,
+ 223,
+ 78,
+ 58,
+ 31,
+ 92,
+ 180,
+ 122,
+ 170,
+ 194,
+ 187,
+ 80,
+ 40,
+ 220,
+ 3,
+ 33,
+ 0,
+ 119,
+ 145,
+ 159,
+ 51,
+ 93,
+ 206,
+ 143,
+ 160,
+ 245,
+ 126,
+ 220,
+ 249,
+ 251,
+ 12,
+ 167,
+ 21,
+ 178,
+ 183,
+ 246,
+ 35,
+ 107,
+ 70,
+ 142,
+ 142,
+ 35,
+ 163,
+ 160,
+ 137,
+ 112,
+ 130,
+ 108,
+ 246,
+ 156,
+ 108,
+ 18,
+ 73,
+ 230,
+ 78,
+ 252,
+ 154,
+ 97,
+ 175,
+ 52,
+ 206,
+ 140,
+ 19,
+ 73,
+ 4,
+ 193,
+ 191,
+ 98,
+ 204,
+ 192,
+ 13,
+ 251,
+ 65,
+ 148,
+ 1,
+ 131,
+ 217,
+ 184,
+ 215,
+ 104,
+ 32,
+ 44,
+ 123,
+ 43,
+ 166,
+ 42,
+ 82,
+ 180,
+ 137,
+ 182,
+ 171,
+ 133,
+ 21,
+ 245,
+ 36,
+ 129,
+ 65,
+ 102,
+ 56,
+ 10,
+ 9,
+ 39,
+ 168,
+ 1,
+ 146,
+ 124,
+ 171,
+ 234,
+ 151,
+ 181,
+ 254,
+ 243,
+ 162,
+ 177,
+ 151,
+ 173,
+ 192,
+ 143,
+ 241,
+ 28,
+ 31,
+ 118,
+ 106,
+ 69,
+ 197,
+ 106,
+ 105,
+ 22,
+ 94,
+ 134,
+ 244,
+ 127,
+ 202,
+ 38,
+ 185,
+ 210,
+ 114,
+ 13,
+ 238,
+ 198,
+ 40,
+ 115,
+ 244,
+ 84,
+ 99,
+ 104,
+ 143,
+ 37,
+ 31,
+ 139,
+ 172,
+ 210,
+ 102,
+ 145,
+ 159,
+ 229,
+ 186,
+ 102,
+ 118,
+ 39,
+ 42,
+ 102,
+ 88,
+ 23,
+ 238,
+ 171,
+ 4,
+ 56,
+ 242,
+ 39,
+ 198,
+ 182,
+ 189,
+ 64,
+ 209,
+ 162,
+ 215,
+ 71,
+ 219,
+ 69,
+ 140,
+ 21,
+ 136,
+ 51,
+ 125,
+ 230,
+ 245,
+ 223,
+ 252,
+ 204,
+ 107,
+ 243,
+ 238,
+ 161,
+ 92,
+ 124,
+ 252,
+ 114,
+ 183,
+ 57,
+ 213,
+ 137,
+ 239,
+ 96,
+ 79,
+ 198,
+ 149,
+ 46,
+ 25,
+ 233,
+ 189,
+ 23,
+ 142,
+ 243,
+ 42,
+ 240,
+ 77,
+ 175,
+ 130,
+ 63,
+ 66,
+ 235,
+ 133,
+ 138,
+ 189,
+ 140,
+ 233,
+ 142,
+ 17,
+ 146,
+ 7,
+ 106,
+ 174,
+ 210,
+ 227,
+ 196,
+ 10,
+ 193,
+ 181,
+ 51,
+ 72,
+ 252,
+ 154,
+ 235,
+ 161,
+ 39,
+ 230,
+ 110,
+ 56,
+ 125,
+ 151,
+ 250,
+ 63,
+ 167,
+ 136,
+ 175,
+ 208,
+ 122,
+ 207,
+ 40,
+ 91,
+ 59,
+ 134,
+ 60,
+ 162,
+ 115,
+ 254,
+ 67,
+ 138,
+ 252,
+ 203,
+ 166,
+ 97,
+ 38,
+ 60,
+ 141,
+ 204,
+ 135,
+ 104,
+ 17,
+ 203,
+ 249,
+ 227,
+ 225,
+ 69,
+ 211,
+ 31,
+ 131,
+ 164,
+ 255,
+ 0,
+ 39,
+ 162,
+ 203,
+ 124,
+ 197,
+ 218,
+ 254,
+ 77,
+ 150,
+ 188,
+ 168,
+ 58,
+ 11,
+ 72,
+ 124,
+ 162,
+ 222,
+ 41,
+ 185,
+ 186,
+ 130,
+ 123,
+ 248,
+ 55,
+ 188,
+ 26,
+ 157,
+ 77,
+ 60,
+ 139,
+ 84,
+ 232,
+ 43,
+ 149,
+ 220,
+ 140,
+ 177,
+ 187,
+ 40,
+ 203,
+ 5,
+ 98,
+ 7,
+ 89,
+ 0,
+ 144,
+ 60,
+ 235,
+ 173,
+ 20,
+ 1,
+ 140,
+ 232,
+ 201,
+ 1,
+ 83,
+ 147,
+ 151,
+ 98,
+ 89,
+ 179,
+ 199,
+ 104,
+ 157,
+ 249,
+ 21,
+ 247,
+ 164,
+ 100,
+ 217,
+ 80,
+ 252,
+ 227,
+ 116,
+ 113,
+ 224,
+ 194,
+ 180,
+ 253,
+ 43,
+ 171,
+ 182,
+ 211,
+ 239,
+ 146,
+ 53,
+ 45,
+ 245,
+ 215,
+ 213,
+ 111,
+ 196,
+ 63,
+ 58,
+ 160,
+ 127,
+ 71,
+ 144,
+ 146,
+ 62,
+ 126,
+ 83,
+ 30,
+ 114,
+ 81,
+ 182,
+ 78,
+ 119,
+ 231,
+ 27,
+ 95,
+ 237,
+ 83,
+ 123,
+ 81,
+ 101,
+ 24,
+ 185,
+ 235,
+ 191,
+ 27,
+ 25,
+ 53,
+ 138,
+ 76,
+ 91,
+ 92,
+ 55,
+ 84,
+ 78,
+ 127,
+ 202,
+ 106,
+ 93,
+ 148,
+ 97,
+ 117,
+ 110,
+ 48,
+ 127,
+ 177,
+ 83,
+ 226,
+ 95,
+ 63,
+ 157,
+ 66,
+ 214,
+ 85,
+ 205,
+ 173,
+ 192,
+ 28,
+ 226,
+ 127,
+ 225,
+ 52,
+ 184,
+ 53,
+ 192,
+ 201,
+ 162,
+ 224,
+ 179,
+ 9,
+ 178,
+ 81,
+ 16,
+ 51,
+ 103,
+ 113,
+ 11,
+ 236,
+ 224,
+ 117,
+ 157,
+ 217,
+ 238,
+ 237,
+ 220,
+ 169,
+ 240,
+ 118,
+ 189,
+ 7,
+ 211,
+ 207,
+ 54,
+ 101,
+ 161,
+ 112,
+ 211,
+ 126,
+ 65,
+ 168,
+ 54,
+ 194,
+ 226,
+ 223,
+ 74,
+ 88,
+ 29,
+ 225,
+ 226,
+ 89,
+ 144,
+ 117,
+ 48,
+ 28,
+ 71,
+ 136,
+ 74,
+ 243,
+ 209,
+ 230,
+ 151,
+ 43,
+ 164,
+ 108,
+ 101,
+ 39,
+ 213,
+ 187,
+ 129,
+ 161,
+ 147,
+ 239,
+ 166,
+ 208,
+ 207,
+ 126,
+ 86,
+ 63,
+ 196,
+ 106,
+ 95,
+ 161,
+ 129,
+ 255,
+ 0,
+ 186,
+ 205,
+ 213,
+ 242,
+ 70,
+ 207,
+ 253,
+ 232,
+ 113,
+ 249,
+ 210,
+ 150,
+ 139,
+ 151,
+ 162,
+ 180,
+ 180,
+ 184,
+ 7,
+ 2,
+ 222,
+ 244,
+ 224,
+ 253,
+ 146,
+ 84,
+ 159,
+ 133,
+ 8,
+ 103,
+ 164,
+ 34,
+ 161,
+ 212,
+ 201,
+ 46,
+ 236,
+ 253,
+ 73,
+ 69,
+ 71,
+ 249,
+ 90,
+ 209,
+ 80,
+ 103,
+ 63,
+ 63,
+ 235,
+ 61,
+ 175,
+ 201,
+ 116,
+ 213,
+ 196,
+ 103,
+ 114,
+ 220,
+ 252,
+ 226,
+ 254,
+ 240,
+ 45,
+ 252,
+ 65,
+ 197,
+ 76,
+ 166,
+ 175,
+ 78,
+ 90,
+ 182,
+ 210,
+ 192,
+ 151,
+ 177,
+ 15,
+ 157,
+ 182,
+ 246,
+ 177,
+ 196,
+ 199,
+ 156,
+ 147,
+ 219,
+ 178,
+ 125,
+ 110,
+ 237,
+ 170,
+ 73,
+ 209,
+ 26,
+ 65,
+ 103,
+ 137,
+ 92,
+ 113,
+ 224,
+ 195,
+ 168,
+ 243,
+ 21,
+ 203,
+ 235,
+ 241,
+ 59,
+ 89,
+ 23,
+ 147,
+ 51,
+ 102,
+ 142,
+ 246,
+ 82,
+ 233,
+ 205,
+ 171,
+ 121,
+ 210,
+ 233,
+ 1,
+ 195,
+ 122,
+ 174,
+ 7,
+ 119,
+ 230,
+ 7,
+ 154,
+ 211,
+ 101,
+ 173,
+ 248,
+ 101,
+ 12,
+ 61,
+ 101,
+ 35,
+ 32,
+ 142,
+ 117,
+ 18,
+ 234,
+ 221,
+ 100,
+ 66,
+ 142,
+ 50,
+ 172,
+ 48,
+ 127,
+ 158,
+ 186,
+ 88,
+ 182,
+ 158,
+ 75,
+ 23,
+ 232,
+ 228,
+ 203,
+ 64,
+ 199,
+ 213,
+ 97,
+ 203,
+ 253,
+ 250,
+ 199,
+ 136,
+ 172,
+ 250,
+ 86,
+ 120,
+ 37,
+ 251,
+ 151,
+ 213,
+ 127,
+ 194,
+ 149,
+ 169,
+ 123,
+ 199,
+ 197,
+ 157,
+ 79,
+ 58,
+ 251,
+ 12,
+ 58,
+ 197,
+ 84,
+ 91,
+ 206,
+ 174,
+ 161,
+ 145,
+ 131,
+ 41,
+ 224,
+ 69,
+ 87,
+ 233,
+ 13,
+ 38,
+ 219,
+ 125,
+ 12,
+ 11,
+ 183,
+ 49,
+ 229,
+ 244,
+ 80,
+ 99,
+ 123,
+ 57,
+ 236,
+ 172,
+ 240,
+ 233,
+ 165,
+ 57,
+ 105,
+ 143,
+ 34,
+ 212,
+ 108,
+ 180,
+ 211,
+ 122,
+ 114,
+ 43,
+ 117,
+ 245,
+ 189,
+ 103,
+ 62,
+ 202,
+ 14,
+ 45,
+ 250,
+ 14,
+ 218,
+ 77,
+ 159,
+ 164,
+ 157,
+ 250,
+ 89,
+ 206,
+ 126,
+ 172,
+ 124,
+ 147,
+ 178,
+ 162,
+ 232,
+ 165,
+ 46,
+ 90,
+ 87,
+ 59,
+ 76,
+ 78,
+ 3,
+ 30,
+ 125,
+ 181,
+ 101,
+ 154,
+ 239,
+ 244,
+ 157,
+ 20,
+ 48,
+ 171,
+ 229,
+ 247,
+ 252,
+ 8,
+ 205,
+ 153,
+ 193,
+ 184,
+ 71,
+ 226,
+ 255,
+ 0,
+ 1,
+ 80,
+ 116,
+ 172,
+ 101,
+ 246,
+ 34,
+ 81,
+ 151,
+ 145,
+ 130,
+ 175,
+ 158,
+ 63,
+ 58,
+ 156,
+ 106,
+ 207,
+ 80,
+ 116,
+ 119,
+ 77,
+ 59,
+ 93,
+ 48,
+ 245,
+ 33,
+ 245,
+ 35,
+ 237,
+ 108,
+ 111,
+ 62,
+ 0,
+ 249,
+ 176,
+ 234,
+ 173,
+ 178,
+ 123,
+ 10,
+ 233,
+ 163,
+ 237,
+ 107,
+ 237,
+ 253,
+ 70,
+ 129,
+ 101,
+ 110,
+ 35,
+ 141,
+ 35,
+ 28,
+ 17,
+ 21,
+ 7,
+ 238,
+ 168,
+ 95,
+ 202,
+ 187,
+ 81,
+ 69,
+ 80,
+ 96,
+ 82,
+ 127,
+ 165,
+ 1,
+ 155,
+ 104,
+ 199,
+ 35,
+ 58,
+ 3,
+ 228,
+ 212,
+ 225,
+ 84,
+ 250,
+ 217,
+ 161,
+ 154,
+ 234,
+ 221,
+ 162,
+ 82,
+ 21,
+ 242,
+ 25,
+ 73,
+ 225,
+ 144,
+ 114,
+ 51,
+ 213,
+ 158,
+ 25,
+ 160,
+ 190,
+ 54,
+ 148,
+ 211,
+ 102,
+ 187,
+ 106,
+ 190,
+ 162,
+ 253,
+ 209,
+ 240,
+ 21,
+ 249,
+ 98,
+ 194,
+ 212,
+ 195,
+ 36,
+ 240,
+ 29,
+ 198,
+ 41,
+ 89,
+ 124,
+ 152,
+ 175,
+ 229,
+ 90,
+ 246,
+ 139,
+ 244,
+ 166,
+ 176,
+ 42,
+ 71,
+ 164,
+ 45,
+ 229,
+ 129,
+ 212,
+ 5,
+ 50,
+ 42,
+ 244,
+ 145,
+ 182,
+ 55,
+ 100,
+ 17,
+ 188,
+ 103,
+ 142,
+ 55,
+ 214,
+ 115,
+ 175,
+ 119,
+ 246,
+ 141,
+ 125,
+ 242,
+ 155,
+ 89,
+ 146,
+ 72,
+ 174,
+ 84,
+ 23,
+ 3,
+ 33,
+ 145,
+ 198,
+ 227,
+ 180,
+ 164,
+ 2,
+ 1,
+ 27,
+ 39,
+ 63,
+ 122,
+ 148,
+ 209,
+ 233,
+ 61,
+ 23,
+ 158,
+ 56,
+ 186,
+ 152,
+ 205,
+ 189,
+ 184,
+ 249,
+ 236,
+ 51,
+ 105,
+ 141,
+ 126,
+ 150,
+ 107,
+ 69,
+ 183,
+ 41,
+ 134,
+ 32,
+ 43,
+ 190,
+ 115,
+ 180,
+ 6,
+ 56,
+ 12,
+ 110,
+ 39,
+ 27,
+ 233,
+ 49,
+ 211,
+ 32,
+ 142,
+ 177,
+ 138,
+ 240,
+ 74,
+ 167,
+ 131,
+ 15,
+ 49,
+ 94,
+ 60,
+ 234,
+ 187,
+ 203,
+ 0,
+ 59,
+ 234,
+ 135,
+ 182,
+ 199,
+ 143,
+ 167,
+ 195,
+ 141,
+ 168,
+ 82,
+ 79,
+ 119,
+ 191,
+ 113,
+ 163,
+ 209,
+ 100,
+ 229,
+ 173,
+ 25,
+ 15,
+ 245,
+ 114,
+ 176,
+ 29,
+ 197,
+ 85,
+ 190,
+ 37,
+ 169,
+ 198,
+ 147,
+ 253,
+ 23,
+ 91,
+ 176,
+ 182,
+ 119,
+ 35,
+ 2,
+ 89,
+ 75,
+ 47,
+ 104,
+ 10,
+ 171,
+ 159,
+ 60,
+ 248,
+ 211,
+ 133,
+ 60,
+ 249,
+ 63,
+ 81,
+ 94,
+ 181,
+ 208,
+ 81,
+ 69,
+ 21,
+ 34,
+ 66,
+ 138,
+ 40,
+ 160,
+ 14,
+ 119,
+ 80,
+ 237,
+ 163,
+ 167,
+ 214,
+ 82,
+ 190,
+ 96,
+ 138,
+ 200,
+ 244,
+ 105,
+ 196,
+ 97,
+ 73,
+ 222,
+ 153,
+ 86,
+ 236,
+ 32,
+ 144,
+ 115,
+ 91,
+ 13,
+ 80,
+ 221,
+ 234,
+ 125,
+ 148,
+ 146,
+ 153,
+ 94,
+ 28,
+ 179,
+ 28,
+ 183,
+ 172,
+ 224,
+ 19,
+ 204,
+ 149,
+ 7,
+ 27,
+ 234,
+ 178,
+ 141,
+ 157,
+ 127,
+ 68,
+ 250,
+ 83,
+ 252,
+ 12,
+ 146,
+ 157,
+ 93,
+ 170,
+ 174,
+ 5,
+ 141,
+ 72,
+ 214,
+ 47,
+ 147,
+ 189,
+ 217,
+ 134,
+ 55,
+ 154,
+ 226,
+ 84,
+ 88,
+ 162,
+ 84,
+ 27,
+ 144,
+ 0,
+ 75,
+ 59,
+ 191,
+ 0,
+ 1,
+ 217,
+ 242,
+ 174,
+ 186,
+ 199,
+ 161,
+ 190,
+ 79,
+ 161,
+ 250,
+ 34,
+ 65,
+ 100,
+ 100,
+ 102,
+ 35,
+ 134,
+ 211,
+ 62,
+ 252,
+ 121,
+ 227,
+ 194,
+ 158,
+ 108,
+ 172,
+ 163,
+ 137,
+ 66,
+ 68,
+ 138,
+ 139,
+ 212,
+ 160,
+ 10,
+ 70,
+ 214,
+ 189,
+ 48,
+ 102,
+ 209,
+ 143,
+ 33,
+ 199,
+ 175,
+ 57,
+ 84,
+ 199,
+ 53,
+ 89,
+ 9,
+ 83,
+ 228,
+ 180,
+ 85,
+ 9,
+ 203,
+ 213,
+ 75,
+ 168,
+ 202,
+ 230,
+ 215,
+ 50,
+ 191,
+ 153,
+ 123,
+ 255,
+ 0,
+ 27,
+ 30,
+ 179,
+ 248,
+ 135,
+ 235,
+ 69,
+ 67,
+ 255,
+ 0,
+ 128,
+ 36,
+ 250,
+ 163,
+ 223,
+ 250,
+ 209,
+ 70,
+ 195,
+ 232,
+ 221,
+ 221,
+ 1,
+ 4,
+ 17,
+ 144,
+ 119,
+ 16,
+ 121,
+ 214,
+ 9,
+ 175,
+ 58,
+ 157,
+ 46,
+ 140,
+ 153,
+ 174,
+ 109,
+ 148,
+ 181,
+ 164,
+ 135,
+ 46,
+ 163,
+ 250,
+ 157,
+ 249,
+ 193,
+ 251,
+ 59,
+ 206,
+ 203,
+ 114,
+ 224,
+ 107,
+ 127,
+ 174,
+ 82,
+ 160,
+ 96,
+ 65,
+ 0,
+ 130,
+ 48,
+ 65,
+ 25,
+ 7,
+ 176,
+ 138,
+ 84,
+ 162,
+ 164,
+ 169,
+ 240,
+ 75,
+ 73,
+ 170,
+ 103,
+ 231,
+ 237,
+ 31,
+ 164,
+ 35,
+ 153,
+ 118,
+ 163,
+ 108,
+ 245,
+ 142,
+ 107,
+ 216,
+ 69,
+ 72,
+ 150,
+ 37,
+ 96,
+ 85,
+ 128,
+ 96,
+ 120,
+ 130,
+ 50,
+ 13,
+ 55,
+ 107,
+ 47,
+ 162,
+ 8,
+ 29,
+ 204,
+ 214,
+ 50,
+ 27,
+ 89,
+ 120,
+ 236,
+ 128,
+ 76,
+ 103,
+ 185,
+ 65,
+ 202,
+ 248,
+ 100,
+ 118,
+ 86,
+ 107,
+ 165,
+ 32,
+ 191,
+ 142,
+ 224,
+ 232,
+ 242,
+ 241,
+ 60,
+ 164,
+ 12,
+ 188,
+ 68,
+ 157,
+ 129,
+ 207,
+ 104,
+ 238,
+ 217,
+ 32,
+ 12,
+ 157,
+ 220,
+ 199,
+ 51,
+ 92,
+ 233,
+ 244,
+ 18,
+ 213,
+ 255,
+ 0,
+ 205,
+ 237,
+ 246,
+ 51,
+ 75,
+ 11,
+ 91,
+ 162,
+ 2,
+ 232,
+ 210,
+ 215,
+ 29,
+ 21,
+ 139,
+ 56,
+ 99,
+ 251,
+ 66,
+ 27,
+ 212,
+ 65,
+ 192,
+ 147,
+ 221,
+ 191,
+ 224,
+ 43,
+ 68,
+ 208,
+ 122,
+ 187,
+ 13,
+ 188,
+ 38,
+ 53,
+ 27,
+ 69,
+ 193,
+ 18,
+ 57,
+ 246,
+ 159,
+ 60,
+ 114,
+ 121,
+ 13,
+ 251,
+ 133,
+ 117,
+ 213,
+ 253,
+ 9,
+ 21,
+ 172,
+ 66,
+ 52,
+ 25,
+ 39,
+ 123,
+ 191,
+ 55,
+ 61,
+ 103,
+ 179,
+ 168,
+ 114,
+ 171,
+ 58,
+ 234,
+ 99,
+ 134,
+ 133,
+ 92,
+ 190,
+ 230,
+ 92,
+ 153,
+ 92,
+ 182,
+ 92,
+ 25,
+ 158,
+ 146,
+ 212,
+ 251,
+ 155,
+ 108,
+ 152,
+ 62,
+ 122,
+ 46,
+ 59,
+ 59,
+ 131,
+ 175,
+ 135,
+ 62,
+ 241,
+ 229,
+ 85,
+ 9,
+ 126,
+ 185,
+ 217,
+ 108,
+ 163,
+ 14,
+ 42,
+ 227,
+ 100,
+ 143,
+ 58,
+ 217,
+ 42,
+ 21,
+ 254,
+ 139,
+ 134,
+ 97,
+ 137,
+ 98,
+ 73,
+ 59,
+ 89,
+ 65,
+ 35,
+ 184,
+ 241,
+ 20,
+ 212,
+ 218,
+ 23,
+ 45,
+ 19,
+ 253,
+ 75,
+ 126,
+ 232,
+ 203,
+ 58,
+ 55,
+ 157,
+ 214,
+ 8,
+ 119,
+ 187,
+ 241,
+ 60,
+ 149,
+ 121,
+ 177,
+ 61,
+ 85,
+ 170,
+ 104,
+ 157,
+ 28,
+ 144,
+ 66,
+ 144,
+ 199,
+ 236,
+ 160,
+ 199,
+ 121,
+ 230,
+ 199,
+ 180,
+ 157,
+ 245,
+ 207,
+ 69,
+ 232,
+ 104,
+ 45,
+ 243,
+ 208,
+ 196,
+ 169,
+ 181,
+ 196,
+ 140,
+ 146,
+ 123,
+ 50,
+ 119,
+ 227,
+ 178,
+ 167,
+ 212,
+ 55,
+ 96,
+ 218,
+ 140,
+ 116,
+ 199,
+ 128,
+ 162,
+ 138,
+ 40,
+ 42,
+ 21,
+ 73,
+ 173,
+ 242,
+ 72,
+ 150,
+ 253,
+ 44,
+ 100,
+ 237,
+ 68,
+ 233,
+ 33,
+ 3,
+ 154,
+ 169,
+ 245,
+ 129,
+ 235,
+ 24,
+ 38,
+ 173,
+ 163,
+ 185,
+ 70,
+ 102,
+ 64,
+ 192,
+ 178,
+ 99,
+ 105,
+ 115,
+ 189,
+ 114,
+ 50,
+ 50,
+ 59,
+ 107,
+ 163,
+ 40,
+ 32,
+ 130,
+ 50,
+ 8,
+ 193,
+ 7,
+ 159,
+ 88,
+ 52,
+ 22,
+ 78,
+ 157,
+ 145,
+ 180,
+ 117,
+ 244,
+ 115,
+ 196,
+ 178,
+ 70,
+ 67,
+ 35,
+ 14,
+ 252,
+ 117,
+ 171,
+ 14,
+ 68,
+ 117,
+ 26,
+ 141,
+ 115,
+ 171,
+ 214,
+ 146,
+ 111,
+ 123,
+ 120,
+ 137,
+ 235,
+ 216,
+ 3,
+ 225,
+ 84,
+ 115,
+ 234,
+ 73,
+ 141,
+ 204,
+ 150,
+ 87,
+ 15,
+ 110,
+ 199,
+ 138,
+ 239,
+ 100,
+ 62,
+ 255,
+ 0,
+ 142,
+ 107,
+ 206,
+ 155,
+ 76,
+ 67,
+ 198,
+ 56,
+ 103,
+ 3,
+ 154,
+ 144,
+ 164,
+ 252,
+ 62,
+ 20,
+ 13,
+ 210,
+ 191,
+ 108,
+ 191,
+ 130,
+ 193,
+ 181,
+ 38,
+ 196,
+ 255,
+ 0,
+ 80,
+ 60,
+ 25,
+ 135,
+ 231,
+ 93,
+ 109,
+ 245,
+ 70,
+ 201,
+ 14,
+ 69,
+ 186,
+ 18,
+ 62,
+ 182,
+ 91,
+ 226,
+ 106,
+ 160,
+ 235,
+ 141,
+ 196,
+ 127,
+ 182,
+ 209,
+ 210,
+ 175,
+ 106,
+ 101,
+ 135,
+ 240,
+ 227,
+ 223,
+ 93,
+ 35,
+ 244,
+ 135,
+ 109,
+ 244,
+ 227,
+ 154,
+ 63,
+ 188,
+ 153,
+ 248,
+ 26,
+ 130,
+ 107,
+ 55,
+ 245,
+ 141,
+ 202,
+ 160,
+ 12,
+ 1,
+ 128,
+ 56,
+ 1,
+ 187,
+ 20,
+ 82,
+ 228,
+ 58,
+ 245,
+ 96,
+ 223,
+ 215,
+ 99,
+ 239,
+ 43,
+ 15,
+ 202,
+ 165,
+ 166,
+ 181,
+ 89,
+ 31,
+ 250,
+ 152,
+ 188,
+ 91,
+ 31,
+ 26,
+ 145,
+ 78,
+ 18,
+ 236,
+ 203,
+ 138,
+ 229,
+ 117,
+ 116,
+ 145,
+ 174,
+ 212,
+ 142,
+ 168,
+ 185,
+ 3,
+ 105,
+ 136,
+ 81,
+ 191,
+ 128,
+ 201,
+ 168,
+ 75,
+ 172,
+ 22,
+ 167,
+ 133,
+ 196,
+ 63,
+ 247,
+ 23,
+ 245,
+ 175,
+ 139,
+ 173,
+ 43,
+ 100,
+ 232,
+ 81,
+ 231,
+ 133,
+ 145,
+ 183,
+ 21,
+ 103,
+ 66,
+ 15,
+ 134,
+ 104,
+ 35,
+ 75,
+ 241,
+ 69,
+ 162,
+ 48,
+ 32,
+ 16,
+ 65,
+ 7,
+ 120,
+ 35,
+ 120,
+ 61,
+ 198,
+ 190,
+ 46,
+ 103,
+ 88,
+ 209,
+ 157,
+ 183,
+ 42,
+ 130,
+ 199,
+ 158,
+ 224,
+ 50,
+ 119,
+ 85,
+ 45,
+ 190,
+ 158,
+ 209,
+ 240,
+ 198,
+ 177,
+ 164,
+ 241,
+ 170,
+ 40,
+ 192,
+ 80,
+ 219,
+ 88,
+ 231,
+ 218,
+ 106,
+ 37,
+ 198,
+ 190,
+ 90,
+ 240,
+ 141,
+ 101,
+ 153,
+ 190,
+ 172,
+ 104,
+ 78,
+ 124,
+ 77,
+ 4,
+ 123,
+ 75,
+ 185,
+ 12,
+ 234,
+ 149,
+ 137,
+ 255,
+ 166,
+ 143,
+ 200,
+ 143,
+ 206,
+ 188,
+ 26,
+ 163,
+ 99,
+ 252,
+ 1,
+ 217,
+ 60,
+ 143,
+ 235,
+ 93,
+ 38,
+ 214,
+ 123,
+ 53,
+ 227,
+ 115,
+ 23,
+ 131,
+ 6,
+ 247,
+ 12,
+ 213,
+ 93,
+ 198,
+ 191,
+ 217,
+ 141,
+ 209,
+ 153,
+ 37,
+ 110,
+ 164,
+ 70,
+ 223,
+ 226,
+ 113,
+ 80,
+ 89,
+ 44,
+ 175,
+ 139,
+ 45,
+ 226,
+ 213,
+ 219,
+ 69,
+ 246,
+ 109,
+ 226,
+ 31,
+ 184,
+ 42,
+ 114,
+ 172,
+ 113,
+ 169,
+ 32,
+ 42,
+ 40,
+ 226,
+ 112,
+ 20,
+ 15,
+ 26,
+ 80,
+ 125,
+ 99,
+ 191,
+ 159,
+ 117,
+ 189,
+ 168,
+ 137,
+ 79,
+ 211,
+ 148,
+ 239,
+ 252,
+ 0,
+ 59,
+ 191,
+ 58,
+ 233,
+ 30,
+ 166,
+ 188,
+ 196,
+ 61,
+ 245,
+ 196,
+ 146,
+ 158,
+ 61,
+ 26,
+ 157,
+ 148,
+ 31,
+ 207,
+ 102,
+ 40,
+ 44,
+ 227,
+ 252,
+ 2,
+ 239,
+ 249,
+ 62,
+ 244,
+ 166,
+ 188,
+ 198,
+ 9,
+ 142,
+ 213,
+ 26,
+ 226,
+ 64,
+ 9,
+ 37,
+ 65,
+ 216,
+ 92,
+ 111,
+ 36,
+ 158,
+ 39,
+ 195,
+ 119,
+ 109,
+ 74,
+ 212,
+ 13,
+ 83,
+ 93,
+ 42,
+ 191,
+ 44,
+ 189,
+ 184,
+ 51,
+ 42,
+ 185,
+ 81,
+ 110,
+ 153,
+ 69,
+ 66,
+ 55,
+ 225,
+ 241,
+ 191,
+ 4,
+ 99,
+ 135,
+ 35,
+ 196,
+ 213,
+ 221,
+ 133,
+ 132,
+ 80,
+ 174,
+ 196,
+ 81,
+ 170,
+ 47,
+ 82,
+ 140,
+ 103,
+ 191,
+ 175,
+ 198,
+ 168,
+ 181,
+ 74,
+ 243,
+ 252,
+ 3,
+ 76,
+ 210,
+ 221,
+ 17,
+ 221,
+ 111,
+ 127,
+ 128,
+ 58,
+ 149,
+ 246,
+ 142,
+ 200,
+ 240,
+ 102,
+ 43,
+ 220,
+ 227,
+ 170,
+ 134,
+ 63,
+ 167,
+ 148,
+ 53,
+ 82,
+ 70,
+ 211,
+ 101,
+ 105,
+ 28,
+ 72,
+ 177,
+ 198,
+ 138,
+ 136,
+ 163,
+ 10,
+ 170,
+ 0,
+ 3,
+ 184,
+ 84,
+ 154,
+ 40,
+ 165,
+ 155,
+ 2,
+ 138,
+ 40,
+ 160,
+ 2,
+ 171,
+ 53,
+ 143,
+ 72,
+ 116,
+ 22,
+ 183,
+ 19,
+ 252,
+ 3,
+ 101,
+ 19,
+ 190,
+ 58,
+ 202,
+ 161,
+ 32,
+ 120,
+ 144,
+ 5,
+ 89,
+ 210,
+ 119,
+ 165,
+ 217,
+ 182,
+ 116,
+ 77,
+ 215,
+ 218,
+ 64,
+ 190,
+ 110,
+ 162,
+ 128,
+ 50,
+ 189,
+ 78,
+ 118,
+ 131,
+ 70,
+ 205,
+ 114,
+ 125,
+ 105,
+ 28,
+ 201,
+ 33,
+ 61,
+ 101,
+ 73,
+ 80,
+ 124,
+ 193,
+ 52,
+ 171,
+ 163,
+ 99,
+ 194,
+ 109,
+ 19,
+ 150,
+ 127,
+ 89,
+ 155,
+ 137,
+ 36,
+ 241,
+ 223,
+ 90,
+ 78,
+ 168,
+ 194,
+ 5,
+ 140,
+ 10,
+ 70,
+ 65,
+ 136,
+ 100,
+ 30,
+ 123,
+ 89,
+ 39,
+ 62,
+ 102,
+ 148,
+ 52,
+ 254,
+ 170,
+ 203,
+ 108,
+ 76,
+ 150,
+ 224,
+ 201,
+ 15,
+ 19,
+ 30,
+ 242,
+ 209,
+ 253,
+ 222,
+ 101,
+ 125,
+ 244,
+ 228,
+ 232,
+ 229,
+ 101,
+ 188,
+ 154,
+ 162,
+ 158,
+ 247,
+ 243,
+ 247,
+ 21,
+ 213,
+ 247,
+ 161,
+ 173,
+ 122,
+ 107,
+ 216,
+ 99,
+ 226,
+ 35,
+ 61,
+ 43,
+ 118,
+ 5,
+ 193,
+ 30,
+ 253,
+ 159,
+ 58,
+ 130,
+ 186,
+ 74,
+ 50,
+ 133,
+ 131,
+ 112,
+ 28,
+ 57,
+ 247,
+ 83,
+ 175,
+ 163,
+ 173,
+ 20,
+ 82,
+ 38,
+ 184,
+ 144,
+ 97,
+ 231,
+ 222,
+ 59,
+ 16,
+ 31,
+ 87,
+ 207,
+ 143,
+ 118,
+ 40,
+ 147,
+ 19,
+ 134,
+ 14,
+ 13,
+ 202,
+ 74,
+ 171,
+ 111,
+ 136,
+ 225,
+ 73,
+ 26,
+ 248,
+ 162,
+ 91,
+ 171,
+ 24,
+ 48,
+ 50,
+ 210,
+ 22,
+ 99,
+ 207,
+ 27,
+ 72,
+ 8,
+ 238,
+ 192,
+ 99,
+ 224,
+ 41,
+ 218,
+ 146,
+ 110,
+ 142,
+ 222,
+ 154,
+ 140,
+ 31,
+ 234,
+ 225,
+ 200,
+ 252,
+ 45,
+ 255,
+ 149,
+ 64,
+ 236,
+ 92,
+ 223,
+ 100,
+ 199,
+ 122,
+ 170,
+ 211,
+ 186,
+ 126,
+ 27,
+ 85,
+ 218,
+ 149,
+ 189,
+ 99,
+ 236,
+ 162,
+ 224,
+ 179,
+ 119,
+ 14,
+ 174,
+ 211,
+ 186,
+ 190,
+ 53,
+ 171,
+ 77,
+ 124,
+ 150,
+ 3,
+ 40,
+ 27,
+ 78,
+ 72,
+ 68,
+ 29,
+ 108,
+ 65,
+ 35,
+ 61,
+ 128,
+ 2,
+ 124,
+ 43,
+ 50,
+ 72,
+ 29,
+ 220,
+ 203,
+ 51,
+ 25,
+ 36,
+ 109,
+ 228,
+ 158,
+ 95,
+ 151,
+ 135,
+ 1,
+ 66,
+ 86,
+ 87,
+ 217,
+ 138,
+ 213,
+ 47,
+ 252,
+ 1,
+ 44,
+ 116,
+ 158,
+ 185,
+ 95,
+ 73,
+ 153,
+ 35,
+ 196,
+ 49,
+ 174,
+ 240,
+ 160,
+ 2,
+ 72,
+ 251,
+ 68,
+ 141,
+ 254,
+ 24,
+ 173,
+ 43,
+ 69,
+ 221,
+ 244,
+ 176,
+ 197,
+ 47,
+ 246,
+ 136,
+ 173,
+ 230,
+ 1,
+ 172,
+ 166,
+ 251,
+ 216,
+ 111,
+ 186,
+ 126,
+ 21,
+ 164,
+ 106,
+ 119,
+ 252,
+ 0,
+ 149,
+ 191,
+ 248,
+ 67,
+ 243,
+ 169,
+ 106,
+ 131,
+ 94,
+ 184,
+ 93,
+ 86,
+ 229,
+ 189,
+ 40,
+ 235,
+ 147,
+ 24,
+ 174,
+ 172,
+ 166,
+ 228,
+ 89,
+ 162,
+ 110,
+ 230,
+ 217,
+ 199,
+ 196,
+ 159,
+ 10,
+ 110,
+ 165,
+ 47,
+ 73,
+ 139,
+ 252,
+ 1,
+ 30,
+ 55,
+ 230,
+ 147,
+ 33,
+ 30,
+ 241,
+ 85,
+ 45,
+ 139,
+ 245,
+ 34,
+ 222,
+ 138,
+ 240,
+ 28,
+ 239,
+ 162,
+ 128,
+ 57,
+ 205,
+ 108,
+ 143,
+ 237,
+ 34,
+ 183,
+ 222,
+ 80,
+ 126,
+ 34,
+ 160,
+ 75,
+ 171,
+ 182,
+ 141,
+ 198,
+ 8,
+ 252,
+ 23,
+ 31,
+ 10,
+ 179,
+ 162,
+ 128,
+ 82,
+ 107,
+ 130,
+ 149,
+ 181,
+ 74,
+ 204,
+ 255,
+ 82,
+ 60,
+ 11,
+ 126,
+ 181,
+ 224,
+ 213,
+ 27,
+ 63,
+ 236,
+ 71,
+ 226,
+ 111,
+ 214,
+ 174,
+ 232,
+ 160,
+ 159,
+ 89,
+ 46,
+ 229,
+ 92,
+ 122,
+ 181,
+ 104,
+ 188,
+ 32,
+ 79,
+ 17,
+ 159,
+ 141,
+ 79,
+ 130,
+ 218,
+ 52,
+ 220,
+ 136,
+ 171,
+ 247,
+ 84,
+ 15,
+ 128,
+ 174,
+ 180,
+ 80,
+ 67,
+ 147,
+ 124,
+ 146,
+ 172,
+ 99,
+ 201,
+ 218,
+ 60,
+ 170,
+ 109,
+ 113,
+ 180,
+ 30,
+ 168,
+ 237,
+ 223,
+ 93,
+ 170,
+ 69,
+ 176,
+ 165,
+ 175,
+ 72,
+ 58,
+ 56,
+ 203,
+ 106,
+ 100,
+ 93,
+ 210,
+ 64,
+ 122,
+ 85,
+ 35,
+ 136,
+ 199,
+ 181,
+ 143,
+ 1,
+ 159,
+ 221,
+ 21,
+ 97,
+ 172,
+ 218,
+ 113,
+ 45,
+ 97,
+ 50,
+ 17,
+ 180,
+ 228,
+ 236,
+ 198,
+ 159,
+ 89,
+ 191,
+ 65,
+ 196,
+ 213,
+ 14,
+ 167,
+ 107,
+ 20,
+ 215,
+ 18,
+ 73,
+ 5,
+ 200,
+ 82,
+ 89,
+ 11,
+ 46,
+ 20,
+ 46,
+ 238,
+ 14,
+ 167,
+ 28,
+ 70,
+ 8,
+ 237,
+ 227,
+ 64,
+ 220,
+ 105,
+ 175,
+ 105,
+ 27,
+ 38,
+ 166,
+ 105,
+ 161,
+ 119,
+ 101,
+ 5,
+ 192,
+ 227,
+ 34,
+ 13,
+ 174,
+ 198,
+ 4,
+ 171,
+ 143,
+ 196,
+ 13,
+ 93,
+ 216,
+ 88,
+ 69,
+ 10,
+ 236,
+ 69,
+ 26,
+ 162,
+ 245,
+ 40,
+ 198,
+ 123,
+ 250,
+ 252,
+ 106,
+ 139,
+ 84,
+ 175,
+ 63,
+ 192,
+ 52,
+ 205,
+ 45,
+ 209,
+ 29,
+ 214,
+ 247,
+ 248,
+ 3,
+ 169,
+ 95,
+ 104,
+ 236,
+ 143,
+ 6,
+ 98,
+ 189,
+ 206,
+ 58,
+ 168,
+ 99,
+ 250,
+ 121,
+ 67,
+ 85,
+ 36,
+ 109,
+ 54,
+ 86,
+ 145,
+ 196,
+ 139,
+ 28,
+ 104,
+ 168,
+ 138,
+ 48,
+ 170,
+ 160,
+ 0,
+ 59,
+ 133,
+ 73,
+ 162,
+ 138,
+ 89,
+ 176,
+ 40,
+ 162,
+ 138,
+ 0,
+ 40,
+ 162,
+ 138,
+ 0,
+ 41,
+ 99,
+ 95,
+ 53,
+ 62,
+ 45,
+ 35,
+ 1,
+ 137,
+ 253,
+ 89,
+ 23,
+ 124,
+ 114,
+ 99,
+ 37,
+ 15,
+ 230,
+ 167,
+ 129,
+ 20,
+ 207,
+ 69,
+ 0,
+ 126,
+ 116,
+ 55,
+ 215,
+ 90,
+ 61,
+ 186,
+ 11,
+ 248,
+ 100,
+ 217,
+ 93,
+ 203,
+ 50,
+ 130,
+ 202,
+ 192,
+ 112,
+ 59,
+ 92,
+ 24,
+ 99,
+ 27,
+ 243,
+ 158,
+ 177,
+ 95,
+ 90,
+ 67,
+ 91,
+ 98,
+ 116,
+ 88,
+ 237,
+ 231,
+ 85,
+ 121,
+ 153,
+ 99,
+ 219,
+ 111,
+ 84,
+ 68,
+ 27,
+ 115,
+ 72,
+ 196,
+ 240,
+ 192,
+ 248,
+ 215,
+ 232,
+ 73,
+ 98,
+ 86,
+ 24,
+ 32,
+ 17,
+ 212,
+ 64,
+ 35,
+ 202,
+ 171,
+ 231,
+ 213,
+ 235,
+ 71,
+ 5,
+ 94,
+ 222,
+ 22,
+ 13,
+ 196,
+ 24,
+ 208,
+ 231,
+ 191,
+ 117,
+ 91,
+ 80,
+ 151,
+ 130,
+ 13,
+ 217,
+ 148,
+ 107,
+ 46,
+ 135,
+ 77,
+ 23,
+ 26,
+ 93,
+ 216,
+ 157,
+ 184,
+ 112,
+ 177,
+ 205,
+ 17,
+ 144,
+ 16,
+ 204,
+ 119,
+ 71,
+ 48,
+ 109,
+ 248,
+ 37,
+ 176,
+ 15,
+ 46,
+ 21,
+ 219,
+ 69,
+ 3,
+ 14,
+ 143,
+ 146,
+ 202,
+ 243,
+ 71,
+ 93,
+ 147,
+ 54,
+ 219,
+ 75,
+ 36,
+ 80,
+ 244,
+ 193,
+ 157,
+ 201,
+ 34,
+ 69,
+ 116,
+ 39,
+ 120,
+ 245,
+ 72,
+ 207,
+ 85,
+ 61,
+ 159,
+ 71,
+ 122,
+ 51,
+ 251,
+ 156,
+ 92,
+ 115,
+ 129,
+ 180,
+ 20,
+ 247,
+ 168,
+ 56,
+ 62,
+ 34,
+ 154,
+ 21,
+ 64,
+ 24,
+ 27,
+ 128,
+ 168,
+ 177,
+ 138,
+ 41,
+ 59,
+ 51,
+ 77,
+ 64,
+ 212,
+ 171,
+ 105,
+ 108,
+ 97,
+ 107,
+ 139,
+ 70,
+ 142,
+ 95,
+ 89,
+ 95,
+ 61,
+ 44,
+ 69,
+ 246,
+ 120,
+ 158,
+ 187,
+ 38,
+ 70,
+ 246,
+ 80,
+ 14,
+ 254,
+ 190,
+ 170,
+ 208,
+ 180,
+ 94,
+ 143,
+ 142,
+ 8,
+ 150,
+ 24,
+ 148,
+ 36,
+ 104,
+ 48,
+ 170,
+ 50,
+ 112,
+ 60,
+ 106,
+ 101,
+ 21,
+ 5,
+ 130,
+ 138,
+ 40,
+ 160,
+ 15,
+ 255,
+ 217
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+ ],
+ "inferenceConfig": {
+ "maxTokens": 300
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/multimodalRequest/google/error.json b/payloads/snapshots/multimodalRequest/google/error.json
new file mode 100644
index 00000000..9479d67b
--- /dev/null
+++ b/payloads/snapshots/multimodalRequest/google/error.json
@@ -0,0 +1,3 @@
+{
+ "error": "ApiError: {\"error\":{\"message\":\"{\\n \\\"error\\\": {\\n \\\"code\\\": 400,\\n \\\"message\\\": \\\"Unable to process input image. Please retry or report in https://developers.generativeai.google/guide/troubleshooting\\\",\\n \\\"status\\\": \\\"INVALID_ARGUMENT\\\"\\n }\\n}\\n\",\"code\":400,\"status\":\"Bad Request\"}}"
+}
\ No newline at end of file
diff --git a/payloads/snapshots/multimodalRequest/google/followup-request.json b/payloads/snapshots/multimodalRequest/google/followup-request.json
new file mode 100644
index 00000000..39308ba1
--- /dev/null
+++ b/payloads/snapshots/multimodalRequest/google/followup-request.json
@@ -0,0 +1,37 @@
+{
+ "contents": [
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What do you see in this image?"
+ },
+ {
+ "fileData": {
+ "mimeType": "image/jpeg",
+ "fileUri": "https://t3.ftcdn.net/jpg/02/36/99/22/360_F_236992283_sNOxCVQeFLd5pdqaKGh8DRGMZy7P4XKm.jpg"
+ }
+ }
+ ]
+ },
+ {
+ "parts": [
+ {
+ "text": "I see a delightful image of a **tabby"
+ }
+ ],
+ "role": "model"
+ },
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What should I do next?"
+ }
+ ]
+ }
+ ],
+ "config": {
+ "maxOutputTokens": 300
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/multimodalRequest/google/followup-response-streaming.json b/payloads/snapshots/multimodalRequest/google/followup-response-streaming.json
new file mode 100644
index 00000000..634febe1
--- /dev/null
+++ b/payloads/snapshots/multimodalRequest/google/followup-response-streaming.json
@@ -0,0 +1,39 @@
+[
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "That's a very open-ended question"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "MAX_TOKENS",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "9_JHaZ_2K9zwjrEPmdjFmAo",
+ "usageMetadata": {
+ "candidatesTokenCount": 9,
+ "thoughtsTokenCount": 287
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:15:37 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=6175",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/multimodalRequest/google/followup-response.json b/payloads/snapshots/multimodalRequest/google/followup-response.json
new file mode 100644
index 00000000..b6028261
--- /dev/null
+++ b/payloads/snapshots/multimodalRequest/google/followup-response.json
@@ -0,0 +1,37 @@
+{
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-encoding": "gzip",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Sun, 21 Dec 2025 13:15:36 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5274",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ },
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "That depends on what you're interested in! Here"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "MAX_TOKENS",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "-PJHadOfC9KU-8YPzJWH8Qk",
+ "usageMetadata": {
+ "candidatesTokenCount": 11,
+ "thoughtsTokenCount": 285
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/multimodalRequest/google/request.json b/payloads/snapshots/multimodalRequest/google/request.json
new file mode 100644
index 00000000..50f12349
--- /dev/null
+++ b/payloads/snapshots/multimodalRequest/google/request.json
@@ -0,0 +1,21 @@
+{
+ "contents": [
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What do you see in this image?"
+ },
+ {
+ "fileData": {
+ "mimeType": "image/jpeg",
+ "fileUri": "https://t3.ftcdn.net/jpg/02/36/99/22/360_F_236992283_sNOxCVQeFLd5pdqaKGh8DRGMZy7P4XKm.jpg"
+ }
+ }
+ ]
+ }
+ ],
+ "config": {
+ "maxOutputTokens": 300
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/multimodalRequest/google/response-streaming.json b/payloads/snapshots/multimodalRequest/google/response-streaming.json
new file mode 100644
index 00000000..2d24330d
--- /dev/null
+++ b/payloads/snapshots/multimodalRequest/google/response-streaming.json
@@ -0,0 +1,39 @@
+[
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "In this image, I see a very engaging and adorable"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "MAX_TOKENS",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "8fJHaYvaGeG1jrEP-b2O4A4",
+ "usageMetadata": {
+ "candidatesTokenCount": 11,
+ "thoughtsTokenCount": 285
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:15:30 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4857",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/multimodalRequest/google/response.json b/payloads/snapshots/multimodalRequest/google/response.json
new file mode 100644
index 00000000..0c3a15d9
--- /dev/null
+++ b/payloads/snapshots/multimodalRequest/google/response.json
@@ -0,0 +1,37 @@
+{
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-encoding": "gzip",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Sun, 21 Dec 2025 13:15:30 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4392",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ },
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "I see a delightful image of a **tabby"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "MAX_TOKENS",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "8vJHafGYFryH-8YP4Y-WkQk",
+ "usageMetadata": {
+ "candidatesTokenCount": 10,
+ "thoughtsTokenCount": 286
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequest/bedrock/followup-request.json b/payloads/snapshots/reasoningRequest/bedrock/followup-request.json
new file mode 100644
index 00000000..cc6618c9
--- /dev/null
+++ b/payloads/snapshots/reasoningRequest/bedrock/followup-request.json
@@ -0,0 +1,29 @@
+{
+ "modelId": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
+ "messages": [
+ {
+ "role": "user",
+ "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": "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 \\text{ miles}}{3 \\text{ hours}} = \\mathbf{66.67 \\text{ mph}}$$\n\n**The average speed is approximately 66.67 mph** (or 66β
mph)"
+ }
+ ]
+ },
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What should I do next?"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequest/bedrock/followup-response-streaming.json b/payloads/snapshots/reasoningRequest/bedrock/followup-response-streaming.json
new file mode 100644
index 00000000..49e14346
--- /dev/null
+++ b/payloads/snapshots/reasoningRequest/bedrock/followup-response-streaming.json
@@ -0,0 +1,517 @@
+[
+ {
+ "messageStart": {
+ "role": "assistant"
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "That"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " depends"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " on what you'"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d like to do!"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Here are some options:\n\n**"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "Continue"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " with this"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " problem"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ":**\n- Practice"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " with"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " different scenario ("
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "different"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " speeds"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "/"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "times)\n- Ask"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " about"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " relate"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d concepts"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " (like"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " average"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " velocity"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ", or"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " distance"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " calculations"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ")\n- Solve"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " more"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " complex version"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " ("
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "3"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "+"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " segments, finding"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " missing"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " values)"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n\n**Move"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " to"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " new"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " topic"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ":**\n- Work"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " on a different math"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " problem"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- Explore physics"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " concepts"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- Practice other"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " calculation"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " types"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n\n**Or"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ":**"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- Ask if"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " you have questions"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " about the solution"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " I"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " provided\n- Request"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " help with homework"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " or"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " studying"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n\nWhat"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " interests"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " you most?"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockStop": {
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "messageStop": {
+ "stopReason": "end_turn"
+ }
+ },
+ {
+ "metadata": {
+ "usage": {
+ "inputTokens": 293,
+ "outputTokens": 128,
+ "totalTokens": 421
+ },
+ "metrics": {
+ "latencyMs": 2138
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequest/bedrock/followup-response.json b/payloads/snapshots/reasoningRequest/bedrock/followup-response.json
new file mode 100644
index 00000000..300bc6bc
--- /dev/null
+++ b/payloads/snapshots/reasoningRequest/bedrock/followup-response.json
@@ -0,0 +1,29 @@
+{
+ "output": {
+ "message": {
+ "role": "assistant",
+ "content": [
+ {
+ "text": "That depends on what you want to do next! Here are some common options:\n\n## If you want to **continue learning**:\n- Practice with another average speed problem\n- Learn about other motion concepts (acceleration, velocity, relative speed)\n- Explore distance/time/speed relationships\n\n## If you want to **apply this knowledge**:\n- Use it for real trip planning (calculate average speeds on your routes)\n- Solve other physics problems\n- Study for a test or class\n\n## If you want to **try something different**:\n- Ask about a completely different topic\n- Get help with homework or another subject\n- Work through another word problem\n\n**What interests you most?** I'm happy to help with whatever you'd like to tackle next!"
+ }
+ ]
+ }
+ },
+ "stopReason": "end_turn",
+ "usage": {
+ "inputTokens": 293,
+ "outputTokens": 164,
+ "totalTokens": 457,
+ "cacheReadInputTokens": 0,
+ "cacheWriteInputTokens": 0
+ },
+ "metrics": {
+ "latencyMs": 2148
+ },
+ "$metadata": {
+ "httpStatusCode": 200,
+ "requestId": "cc82fdb8-eefe-4eff-8c35-10061db5beb3",
+ "attempts": 1,
+ "totalRetryDelay": 0
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequest/bedrock/request.json b/payloads/snapshots/reasoningRequest/bedrock/request.json
new file mode 100644
index 00000000..b7bc1ac5
--- /dev/null
+++ b/payloads/snapshots/reasoningRequest/bedrock/request.json
@@ -0,0 +1,13 @@
+{
+ "modelId": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
+ "messages": [
+ {
+ "role": "user",
+ "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?"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequest/bedrock/response-streaming.json b/payloads/snapshots/reasoningRequest/bedrock/response-streaming.json
new file mode 100644
index 00000000..f4877bb5
--- /dev/null
+++ b/payloads/snapshots/reasoningRequest/bedrock/response-streaming.json
@@ -0,0 +1,365 @@
+[
+ {
+ "messageStart": {
+ "role": "assistant"
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "#"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Average"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Spee"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d Calculation\n\n##"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Step"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 1: Find the distance"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " for"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " each segment"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n\n**First segment:**"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- Speed = 60 mph"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ","
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Time"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " = 2 hours\n- Distance"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " = "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "60 Γ"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 2 = **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "120 miles**\n\n**Second segment"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ":**\n- Speed = 80 "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "mph, Time = 1 hour"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- Distance = 80 Γ "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "1 = **80 miles**"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n\n## Step 2: Fin"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d the total distance an"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d total time\n\n-"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Total distance = 120 + "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "80 = **200 miles**"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- Total time = 2 "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "+ 1 = **3 "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "hours**\n\n## Step 3:"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Calculate average speed\n\n$$"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\\text{Average spee"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d} = \\frac{\\text{"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "Total distance}}{\\text{Total time"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "}} = \\frac{200}{"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "3} = 66.\\"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "overline{6} \\text{"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " mph}$$\n\n**"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "Answer"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ": The average speed is approximately"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 66.67 mph**"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " (or 66"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "β
mph)"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockStop": {
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "messageStop": {
+ "stopReason": "end_turn"
+ }
+ },
+ {
+ "metadata": {
+ "usage": {
+ "inputTokens": 45,
+ "outputTokens": 226,
+ "totalTokens": 271
+ },
+ "metrics": {
+ "latencyMs": 1736
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequest/bedrock/response.json b/payloads/snapshots/reasoningRequest/bedrock/response.json
new file mode 100644
index 00000000..311b1c7a
--- /dev/null
+++ b/payloads/snapshots/reasoningRequest/bedrock/response.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 \\text{ miles}}{3 \\text{ hours}} = \\mathbf{66.67 \\text{ mph}}$$\n\n**The average speed is approximately 66.67 mph** (or 66β
mph)"
+ }
+ ]
+ }
+ },
+ "stopReason": "end_turn",
+ "usage": {
+ "inputTokens": 45,
+ "outputTokens": 239,
+ "totalTokens": 284,
+ "cacheReadInputTokens": 0,
+ "cacheWriteInputTokens": 0
+ },
+ "metrics": {
+ "latencyMs": 1727
+ },
+ "$metadata": {
+ "httpStatusCode": 200,
+ "requestId": "fc130304-a059-4817-8489-cbf226dff8de",
+ "attempts": 2,
+ "totalRetryDelay": 311
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequest/google/followup-request.json b/payloads/snapshots/reasoningRequest/google/followup-request.json
new file mode 100644
index 00000000..6949bf1d
--- /dev/null
+++ b/payloads/snapshots/reasoningRequest/google/followup-request.json
@@ -0,0 +1,28 @@
+{
+ "contents": [
+ {
+ "role": "user",
+ "parts": [
+ {
+ "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?"
+ }
+ ]
+ },
+ {
+ "parts": [
+ {
+ "text": "To find the average speed, we need to calculate the total distance traveled and the total time taken. The formula for average speed is:\n\n**Average Speed = Total Distance / Total Time**\n\nLet's break down the train's journey into two parts:\n\n**Part 1: First Leg of the Journey**\n1. **Speed:** 60 mph\n2. **Time:** 2 hours\n3. **Calculate Distance for Part 1:**\n * Distance = Speed Γ Time\n * Distance_1 = 60 mph Γ 2 hours = 120 miles\n\n**Part 2: Second Leg of the Journey**\n1. **Speed:** 80 mph\n2. **Time:** 1 hour\n3. **Calculate Distance for Part 2:**\n * Distance = Speed Γ Time\n * Distance_2 = 80 mph Γ 1 hour = 80 miles\n\n**Now, let's calculate the Total Distance and Total Time:**\n\n4. **Calculate Total Distance:**\n * Total Distance = Distance_1 + Distance_2\n * Total Distance = 120 miles + 80 miles = 200 miles\n\n5. **Calculate Total Time:**\n * Total Time = Time_1 + Time_2\n * Total Time = 2 hours + 1 hour = 3 hours\n\n**Finally, calculate the Average Speed:**\n\n6. **Average Speed = Total Distance / Total Time**\n * Average Speed = 200 miles / 3 hours\n * Average Speed β 66.67 mph\n\nThe average speed of the train is **66 2/3 mph** or approximately **66.67 mph**."
+ }
+ ],
+ "role": "model"
+ },
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What should I do next?"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequest/google/followup-response-streaming.json b/payloads/snapshots/reasoningRequest/google/followup-response-streaming.json
new file mode 100644
index 00000000..46e0eed6
--- /dev/null
+++ b/payloads/snapshots/reasoningRequest/google/followup-response-streaming.json
@@ -0,0 +1,267 @@
+[
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "That depends on what you're interested in! Since we just solved a math problem, here are a few ideas related to that, or you can tell me if you'd like to do something else entirely:\n\n**Related to the Math"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IvJHaZ-rMtLfjrEP2LjLyA4",
+ "usageMetadata": {
+ "promptTokenCount": 431,
+ "candidatesTokenCount": 49,
+ "totalTokenCount": 1237,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 431
+ }
+ ],
+ "thoughtsTokenCount": 757
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:06 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4820",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " Problem:**\n\n1. **Try another similar word problem:** We can practice another average speed problem, perhaps with slightly different numbers or more segments to the journey.\n2. **Explore a different type of average problem:** We could look"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IvJHaZ-rMtLfjrEP2LjLyA4",
+ "usageMetadata": {
+ "promptTokenCount": 431,
+ "candidatesTokenCount": 98,
+ "totalTokenCount": 1286,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 431
+ }
+ ],
+ "thoughtsTokenCount": 757
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:06 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4820",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " at average temperature, average scores, or weighted averages.\n3. **Dive deeper into the concept:** Do you want to understand *why* we calculate average speed this way (and why it's not just the average of the speeds)?\n"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IvJHaZ-rMtLfjrEP2LjLyA4",
+ "usageMetadata": {
+ "promptTokenCount": 431,
+ "candidatesTokenCount": 148,
+ "totalTokenCount": 1336,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 431
+ }
+ ],
+ "thoughtsTokenCount": 757
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:06 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4820",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "4. **Create your own word problem:** You could try to make up a similar problem and then solve it.\n5. **Review the steps:** Are there any parts of the solution that were unclear, or that you'd"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IvJHaZ-rMtLfjrEP2LjLyA4",
+ "usageMetadata": {
+ "promptTokenCount": 431,
+ "candidatesTokenCount": 197,
+ "totalTokenCount": 1385,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 431
+ }
+ ],
+ "thoughtsTokenCount": 757
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:06 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4820",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " like to go over again?\n\n**Other Options:**\n\n6. **Switch to a different math topic:** Are you working on algebra, geometry, percentages, fractions, or something else?\n7. **Ask a general question:** About"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IvJHaZ-rMtLfjrEP2LjLyA4",
+ "usageMetadata": {
+ "promptTokenCount": 431,
+ "candidatesTokenCount": 247,
+ "totalTokenCount": 1435,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 431
+ }
+ ],
+ "thoughtsTokenCount": 757
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:06 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4820",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " anything you're curious about!\n8. **Tell me a story or ask for a fun fact.**\n\nJust let me know what sounds good to you!"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IvJHaZ-rMtLfjrEP2LjLyA4",
+ "usageMetadata": {
+ "promptTokenCount": 431,
+ "candidatesTokenCount": 281,
+ "totalTokenCount": 1469,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 431
+ }
+ ],
+ "thoughtsTokenCount": 757
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:06 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4820",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequest/google/followup-response.json b/payloads/snapshots/reasoningRequest/google/followup-response.json
new file mode 100644
index 00000000..4f2e1416
--- /dev/null
+++ b/payloads/snapshots/reasoningRequest/google/followup-response.json
@@ -0,0 +1,45 @@
+{
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-encoding": "gzip",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Sun, 21 Dec 2025 13:12:07 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=6226",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ },
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "Great question! What you should do next depends on what you'd like to achieve. Here are a few options:\n\n1. **Practice another similar problem:** I can generate a new average speed problem for you, perhaps with slightly different numbers or a variation in the scenario. This helps solidify your understanding.\n * *You could say:* \"Give me another average speed problem.\" or \"What if the train traveled for different times?\"\n\n2. **Explore the concept of average speed more deeply:** We can discuss *why* the average speed isn't simply the average of the two speeds (60 mph and 80 mph). It's a common misconception!\n * *You could say:* \"Why isn't the average speed just (60 + 80) / 2?\" or \"Explain the concept of weighted average in relation to this problem.\"\n\n3. **Try a different type of distance, rate, time problem:** There are many variations, like finding the time given distance and speed, or finding the speed given distance and time, or even more complex scenarios with two objects moving towards or away from each other.\n * *You could say:* \"Give me a problem where I need to find the time.\" or \"Can we do a problem with two trains?\"\n\n4. **Move on to a different math topic:** If you're confident with average speed, you can ask me for help with any other math concept or problem you're working on.\n * *You could say:* \"Let's do a problem about fractions.\" or \"Can you help me with algebra?\"\n\nJust let me know what you'd prefer!"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "J_JHaeCdM6WujrEP_5OJuQk",
+ "usageMetadata": {
+ "promptTokenCount": 431,
+ "candidatesTokenCount": 354,
+ "totalTokenCount": 1703,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 431
+ }
+ ],
+ "thoughtsTokenCount": 918
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequest/google/request.json b/payloads/snapshots/reasoningRequest/google/request.json
new file mode 100644
index 00000000..fdda104c
--- /dev/null
+++ b/payloads/snapshots/reasoningRequest/google/request.json
@@ -0,0 +1,12 @@
+{
+ "contents": [
+ {
+ "role": "user",
+ "parts": [
+ {
+ "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?"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequest/google/response-streaming.json b/payloads/snapshots/reasoningRequest/google/response-streaming.json
new file mode 100644
index 00000000..084f009c
--- /dev/null
+++ b/payloads/snapshots/reasoningRequest/google/response-streaming.json
@@ -0,0 +1,311 @@
+[
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "To find the average speed, we need to calculate the **total distance traveled** and divide it by the **total time taken**.\n\nHere's how to solve it step-by-step:\n\n**Step 1: Calculate the"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZiyFaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 37,
+ "candidatesTokenCount": 48,
+ "totalTokenCount": 829,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 37
+ }
+ ],
+ "thoughtsTokenCount": 744
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:00 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=3687",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " distance traveled in the first part of the journey.**\n* Speed = 60 mph\n* Time = 2 hours\n* Distance = Speed Γ Time\n* Distance 1 = 60 mph Γ "
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZiyFaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 37,
+ "candidatesTokenCount": 95,
+ "totalTokenCount": 876,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 37
+ }
+ ],
+ "thoughtsTokenCount": 744
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:00 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=3687",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "2 hours = 120 miles\n\n**Step 2: Calculate the distance traveled in the second part of the journey.**\n* Speed = 80 mph\n* Time = 1 hour\n* Distance ="
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZiyFaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 37,
+ "candidatesTokenCount": 143,
+ "totalTokenCount": 924,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 37
+ }
+ ],
+ "thoughtsTokenCount": 744
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:00 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=3687",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " Speed Γ Time\n* Distance 2 = 80 mph Γ 1 hour = 80 miles\n\n**Step 3: Calculate the total distance traveled.**\n* Total Distance = Distance 1 + Distance 2"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZiyFaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 37,
+ "candidatesTokenCount": 191,
+ "totalTokenCount": 972,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 37
+ }
+ ],
+ "thoughtsTokenCount": 744
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:00 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=3687",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "\n* Total Distance = 120 miles + 80 miles = 200 miles\n\n**Step 4: Calculate the total time taken.**\n* Total Time = Time 1 + Time 2\n"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZiyFaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 37,
+ "candidatesTokenCount": 237,
+ "totalTokenCount": 1018,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 37
+ }
+ ],
+ "thoughtsTokenCount": 744
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:00 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=3687",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "* Total Time = 2 hours + 1 hour = 3 hours\n\n**Step 5: Calculate the average speed.**\n* Average Speed = Total Distance / Total Time\n* Average Speed = 200"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZiyFaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 37,
+ "candidatesTokenCount": 285,
+ "totalTokenCount": 1066,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 37
+ }
+ ],
+ "thoughtsTokenCount": 744
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:00 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=3687",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " miles / 3 hours\n* Average Speed $\\approx$ 66.67 mph\n\nThe average speed of the train is approximately **66.67 mph**."
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZiyFaLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 37,
+ "candidatesTokenCount": 322,
+ "totalTokenCount": 1103,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 37
+ }
+ ],
+ "thoughtsTokenCount": 744
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:00 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=3687",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequest/google/response.json b/payloads/snapshots/reasoningRequest/google/response.json
new file mode 100644
index 00000000..39e6a983
--- /dev/null
+++ b/payloads/snapshots/reasoningRequest/google/response.json
@@ -0,0 +1,45 @@
+{
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-encoding": "gzip",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Sun, 21 Dec 2025 13:12:00 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=3777",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ },
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "To find the average speed, we need to calculate the total distance traveled and the total time taken. The formula for average speed is:\n\n**Average Speed = Total Distance / Total Time**\n\nLet's break down the train's journey into two parts:\n\n**Part 1: First Leg of the Journey**\n1. **Speed:** 60 mph\n2. **Time:** 2 hours\n3. **Calculate Distance for Part 1:**\n * Distance = Speed Γ Time\n * Distance_1 = 60 mph Γ 2 hours = 120 miles\n\n**Part 2: Second Leg of the Journey**\n1. **Speed:** 80 mph\n2. **Time:** 1 hour\n3. **Calculate Distance for Part 2:**\n * Distance = Speed Γ Time\n * Distance_2 = 80 mph Γ 1 hour = 80 miles\n\n**Now, let's calculate the Total Distance and Total Time:**\n\n4. **Calculate Total Distance:**\n * Total Distance = Distance_1 + Distance_2\n * Total Distance = 120 miles + 80 miles = 200 miles\n\n5. **Calculate Total Time:**\n * Total Time = Time_1 + Time_2\n * Total Time = 2 hours + 1 hour = 3 hours\n\n**Finally, calculate the Average Speed:**\n\n6. **Average Speed = Total Distance / Total Time**\n * Average Speed = 200 miles / 3 hours\n * Average Speed β 66.67 mph\n\nThe average speed of the train is **66 2/3 mph** or approximately **66.67 mph**."
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IPJHafrELvDujrEP3K3RuAs",
+ "usageMetadata": {
+ "promptTokenCount": 37,
+ "candidatesTokenCount": 386,
+ "totalTokenCount": 946,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 37
+ }
+ ],
+ "thoughtsTokenCount": 523
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequestTruncated/bedrock/followup-request.json b/payloads/snapshots/reasoningRequestTruncated/bedrock/followup-request.json
new file mode 100644
index 00000000..50522522
--- /dev/null
+++ b/payloads/snapshots/reasoningRequestTruncated/bedrock/followup-request.json
@@ -0,0 +1,32 @@
+{
+ "modelId": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
+ "messages": [
+ {
+ "role": "user",
+ "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": "assistant",
+ "content": [
+ {
+ "text": "# Average Speed Calculation\n\n## Step 1: Find the distance for each segment\n\n**First segment:**\n- Speed = 60 mph\n- Time = 2 hours\n- Distance = 60 Γ 2 = **120 miles**\n\n**Second segment:**\n- Speed = 80 mph\n- Time = 1 hour\n- Distance = 80 Γ 1 = **80 miles**\n\n## Step 2: Calculate"
+ }
+ ]
+ },
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What should I do next?"
+ }
+ ]
+ }
+ ],
+ "inferenceConfig": {
+ "maxTokens": 100
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequestTruncated/bedrock/followup-response-streaming.json b/payloads/snapshots/reasoningRequestTruncated/bedrock/followup-response-streaming.json
new file mode 100644
index 00000000..047fadcb
--- /dev/null
+++ b/payloads/snapshots/reasoningRequestTruncated/bedrock/followup-response-streaming.json
@@ -0,0 +1,181 @@
+[
+ {
+ "messageStart": {
+ "role": "assistant"
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "#"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Step"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 2: Calculate Total"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Distance and Total"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Time\n\n**"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "Total"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Distance:**\n- "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "120 miles +"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 80 miles = **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "200 miles**\n\n**Total Time"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ":**\n- 2 hours +"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 1 hour = **3 "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "hours**\n\n## Step 3:"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Apply"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " the Average Speed Formula\n\n$$"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\\text{Average Speed} = \\"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "frac{\\text{Total Distance}}"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "{\\text{Total Time}}$$"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n\n$$\\text{Average Speed} ="
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockStop": {
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "messageStop": {
+ "stopReason": "max_tokens"
+ }
+ },
+ {
+ "metadata": {
+ "usage": {
+ "inputTokens": 157,
+ "outputTokens": 100,
+ "totalTokens": 257
+ },
+ "metrics": {
+ "latencyMs": 1037
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequestTruncated/bedrock/followup-response.json b/payloads/snapshots/reasoningRequestTruncated/bedrock/followup-response.json
new file mode 100644
index 00000000..27011010
--- /dev/null
+++ b/payloads/snapshots/reasoningRequestTruncated/bedrock/followup-response.json
@@ -0,0 +1,29 @@
+{
+ "output": {
+ "message": {
+ "role": "assistant",
+ "content": [
+ {
+ "text": "# Step 3: Calculate Total Distance and Total Time\n\n**Total Distance:**\n- 120 miles + 80 miles = **200 miles**\n\n**Total Time:**\n- 2 hours + 1 hour = **3 hours**\n\n## Step 4: Apply the Average Speed Formula\n\n$$\\text{Average Speed} = \\frac{\\text{Total Distance}}{\\text{Total Time}}$$\n\n$$\\text{Average Speed} ="
+ }
+ ]
+ }
+ },
+ "stopReason": "max_tokens",
+ "usage": {
+ "inputTokens": 157,
+ "outputTokens": 100,
+ "totalTokens": 257,
+ "cacheReadInputTokens": 0,
+ "cacheWriteInputTokens": 0
+ },
+ "metrics": {
+ "latencyMs": 1023
+ },
+ "$metadata": {
+ "httpStatusCode": 200,
+ "requestId": "4231b063-9e1d-4595-80a7-54cfccb206ac",
+ "attempts": 3,
+ "totalRetryDelay": 605
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequestTruncated/bedrock/request.json b/payloads/snapshots/reasoningRequestTruncated/bedrock/request.json
new file mode 100644
index 00000000..1ab4d08e
--- /dev/null
+++ b/payloads/snapshots/reasoningRequestTruncated/bedrock/request.json
@@ -0,0 +1,16 @@
+{
+ "modelId": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
+ "messages": [
+ {
+ "role": "user",
+ "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?"
+ }
+ ]
+ }
+ ],
+ "inferenceConfig": {
+ "maxTokens": 100
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequestTruncated/bedrock/response-streaming.json b/payloads/snapshots/reasoningRequestTruncated/bedrock/response-streaming.json
new file mode 100644
index 00000000..61cff58d
--- /dev/null
+++ b/payloads/snapshots/reasoningRequestTruncated/bedrock/response-streaming.json
@@ -0,0 +1,205 @@
+[
+ {
+ "messageStart": {
+ "role": "assistant"
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "#"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Average"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Spee"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d Calculation\n\n##"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Step"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 1: Fin"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d the distance for"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " each segment\n\n**First segment:**"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- Speed = 60 mph"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ","
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Time = 2 hours\n-"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Distance = "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "60 Γ"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " 2 = **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "120 miles**\n\n**Second segment"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ":**\n- Speed = 80 "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "mph, Time = 1 hour"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- Distance = 80 Γ "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "1 = **80 miles**"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n\n## Step 2: Fin"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d total"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " distance"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockStop": {
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "messageStop": {
+ "stopReason": "max_tokens"
+ }
+ },
+ {
+ "metadata": {
+ "usage": {
+ "inputTokens": 45,
+ "outputTokens": 100,
+ "totalTokens": 145
+ },
+ "metrics": {
+ "latencyMs": 1121
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequestTruncated/bedrock/response.json b/payloads/snapshots/reasoningRequestTruncated/bedrock/response.json
new file mode 100644
index 00000000..240baaa3
--- /dev/null
+++ b/payloads/snapshots/reasoningRequestTruncated/bedrock/response.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\n- Time = 2 hours\n- Distance = 60 Γ 2 = **120 miles**\n\n**Second segment:**\n- Speed = 80 mph\n- Time = 1 hour\n- Distance = 80 Γ 1 = **80 miles**\n\n## Step 2: Calculate"
+ }
+ ]
+ }
+ },
+ "stopReason": "max_tokens",
+ "usage": {
+ "inputTokens": 45,
+ "outputTokens": 100,
+ "totalTokens": 145,
+ "cacheReadInputTokens": 0,
+ "cacheWriteInputTokens": 0
+ },
+ "metrics": {
+ "latencyMs": 1077
+ },
+ "$metadata": {
+ "httpStatusCode": 200,
+ "requestId": "df64a60a-f948-470b-9b97-5effef2d4e69",
+ "attempts": 1,
+ "totalRetryDelay": 0
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequestTruncated/google/followup-request.json b/payloads/snapshots/reasoningRequestTruncated/google/followup-request.json
new file mode 100644
index 00000000..7ca4c3fa
--- /dev/null
+++ b/payloads/snapshots/reasoningRequestTruncated/google/followup-request.json
@@ -0,0 +1,31 @@
+{
+ "contents": [
+ {
+ "role": "user",
+ "parts": [
+ {
+ "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?"
+ }
+ ]
+ },
+ {
+ "parts": [
+ {
+ "text": "Let'"
+ }
+ ],
+ "role": "model"
+ },
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What should I do next?"
+ }
+ ]
+ }
+ ],
+ "config": {
+ "maxOutputTokens": 100
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequestTruncated/google/followup-response-streaming.json b/payloads/snapshots/reasoningRequestTruncated/google/followup-response-streaming.json
new file mode 100644
index 00000000..83e05ea1
--- /dev/null
+++ b/payloads/snapshots/reasoningRequestTruncated/google/followup-response-streaming.json
@@ -0,0 +1,47 @@
+[
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "Okay"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "MAX_TOKENS",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HvJHafriCdmG-8YPxcjikAQ",
+ "usageMetadata": {
+ "promptTokenCount": 47,
+ "candidatesTokenCount": 1,
+ "totalTokenCount": 143,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 47
+ }
+ ],
+ "thoughtsTokenCount": 95
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:11:58 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=725",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequestTruncated/google/followup-response.json b/payloads/snapshots/reasoningRequestTruncated/google/followup-response.json
new file mode 100644
index 00000000..7f763ca9
--- /dev/null
+++ b/payloads/snapshots/reasoningRequestTruncated/google/followup-response.json
@@ -0,0 +1,45 @@
+{
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-encoding": "gzip",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Sun, 21 Dec 2025 13:11:58 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=817",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ },
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "Okay, great!"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "MAX_TOKENS",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HvJHae-WLJ2s-8YP2MqhiQY",
+ "usageMetadata": {
+ "promptTokenCount": 47,
+ "candidatesTokenCount": 4,
+ "totalTokenCount": 143,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 47
+ }
+ ],
+ "thoughtsTokenCount": 92
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequestTruncated/google/request.json b/payloads/snapshots/reasoningRequestTruncated/google/request.json
new file mode 100644
index 00000000..5b886476
--- /dev/null
+++ b/payloads/snapshots/reasoningRequestTruncated/google/request.json
@@ -0,0 +1,15 @@
+{
+ "contents": [
+ {
+ "role": "user",
+ "parts": [
+ {
+ "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?"
+ }
+ ]
+ }
+ ],
+ "config": {
+ "maxOutputTokens": 100
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequestTruncated/google/response-streaming.json b/payloads/snapshots/reasoningRequestTruncated/google/response-streaming.json
new file mode 100644
index 00000000..53715911
--- /dev/null
+++ b/payloads/snapshots/reasoningRequestTruncated/google/response-streaming.json
@@ -0,0 +1,47 @@
+[
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "Let's"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "MAX_TOKENS",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaYbyGoOkjrEPhfG76Ac",
+ "usageMetadata": {
+ "promptTokenCount": 37,
+ "candidatesTokenCount": 3,
+ "totalTokenCount": 133,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 37
+ }
+ ],
+ "thoughtsTokenCount": 93
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:11:57 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=849",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningRequestTruncated/google/response.json b/payloads/snapshots/reasoningRequestTruncated/google/response.json
new file mode 100644
index 00000000..891dfa3c
--- /dev/null
+++ b/payloads/snapshots/reasoningRequestTruncated/google/response.json
@@ -0,0 +1,45 @@
+{
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-encoding": "gzip",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Sun, 21 Dec 2025 13:11:57 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=765",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ },
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "Let'"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "MAX_TOKENS",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaZzTLLyH-8YP4Y-WkQk",
+ "usageMetadata": {
+ "promptTokenCount": 37,
+ "candidatesTokenCount": 2,
+ "totalTokenCount": 133,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 37
+ }
+ ],
+ "thoughtsTokenCount": 94
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningWithOutput/bedrock/followup-request.json b/payloads/snapshots/reasoningWithOutput/bedrock/followup-request.json
new file mode 100644
index 00000000..63314735
--- /dev/null
+++ b/payloads/snapshots/reasoningWithOutput/bedrock/followup-request.json
@@ -0,0 +1,29 @@
+{
+ "modelId": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What color is the sky?"
+ }
+ ]
+ },
+ {
+ "role": "assistant",
+ "content": [
+ {
+ "text": "The sky is typically **blue** during the day due to Rayleigh scattering, which causes shorter blue wavelengths of light to scatter more than longer red wavelengths.\n\nHowever, the sky can appear different colors depending on conditions:\n- **Orange/red** at sunset and sunrise\n- **Gray or white** on cloudy days\n- **Deep blue or purple** at high altitudes or in space\n- **Various colors** during twilight"
+ }
+ ]
+ },
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What should I do next?"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningWithOutput/bedrock/followup-response-streaming.json b/payloads/snapshots/reasoningWithOutput/bedrock/followup-response-streaming.json
new file mode 100644
index 00000000..62bb9d90
--- /dev/null
+++ b/payloads/snapshots/reasoningWithOutput/bedrock/followup-response-streaming.json
@@ -0,0 +1,509 @@
+[
+ {
+ "messageStart": {
+ "role": "assistant"
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "That"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " depends"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " on what"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " you'"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d like to accomplish"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "! Here are some common"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " options"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ":\n\n-"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " **Continue"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " our"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " conversation** β"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Ask"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " me"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " another"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " question or"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " explore"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " topic you're curious about\n- **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "Take"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a break** β Step"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " away,"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " stretch, grab"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " water"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " or"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " snack\n- **Work"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " on a task"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "** β Return"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " to something"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " you were doing before"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- **Get"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " outside"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "** β Go for a walk, enjoy"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " the"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " sky"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " we"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " just"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " talked about!"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- **Learn something new** β"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Let"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " me help"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " explain"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " concept or topic"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- **Plan"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " your"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " day"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "** β Tell"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " me what"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "'s"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " on your agenda"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " an"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d I"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " can help"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " priorit"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "ize\n\nWhat sounds most appe"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "aling to you right now,"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " or is"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " there something specific you'd like help"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " with?"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockStop": {
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "messageStop": {
+ "stopReason": "end_turn"
+ }
+ },
+ {
+ "metadata": {
+ "usage": {
+ "inputTokens": 123,
+ "outputTokens": 153,
+ "totalTokens": 276
+ },
+ "metrics": {
+ "latencyMs": 2047
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningWithOutput/bedrock/followup-response.json b/payloads/snapshots/reasoningWithOutput/bedrock/followup-response.json
new file mode 100644
index 00000000..6af33399
--- /dev/null
+++ b/payloads/snapshots/reasoningWithOutput/bedrock/followup-response.json
@@ -0,0 +1,29 @@
+{
+ "output": {
+ "message": {
+ "role": "assistant",
+ "content": [
+ {
+ "text": "That depends on what you'd like to accomplish! Here are some common options:\n\n- **Continue our conversation** β Ask me another question or explore a topic you're curious about\n- **Take a break** β Step away, stretch, get some water\n- **Work on a task** β Focus on something you need to do today\n- **Learn something new** β Ask me to explain a concept, help with a project, or provide information\n- **Get creative** β Ask for writing ideas, brainstorming help, or problem-solving assistance\n- **Plan ahead** β Organize your schedule or think through your goals\n\nWhat sounds most helpful or interesting to you right now?"
+ }
+ ]
+ }
+ },
+ "stopReason": "end_turn",
+ "usage": {
+ "inputTokens": 123,
+ "outputTokens": 146,
+ "totalTokens": 269,
+ "cacheReadInputTokens": 0,
+ "cacheWriteInputTokens": 0
+ },
+ "metrics": {
+ "latencyMs": 2105
+ },
+ "$metadata": {
+ "httpStatusCode": 200,
+ "requestId": "7d91e345-701a-4fe8-8265-396d0842153b",
+ "attempts": 1,
+ "totalRetryDelay": 0
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningWithOutput/bedrock/request.json b/payloads/snapshots/reasoningWithOutput/bedrock/request.json
new file mode 100644
index 00000000..04c8ed0a
--- /dev/null
+++ b/payloads/snapshots/reasoningWithOutput/bedrock/request.json
@@ -0,0 +1,13 @@
+{
+ "modelId": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What color is the sky?"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningWithOutput/bedrock/response-streaming.json b/payloads/snapshots/reasoningWithOutput/bedrock/response-streaming.json
new file mode 100644
index 00000000..84e7ae01
--- /dev/null
+++ b/payloads/snapshots/reasoningWithOutput/bedrock/response-streaming.json
@@ -0,0 +1,357 @@
+[
+ {
+ "messageStart": {
+ "role": "assistant"
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "The sky is"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " typically"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "blue**"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " during"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " the day,"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " cause"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d by sun"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "light scattering off"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " molecules"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " in the atmosphere"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " ("
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "a"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " phenomenon"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " called Rayleigh scattering"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ")."
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n\nHowever, the sky"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " can appear"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " different"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " colors depending on conditions"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ":\n- **Orange"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ","
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " red, or pink** at"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " sunrise an"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d sunset"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- **Gray"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "** on"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " clou"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "dy or"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " overcast days\n- **Deep"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " blue or"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " purple** at high"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " altitudes"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- **Black"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "** at"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " night ("
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "when the"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " sun's"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " light doesn"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "'t reach it"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ")"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockStop": {
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "messageStop": {
+ "stopReason": "end_turn"
+ }
+ },
+ {
+ "metadata": {
+ "usage": {
+ "inputTokens": 13,
+ "outputTokens": 107,
+ "totalTokens": 120
+ },
+ "metrics": {
+ "latencyMs": 1592
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningWithOutput/bedrock/response.json b/payloads/snapshots/reasoningWithOutput/bedrock/response.json
new file mode 100644
index 00000000..d3d16cdb
--- /dev/null
+++ b/payloads/snapshots/reasoningWithOutput/bedrock/response.json
@@ -0,0 +1,29 @@
+{
+ "output": {
+ "message": {
+ "role": "assistant",
+ "content": [
+ {
+ "text": "The sky is typically **blue** during the day due to Rayleigh scattering, which causes shorter blue wavelengths of light to scatter more than longer red wavelengths.\n\nHowever, the sky can appear different colors depending on conditions:\n- **Orange/red** at sunset and sunrise\n- **Gray or white** on cloudy days\n- **Deep blue or purple** at high altitudes or in space\n- **Various colors** during twilight"
+ }
+ ]
+ }
+ },
+ "stopReason": "end_turn",
+ "usage": {
+ "inputTokens": 13,
+ "outputTokens": 101,
+ "totalTokens": 114,
+ "cacheReadInputTokens": 0,
+ "cacheWriteInputTokens": 0
+ },
+ "metrics": {
+ "latencyMs": 1470
+ },
+ "$metadata": {
+ "httpStatusCode": 200,
+ "requestId": "e461219b-c4f9-47d1-849f-0ed5bc27d456",
+ "attempts": 1,
+ "totalRetryDelay": 0
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningWithOutput/google/followup-request.json b/payloads/snapshots/reasoningWithOutput/google/followup-request.json
new file mode 100644
index 00000000..d20c236a
--- /dev/null
+++ b/payloads/snapshots/reasoningWithOutput/google/followup-request.json
@@ -0,0 +1,28 @@
+{
+ "contents": [
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What color is the sky?"
+ }
+ ]
+ },
+ {
+ "parts": [
+ {
+ "text": "The sky is most commonly **blue** during the day.\n\nThis is due to a phenomenon called **Rayleigh scattering**. Sunlight contains all the colors of the rainbow. When sunlight enters Earth's atmosphere, the shorter wavelengths (like blue and violet) are scattered more efficiently by the tiny nitrogen and oxygen molecules than the longer wavelengths (like red and yellow). Because blue light is scattered in all directions, it makes the sky appear blue to our eyes.\n\nHowever, the sky's color can vary greatly depending on several factors:\n\n* **Sunrise and Sunset:** It often appears **red, orange, pink, or purple**. At these times, the sun's light has to travel through more of the atmosphere, scattering away most of the blue light, leaving the longer red and yellow wavelengths to reach our eyes.\n* **Clouds:** On cloudy or stormy days, the sky can appear **grey** or even **white**.\n* **Night:** At night, without the sun's light, the sky appears **black** (though we can see stars).\n* **Pollution/Haze:** In some conditions, pollution or haze can give the sky a brownish, yellowish, or dull white tint.\n\nSo, while **blue** is the most typical answer, it's definitely not the only color the sky can be!"
+ }
+ ],
+ "role": "model"
+ },
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What should I do next?"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningWithOutput/google/followup-response-streaming.json b/payloads/snapshots/reasoningWithOutput/google/followup-response-streaming.json
new file mode 100644
index 00000000..ecf132aa
--- /dev/null
+++ b/payloads/snapshots/reasoningWithOutput/google/followup-response-streaming.json
@@ -0,0 +1,575 @@
+[
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "That's a fun, open-ended question! To give you the best suggestion, I need a little more context about what you're looking for. Tell me:\n\n1. **What kind of mood are you in?"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IfJHaZfAFuGxjrEP66Ww8Ao",
+ "usageMetadata": {
+ "promptTokenCount": 291,
+ "candidatesTokenCount": 48,
+ "totalTokenCount": 1203,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 291
+ }
+ ],
+ "thoughtsTokenCount": 864
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:05 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4642",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "** (e.g., bored, energetic, tired, stressed, creative, social, hungry, curious)\n2. **What's your general goal right now?** (e.g., relax, be productive, learn something"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IfJHaZfAFuGxjrEP66Ww8Ao",
+ "usageMetadata": {
+ "promptTokenCount": 291,
+ "candidatesTokenCount": 97,
+ "totalTokenCount": 1252,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 291
+ }
+ ],
+ "thoughtsTokenCount": 864
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:05 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4642",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " new, have fun, connect with someone)\n3. **What resources do you have available?** (e.g., are you at home, outside, with friends, alone, near a computer, have art supplies, etc.)"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IfJHaZfAFuGxjrEP66Ww8Ao",
+ "usageMetadata": {
+ "promptTokenCount": 291,
+ "candidatesTokenCount": 146,
+ "totalTokenCount": 1301,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 291
+ }
+ ],
+ "thoughtsTokenCount": 864
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:05 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4642",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "\n4. **How much time do you have?** (e.g., 5 minutes, an hour, all afternoon, the whole evening)\n\nIn the meantime, here are some general categories of things you could do,"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IfJHaZfAFuGxjrEP66Ww8Ao",
+ "usageMetadata": {
+ "promptTokenCount": 291,
+ "candidatesTokenCount": 193,
+ "totalTokenCount": 1348,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 291
+ }
+ ],
+ "thoughtsTokenCount": 864
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:05 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4642",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " pick one that resonates:\n\n**For Relaxation & Self-Care:**\n* Take a few deep breaths or meditate for a few minutes.\n* Listen to some calming music or a podcast.\n* Read a book or"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IfJHaZfAFuGxjrEP66Ww8Ao",
+ "usageMetadata": {
+ "promptTokenCount": 291,
+ "candidatesTokenCount": 241,
+ "totalTokenCount": 1396,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 291
+ }
+ ],
+ "thoughtsTokenCount": 864
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:05 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4642",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " an interesting article.\n* Make a cup of tea or coffee.\n* Take a short nap or rest your eyes.\n* Stretch or do some gentle yoga.\n\n**For Productivity & Organization:**\n* Make"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IfJHaZfAFuGxjrEP66Ww8Ao",
+ "usageMetadata": {
+ "promptTokenCount": 291,
+ "candidatesTokenCount": 289,
+ "totalTokenCount": 1444,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 291
+ }
+ ],
+ "thoughtsTokenCount": 864
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:05 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4642",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " a to-do list for the rest of your day/week.\n* Tidy up a small area (your desk, a drawer, the kitchen counter).\n* Answer any pending emails or messages.\n* Plan"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IfJHaZfAFuGxjrEP66Ww8Ao",
+ "usageMetadata": {
+ "promptTokenCount": 291,
+ "candidatesTokenCount": 337,
+ "totalTokenCount": 1492,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 291
+ }
+ ],
+ "thoughtsTokenCount": 864
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:05 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4642",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " your next meal or grocery list.\n* Do a quick chore you've been putting off.\n\n**For Learning & Growth:**\n* Watch a documentary or an educational YouTube video.\n* Learn a few words in a new"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IfJHaZfAFuGxjrEP66Ww8Ao",
+ "usageMetadata": {
+ "promptTokenCount": 291,
+ "candidatesTokenCount": 387,
+ "totalTokenCount": 1542,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 291
+ }
+ ],
+ "thoughtsTokenCount": 864
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:05 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4642",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " language.\n* Read about a topic you're curious about.\n* Try out a new recipe.\n* Practice a skill you're trying to develop.\n\n**For Fun & Creativity:**\n* Listen"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IfJHaZfAFuGxjrEP66Ww8Ao",
+ "usageMetadata": {
+ "promptTokenCount": 291,
+ "candidatesTokenCount": 435,
+ "totalTokenCount": 1590,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 291
+ }
+ ],
+ "thoughtsTokenCount": 864
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:05 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4642",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " to your favorite music and dance.\n* Draw, doodle, or write something.\n* Play a game (video game, board game, puzzle).\n* Watch an episode of a show or a movie.\n* "
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IfJHaZfAFuGxjrEP66Ww8Ao",
+ "usageMetadata": {
+ "promptTokenCount": 291,
+ "candidatesTokenCount": 483,
+ "totalTokenCount": 1638,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 291
+ }
+ ],
+ "thoughtsTokenCount": 864
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:05 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4642",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "Do something artistic (paint, knit, play an instrument).\n\n**For Physical Activity & Outdoors:**\n* Go for a short walk outside.\n* Do some quick exercises (jumping jacks, push-ups).\n* Step"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IfJHaZfAFuGxjrEP66Ww8Ao",
+ "usageMetadata": {
+ "promptTokenCount": 291,
+ "candidatesTokenCount": 532,
+ "totalTokenCount": 1687,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 291
+ }
+ ],
+ "thoughtsTokenCount": 864
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:05 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4642",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " outside and get some fresh air.\n* Do some gardening if you have a garden.\n\n**For Social Connection:**\n* Text or call a friend or family member.\n* Plan a future get-together.\n\nOnce you give"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IfJHaZfAFuGxjrEP66Ww8Ao",
+ "usageMetadata": {
+ "promptTokenCount": 291,
+ "candidatesTokenCount": 583,
+ "totalTokenCount": 1738,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 291
+ }
+ ],
+ "thoughtsTokenCount": 864
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:05 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4642",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " me a bit more info, I can give you a more tailored suggestion!"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IfJHaZfAFuGxjrEP66Ww8Ao",
+ "usageMetadata": {
+ "promptTokenCount": 291,
+ "candidatesTokenCount": 598,
+ "totalTokenCount": 1753,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 291
+ }
+ ],
+ "thoughtsTokenCount": 864
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:05 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4642",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningWithOutput/google/followup-response.json b/payloads/snapshots/reasoningWithOutput/google/followup-response.json
new file mode 100644
index 00000000..b31debdc
--- /dev/null
+++ b/payloads/snapshots/reasoningWithOutput/google/followup-response.json
@@ -0,0 +1,45 @@
+{
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-encoding": "gzip",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Sun, 21 Dec 2025 13:12:10 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=9325",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ },
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "That's a fantastic, open-ended question! To give you the best advice, I need a little more context. However, I can offer some general frameworks and suggestions.\n\nTo figure out \"what you should do next,\" consider these factors:\n\n**1. Your Current State:**\n* **Energy Level:** Do you feel energized, tired, or somewhere in between?\n* **Mood:** Are you feeling productive, bored, stressed, happy, restless, relaxed?\n* **Time Available:** Do you have 5 minutes, an hour, an afternoon, or the whole day?\n* **Location:** Are you at home, work, outside, with others, alone?\n\n**2. Your Goals & Priorities:**\n* **Obligations:** Is there anything you *have* to do (work, chores, appointments)?\n* **Urgency:** What's the most pressing thing on your plate?\n* **Long-Term Goals:** Is there anything you can do that moves you closer to a personal or professional goal?\n* **What would make you feel accomplished/happy/relaxed?**\n\n---\n\n**Based on those considerations, here are some broad categories of things you could do:**\n\n**A. If you need to be PRODUCTIVE/ACCOMPLISH Something:**\n* **Work/Study:** Tackle a pending task, reply to emails, organize your digital files.\n* **Household Chores:** Do a quick tidy-up, do laundry, plan your meals for the week.\n* **Planning:** Make a to-do list, plan your next day/week, set some goals.\n* **Errands:** Pay a bill, make an appointment, pick up groceries.\n\n**B. If you need to RELAX/RECHARGE:**\n* **Mindfulness/Meditation:** Do a short guided meditation, practice deep breathing.\n* **Physical Relaxation:** Take a warm bath/shower, stretch, lie down for a bit.\n* **Sensory Input:** Listen to calming music, light a candle, enjoy a warm beverage.\n* **Nature:** Look out a window, step outside for a breath of fresh air, water plants.\n\n**C. If you need to be ACTIVE/MOVE:**\n* **Exercise:** Go for a walk, do some quick stretches, dance to music, do a short workout.\n* **Active Chores:** Garden, clean a room thoroughly, rearrange furniture.\n* **Outdoor Activity:** Go for a bike ride, play a sport (if you have the means).\n\n**D. If you need to LEARN/GROW:**\n* **Read:** Pick up a book, read an article, browse a topic of interest online.\n* **Skill Development:** Practice a hobby, learn a new word, watch a tutorial video.\n* **Listen:** Listen to a podcast, an audiobook, or a TED Talk.\n\n**E. If you need to be CREATIVE/ENTERTAINED:**\n* **Hobbies:** Engage in a craft, draw, write, play a musical instrument.\n* **Entertainment:** Watch a short video, listen to music, play a game, watch an episode of a show.\n* **Cook/Bake:** Try a new recipe or make a favorite comfort food.\n\n**F. If you need to CONNECT/SOCIALIZE:**\n* **Reach Out:** Text a friend, call a family member, send an email.\n* **Help Others:** Do something kind for someone, offer assistance.\n\n---\n\n**My Best Recommendation Without Context:**\nIf you're truly stumped, try doing **one small, easy thing** that you've been putting off. Even a 5-minute task can create momentum and a sense of accomplishment.\n\nSo, tell me more, or pick one of the categories above that resonates with you right now!"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "KvJHaaOzGKua-8YPlJ7rsAM",
+ "usageMetadata": {
+ "promptTokenCount": 291,
+ "candidatesTokenCount": 822,
+ "totalTokenCount": 2255,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 291
+ }
+ ],
+ "thoughtsTokenCount": 1142
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningWithOutput/google/request.json b/payloads/snapshots/reasoningWithOutput/google/request.json
new file mode 100644
index 00000000..8b4851f7
--- /dev/null
+++ b/payloads/snapshots/reasoningWithOutput/google/request.json
@@ -0,0 +1,12 @@
+{
+ "contents": [
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What color is the sky?"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningWithOutput/google/response-streaming.json b/payloads/snapshots/reasoningWithOutput/google/response-streaming.json
new file mode 100644
index 00000000..159f56c6
--- /dev/null
+++ b/payloads/snapshots/reasoningWithOutput/google/response-streaming.json
@@ -0,0 +1,311 @@
+[
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "The sky is most commonly **blue**.\n\nHowever, its color can change dramatically depending on the time of day, weather, and atmospheric conditions:\n\n* **Blue:** This is due to Rayleigh scattering. Sunlight contains all colors, but when it"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaauWF-bRjrEP4LfaKQ",
+ "usageMetadata": {
+ "promptTokenCount": 7,
+ "candidatesTokenCount": 50,
+ "totalTokenCount": 566,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 7
+ }
+ ],
+ "thoughtsTokenCount": 509
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:11:59 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=2857",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " enters Earth's atmosphere, blue light (which has shorter wavelengths) is scattered more efficiently by the tiny nitrogen and oxygen molecules. This scattered blue light reaches our eyes from all directions, making the sky appear blue.\n* **Red,"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaauWF-bRjrEP4LfaKQ",
+ "usageMetadata": {
+ "promptTokenCount": 7,
+ "candidatesTokenCount": 99,
+ "totalTokenCount": 615,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 7
+ }
+ ],
+ "thoughtsTokenCount": 509
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:11:59 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=2857",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " Orange, Pink, Purple:** At **sunrise and sunset**, the sun's light has to travel through more of the atmosphere to reach our eyes. Most of the blue and green light gets scattered away, leaving the longer-wavelength red,"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaauWF-bRjrEP4LfaKQ",
+ "usageMetadata": {
+ "promptTokenCount": 7,
+ "candidatesTokenCount": 147,
+ "totalTokenCount": 663,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 7
+ }
+ ],
+ "thoughtsTokenCount": 509
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:11:59 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=2857",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " orange, and yellow light to be seen. Clouds can also reflect these colors, creating stunning pinks and purples.\n* **Grey/Dark Blue:** When it's **cloudy or stormy**, clouds block and reflect sunlight, making"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaauWF-bRjrEP4LfaKQ",
+ "usageMetadata": {
+ "promptTokenCount": 7,
+ "candidatesTokenCount": 197,
+ "totalTokenCount": 713,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 7
+ }
+ ],
+ "thoughtsTokenCount": 509
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:11:59 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=2857",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " the sky appear grey or a very dark, ominous blue.\n* **Black:** At **night**, without the sun's light interacting with the atmosphere, the sky appears black, allowing us to see stars.\n* **Hazy/"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaauWF-bRjrEP4LfaKQ",
+ "usageMetadata": {
+ "promptTokenCount": 7,
+ "candidatesTokenCount": 248,
+ "totalTokenCount": 764,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 7
+ }
+ ],
+ "thoughtsTokenCount": 509
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:11:59 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=2857",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "Yellowish/Reddish:** Sometimes, due to **pollution, dust, or smoke** (e.g., from wildfires), the sky can take on a hazy, yellowish, or reddish tint, as these particles scatter light differently.\n\nSo"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaauWF-bRjrEP4LfaKQ",
+ "usageMetadata": {
+ "promptTokenCount": 7,
+ "candidatesTokenCount": 297,
+ "totalTokenCount": 813,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 7
+ }
+ ],
+ "thoughtsTokenCount": 509
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:11:59 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=2857",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": ", while blue is its most iconic color, the sky is a dynamic canvas of many hues!"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaauWF-bRjrEP4LfaKQ",
+ "usageMetadata": {
+ "promptTokenCount": 7,
+ "candidatesTokenCount": 316,
+ "totalTokenCount": 832,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 7
+ }
+ ],
+ "thoughtsTokenCount": 509
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:11:59 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=2857",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/reasoningWithOutput/google/response.json b/payloads/snapshots/reasoningWithOutput/google/response.json
new file mode 100644
index 00000000..2c25bf9c
--- /dev/null
+++ b/payloads/snapshots/reasoningWithOutput/google/response.json
@@ -0,0 +1,45 @@
+{
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-encoding": "gzip",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Sun, 21 Dec 2025 13:12:01 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=4010",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ },
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "The sky is most commonly **blue** during the day.\n\nThis is due to a phenomenon called **Rayleigh scattering**. Sunlight contains all the colors of the rainbow. When sunlight enters Earth's atmosphere, the shorter wavelengths (like blue and violet) are scattered more efficiently by the tiny nitrogen and oxygen molecules than the longer wavelengths (like red and yellow). Because blue light is scattered in all directions, it makes the sky appear blue to our eyes.\n\nHowever, the sky's color can vary greatly depending on several factors:\n\n* **Sunrise and Sunset:** It often appears **red, orange, pink, or purple**. At these times, the sun's light has to travel through more of the atmosphere, scattering away most of the blue light, leaving the longer red and yellow wavelengths to reach our eyes.\n* **Clouds:** On cloudy or stormy days, the sky can appear **grey** or even **white**.\n* **Night:** At night, without the sun's light, the sky appears **black** (though we can see stars).\n* **Pollution/Haze:** In some conditions, pollution or haze can give the sky a brownish, yellowish, or dull white tint.\n\nSo, while **blue** is the most typical answer, it's definitely not the only color the sky can be!"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "IPJHaZGAPZ_I-8YP_oCuoAs",
+ "usageMetadata": {
+ "promptTokenCount": 7,
+ "candidatesTokenCount": 276,
+ "totalTokenCount": 715,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 7
+ }
+ ],
+ "thoughtsTokenCount": 432
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/simpleRequest/bedrock/followup-request.json b/payloads/snapshots/simpleRequest/bedrock/followup-request.json
new file mode 100644
index 00000000..0fa4b640
--- /dev/null
+++ b/payloads/snapshots/simpleRequest/bedrock/followup-request.json
@@ -0,0 +1,29 @@
+{
+ "modelId": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What is the capital of France?"
+ }
+ ]
+ },
+ {
+ "role": "assistant",
+ "content": [
+ {
+ "text": "The capital of France is Paris."
+ }
+ ]
+ },
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What should I do next?"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/payloads/snapshots/simpleRequest/bedrock/followup-response-streaming.json b/payloads/snapshots/simpleRequest/bedrock/followup-response-streaming.json
new file mode 100644
index 00000000..6783d43a
--- /dev/null
+++ b/payloads/snapshots/simpleRequest/bedrock/followup-response-streaming.json
@@ -0,0 +1,309 @@
+[
+ {
+ "messageStart": {
+ "role": "assistant"
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "That"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " depends"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " on what you're intereste"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d in! Here are some common"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " options"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ":\n\n-"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " **Learn"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " more"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "**"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " -"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Ask"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " me"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " about Paris"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ", France, or"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " any other topic\n- **Plan"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " trip** - I can help with"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " travel tips"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ", attractions"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ", or"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " logistics"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- **Continue"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " conversation** - Tell"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " me what"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " you'"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "d like to discuss"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " next"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n- **Ask"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " a different"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " question** - I'm happy"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " to help with anything"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " else"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "\n\nWhat would you like to "
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "do?"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockStop": {
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "messageStop": {
+ "stopReason": "end_turn"
+ }
+ },
+ {
+ "metadata": {
+ "usage": {
+ "inputTokens": 33,
+ "outputTokens": 97,
+ "totalTokens": 130
+ },
+ "metrics": {
+ "latencyMs": 1419
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/simpleRequest/bedrock/followup-response.json b/payloads/snapshots/simpleRequest/bedrock/followup-response.json
new file mode 100644
index 00000000..5aec6af9
--- /dev/null
+++ b/payloads/snapshots/simpleRequest/bedrock/followup-response.json
@@ -0,0 +1,29 @@
+{
+ "output": {
+ "message": {
+ "role": "assistant",
+ "content": [
+ {
+ "text": "That depends on what you're interested in! Here are some options:\n\n- **Continue learning** - Ask me about French history, culture, geography, or anything else you're curious about\n- **New topic** - Switch to a completely different subject\n- **Get practical help** - I can assist with writing, analysis, coding, math, planning, or many other tasks\n- **Have a conversation** - Just chat about whatever's on your mind\n\nWhat would you like to do?"
+ }
+ ]
+ }
+ },
+ "stopReason": "end_turn",
+ "usage": {
+ "inputTokens": 33,
+ "outputTokens": 104,
+ "totalTokens": 137,
+ "cacheReadInputTokens": 0,
+ "cacheWriteInputTokens": 0
+ },
+ "metrics": {
+ "latencyMs": 1500
+ },
+ "$metadata": {
+ "httpStatusCode": 200,
+ "requestId": "8c7ccf57-d503-406f-8a36-dbf53d3bef7e",
+ "attempts": 1,
+ "totalRetryDelay": 0
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/simpleRequest/bedrock/request.json b/payloads/snapshots/simpleRequest/bedrock/request.json
new file mode 100644
index 00000000..cafdaed5
--- /dev/null
+++ b/payloads/snapshots/simpleRequest/bedrock/request.json
@@ -0,0 +1,13 @@
+{
+ "modelId": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What is the capital of France?"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/payloads/snapshots/simpleRequest/bedrock/response-streaming.json b/payloads/snapshots/simpleRequest/bedrock/response-streaming.json
new file mode 100644
index 00000000..35bd4d32
--- /dev/null
+++ b/payloads/snapshots/simpleRequest/bedrock/response-streaming.json
@@ -0,0 +1,37 @@
+[
+ {
+ "messageStart": {
+ "role": "assistant"
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "The capital of France is Paris."
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockStop": {
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "messageStop": {
+ "stopReason": "end_turn"
+ }
+ },
+ {
+ "metadata": {
+ "usage": {
+ "inputTokens": 14,
+ "outputTokens": 10,
+ "totalTokens": 24
+ },
+ "metrics": {
+ "latencyMs": 631
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/simpleRequest/bedrock/response.json b/payloads/snapshots/simpleRequest/bedrock/response.json
new file mode 100644
index 00000000..e72b3e95
--- /dev/null
+++ b/payloads/snapshots/simpleRequest/bedrock/response.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": 627
+ },
+ "$metadata": {
+ "httpStatusCode": 200,
+ "requestId": "85f088b9-8a2e-4dbb-a2b2-b5d60a7d72f7",
+ "attempts": 1,
+ "totalRetryDelay": 0
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/simpleRequest/google/followup-request.json b/payloads/snapshots/simpleRequest/google/followup-request.json
new file mode 100644
index 00000000..a1ad123c
--- /dev/null
+++ b/payloads/snapshots/simpleRequest/google/followup-request.json
@@ -0,0 +1,28 @@
+{
+ "contents": [
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What is the capital of France?"
+ }
+ ]
+ },
+ {
+ "parts": [
+ {
+ "text": "The capital of France is **Paris**."
+ }
+ ],
+ "role": "model"
+ },
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What should I do next?"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/payloads/snapshots/simpleRequest/google/followup-response-streaming.json b/payloads/snapshots/simpleRequest/google/followup-response-streaming.json
new file mode 100644
index 00000000..6a43a4f4
--- /dev/null
+++ b/payloads/snapshots/simpleRequest/google/followup-response-streaming.json
@@ -0,0 +1,179 @@
+[
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "That's a very open-ended question! To give you the best suggestion, could you tell me a little more about what kind of \"next\" you're thinking of?\n\nFor example, are you wondering:\n\n* "
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHabLsOKLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 24,
+ "candidatesTokenCount": 47,
+ "totalTokenCount": 1124,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 24
+ }
+ ],
+ "thoughtsTokenCount": 1053
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:02 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5193",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "**What to ask me next?** (e.g., about another country, a different topic entirely, a creative writing prompt, a game, a joke?)\n* **What to do related to France/Paris?** ("
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHabLsOKLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 24,
+ "candidatesTokenCount": 95,
+ "totalTokenCount": 1172,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 24
+ }
+ ],
+ "thoughtsTokenCount": 1053
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:02 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5193",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "e.g., learn more about its history, famous landmarks, culture, food, or plan a hypothetical trip?)\n* **What to do in general?** (e.g., suggestions for a hobby, a task, something"
+ }
+ ],
+ "role": "model"
+ },
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHabLsOKLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 24,
+ "candidatesTokenCount": 143,
+ "totalTokenCount": 1220,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 24
+ }
+ ],
+ "thoughtsTokenCount": 1053
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:02 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5193",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ },
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": " fun to do on your computer, a relaxation idea?)\n\nOnce I know what you're looking for, I can give you a more specific idea!"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHabLsOKLujrEP29jTwAk",
+ "usageMetadata": {
+ "promptTokenCount": 24,
+ "candidatesTokenCount": 174,
+ "totalTokenCount": 1251,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 24
+ }
+ ],
+ "thoughtsTokenCount": 1053
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:12:02 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=5193",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/simpleRequest/google/followup-response.json b/payloads/snapshots/simpleRequest/google/followup-response.json
new file mode 100644
index 00000000..00777ffa
--- /dev/null
+++ b/payloads/snapshots/simpleRequest/google/followup-response.json
@@ -0,0 +1,45 @@
+{
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-encoding": "gzip",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Sun, 21 Dec 2025 13:12:03 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=6063",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ },
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "That's a great question! It really depends on what you're curious about or what you're trying to achieve.\n\nHere are a few ideas for what you could do next:\n\n1. **Ask me another question:** You could ask me about anything at all β history, science, technology, current events, culture, or even just random facts.\n2. **Dive deeper into France/Paris:** We could explore more about France, Paris, its history, famous landmarks, cuisine, or culture.\n3. **Start a new topic entirely:** Tell me a topic you're interested in, and we can discuss it. For example, \"Tell me about the Amazon rainforest\" or \"Explain quantum physics in simple terms.\"\n4. **Get help with a task:** I can help you brainstorm ideas, write a short paragraph, summarize information, or even help you outline a plan.\n5. **Just for fun:** Ask me to tell you a joke, a fun fact, or suggest a creative writing prompt.\n\nWhat sounds most appealing to you, or do you have something else in mind?"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "I_JHacr4J7-4jrEPg5fzqQo",
+ "usageMetadata": {
+ "promptTokenCount": 24,
+ "candidatesTokenCount": 233,
+ "totalTokenCount": 1334,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 24
+ }
+ ],
+ "thoughtsTokenCount": 1077
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/simpleRequest/google/request.json b/payloads/snapshots/simpleRequest/google/request.json
new file mode 100644
index 00000000..0ea9fc39
--- /dev/null
+++ b/payloads/snapshots/simpleRequest/google/request.json
@@ -0,0 +1,12 @@
+{
+ "contents": [
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What is the capital of France?"
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/payloads/snapshots/simpleRequest/google/response-streaming.json b/payloads/snapshots/simpleRequest/google/response-streaming.json
new file mode 100644
index 00000000..b01f437e
--- /dev/null
+++ b/payloads/snapshots/simpleRequest/google/response-streaming.json
@@ -0,0 +1,47 @@
+[
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "The capital of France is **Paris**."
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHabbDFbHvjrEPmILAgAY",
+ "usageMetadata": {
+ "promptTokenCount": 8,
+ "candidatesTokenCount": 8,
+ "totalTokenCount": 44,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 8
+ }
+ ],
+ "thoughtsTokenCount": 28
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:11:57 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=496",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/simpleRequest/google/response.json b/payloads/snapshots/simpleRequest/google/response.json
new file mode 100644
index 00000000..effe0a72
--- /dev/null
+++ b/payloads/snapshots/simpleRequest/google/response.json
@@ -0,0 +1,45 @@
+{
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-encoding": "gzip",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Sun, 21 Dec 2025 13:11:57 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=598",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ },
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "The capital of France is **Paris**."
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHafWMIvW2jrEPlpKP6A0",
+ "usageMetadata": {
+ "promptTokenCount": 8,
+ "candidatesTokenCount": 8,
+ "totalTokenCount": 46,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 8
+ }
+ ],
+ "thoughtsTokenCount": 30
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/toolCallRequest/bedrock/followup-request.json b/payloads/snapshots/toolCallRequest/bedrock/followup-request.json
new file mode 100644
index 00000000..c92e3cb6
--- /dev/null
+++ b/payloads/snapshots/toolCallRequest/bedrock/followup-request.json
@@ -0,0 +1,67 @@
+{
+ "modelId": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What's the weather like in San Francisco?"
+ }
+ ]
+ },
+ {
+ "role": "assistant",
+ "content": [
+ {
+ "toolUse": {
+ "toolUseId": "tooluse_vCKqaulJSgCGcGPjIKJWSA",
+ "name": "get_weather",
+ "input": {
+ "location": "San Francisco, CA"
+ },
+ "type": "tool_use"
+ }
+ }
+ ]
+ },
+ {
+ "role": "user",
+ "content": [
+ {
+ "toolResult": {
+ "toolUseId": "tooluse_vCKqaulJSgCGcGPjIKJWSA",
+ "content": [
+ {
+ "text": "71 degrees"
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ],
+ "toolConfig": {
+ "tools": [
+ {
+ "toolSpec": {
+ "name": "get_weather",
+ "description": "Get the current weather for a location",
+ "inputSchema": {
+ "json": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "The city and state, e.g. San Francisco, CA"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/toolCallRequest/bedrock/followup-response-streaming.json b/payloads/snapshots/toolCallRequest/bedrock/followup-response-streaming.json
new file mode 100644
index 00000000..403a81f0
--- /dev/null
+++ b/payloads/snapshots/toolCallRequest/bedrock/followup-response-streaming.json
@@ -0,0 +1,101 @@
+[
+ {
+ "messageStart": {
+ "role": "assistant"
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "The"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " weather in San Francisco is currently"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " **"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "71 degrees"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " Fahrenheit**"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": ". It"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "'s a pleasant,"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": " mild temperature"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "text": "!"
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockStop": {
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "messageStop": {
+ "stopReason": "end_turn"
+ }
+ },
+ {
+ "metadata": {
+ "usage": {
+ "inputTokens": 657,
+ "outputTokens": 27,
+ "totalTokens": 684
+ },
+ "metrics": {
+ "latencyMs": 788
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/toolCallRequest/bedrock/followup-response.json b/payloads/snapshots/toolCallRequest/bedrock/followup-response.json
new file mode 100644
index 00000000..5abfc7ca
--- /dev/null
+++ b/payloads/snapshots/toolCallRequest/bedrock/followup-response.json
@@ -0,0 +1,29 @@
+{
+ "output": {
+ "message": {
+ "role": "assistant",
+ "content": [
+ {
+ "text": "The weather in San Francisco, CA is currently **71 degrees Fahrenheit**. It's a pleasant and mild day!"
+ }
+ ]
+ }
+ },
+ "stopReason": "end_turn",
+ "usage": {
+ "inputTokens": 657,
+ "outputTokens": 29,
+ "totalTokens": 686,
+ "cacheReadInputTokens": 0,
+ "cacheWriteInputTokens": 0
+ },
+ "metrics": {
+ "latencyMs": 744
+ },
+ "$metadata": {
+ "httpStatusCode": 200,
+ "requestId": "992633ed-07a8-4a00-8565-fee146b2354c",
+ "attempts": 3,
+ "totalRetryDelay": 1083
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/toolCallRequest/bedrock/request.json b/payloads/snapshots/toolCallRequest/bedrock/request.json
new file mode 100644
index 00000000..24bda8b9
--- /dev/null
+++ b/payloads/snapshots/toolCallRequest/bedrock/request.json
@@ -0,0 +1,37 @@
+{
+ "modelId": "us.anthropic.claude-haiku-4-5-20251001-v1:0",
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {
+ "text": "What's the weather like in San Francisco?"
+ }
+ ]
+ }
+ ],
+ "toolConfig": {
+ "tools": [
+ {
+ "toolSpec": {
+ "name": "get_weather",
+ "description": "Get the current weather for a location",
+ "inputSchema": {
+ "json": {
+ "type": "object",
+ "properties": {
+ "location": {
+ "type": "string",
+ "description": "The city and state, e.g. San Francisco, CA"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ }
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/toolCallRequest/bedrock/response-streaming.json b/payloads/snapshots/toolCallRequest/bedrock/response-streaming.json
new file mode 100644
index 00000000..c00eb614
--- /dev/null
+++ b/payloads/snapshots/toolCallRequest/bedrock/response-streaming.json
@@ -0,0 +1,111 @@
+[
+ {
+ "messageStart": {
+ "role": "assistant"
+ }
+ },
+ {
+ "contentBlockStart": {
+ "start": {
+ "toolUse": {
+ "toolUseId": "tooluse__cBUqPIbRROb0PASbeZd6w",
+ "name": "get_weather",
+ "type": "tool_use"
+ }
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "toolUse": {
+ "input": ""
+ }
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "toolUse": {
+ "input": "{\"location"
+ }
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "toolUse": {
+ "input": "\": \"Sa"
+ }
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "toolUse": {
+ "input": "n Fran"
+ }
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "toolUse": {
+ "input": "cisc"
+ }
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "toolUse": {
+ "input": "o,"
+ }
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockDelta": {
+ "delta": {
+ "toolUse": {
+ "input": " CA\"}"
+ }
+ },
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "contentBlockStop": {
+ "contentBlockIndex": 0
+ }
+ },
+ {
+ "messageStop": {
+ "stopReason": "tool_use"
+ }
+ },
+ {
+ "metadata": {
+ "usage": {
+ "inputTokens": 585,
+ "outputTokens": 57,
+ "totalTokens": 642
+ },
+ "metrics": {
+ "latencyMs": 706
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/toolCallRequest/bedrock/response.json b/payloads/snapshots/toolCallRequest/bedrock/response.json
new file mode 100644
index 00000000..59114c35
--- /dev/null
+++ b/payloads/snapshots/toolCallRequest/bedrock/response.json
@@ -0,0 +1,36 @@
+{
+ "output": {
+ "message": {
+ "role": "assistant",
+ "content": [
+ {
+ "toolUse": {
+ "toolUseId": "tooluse_vCKqaulJSgCGcGPjIKJWSA",
+ "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": 815
+ },
+ "$metadata": {
+ "httpStatusCode": 200,
+ "requestId": "44ecb601-db20-4f1a-b935-49a71b19d65c",
+ "attempts": 1,
+ "totalRetryDelay": 0
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/toolCallRequest/google/followup-request.json b/payloads/snapshots/toolCallRequest/google/followup-request.json
new file mode 100644
index 00000000..5a8b8ed2
--- /dev/null
+++ b/payloads/snapshots/toolCallRequest/google/followup-request.json
@@ -0,0 +1,51 @@
+{
+ "contents": [
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What's the weather like in San Francisco?"
+ }
+ ]
+ },
+ {
+ "parts": [
+ {
+ "text": "I need to know which state San Francisco is in.",
+ "thoughtSignature": "CpQDAXLI2nycZHzmwtbR1O0II6PzWoBs+ZkmPt7RS4c2JQ/GFJ8cz3U103KezG75qcvOf+Gny2dpm2aHuL9c35lpiiNZahNH42sZTxD4ntsuOrzOI+cg/GoTyypYBLvAss222NvlErwnAKh11nS/y4MKDbyRuD9QQKxKl20D4MjiXreI9RLFv9F4zRU8egMUwGxuGavgv50J47XVJniB/00pCeQzAJP9YRawHd9bN0NWomkgdwg5X3Ra6WnG22sJuf35GVIgFkfzXnT9YCSAtJx2hrmn0wLi0olVjexhJnNquxdqvo4rFxCXQgFi1Jrqp3n5C6nZ/8v57AZM9o5B3UKheUeLLBFcVorB4ZdJ7U0ZioPr6QJlex+g6NN84+2GpcXMUb/5LV48sAjQZGoI8xjmNXInm3wHKZfsqD+vXYXiKmA8ue6joVqh6fZ5aa5p36DplLwXfkFcsPSzaZP0D+yfyLY6kEBhTowoqlK1AU7wEngyE/Cfbb4YBvv1F+tkWje65SfOvd28MngWMMe52LhSjVk7jBM="
+ }
+ ],
+ "role": "model"
+ },
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What should I do next?"
+ }
+ ]
+ }
+ ],
+ "tools": [
+ {
+ "functionDeclarations": [
+ {
+ "name": "get_weather",
+ "description": "Get the current weather for a location",
+ "parameters": {
+ "type": "OBJECT",
+ "properties": {
+ "location": {
+ "type": "STRING",
+ "description": "The city and state, e.g. San Francisco, CA"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/payloads/snapshots/toolCallRequest/google/followup-response-streaming.json b/payloads/snapshots/toolCallRequest/google/followup-response-streaming.json
new file mode 100644
index 00000000..49877c11
--- /dev/null
+++ b/payloads/snapshots/toolCallRequest/google/followup-response-streaming.json
@@ -0,0 +1,48 @@
+[
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "Please tell me which state San Francisco is in, and I can tell you the weather there.",
+ "thoughtSignature": "CiIBcsjafKFermw4cNm2Votcf/U/iYte2JTSGwqL6BP8snQ3CmABcsjafLx6aHHqXsuhQf7EGNcIfIzgQwZ5Rk7JMiW0WeFF4U8Do0jNH92PJXK1RtA7xFk7XP+jq6DnT/mG8Uz7WTPZNVCESLY82Lda86nrwsIkndMrRcFS/Agh9QkJPv4K4AEBcsjafExgJYYvYpLqhn0ie0I+L9ZlP0ymIcrfQOWNZKPmeOqKDe/hzBsTEKP6HjFgEp9BP68pjZkslqqKibWFb5fgObAuW4dkDy9hKVDsKiODI8AqR/wIvKKaXNXE/XB8/rgjO24AmFbr6soJfZbkkMWOCxpW8cs5kMdUUAv9rrDYRn8JVtlMNUz7QBlDCfIr+6mFtQMu23YCYmJ1+BsmMUvFWj1EFTWEkREptNY+gdh1YfHbaWDVlOieC9B+xf/ocZkC/jP+6t5j/DcnKvc3Kipr6vy+/gHBMBqSNbY8IArqAQFyyNp8v4rV4ccOQSdzOJJAkP2exdjglb1ztlX4IDvd58MCi0uhhHi/23hoEsVTm5dQ19c8a+g2bvNonBcTcjkUl4rVBeBTfp7Bwwto9hCUej1SeuwJAilnyYAloSG0YkXQRwfCwHhSN+0yzMf92YrUy8g1o38gv8lu8jEpWrD664gR3bzBrdHeO9nWRjO0LDAy99LzXddR4UBwx5Z89QLaMqHJeZDREfwsdDG7ZZX96kwIlbGs6mf9FsZDOSWUVtfcCNY4+Rz2ffs419pbHbgmy8wJWn8QNPTLXt282l3x8eCp57cP1FKy6grxAQFyyNp87UtTUbAEm3degu4eQyng/e72PRDtFXZwgKwbQoLD1Jl4JCO8kvwmWSZrxV7C23n7vgehx3cZBEMUFftO72AUn4+vf8DGy47zwe+1Ukq6ud794d/4PCgge3rj8tdjmPt1AUB4rUKvFwweKvHB3R+xU4Guo23c7UfsdvsfiGOQVGf+whmZWNFM896rhEeAJ9g2v/J4dVHquRiqFYN34CatRjz4sJQ9nn4ew8ftc4R/jBkTNbBPm5wZg1efbeb1cfV8u/I4qwcuTXGwqtDHY73TziRQ0ptPbq4AeXfBjGrH/ApyBGiMOjZ3Chcqyw0K+QEBcsjafJGzafzu0QWoTqBwOYV1H69rQ50FNesCVexj7kOF/PmD7QZQj6r19ne8f93jKVrXOWD1P8ngyhns898YlD1OC2Ke+JB6CJ4BK1XkwwlhF1XYBrkWMs7k9qLUPiM1VbHoM0gc3yjfmTdQ/9tAvwN4nPsDDlKZ7GVrZOJeqLdzlJq7cNcFpHIob7HUZ7TOPjvuKfWdcSbbekNs0ahb1rJrRvC2NpEEEqj3Jv96CxWcHFOGzObnGyMrlQPww9OM25e9njofZGSdI0YcE4RpLsghVkf2oMAooulPpA+gIDLVQYPo0kKj2vsNBPuyTlgBRqnaEOjlykMKpAIBcsjafJlyeIDye3yo3WADPnib+u39TClGNsxKNHjnzN2RpQVallhsqBIgmJkCZYvuX6djyflVTXY2fQiKunm4Rl1Cpmleeni2q1y7OOGePkaedWvgyylvgcn7IDtWodumRUNgm9+ptoCNt4K5HvITvfkfoX3/UOUr+2mLWQV+vFPE3J/L0KQsMay89VvY1moGAdaQKeuE/AL1/PDbiFBlwO+RU0NK7Nppi5dewU9JQ3BDXGhn4g3lc5J6zZWTvS8rsLZNjeX3UsvyonBUfz8QfNkQ3QnkAprE32ZAudrTSQr/TvsUE2PXoCu8jX4fu0pm2LWtXeIygX9do9ukUCg091hVUbjQHspWTxcff1IWG8e6PKQePShiJGmnxdFmh7MTx0iyCuIBAXLI2nzlkgZAfqIEU2JsAXsw1AaDdicB/su7WbA/ehhv3spqtdNcpEb1tNqxbBKsSoQNvnzKqlT6G5zy+TiWPivKouq3IZAt4xj8oGD6thpHyF+/03WpnPy5VU6n2XIpClt+DMlVWQLu5u2tVFSOhQklqUzAs/ssvK2HNFRsA4bV2uN5is7m7srmIplbnm/yfWYYWuC4ykaay16QVGldQZL9xoiskjwmCgppKvCR6cPV6x8naT9iKDRAu5n+TzgtndKq3mvYbARrDK3OFggERsh+9OEWXK5+4PM28huJmxvSKgpdAXLI2nzAJHbPdnan+4WoZuognNz9jIA0ZvmHIBXipJYybGGqLB9BLVbpbenTW48vpSWBBZDVwJVxx1ESIRZLP06e7hWR/gBcKlikZY+mHOPZMrlOXMud/HafA7As"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HvJHafXUCsjvjrEPws-ymAY",
+ "usageMetadata": {
+ "promptTokenCount": 81,
+ "candidatesTokenCount": 19,
+ "totalTokenCount": 422,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 81
+ }
+ ],
+ "thoughtsTokenCount": 322
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:11:59 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=1864",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/toolCallRequest/google/followup-response.json b/payloads/snapshots/toolCallRequest/google/followup-response.json
new file mode 100644
index 00000000..0cd04200
--- /dev/null
+++ b/payloads/snapshots/toolCallRequest/google/followup-response.json
@@ -0,0 +1,46 @@
+{
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-encoding": "gzip",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Sun, 21 Dec 2025 13:11:58 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=794",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ },
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "Please tell me what you would like to do next, and I will try to help! I can tell you the weather in a particular location if you provide the city and state.",
+ "thoughtSignature": "CuoBAXLI2nxWvixXM2LAU9HXkrQbE+RuNUbY73/MnDG3Dtz/ac3XvvKexPoRXTrPXKMfXtezaw+aGS+E0V5Gb9zV1B4CR1ytCARaKDJVhCmvF6sNmznDdEZpcvIKbSlucK6MN5amICVD8FQkk7m9PY6kTz2Fj9ZNmLaZ3iN5Wl6T2v14+9ZmIDjHypwAVdCJpxJAQo2SNyjgMrvynoiwtFAL4inYFjjOf6vDINnvL03suw27beivkSsPSAlTw0DFj3DfXh1Opr6XIOMJFmfXXjfvYAO2OXe2CdOqB6cSJ9COf7MnPtfkbrzksoH6"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaarwONLfjrEP2LjLyA4",
+ "usageMetadata": {
+ "promptTokenCount": 81,
+ "candidatesTokenCount": 36,
+ "totalTokenCount": 158,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 81
+ }
+ ],
+ "thoughtsTokenCount": 41
+ }
+}
\ No newline at end of file
diff --git a/payloads/snapshots/toolCallRequest/google/request.json b/payloads/snapshots/toolCallRequest/google/request.json
new file mode 100644
index 00000000..66ba324d
--- /dev/null
+++ b/payloads/snapshots/toolCallRequest/google/request.json
@@ -0,0 +1,34 @@
+{
+ "contents": [
+ {
+ "role": "user",
+ "parts": [
+ {
+ "text": "What's the weather like in San Francisco?"
+ }
+ ]
+ }
+ ],
+ "tools": [
+ {
+ "functionDeclarations": [
+ {
+ "name": "get_weather",
+ "description": "Get the current weather for a location",
+ "parameters": {
+ "type": "OBJECT",
+ "properties": {
+ "location": {
+ "type": "STRING",
+ "description": "The city and state, e.g. San Francisco, CA"
+ }
+ },
+ "required": [
+ "location"
+ ]
+ }
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/payloads/snapshots/toolCallRequest/google/response-streaming.json b/payloads/snapshots/toolCallRequest/google/response-streaming.json
new file mode 100644
index 00000000..b1ff4c8f
--- /dev/null
+++ b/payloads/snapshots/toolCallRequest/google/response-streaming.json
@@ -0,0 +1,53 @@
+[
+ {
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "functionCall": {
+ "name": "get_weather",
+ "args": {
+ "location": "San Francisco, CA"
+ }
+ },
+ "thoughtSignature": "CiQBcsjafLpjXzdrfX6/TW5aZ93PbKQUx6Yr3C5ovooPZQXF5kEKawFyyNp808QOQLd3k8RgqUO3LLqceJwIUjxdjBKMz6yt9flS/+Zo6+XsPXNm+96jeg6TOZ6WnTS1uZrkJftiTLZdhVxS5fkvbXZ082kFUtC7GARgHR1GwOq+2BV8LjLcKSjpubG0VgyAVG2aCpACAXLI2nyOiofAE8ACDYCqlLlNeRrmSIkrZPS6qpYTOgEW/NqN2k5CPfnn5XW+ubVQUiqCAOaqLwd6/F3Im2uJqarf/Vc5N0dcwz7PQPhDvKmhwjKUiJog4czvVz7VLV4FXrZZ539Iq2Bv/rreHXDSERIw5TCvM58TQXcTo8xcD4v13lH5kz4zm3FdYRCDvN7gxf7UW20DGU4TeIwHQ7ELDyBoES25KtJfAfS2/TN1f7qzDWvdT7YD/yJ+qcaVtaQgMfJXr2ZZ0gjWQpBR8nQJVHm3okIbYCLEapgsE1idgjhmGXlFuE/WbCJKSU6GAV0h06mWUNgMcIp9sv1pgR2kd2OktST09q2bZU6t9YKamIsKIwFyyNp8JdTRCA9Vh/DwwhHbO79fOJZnZT/eNUzYD4fAVxyg"
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHadHaFuOzjrEPsYao4Ac",
+ "usageMetadata": {
+ "promptTokenCount": 62,
+ "candidatesTokenCount": 18,
+ "totalTokenCount": 150,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 62
+ }
+ ],
+ "thoughtsTokenCount": 70
+ },
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-disposition": "attachment",
+ "content-type": "text/event-stream",
+ "date": "Sun, 21 Dec 2025 13:11:57 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=743",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ }
+ }
+]
\ No newline at end of file
diff --git a/payloads/snapshots/toolCallRequest/google/response.json b/payloads/snapshots/toolCallRequest/google/response.json
new file mode 100644
index 00000000..8ba66fa4
--- /dev/null
+++ b/payloads/snapshots/toolCallRequest/google/response.json
@@ -0,0 +1,46 @@
+{
+ "sdkHttpResponse": {
+ "headers": {
+ "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000",
+ "content-encoding": "gzip",
+ "content-type": "application/json; charset=UTF-8",
+ "date": "Sun, 21 Dec 2025 13:11:57 GMT",
+ "server": "scaffolding on HTTPServer2",
+ "server-timing": "gfet4t7; dur=720",
+ "transfer-encoding": "chunked",
+ "vary": "Origin, X-Origin, Referer",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "0"
+ }
+ },
+ "candidates": [
+ {
+ "content": {
+ "parts": [
+ {
+ "text": "I need to know which state San Francisco is in.",
+ "thoughtSignature": "CpQDAXLI2nycZHzmwtbR1O0II6PzWoBs+ZkmPt7RS4c2JQ/GFJ8cz3U103KezG75qcvOf+Gny2dpm2aHuL9c35lpiiNZahNH42sZTxD4ntsuOrzOI+cg/GoTyypYBLvAss222NvlErwnAKh11nS/y4MKDbyRuD9QQKxKl20D4MjiXreI9RLFv9F4zRU8egMUwGxuGavgv50J47XVJniB/00pCeQzAJP9YRawHd9bN0NWomkgdwg5X3Ra6WnG22sJuf35GVIgFkfzXnT9YCSAtJx2hrmn0wLi0olVjexhJnNquxdqvo4rFxCXQgFi1Jrqp3n5C6nZ/8v57AZM9o5B3UKheUeLLBFcVorB4ZdJ7U0ZioPr6QJlex+g6NN84+2GpcXMUb/5LV48sAjQZGoI8xjmNXInm3wHKZfsqD+vXYXiKmA8ue6joVqh6fZ5aa5p36DplLwXfkFcsPSzaZP0D+yfyLY6kEBhTowoqlK1AU7wEngyE/Cfbb4YBvv1F+tkWje65SfOvd28MngWMMe52LhSjVk7jBM="
+ }
+ ],
+ "role": "model"
+ },
+ "finishReason": "STOP",
+ "index": 0
+ }
+ ],
+ "modelVersion": "gemini-2.5-flash",
+ "responseId": "HfJHaeSNLZjO-8YPg-iv0Ak",
+ "usageMetadata": {
+ "promptTokenCount": 62,
+ "candidatesTokenCount": 11,
+ "totalTokenCount": 162,
+ "promptTokensDetails": [
+ {
+ "modality": "TEXT",
+ "tokenCount": 62
+ }
+ ],
+ "thoughtsTokenCount": 89
+ }
+}
\ No newline at end of file
diff --git a/src/bin/coverage-report/README.md b/src/bin/coverage-report/README.md
new file mode 100644
index 00000000..081349ac
--- /dev/null
+++ b/src/bin/coverage-report/README.md
@@ -0,0 +1,33 @@
+# Coverage report
+
+Cross-provider transformation coverage for requests and responses.
+
+## Run
+
+```bash
+cargo run --bin coverage-report
+```
+
+## Output
+
+- Request transformation matrix (NxN providers)
+- Response transformation matrix (NxN providers)
+- Summary with pass/fail counts
+- Collapsible list of all failures with error messages
+
+## Add a provider
+
+1. **Add to PROVIDERS** in `main.rs`:
+ ```rust
+ ("dir-name", "DisplayName", ProviderFormat::Xxx),
+ ```
+
+2. **Capture payloads** for each test case (see `payloads/README.md`):
+ ```
+ payloads/snapshots/{test-case}/{dir-name}/
+ request.json
+ response.json
+ followup-request.json (optional)
+ ```
+
+3. **Run report** to verify. Missing payloads show as failures: `Source payload not found`
diff --git a/src/bin/coverage-report/main.rs b/src/bin/coverage-report/main.rs
new file mode 100644
index 00000000..3b6445c4
--- /dev/null
+++ b/src/bin/coverage-report/main.rs
@@ -0,0 +1,761 @@
+/*!
+Cross-provider transformation coverage report generator.
+
+This binary runs all cross-provider transformation tests and outputs a
+markdown report showing which transformations succeed/fail.
+
+Validates:
+1. Transform doesn't error
+2. Transformed output deserializes into target provider's Rust types (schema validation)
+3. Key semantic fields are preserved (messages, model, tools, usage)
+
+Usage:
+ cargo run --bin generate-coverage-report
+*/
+
+use std::collections::HashMap;
+use std::fs;
+use std::path::PathBuf;
+
+use lingua::capabilities::ProviderFormat;
+use lingua::processing::transform::{transform_request, transform_response};
+use lingua::providers::anthropic::generated::{CreateMessageParams, Message as AnthropicMessage};
+use lingua::providers::openai::generated::{
+ CreateChatCompletionRequestClass, CreateChatCompletionResponse,
+};
+use lingua::serde_json::{self, Value};
+
+/// Provider definitions - ADD NEW PROVIDERS HERE
+/// (directory_name, display_name, provider_format)
+const PROVIDERS: &[(&str, &str, ProviderFormat)] = &[
+ (
+ "chat-completions",
+ "ChatCompletions",
+ ProviderFormat::OpenAI,
+ ),
+ ("anthropic", "Anthropic", ProviderFormat::Anthropic),
+ ("responses", "Responses", ProviderFormat::Unknown),
+ ("google", "Google", ProviderFormat::Google),
+ ("bedrock", "Bedrock", ProviderFormat::Converse),
+];
+
+#[derive(Debug, Clone, Copy, PartialEq)]
+enum ValidationLevel {
+ Pass,
+ Fail,
+}
+
+/// Semantic fields check result
+#[derive(Debug, Default)]
+struct SemanticCheck {
+ has_messages: bool,
+ has_model: bool,
+ has_tools: bool,
+ has_content: bool, // for responses
+ has_usage: bool, // for responses
+ has_tool_calls: bool,
+}
+
+#[derive(Debug)]
+struct TransformResult {
+ level: ValidationLevel,
+ error: Option,
+}
+
+#[derive(Debug, Default)]
+struct PairResult {
+ passed: usize,
+ failed: usize,
+ failures: Vec<(String, String)>,
+}
+
+/// Validate transformed request against target provider's schema
+/// Note: Google and Bedrock types don't implement Deserialize (protobuf-generated),
+/// so we skip schema validation and rely on semantic checks for those providers.
+fn validate_request_schema(payload: &Value, target_format: ProviderFormat) -> Result<(), String> {
+ match target_format {
+ ProviderFormat::OpenAI => {
+ serde_json::from_value::(payload.clone())
+ .map(|_| ())
+ .map_err(|e| format!("OpenAI schema: {}", e))
+ }
+ ProviderFormat::Anthropic => serde_json::from_value::(payload.clone())
+ .map(|_| ())
+ .map_err(|e| format!("Anthropic schema: {}", e)),
+ ProviderFormat::Google | ProviderFormat::Converse => {
+ // Types don't implement Deserialize - skip schema validation, use semantic checks
+ Ok(())
+ }
+ ProviderFormat::Mistral => {
+ // Mistral uses OpenAI-compatible format
+ serde_json::from_value::(payload.clone())
+ .map(|_| ())
+ .map_err(|e| format!("Mistral schema: {}", e))
+ }
+ ProviderFormat::Unknown => Err("Unknown provider format".to_string()),
+ }
+}
+
+/// Validate transformed response against target provider's schema
+/// Note: Google and Bedrock types don't implement Deserialize, so we skip schema validation.
+fn validate_response_schema(payload: &Value, target_format: ProviderFormat) -> Result<(), String> {
+ match target_format {
+ ProviderFormat::OpenAI => {
+ serde_json::from_value::(payload.clone())
+ .map(|_| ())
+ .map_err(|e| format!("OpenAI response schema: {}", e))
+ }
+ ProviderFormat::Anthropic => serde_json::from_value::(payload.clone())
+ .map(|_| ())
+ .map_err(|e| format!("Anthropic response schema: {}", e)),
+ ProviderFormat::Google | ProviderFormat::Converse => {
+ // Types don't implement Deserialize - skip schema validation, use semantic checks
+ Ok(())
+ }
+ ProviderFormat::Mistral => {
+ serde_json::from_value::(payload.clone())
+ .map(|_| ())
+ .map_err(|e| format!("Mistral response schema: {}", e))
+ }
+ ProviderFormat::Unknown => Err("Unknown provider format".to_string()),
+ }
+}
+
+/// Check semantic fields in a request payload (provider-agnostic)
+fn check_request_semantics(payload: &Value, target_format: ProviderFormat) -> SemanticCheck {
+ let mut check = SemanticCheck::default();
+
+ match target_format {
+ ProviderFormat::OpenAI | ProviderFormat::Mistral => {
+ check.has_messages = payload.get("messages").map_or(false, |m| m.is_array());
+ check.has_model = payload.get("model").map_or(false, |m| m.is_string());
+ check.has_tools = payload.get("tools").map_or(false, |t| t.is_array());
+ }
+ ProviderFormat::Anthropic => {
+ check.has_messages = payload.get("messages").map_or(false, |m| m.is_array());
+ check.has_model = payload.get("model").map_or(false, |m| m.is_string());
+ check.has_tools = payload.get("tools").map_or(false, |t| t.is_array());
+ }
+ ProviderFormat::Google => {
+ check.has_messages = payload.get("contents").map_or(false, |c| c.is_array());
+ check.has_model = true; // Model is in URL path for Google, not body
+ check.has_tools = payload.get("tools").map_or(false, |t| t.is_array());
+ }
+ ProviderFormat::Converse => {
+ check.has_messages = payload.get("messages").map_or(false, |m| m.is_array());
+ check.has_model = true; // Model is in URL path for Bedrock
+ check.has_tools = payload.get("toolConfig").is_some();
+ }
+ ProviderFormat::Unknown => {
+ // Can't check semantics for unknown format
+ }
+ }
+
+ check
+}
+
+/// Check semantic fields in a response payload (provider-agnostic)
+fn check_response_semantics(payload: &Value, target_format: ProviderFormat) -> SemanticCheck {
+ let mut check = SemanticCheck::default();
+
+ match target_format {
+ ProviderFormat::OpenAI | ProviderFormat::Mistral => {
+ check.has_content = payload
+ .get("choices")
+ .and_then(|c| c.as_array())
+ .map_or(false, |arr| !arr.is_empty());
+ check.has_usage = payload.get("usage").is_some();
+ check.has_tool_calls = payload
+ .get("choices")
+ .and_then(|c| c.get(0))
+ .and_then(|c| c.get("message"))
+ .and_then(|m| m.get("tool_calls"))
+ .map_or(false, |t| t.is_array());
+ }
+ ProviderFormat::Anthropic => {
+ check.has_content = payload.get("content").map_or(false, |c| c.is_array());
+ check.has_usage = payload.get("usage").is_some();
+ check.has_tool_calls =
+ payload
+ .get("content")
+ .and_then(|c| c.as_array())
+ .map_or(false, |arr| {
+ arr.iter().any(|block| {
+ block.get("type") == Some(&Value::String("tool_use".to_string()))
+ })
+ });
+ }
+ ProviderFormat::Google => {
+ check.has_content = payload
+ .get("candidates")
+ .and_then(|c| c.as_array())
+ .map_or(false, |arr| !arr.is_empty());
+ check.has_usage = payload.get("usageMetadata").is_some();
+ check.has_tool_calls = payload
+ .get("candidates")
+ .and_then(|c| c.get(0))
+ .and_then(|c| c.get("content"))
+ .and_then(|c| c.get("parts"))
+ .and_then(|p| p.as_array())
+ .map_or(false, |arr| {
+ arr.iter().any(|p| p.get("functionCall").is_some())
+ });
+ }
+ ProviderFormat::Converse => {
+ check.has_content = payload.get("output").is_some();
+ check.has_usage = payload.get("usage").is_some();
+ check.has_tool_calls = payload
+ .get("output")
+ .and_then(|o| o.get("message"))
+ .and_then(|m| m.get("content"))
+ .and_then(|c| c.as_array())
+ .map_or(false, |arr| {
+ arr.iter().any(|block| block.get("toolUse").is_some())
+ });
+ }
+ ProviderFormat::Unknown => {
+ // Can't check semantics for unknown format
+ }
+ }
+
+ check
+}
+
+/// Discover all test case directories in payloads/snapshots
+fn discover_test_cases() -> Vec {
+ let snapshots_dir = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
+ .join("payloads")
+ .join("snapshots");
+
+ let mut test_cases = Vec::new();
+
+ if let Ok(entries) = fs::read_dir(&snapshots_dir) {
+ for entry in entries.flatten() {
+ let path = entry.path();
+ if path.is_dir() {
+ if let Some(name) = path.file_name().and_then(|n| n.to_str()) {
+ // Skip hidden directories and transformations directory
+ if !name.starts_with('.') && name != "transformations" {
+ test_cases.push(name.to_string());
+ }
+ }
+ }
+ }
+ }
+
+ test_cases.sort();
+ test_cases
+}
+
+/// Load a JSON payload from a test case directory
+fn load_payload(test_case: &str, dir_name: &str, filename: &str) -> Option {
+ let path = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
+ .join("payloads")
+ .join("snapshots")
+ .join(test_case)
+ .join(dir_name)
+ .join(filename);
+
+ if path.exists() {
+ let content = fs::read_to_string(&path).ok()?;
+ serde_json::from_str(&content).ok()
+ } else {
+ None
+ }
+}
+
+fn test_request_transformation(
+ test_case: &str,
+ source_dir: &str,
+ source_format: ProviderFormat,
+ target_format: ProviderFormat,
+ filename: &str,
+) -> TransformResult {
+ let payload = match load_payload(test_case, source_dir, filename) {
+ Some(p) => p,
+ None => {
+ return TransformResult {
+ level: ValidationLevel::Fail,
+ error: Some(format!("Source payload not found: {}", filename)),
+ }
+ }
+ };
+
+ match transform_request(&payload, target_format) {
+ Ok(result) => {
+ if result.is_pass_through() && source_format == target_format {
+ return TransformResult {
+ level: ValidationLevel::Pass,
+ error: None,
+ };
+ }
+
+ let transformed = result.payload_or_original(payload);
+
+ if let Err(schema_error) = validate_request_schema(&transformed, target_format) {
+ return TransformResult {
+ level: ValidationLevel::Fail,
+ error: Some(schema_error),
+ };
+ }
+
+ let semantics = check_request_semantics(&transformed, target_format);
+ let mut issues = vec![];
+
+ if !semantics.has_messages {
+ issues.push("missing messages");
+ }
+ if !semantics.has_model {
+ issues.push("missing model");
+ }
+
+ if issues.is_empty() {
+ TransformResult {
+ level: ValidationLevel::Pass,
+ error: None,
+ }
+ } else {
+ TransformResult {
+ level: ValidationLevel::Fail,
+ error: Some(issues.join(", ")),
+ }
+ }
+ }
+ Err(e) => TransformResult {
+ level: ValidationLevel::Fail,
+ error: Some(format!("{}", e)),
+ },
+ }
+}
+
+fn test_response_transformation(
+ test_case: &str,
+ source_dir: &str,
+ target_format: ProviderFormat,
+ filename: &str,
+) -> TransformResult {
+ let payload = match load_payload(test_case, source_dir, filename) {
+ Some(p) => p,
+ None => {
+ return TransformResult {
+ level: ValidationLevel::Fail,
+ error: Some(format!("Response payload not found: {}", filename)),
+ }
+ }
+ };
+
+ match transform_response(&payload, target_format) {
+ Ok(result) => {
+ let transformed = result.payload_or_original(payload);
+
+ if let Err(schema_error) = validate_response_schema(&transformed, target_format) {
+ return TransformResult {
+ level: ValidationLevel::Fail,
+ error: Some(schema_error),
+ };
+ }
+
+ let semantics = check_response_semantics(&transformed, target_format);
+ let mut issues = vec![];
+
+ if !semantics.has_content {
+ issues.push("missing content");
+ }
+ if !semantics.has_usage {
+ issues.push("missing usage");
+ }
+
+ if issues.is_empty() {
+ TransformResult {
+ level: ValidationLevel::Pass,
+ error: None,
+ }
+ } else {
+ TransformResult {
+ level: ValidationLevel::Fail,
+ error: Some(issues.join(", ")),
+ }
+ }
+ }
+ Err(e) => TransformResult {
+ level: ValidationLevel::Fail,
+ error: Some(format!("{}", e)),
+ },
+ }
+}
+
+/// Run all cross-transformation tests and collect results
+fn run_all_tests() -> (
+ HashMap<(usize, usize), PairResult>,
+ HashMap<(usize, usize), PairResult>,
+) {
+ let test_cases = discover_test_cases();
+ let mut request_results: HashMap<(usize, usize), PairResult> = HashMap::new();
+ let mut response_results: HashMap<(usize, usize), PairResult> = HashMap::new();
+
+ // Initialize results for all pairs
+ for source_idx in 0..PROVIDERS.len() {
+ for target_idx in 0..PROVIDERS.len() {
+ if source_idx != target_idx {
+ request_results.insert((source_idx, target_idx), PairResult::default());
+ response_results.insert((source_idx, target_idx), PairResult::default());
+ }
+ }
+ }
+
+ // Test each sourceβtarget pair for each test case
+ for test_case in &test_cases {
+ for source_idx in 0..PROVIDERS.len() {
+ for target_idx in 0..PROVIDERS.len() {
+ if source_idx == target_idx {
+ continue;
+ }
+
+ let (source_dir, _, source_format) = PROVIDERS[source_idx];
+ let (_, _, target_format) = PROVIDERS[target_idx];
+
+ // Test first turn request
+ let result = test_request_transformation(
+ test_case,
+ source_dir,
+ source_format,
+ target_format,
+ "request.json",
+ );
+ let pair_result = request_results.get_mut(&(source_idx, target_idx)).unwrap();
+
+ match result.level {
+ ValidationLevel::Pass => pair_result.passed += 1,
+ ValidationLevel::Fail => {
+ pair_result.failed += 1;
+ if let Some(error) = result.error {
+ pair_result
+ .failures
+ .push((format!("{} (request)", test_case), error));
+ }
+ }
+ }
+
+ // Test followup request if exists
+ let followup_result = test_request_transformation(
+ test_case,
+ source_dir,
+ source_format,
+ target_format,
+ "followup-request.json",
+ );
+ if followup_result
+ .error
+ .as_ref()
+ .map_or(true, |e| !e.contains("not found"))
+ {
+ match followup_result.level {
+ ValidationLevel::Pass => pair_result.passed += 1,
+ ValidationLevel::Fail => {
+ pair_result.failed += 1;
+ if let Some(error) = followup_result.error {
+ pair_result
+ .failures
+ .push((format!("{} (followup)", test_case), error));
+ }
+ }
+ }
+ }
+
+ // Test response transformation (source response transforms to target format)
+ let response_result = test_response_transformation(
+ test_case,
+ source_dir,
+ target_format,
+ "response.json",
+ );
+ let resp_pair_result = response_results.get_mut(&(source_idx, target_idx)).unwrap();
+
+ if response_result
+ .error
+ .as_ref()
+ .map_or(true, |e| !e.contains("not found"))
+ {
+ match response_result.level {
+ ValidationLevel::Pass => resp_pair_result.passed += 1,
+ ValidationLevel::Fail => {
+ resp_pair_result.failed += 1;
+ if let Some(error) = response_result.error {
+ resp_pair_result
+ .failures
+ .push((format!("{} (response)", test_case), error));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ (request_results, response_results)
+}
+
+fn format_cell(pair_result: &PairResult) -> String {
+ let total = pair_result.passed + pair_result.failed;
+ if total == 0 {
+ return "-".to_string();
+ }
+
+ let emoji = if pair_result.failed == 0 {
+ "β
"
+ } else {
+ "β"
+ };
+ format!("{} {}/{}", emoji, pair_result.passed, total)
+}
+
+struct TableStats {
+ passed: usize,
+ failed: usize,
+}
+
+fn generate_table(
+ results: &HashMap<(usize, usize), PairResult>,
+ title: &str,
+) -> (String, TableStats, Vec<(String, String, String)>) {
+ let mut table = String::new();
+ let mut stats = TableStats {
+ passed: 0,
+ failed: 0,
+ };
+ let mut all_failures: Vec<(String, String, String)> = Vec::new();
+
+ table.push_str(&format!("### {}\n\n", title));
+ table.push_str("| Source β / Target β |");
+ for (_, display_name, _) in PROVIDERS {
+ table.push_str(&format!(" {} |", display_name));
+ }
+ table.push_str("\n|---------------------|");
+ for _ in PROVIDERS {
+ table.push_str("-------------|");
+ }
+ table.push('\n');
+
+ for source_idx in 0..PROVIDERS.len() {
+ let (_, source_display, _) = PROVIDERS[source_idx];
+ table.push_str(&format!("| {} |", source_display));
+ for target_idx in 0..PROVIDERS.len() {
+ if source_idx == target_idx {
+ table.push_str(" - |");
+ } else {
+ let pair_result = results.get(&(source_idx, target_idx)).unwrap();
+ table.push_str(&format!(" {} |", format_cell(pair_result)));
+
+ stats.passed += pair_result.passed;
+ stats.failed += pair_result.failed;
+
+ let (_, target_display, _) = PROVIDERS[target_idx];
+ for (test_case, error) in &pair_result.failures {
+ all_failures.push((
+ format!("{} β {}", source_display, target_display),
+ test_case.clone(),
+ error.clone(),
+ ));
+ }
+ }
+ }
+ table.push('\n');
+ }
+
+ (table, stats, all_failures)
+}
+
+fn generate_report(
+ request_results: &HashMap<(usize, usize), PairResult>,
+ response_results: &HashMap<(usize, usize), PairResult>,
+) -> String {
+ let mut report = String::new();
+
+ report.push_str("## Cross-Provider Transformation Coverage\n\n");
+
+ let (req_table, req_stats, req_failures) =
+ generate_table(request_results, "Request Transformations");
+ report.push_str(&req_table);
+
+ report.push('\n');
+ let (resp_table, resp_stats, resp_failures) =
+ generate_table(response_results, "Response Transformations");
+ report.push_str(&resp_table);
+
+ let total_passed = req_stats.passed + resp_stats.passed;
+ let total_failed = req_stats.failed + resp_stats.failed;
+ let total = total_passed + total_failed;
+
+ let pass_percentage = if total > 0 {
+ (total_passed as f64 / total as f64) * 100.0
+ } else {
+ 0.0
+ };
+
+ report.push_str("\n### Summary\n\n");
+ report.push_str(&format!(
+ "**{}/{} ({:.1}%)** - {} failed\n",
+ total_passed, total, pass_percentage, total_failed
+ ));
+
+ let req_total = req_stats.passed + req_stats.failed;
+ let resp_total = resp_stats.passed + resp_stats.failed;
+
+ report.push_str(&format!(
+ "\n**Requests:** {}/{} passed, {} failed\n",
+ req_stats.passed, req_total, req_stats.failed
+ ));
+ report.push_str(&format!(
+ "**Responses:** {}/{} passed, {} failed\n",
+ resp_stats.passed, resp_total, resp_stats.failed
+ ));
+
+ // Organize issues by source provider β request/response β target
+ if !req_failures.is_empty() || !resp_failures.is_empty() {
+ report.push_str("\n### Issues by Source\n\n");
+
+ // Group failures by source provider, keeping request/response separate
+ let mut req_by_source: HashMap> = HashMap::new();
+ let mut resp_by_source: HashMap> = HashMap::new();
+
+ for (direction, test_case, error) in req_failures {
+ let source = direction
+ .split(" β ")
+ .next()
+ .unwrap_or(&direction)
+ .to_string();
+ req_by_source
+ .entry(source)
+ .or_default()
+ .push((direction, test_case, error));
+ }
+
+ for (direction, test_case, error) in resp_failures {
+ let source = direction
+ .split(" β ")
+ .next()
+ .unwrap_or(&direction)
+ .to_string();
+ resp_by_source
+ .entry(source)
+ .or_default()
+ .push((direction, test_case, error));
+ }
+
+ // Get all unique sources and sort by total failure count
+ let mut all_sources: HashMap = HashMap::new();
+ for (source, failures) in &req_by_source {
+ *all_sources.entry(source.clone()).or_default() += failures.len();
+ }
+ for (source, failures) in &resp_by_source {
+ *all_sources.entry(source.clone()).or_default() += failures.len();
+ }
+
+ let mut sources: Vec<_> = all_sources.into_iter().collect();
+ sources.sort_by(|a, b| b.1.cmp(&a.1));
+
+ for (source, total_count) in sources {
+ report.push_str("\n");
+ report.push_str(&format!(
+ "β {} ({} issues)
\n\n",
+ source, total_count
+ ));
+
+ // Request transformation issues for this source
+ if let Some(req_failures) = req_by_source.get(&source) {
+ report.push_str("\n");
+ report.push_str(&format!(
+ " π€ Request transformations ({})
\n\n",
+ req_failures.len()
+ ));
+
+ // Group by target
+ let mut by_target: HashMap> = HashMap::new();
+ for (direction, test_case, error) in req_failures {
+ let target = direction
+ .split(" β ")
+ .nth(1)
+ .unwrap_or("Unknown")
+ .to_string();
+ by_target
+ .entry(target)
+ .or_default()
+ .push((test_case.clone(), error.clone()));
+ }
+
+ let mut targets: Vec<_> = by_target.into_iter().collect();
+ targets.sort_by(|a, b| b.1.len().cmp(&a.1.len()));
+
+ for (target, target_failures) in targets {
+ report.push_str("\n");
+ report.push_str(&format!(
+ " β {} ({})
\n\n",
+ target,
+ target_failures.len()
+ ));
+
+ for (test_case, error) in target_failures {
+ report.push_str(&format!(" - `{}` - {}\n", test_case, error));
+ }
+
+ report.push_str("\n \n\n");
+ }
+
+ report.push_str(" \n\n");
+ }
+
+ // Response transformation issues for this source
+ if let Some(resp_failures) = resp_by_source.get(&source) {
+ report.push_str("\n");
+ report.push_str(&format!(
+ " π₯ Response transformations ({})
\n\n",
+ resp_failures.len()
+ ));
+
+ // Group by target
+ let mut by_target: HashMap> = HashMap::new();
+ for (direction, test_case, error) in resp_failures {
+ let target = direction
+ .split(" β ")
+ .nth(1)
+ .unwrap_or("Unknown")
+ .to_string();
+ by_target
+ .entry(target)
+ .or_default()
+ .push((test_case.clone(), error.clone()));
+ }
+
+ let mut targets: Vec<_> = by_target.into_iter().collect();
+ targets.sort_by(|a, b| b.1.len().cmp(&a.1.len()));
+
+ for (target, target_failures) in targets {
+ report.push_str("\n");
+ report.push_str(&format!(
+ " β {} ({})
\n\n",
+ target,
+ target_failures.len()
+ ));
+
+ for (test_case, error) in target_failures {
+ report.push_str(&format!(" - `{}` - {}\n", test_case, error));
+ }
+
+ report.push_str("\n \n\n");
+ }
+
+ report.push_str(" \n\n");
+ }
+
+ report.push_str(" \n\n");
+ }
+ }
+
+ report
+}
+
+fn main() {
+ let (request_results, response_results) = run_all_tests();
+ let report = generate_report(&request_results, &response_results);
+ println!("{}", report);
+}
diff --git a/src/lib.rs b/src/lib.rs
index 2f3cdbb4..e1f0fb4a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -14,7 +14,7 @@ pub mod validation;
pub use capabilities::ProviderFormat;
pub use processing::{
apply_provider_defaults, from_universal, is_valid_for_format, to_universal, transform_request,
- validate_or_transform, RequestDefaults, TransformError, TransformResult,
+ transform_response, validate_or_transform, RequestDefaults, TransformError, TransformResult,
};
#[cfg(target_arch = "wasm32")]
diff --git a/src/processing/mod.rs b/src/processing/mod.rs
index e4a80701..dc661034 100644
--- a/src/processing/mod.rs
+++ b/src/processing/mod.rs
@@ -11,6 +11,6 @@ pub use detect::DetectionError;
pub use detector::FormatDetector;
pub use import::{import_and_deduplicate_messages, import_messages_from_spans, Span};
pub use transform::{
- from_universal, is_valid_for_format, to_universal, transform_request, validate_or_transform,
- TransformError, TransformResult,
+ from_universal, is_valid_for_format, to_universal, transform_request, transform_response,
+ validate_or_transform, TransformError, TransformResult,
};
diff --git a/src/processing/transform.rs b/src/processing/transform.rs
index 4297f5c7..e06c8f14 100644
--- a/src/processing/transform.rs
+++ b/src/processing/transform.rs
@@ -14,6 +14,7 @@ use crate::capabilities::ProviderFormat;
use crate::processing::defaults::apply_provider_defaults;
use crate::serde_json::{self, Map, Value};
use crate::universal::message::Message;
+use serde::Deserialize;
use thiserror::Error;
#[cfg(feature = "anthropic")]
@@ -30,6 +31,53 @@ use crate::providers::openai::try_parse_openai;
#[cfg(feature = "mistral")]
use crate::processing::FormatDetector;
+// ============================================================================
+// Response envelope types for detection
+// ============================================================================
+
+/// OpenAI chat completion response envelope (for detection)
+#[derive(Debug, Clone, Deserialize)]
+struct OpenAIResponseEnvelope {
+ choices: Vec,
+}
+
+#[derive(Debug, Clone, Deserialize)]
+struct OpenAIResponseChoice {
+ message: Value,
+}
+
+/// Google GenerateContent response envelope (for detection)
+#[derive(Debug, Clone, Deserialize)]
+struct GoogleResponseEnvelope {
+ candidates: Vec,
+}
+
+#[derive(Debug, Clone, Deserialize)]
+struct GoogleResponseCandidate {
+ content: Value,
+}
+
+/// Anthropic Message response envelope (for detection)
+#[derive(Debug, Clone, Deserialize)]
+struct AnthropicResponseEnvelope {
+ content: Vec,
+ #[serde(rename = "type")]
+ response_type: Option,
+}
+
+/// Bedrock Converse response envelope (for detection)
+#[derive(Debug, Clone, Deserialize)]
+#[allow(dead_code)] // Fields are read via serde deserialization
+struct BedrockResponseEnvelope {
+ output: BedrockResponseOutput,
+}
+
+#[derive(Debug, Clone, Deserialize)]
+#[allow(dead_code)] // Fields are read via serde deserialization
+struct BedrockResponseOutput {
+ message: Value,
+}
+
/// Error type for transformation operations
#[derive(Debug, Error)]
pub enum TransformError {
@@ -542,6 +590,314 @@ pub fn from_universal(
}
}
+// ============================================================================
+// Response transformation
+// ============================================================================
+
+/// Transform a response payload from one format to another.
+///
+/// This extracts the message(s) from the source response envelope, converts
+/// them via the universal Message format, and builds a new response envelope
+/// in the target format.
+///
+/// # Arguments
+///
+/// * `response` - The source response JSON payload
+/// * `target_format` - The target provider format
+///
+/// # Returns
+///
+/// * `Ok(TransformResult::PassThrough)` - Response is already valid for target format
+/// * `Ok(TransformResult::Transformed { payload, source_format })` - Transformed response
+/// * `Err(TransformError)` - If transformation fails
+///
+/// # Examples
+///
+/// ```
+/// use lingua::processing::transform::transform_response;
+/// use lingua::capabilities::ProviderFormat;
+/// use lingua::serde_json::json;
+///
+/// // Google response
+/// let google_response = json!({
+/// "candidates": [{
+/// "content": {
+/// "role": "model",
+/// "parts": [{"text": "Hello!"}]
+/// }
+/// }]
+/// });
+///
+/// // Transform to OpenAI format
+/// let result = transform_response(&google_response, ProviderFormat::OpenAI).unwrap();
+/// ```
+pub fn transform_response(
+ response: &Value,
+ target_format: ProviderFormat,
+) -> Result {
+ // Step 1: Detect source format
+ let source_format = detect_response_format(response)?;
+
+ // Step 2: If source matches target, pass through
+ if source_format == target_format {
+ return Ok(TransformResult::PassThrough);
+ }
+
+ // Step 3: Extract message(s) from source response envelope
+ let universal_messages = response_to_universal(response, source_format)?;
+
+ // Step 4: Build target response envelope
+ let transformed = build_response_envelope(&universal_messages, target_format)?;
+
+ Ok(TransformResult::Transformed {
+ payload: transformed,
+ source_format,
+ })
+}
+
+/// Detect the format of a response payload.
+fn detect_response_format(response: &Value) -> Result {
+ // Try each format in priority order (most specific first)
+
+ // Bedrock: has output.message structure
+ if serde_json::from_value::(response.clone()).is_ok() {
+ return Ok(ProviderFormat::Converse);
+ }
+
+ // Google: has candidates[].content structure
+ if serde_json::from_value::(response.clone()).is_ok() {
+ return Ok(ProviderFormat::Google);
+ }
+
+ // Anthropic: has content[] array and type="message"
+ if let Ok(envelope) = serde_json::from_value::(response.clone()) {
+ if envelope.response_type.as_deref() == Some("message") {
+ return Ok(ProviderFormat::Anthropic);
+ }
+ }
+
+ // OpenAI: has choices[].message structure
+ if serde_json::from_value::(response.clone()).is_ok() {
+ return Ok(ProviderFormat::OpenAI);
+ }
+
+ Err(TransformError::UnableToDetectFormat)
+}
+
+/// Extract universal messages from a response envelope.
+fn response_to_universal(
+ response: &Value,
+ source_format: ProviderFormat,
+) -> Result, TransformError> {
+ match source_format {
+ #[cfg(feature = "openai")]
+ ProviderFormat::OpenAI => {
+ use crate::providers::openai::generated::ChatCompletionResponseMessage;
+ use crate::universal::convert::TryFromLLM;
+
+ let envelope: OpenAIResponseEnvelope = serde_json::from_value(response.clone())
+ .map_err(|e| TransformError::ToUniversalFailed(e.to_string()))?;
+
+ let mut messages = Vec::new();
+ for choice in envelope.choices {
+ let response_msg: ChatCompletionResponseMessage =
+ serde_json::from_value(choice.message)
+ .map_err(|e| TransformError::ToUniversalFailed(e.to_string()))?;
+ let universal = >::try_from(
+ &response_msg,
+ )
+ .map_err(|e| TransformError::ToUniversalFailed(e.to_string()))?;
+ messages.push(universal);
+ }
+ Ok(messages)
+ }
+
+ #[cfg(feature = "google")]
+ ProviderFormat::Google => {
+ use crate::providers::google::detect::GoogleContent;
+ use crate::universal::convert::TryFromLLM;
+
+ let envelope: GoogleResponseEnvelope = serde_json::from_value(response.clone())
+ .map_err(|e| TransformError::ToUniversalFailed(e.to_string()))?;
+
+ let mut messages = Vec::new();
+ for candidate in envelope.candidates {
+ let content: GoogleContent = serde_json::from_value(candidate.content)
+ .map_err(|e| TransformError::ToUniversalFailed(e.to_string()))?;
+ let universal = >::try_from(content)
+ .map_err(|e| TransformError::ToUniversalFailed(e.to_string()))?;
+ messages.push(universal);
+ }
+ Ok(messages)
+ }
+
+ #[cfg(feature = "anthropic")]
+ ProviderFormat::Anthropic => {
+ use crate::providers::anthropic::generated::ContentBlock;
+ use crate::universal::convert::TryFromLLM;
+
+ let envelope: AnthropicResponseEnvelope = serde_json::from_value(response.clone())
+ .map_err(|e| TransformError::ToUniversalFailed(e.to_string()))?;
+
+ let content_blocks: Vec = envelope
+ .content
+ .into_iter()
+ .map(|v| {
+ serde_json::from_value(v)
+ .map_err(|e| TransformError::ToUniversalFailed(e.to_string()))
+ })
+ .collect::, _>>()?;
+
+ as TryFromLLM>>::try_from(content_blocks)
+ .map_err(|e| TransformError::ToUniversalFailed(e.to_string()))
+ }
+
+ #[cfg(feature = "bedrock")]
+ ProviderFormat::Converse => {
+ use crate::providers::bedrock::response::BedrockOutputMessage;
+ use crate::universal::convert::TryFromLLM;
+
+ let envelope: BedrockResponseEnvelope = serde_json::from_value(response.clone())
+ .map_err(|e| TransformError::ToUniversalFailed(e.to_string()))?;
+
+ let output_msg: BedrockOutputMessage = serde_json::from_value(envelope.output.message)
+ .map_err(|e| TransformError::ToUniversalFailed(e.to_string()))?;
+
+ let universal = >::try_from(output_msg)
+ .map_err(|e| TransformError::ToUniversalFailed(e.to_string()))?;
+
+ Ok(vec![universal])
+ }
+
+ _ => Err(TransformError::UnsupportedSourceFormat(source_format)),
+ }
+}
+
+/// Build a response envelope in the target format from universal messages.
+fn build_response_envelope(
+ messages: &[Message],
+ target_format: ProviderFormat,
+) -> Result {
+ match target_format {
+ #[cfg(feature = "openai")]
+ ProviderFormat::OpenAI => {
+ use crate::providers::openai::generated::ChatCompletionResponseMessage;
+ use crate::universal::convert::TryFromLLM;
+
+ let choices: Vec = messages
+ .iter()
+ .enumerate()
+ .map(|(i, msg)| {
+ let response_msg =
+ >::try_from(msg)
+ .map_err(|e| TransformError::FromUniversalFailed(e.to_string()))?;
+
+ let message_value = serde_json::to_value(&response_msg)
+ .map_err(|e| TransformError::SerializationFailed(e.to_string()))?;
+
+ Ok(serde_json::json!({
+ "index": i,
+ "message": message_value,
+ "finish_reason": "stop"
+ }))
+ })
+ .collect::, TransformError>>()?;
+
+ Ok(serde_json::json!({
+ "id": "transformed",
+ "object": "chat.completion",
+ "created": 0,
+ "model": "transformed",
+ "choices": choices
+ }))
+ }
+
+ #[cfg(feature = "google")]
+ ProviderFormat::Google => {
+ use crate::providers::google::detect::GoogleContent;
+ use crate::universal::convert::TryFromLLM;
+
+ let candidates: Vec = messages
+ .iter()
+ .enumerate()
+ .map(|(i, msg)| {
+ let content = >::try_from(msg.clone())
+ .map_err(|e| TransformError::FromUniversalFailed(e.to_string()))?;
+
+ let content_value = serde_json::to_value(&content)
+ .map_err(|e| TransformError::SerializationFailed(e.to_string()))?;
+
+ Ok(serde_json::json!({
+ "index": i,
+ "content": content_value,
+ "finishReason": "STOP"
+ }))
+ })
+ .collect::, TransformError>>()?;
+
+ Ok(serde_json::json!({
+ "candidates": candidates
+ }))
+ }
+
+ #[cfg(feature = "anthropic")]
+ ProviderFormat::Anthropic => {
+ use crate::providers::anthropic::generated::ContentBlock;
+ use crate::universal::convert::TryFromLLM;
+
+ let content_blocks =
+ as TryFromLLM>>::try_from(messages.to_vec())
+ .map_err(|e| TransformError::FromUniversalFailed(e.to_string()))?;
+
+ let content_value = serde_json::to_value(&content_blocks)
+ .map_err(|e| TransformError::SerializationFailed(e.to_string()))?;
+
+ Ok(serde_json::json!({
+ "id": "transformed",
+ "type": "message",
+ "role": "assistant",
+ "content": content_value,
+ "model": "transformed",
+ "stop_reason": "end_turn"
+ }))
+ }
+
+ #[cfg(feature = "bedrock")]
+ ProviderFormat::Converse => {
+ use crate::providers::bedrock::response::BedrockOutputMessage;
+ use crate::universal::convert::TryFromLLM;
+
+ // Take the first message for the response
+ let msg = messages.first().ok_or_else(|| {
+ TransformError::FromUniversalFailed("No messages to transform".to_string())
+ })?;
+
+ let output_msg = >::try_from(msg.clone())
+ .map_err(|e| TransformError::FromUniversalFailed(e.to_string()))?;
+
+ let message_value = serde_json::to_value(&output_msg)
+ .map_err(|e| TransformError::SerializationFailed(e.to_string()))?;
+
+ Ok(serde_json::json!({
+ "output": {
+ "message": message_value
+ },
+ "stopReason": "end_turn",
+ "usage": {
+ "inputTokens": 0,
+ "outputTokens": 0,
+ "totalTokens": 0
+ },
+ "metrics": {
+ "latencyMs": 0
+ }
+ }))
+ }
+
+ _ => Err(TransformError::UnsupportedTargetFormat(target_format)),
+ }
+}
+
#[cfg(test)]
mod tests {
use super::*;
diff --git a/src/providers/bedrock/convert.rs b/src/providers/bedrock/convert.rs
index 3f8e43b1..975a04a7 100644
--- a/src/providers/bedrock/convert.rs
+++ b/src/providers/bedrock/convert.rs
@@ -11,6 +11,7 @@ use crate::providers::bedrock::request::{
BedrockImageSource, BedrockMessage, BedrockToolResultBlock, BedrockToolResultContent,
BedrockToolUseBlock, ConverseRequest,
};
+use crate::providers::bedrock::response::{BedrockOutputContentBlock, BedrockOutputMessage};
use crate::serde_json::{self, Value};
use crate::universal::convert::TryFromLLM;
use crate::universal::message::{
@@ -278,6 +279,110 @@ pub fn universal_to_bedrock(messages: &[Message]) -> Result
})
}
+// ============================================================================
+// BedrockOutputMessage (Response) -> Universal Message
+// ============================================================================
+
+impl TryFromLLM for Message {
+ type Error = ConvertError;
+
+ fn try_from(msg: BedrockOutputMessage) -> Result {
+ // Output messages are always from the assistant
+ let mut content_parts = Vec::new();
+
+ for block in msg.content {
+ match block {
+ BedrockOutputContentBlock::Text { text } => {
+ content_parts.push(AssistantContentPart::Text(TextContentPart {
+ text,
+ provider_options: None,
+ }));
+ }
+ BedrockOutputContentBlock::ToolUse { tool_use } => {
+ content_parts.push(AssistantContentPart::ToolCall {
+ tool_call_id: tool_use.tool_use_id,
+ tool_name: tool_use.name,
+ arguments: ToolCallArguments::from(
+ serde_json::to_string(&tool_use.input).unwrap_or_default(),
+ ),
+ provider_options: None,
+ provider_executed: None,
+ });
+ }
+ }
+ }
+
+ if content_parts.is_empty() {
+ content_parts.push(AssistantContentPart::Text(TextContentPart {
+ text: String::new(),
+ provider_options: None,
+ }));
+ }
+
+ Ok(Message::Assistant {
+ content: AssistantContent::Array(content_parts),
+ id: None,
+ })
+ }
+}
+
+// ============================================================================
+// Universal Message -> BedrockOutputMessage (Response)
+// ============================================================================
+
+impl TryFromLLM for BedrockOutputMessage {
+ type Error = ConvertError;
+
+ fn try_from(message: Message) -> Result {
+ match message {
+ Message::Assistant { content, .. } => {
+ let blocks = match content {
+ AssistantContent::String(s) => {
+ vec![BedrockOutputContentBlock::Text { text: s }]
+ }
+ AssistantContent::Array(parts) => parts
+ .into_iter()
+ .filter_map(|p| match p {
+ AssistantContentPart::Text(t) => {
+ Some(BedrockOutputContentBlock::Text { text: t.text })
+ }
+ AssistantContentPart::ToolCall {
+ tool_call_id,
+ tool_name,
+ arguments,
+ ..
+ } => {
+ use crate::providers::bedrock::response::BedrockOutputToolUse;
+ let input: Value = match arguments {
+ ToolCallArguments::Valid(map) => serde_json::to_value(map)
+ .unwrap_or(Value::Object(Default::default())),
+ ToolCallArguments::Invalid(s) => serde_json::from_str(&s)
+ .unwrap_or(Value::Object(Default::default())),
+ };
+ Some(BedrockOutputContentBlock::ToolUse {
+ tool_use: BedrockOutputToolUse {
+ tool_use_id: tool_call_id,
+ name: tool_name,
+ input,
+ },
+ })
+ }
+ _ => None,
+ })
+ .collect(),
+ };
+ Ok(BedrockOutputMessage {
+ role: "assistant".to_string(),
+ content: blocks,
+ })
+ }
+ _ => Err(ConvertError::UnsupportedContentType(
+ "Only Assistant messages can be converted to BedrockOutputMessage".to_string(),
+ )),
+ }
+ }
+}
+
#[cfg(test)]
mod tests {
use super::*;