@copilotkit/aimock 1.45.1 → 1.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +25 -1
- package/README.md +11 -2
- package/dist/agui-mock.cjs +25 -25
- package/dist/agui-mock.cjs.map +1 -1
- package/dist/agui-mock.d.cts.map +1 -1
- package/dist/agui-mock.d.ts.map +1 -1
- package/dist/agui-mock.js +25 -25
- package/dist/agui-mock.js.map +1 -1
- package/dist/agui-types.d.cts.map +1 -1
- package/dist/aimock-cli.cjs +15 -1
- package/dist/aimock-cli.cjs.map +1 -1
- package/dist/aimock-cli.d.cts.map +1 -1
- package/dist/aimock-cli.d.ts.map +1 -1
- package/dist/aimock-cli.js +16 -2
- package/dist/aimock-cli.js.map +1 -1
- package/dist/api-key-auth.cjs +10 -9
- package/dist/api-key-auth.cjs.map +1 -1
- package/dist/api-key-auth.d.cts.map +1 -1
- package/dist/api-key-auth.d.ts.map +1 -1
- package/dist/api-key-auth.js +11 -10
- package/dist/api-key-auth.js.map +1 -1
- package/dist/aws-event-stream.cjs +20 -23
- package/dist/aws-event-stream.cjs.map +1 -1
- package/dist/aws-event-stream.d.cts +0 -1
- package/dist/aws-event-stream.d.ts +0 -1
- package/dist/aws-event-stream.js +20 -24
- package/dist/aws-event-stream.js.map +1 -1
- package/dist/batches.cjs +2 -4
- package/dist/batches.cjs.map +1 -1
- package/dist/batches.d.cts.map +1 -1
- package/dist/batches.d.ts.map +1 -1
- package/dist/batches.js +2 -4
- package/dist/batches.js.map +1 -1
- package/dist/bedrock-converse.cjs +139 -161
- package/dist/bedrock-converse.cjs.map +1 -1
- package/dist/bedrock-converse.d.cts.map +1 -1
- package/dist/bedrock-converse.d.ts.map +1 -1
- package/dist/bedrock-converse.js +137 -159
- package/dist/bedrock-converse.js.map +1 -1
- package/dist/bedrock.cjs +175 -216
- package/dist/bedrock.cjs.map +1 -1
- package/dist/bedrock.d.cts.map +1 -1
- package/dist/bedrock.d.ts.map +1 -1
- package/dist/bedrock.js +172 -213
- package/dist/bedrock.js.map +1 -1
- package/dist/byteplus-video.cjs +11 -10
- package/dist/byteplus-video.cjs.map +1 -1
- package/dist/byteplus-video.d.cts.map +1 -1
- package/dist/byteplus-video.d.ts.map +1 -1
- package/dist/byteplus-video.js +5 -4
- package/dist/byteplus-video.js.map +1 -1
- package/dist/chaos.cjs +5 -4
- package/dist/chaos.cjs.map +1 -1
- package/dist/chaos.d.cts.map +1 -1
- package/dist/chaos.d.ts.map +1 -1
- package/dist/chaos.js +5 -4
- package/dist/chaos.js.map +1 -1
- package/dist/cli.cjs +15 -0
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +15 -0
- package/dist/cli.js.map +1 -1
- package/dist/cohere.cjs +107 -180
- package/dist/cohere.cjs.map +1 -1
- package/dist/cohere.d.cts.map +1 -1
- package/dist/cohere.d.ts.map +1 -1
- package/dist/cohere.js +106 -179
- package/dist/cohere.js.map +1 -1
- package/dist/config-loader.cjs +29 -1
- package/dist/config-loader.cjs.map +1 -1
- package/dist/config-loader.d.cts +7 -1
- package/dist/config-loader.d.cts.map +1 -1
- package/dist/config-loader.d.ts +7 -1
- package/dist/config-loader.d.ts.map +1 -1
- package/dist/config-loader.js +29 -2
- package/dist/config-loader.js.map +1 -1
- package/dist/count-tokens.cjs +146 -0
- package/dist/count-tokens.cjs.map +1 -0
- package/dist/count-tokens.js +146 -0
- package/dist/count-tokens.js.map +1 -0
- package/dist/elevenlabs-audio.cjs +36 -34
- package/dist/elevenlabs-audio.cjs.map +1 -1
- package/dist/elevenlabs-audio.d.cts.map +1 -1
- package/dist/elevenlabs-audio.d.ts.map +1 -1
- package/dist/elevenlabs-audio.js +33 -31
- package/dist/elevenlabs-audio.js.map +1 -1
- package/dist/elevenlabs-voice.cjs +38 -37
- package/dist/elevenlabs-voice.cjs.map +1 -1
- package/dist/elevenlabs-voice.d.cts.map +1 -1
- package/dist/elevenlabs-voice.d.ts.map +1 -1
- package/dist/elevenlabs-voice.js +33 -32
- package/dist/elevenlabs-voice.js.map +1 -1
- package/dist/embedding-request.cjs +16 -0
- package/dist/embedding-request.cjs.map +1 -0
- package/dist/embedding-request.js +14 -0
- package/dist/embedding-request.js.map +1 -0
- package/dist/embeddings.cjs +30 -20
- package/dist/embeddings.cjs.map +1 -1
- package/dist/embeddings.d.cts.map +1 -1
- package/dist/embeddings.d.ts.map +1 -1
- package/dist/embeddings.js +30 -20
- package/dist/embeddings.js.map +1 -1
- package/dist/fal-audio.cjs +45 -43
- package/dist/fal-audio.cjs.map +1 -1
- package/dist/fal-audio.d.cts.map +1 -1
- package/dist/fal-audio.d.ts.map +1 -1
- package/dist/fal-audio.js +42 -40
- package/dist/fal-audio.js.map +1 -1
- package/dist/fal.cjs +17 -15
- package/dist/fal.cjs.map +1 -1
- package/dist/fal.js +16 -14
- package/dist/fal.js.map +1 -1
- package/dist/files.cjs +2 -4
- package/dist/files.cjs.map +1 -1
- package/dist/files.d.cts.map +1 -1
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +2 -4
- package/dist/files.js.map +1 -1
- package/dist/fine-tuning.cjs +2 -4
- package/dist/fine-tuning.cjs.map +1 -1
- package/dist/fine-tuning.d.cts.map +1 -1
- package/dist/fine-tuning.d.ts.map +1 -1
- package/dist/fine-tuning.js +2 -4
- package/dist/fine-tuning.js.map +1 -1
- package/dist/fixture-loader.cjs +140 -44
- package/dist/fixture-loader.cjs.map +1 -1
- package/dist/fixture-loader.d.cts.map +1 -1
- package/dist/fixture-loader.d.ts.map +1 -1
- package/dist/fixture-loader.js +141 -46
- package/dist/fixture-loader.js.map +1 -1
- package/dist/gemini-embeddings.cjs +26 -24
- package/dist/gemini-embeddings.cjs.map +1 -1
- package/dist/gemini-embeddings.js +26 -24
- package/dist/gemini-embeddings.js.map +1 -1
- package/dist/gemini-interactions.cjs +113 -156
- package/dist/gemini-interactions.cjs.map +1 -1
- package/dist/gemini-interactions.d.cts +0 -1
- package/dist/gemini-interactions.d.cts.map +1 -1
- package/dist/gemini-interactions.d.ts +0 -1
- package/dist/gemini-interactions.d.ts.map +1 -1
- package/dist/gemini-interactions.js +113 -156
- package/dist/gemini-interactions.js.map +1 -1
- package/dist/gemini.cjs +295 -218
- package/dist/gemini.cjs.map +1 -1
- package/dist/gemini.d.cts.map +1 -1
- package/dist/gemini.d.ts.map +1 -1
- package/dist/gemini.js +295 -219
- package/dist/gemini.js.map +1 -1
- package/dist/grok-video.cjs +14 -12
- package/dist/grok-video.cjs.map +1 -1
- package/dist/grok-video.d.cts.map +1 -1
- package/dist/grok-video.d.ts.map +1 -1
- package/dist/grok-video.js +8 -6
- package/dist/grok-video.js.map +1 -1
- package/dist/helpers.cjs +411 -75
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts +51 -1
- package/dist/helpers.d.cts.map +1 -1
- package/dist/helpers.d.ts +51 -1
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +402 -74
- package/dist/helpers.js.map +1 -1
- package/dist/images.cjs +30 -28
- package/dist/images.cjs.map +1 -1
- package/dist/images.d.cts.map +1 -1
- package/dist/images.d.ts.map +1 -1
- package/dist/images.js +27 -25
- package/dist/images.js.map +1 -1
- package/dist/index.cjs +4 -2
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -4
- package/dist/journal.cjs +3 -1
- package/dist/journal.cjs.map +1 -1
- package/dist/journal.d.cts.map +1 -1
- package/dist/journal.d.ts.map +1 -1
- package/dist/journal.js +2 -1
- package/dist/journal.js.map +1 -1
- package/dist/llmock.cjs +3 -0
- package/dist/llmock.cjs.map +1 -1
- package/dist/llmock.d.cts.map +1 -1
- package/dist/llmock.d.ts.map +1 -1
- package/dist/llmock.js +3 -0
- package/dist/llmock.js.map +1 -1
- package/dist/mcp-fakes.d.cts.map +1 -1
- package/dist/mcp-handler.cjs +7 -3
- package/dist/mcp-handler.cjs.map +1 -1
- package/dist/mcp-handler.js +7 -3
- package/dist/mcp-handler.js.map +1 -1
- package/dist/mcp-recorder.cjs +2 -1
- package/dist/mcp-recorder.cjs.map +1 -1
- package/dist/mcp-recorder.js +3 -2
- package/dist/mcp-recorder.js.map +1 -1
- package/dist/messages.cjs +235 -202
- package/dist/messages.cjs.map +1 -1
- package/dist/messages.d.cts.map +1 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +234 -202
- package/dist/messages.js.map +1 -1
- package/dist/metrics.cjs +5 -2
- package/dist/metrics.cjs.map +1 -1
- package/dist/metrics.d.cts.map +1 -1
- package/dist/metrics.d.ts.map +1 -1
- package/dist/metrics.js +6 -3
- package/dist/metrics.js.map +1 -1
- package/dist/misbehavior.cjs +62 -3
- package/dist/misbehavior.cjs.map +1 -1
- package/dist/misbehavior.d.cts.map +1 -1
- package/dist/misbehavior.d.ts.map +1 -1
- package/dist/misbehavior.js +63 -4
- package/dist/misbehavior.js.map +1 -1
- package/dist/model-utils.cjs +1 -0
- package/dist/model-utils.cjs.map +1 -1
- package/dist/model-utils.js +1 -1
- package/dist/model-utils.js.map +1 -1
- package/dist/moderation.cjs +15 -12
- package/dist/moderation.cjs.map +1 -1
- package/dist/moderation.js +14 -11
- package/dist/moderation.js.map +1 -1
- package/dist/ndjson-writer.cjs +21 -23
- package/dist/ndjson-writer.cjs.map +1 -1
- package/dist/ndjson-writer.d.cts +0 -1
- package/dist/ndjson-writer.d.cts.map +1 -1
- package/dist/ndjson-writer.d.ts +0 -1
- package/dist/ndjson-writer.d.ts.map +1 -1
- package/dist/ndjson-writer.js +21 -24
- package/dist/ndjson-writer.js.map +1 -1
- package/dist/ollama.cjs +276 -210
- package/dist/ollama.cjs.map +1 -1
- package/dist/ollama.d.cts.map +1 -1
- package/dist/ollama.d.ts.map +1 -1
- package/dist/ollama.js +273 -207
- package/dist/ollama.js.map +1 -1
- package/dist/openapi.cjs +323 -3
- package/dist/openapi.cjs.map +1 -1
- package/dist/openapi.d.cts.map +1 -1
- package/dist/openapi.d.ts.map +1 -1
- package/dist/openapi.js +324 -4
- package/dist/openapi.js.map +1 -1
- package/dist/openrouter-chat.cjs +11 -155
- package/dist/openrouter-chat.cjs.map +1 -1
- package/dist/openrouter-chat.js +11 -155
- package/dist/openrouter-chat.js.map +1 -1
- package/dist/openrouter-video.cjs +51 -74
- package/dist/openrouter-video.cjs.map +1 -1
- package/dist/openrouter-video.d.cts.map +1 -1
- package/dist/openrouter-video.d.ts.map +1 -1
- package/dist/openrouter-video.js +37 -60
- package/dist/openrouter-video.js.map +1 -1
- package/dist/raw-validation.cjs +177 -0
- package/dist/raw-validation.cjs.map +1 -0
- package/dist/raw-validation.js +176 -0
- package/dist/raw-validation.js.map +1 -0
- package/dist/recorder.cjs +176 -95
- package/dist/recorder.cjs.map +1 -1
- package/dist/recorder.d.cts.map +1 -1
- package/dist/recorder.d.ts.map +1 -1
- package/dist/recorder.js +176 -95
- package/dist/recorder.js.map +1 -1
- package/dist/rerank.cjs +13 -11
- package/dist/rerank.cjs.map +1 -1
- package/dist/rerank.js +12 -10
- package/dist/rerank.js.map +1 -1
- package/dist/response/catalog/anthropic-page.cjs +39 -0
- package/dist/response/catalog/anthropic-page.cjs.map +1 -0
- package/dist/response/catalog/anthropic-page.js +38 -0
- package/dist/response/catalog/anthropic-page.js.map +1 -0
- package/dist/response/catalog/collect.cjs +61 -0
- package/dist/response/catalog/collect.cjs.map +1 -0
- package/dist/response/catalog/collect.js +59 -0
- package/dist/response/catalog/collect.js.map +1 -0
- package/dist/response/catalog/gemini-page.cjs +25 -0
- package/dist/response/catalog/gemini-page.cjs.map +1 -0
- package/dist/response/catalog/gemini-page.js +24 -0
- package/dist/response/catalog/gemini-page.js.map +1 -0
- package/dist/response/catalog/render.cjs +182 -0
- package/dist/response/catalog/render.cjs.map +1 -0
- package/dist/response/catalog/render.js +171 -0
- package/dist/response/catalog/render.js.map +1 -0
- package/dist/response/deliver.cjs +144 -0
- package/dist/response/deliver.cjs.map +1 -0
- package/dist/response/deliver.js +143 -0
- package/dist/response/deliver.js.map +1 -0
- package/dist/response/errors.cjs +225 -0
- package/dist/response/errors.cjs.map +1 -0
- package/dist/response/errors.js +224 -0
- package/dist/response/errors.js.map +1 -0
- package/dist/response/finish.cjs +39 -0
- package/dist/response/finish.cjs.map +1 -0
- package/dist/response/finish.js +35 -0
- package/dist/response/finish.js.map +1 -0
- package/dist/response/frame-loop.cjs +102 -0
- package/dist/response/frame-loop.cjs.map +1 -0
- package/dist/response/frame-loop.js +100 -0
- package/dist/response/frame-loop.js.map +1 -0
- package/dist/response/lifecycle.cjs +223 -0
- package/dist/response/lifecycle.cjs.map +1 -0
- package/dist/response/lifecycle.js +211 -0
- package/dist/response/lifecycle.js.map +1 -0
- package/dist/response/policy.cjs +126 -0
- package/dist/response/policy.cjs.map +1 -0
- package/dist/response/policy.js +120 -0
- package/dist/response/policy.js.map +1 -0
- package/dist/response/profiles.cjs +69 -0
- package/dist/response/profiles.cjs.map +1 -0
- package/dist/response/profiles.js +65 -0
- package/dist/response/profiles.js.map +1 -0
- package/dist/response/proxy.cjs +71 -0
- package/dist/response/proxy.cjs.map +1 -0
- package/dist/response/proxy.js +70 -0
- package/dist/response/proxy.js.map +1 -0
- package/dist/response/raw.cjs +228 -0
- package/dist/response/raw.cjs.map +1 -0
- package/dist/response/raw.js +227 -0
- package/dist/response/raw.js.map +1 -0
- package/dist/response/timing.cjs +157 -0
- package/dist/response/timing.cjs.map +1 -0
- package/dist/response/timing.js +150 -0
- package/dist/response/timing.js.map +1 -0
- package/dist/response/usage/codecs/anthropic.cjs +52 -0
- package/dist/response/usage/codecs/anthropic.cjs.map +1 -0
- package/dist/response/usage/codecs/anthropic.js +50 -0
- package/dist/response/usage/codecs/anthropic.js.map +1 -0
- package/dist/response/usage/codecs/cohere.cjs +36 -0
- package/dist/response/usage/codecs/cohere.cjs.map +1 -0
- package/dist/response/usage/codecs/cohere.js +35 -0
- package/dist/response/usage/codecs/cohere.js.map +1 -0
- package/dist/response/usage/codecs/converse.cjs +16 -0
- package/dist/response/usage/codecs/converse.cjs.map +1 -0
- package/dist/response/usage/codecs/converse.js +15 -0
- package/dist/response/usage/codecs/converse.js.map +1 -0
- package/dist/response/usage/codecs/gemini.cjs +31 -0
- package/dist/response/usage/codecs/gemini.cjs.map +1 -0
- package/dist/response/usage/codecs/gemini.js +31 -0
- package/dist/response/usage/codecs/gemini.js.map +1 -0
- package/dist/response/usage/codecs/interactions.cjs +22 -0
- package/dist/response/usage/codecs/interactions.cjs.map +1 -0
- package/dist/response/usage/codecs/interactions.js +21 -0
- package/dist/response/usage/codecs/interactions.js.map +1 -0
- package/dist/response/usage/codecs/ollama.cjs +17 -0
- package/dist/response/usage/codecs/ollama.cjs.map +1 -0
- package/dist/response/usage/codecs/ollama.js +17 -0
- package/dist/response/usage/codecs/ollama.js.map +1 -0
- package/dist/response/usage/codecs/openai.cjs +52 -0
- package/dist/response/usage/codecs/openai.cjs.map +1 -0
- package/dist/response/usage/codecs/openai.js +50 -0
- package/dist/response/usage/codecs/openai.js.map +1 -0
- package/dist/response/usage/codecs/openrouter.cjs +68 -0
- package/dist/response/usage/codecs/openrouter.cjs.map +1 -0
- package/dist/response/usage/codecs/openrouter.js +67 -0
- package/dist/response/usage/codecs/openrouter.js.map +1 -0
- package/dist/response/usage/codecs/realtime.cjs +19 -0
- package/dist/response/usage/codecs/realtime.cjs.map +1 -0
- package/dist/response/usage/codecs/realtime.js +18 -0
- package/dist/response/usage/codecs/realtime.js.map +1 -0
- package/dist/response/usage/codecs/responses.cjs +21 -0
- package/dist/response/usage/codecs/responses.cjs.map +1 -0
- package/dist/response/usage/codecs/responses.js +20 -0
- package/dist/response/usage/codecs/responses.js.map +1 -0
- package/dist/response/usage/estimate.cjs +23 -0
- package/dist/response/usage/estimate.cjs.map +1 -0
- package/dist/response/usage/estimate.js +21 -0
- package/dist/response/usage/estimate.js.map +1 -0
- package/dist/response/usage/fields.cjs +72 -0
- package/dist/response/usage/fields.cjs.map +1 -0
- package/dist/response/usage/fields.js +70 -0
- package/dist/response/usage/fields.js.map +1 -0
- package/dist/response/usage/recording.cjs +52 -0
- package/dist/response/usage/recording.cjs.map +1 -0
- package/dist/response/usage/recording.js +52 -0
- package/dist/response/usage/recording.js.map +1 -0
- package/dist/responses.cjs +304 -196
- package/dist/responses.cjs.map +1 -1
- package/dist/responses.d.cts.map +1 -1
- package/dist/responses.d.ts.map +1 -1
- package/dist/responses.js +303 -195
- package/dist/responses.js.map +1 -1
- package/dist/route-registry.cjs +45 -0
- package/dist/route-registry.cjs.map +1 -1
- package/dist/route-registry.d.cts.map +1 -1
- package/dist/route-registry.d.ts.map +1 -1
- package/dist/route-registry.js +41 -1
- package/dist/route-registry.js.map +1 -1
- package/dist/router.cjs +24 -4
- package/dist/router.cjs.map +1 -1
- package/dist/router.d.cts +7 -1
- package/dist/router.d.cts.map +1 -1
- package/dist/router.d.ts +7 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +24 -5
- package/dist/router.js.map +1 -1
- package/dist/search.cjs +13 -11
- package/dist/search.cjs.map +1 -1
- package/dist/search.js +12 -10
- package/dist/search.js.map +1 -1
- package/dist/server.cjs +293 -248
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +294 -249
- package/dist/server.js.map +1 -1
- package/dist/speech.cjs +20 -18
- package/dist/speech.cjs.map +1 -1
- package/dist/speech.d.cts.map +1 -1
- package/dist/speech.d.ts.map +1 -1
- package/dist/speech.js +19 -17
- package/dist/speech.js.map +1 -1
- package/dist/sse-writer.cjs +56 -30
- package/dist/sse-writer.cjs.map +1 -1
- package/dist/sse-writer.d.cts +0 -1
- package/dist/sse-writer.d.cts.map +1 -1
- package/dist/sse-writer.d.ts +0 -1
- package/dist/sse-writer.d.ts.map +1 -1
- package/dist/sse-writer.js +55 -31
- package/dist/sse-writer.js.map +1 -1
- package/dist/stream-collapse.cjs +118 -11
- package/dist/stream-collapse.cjs.map +1 -1
- package/dist/stream-collapse.d.cts +10 -9
- package/dist/stream-collapse.d.cts.map +1 -1
- package/dist/stream-collapse.d.ts +10 -9
- package/dist/stream-collapse.d.ts.map +1 -1
- package/dist/stream-collapse.js +118 -11
- package/dist/stream-collapse.js.map +1 -1
- package/dist/transcription.cjs +31 -43
- package/dist/transcription.cjs.map +1 -1
- package/dist/transcription.d.cts.map +1 -1
- package/dist/transcription.d.ts.map +1 -1
- package/dist/transcription.js +31 -43
- package/dist/transcription.js.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +231 -9
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +231 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/vector-mock.cjs +3 -8
- package/dist/vector-mock.cjs.map +1 -1
- package/dist/vector-mock.d.cts.map +1 -1
- package/dist/vector-mock.d.ts.map +1 -1
- package/dist/vector-mock.js +3 -8
- package/dist/vector-mock.js.map +1 -1
- package/dist/vector-stores.cjs +2 -4
- package/dist/vector-stores.cjs.map +1 -1
- package/dist/vector-stores.d.cts.map +1 -1
- package/dist/vector-stores.d.ts.map +1 -1
- package/dist/vector-stores.js +2 -4
- package/dist/vector-stores.js.map +1 -1
- package/dist/veo-video.cjs +16 -14
- package/dist/veo-video.cjs.map +1 -1
- package/dist/veo-video.js +10 -8
- package/dist/veo-video.js.map +1 -1
- package/dist/video.cjs +21 -19
- package/dist/video.cjs.map +1 -1
- package/dist/video.d.cts.map +1 -1
- package/dist/video.d.ts.map +1 -1
- package/dist/video.js +20 -18
- package/dist/video.js.map +1 -1
- package/dist/ws-framing.cjs +12 -6
- package/dist/ws-framing.cjs.map +1 -1
- package/dist/ws-framing.d.cts +2 -0
- package/dist/ws-framing.d.cts.map +1 -1
- package/dist/ws-framing.d.ts +2 -0
- package/dist/ws-framing.d.ts.map +1 -1
- package/dist/ws-framing.js +12 -6
- package/dist/ws-framing.js.map +1 -1
- package/dist/ws-gemini-live.cjs +131 -96
- package/dist/ws-gemini-live.cjs.map +1 -1
- package/dist/ws-gemini-live.d.cts +0 -1
- package/dist/ws-gemini-live.d.cts.map +1 -1
- package/dist/ws-gemini-live.d.ts +0 -1
- package/dist/ws-gemini-live.d.ts.map +1 -1
- package/dist/ws-gemini-live.js +130 -95
- package/dist/ws-gemini-live.js.map +1 -1
- package/dist/ws-live.cjs +6 -5
- package/dist/ws-live.cjs.map +1 -1
- package/dist/ws-live.js +5 -4
- package/dist/ws-live.js.map +1 -1
- package/dist/ws-realtime.cjs +108 -124
- package/dist/ws-realtime.cjs.map +1 -1
- package/dist/ws-realtime.d.cts.map +1 -1
- package/dist/ws-realtime.d.ts.map +1 -1
- package/dist/ws-realtime.js +105 -121
- package/dist/ws-realtime.js.map +1 -1
- package/dist/ws-responses.cjs +80 -59
- package/dist/ws-responses.cjs.map +1 -1
- package/dist/ws-responses.d.cts.map +1 -1
- package/dist/ws-responses.d.ts.map +1 -1
- package/dist/ws-responses.js +79 -58
- package/dist/ws-responses.js.map +1 -1
- package/package.json +4 -1
- package/skills/write-fixtures/SKILL.md +57 -16
package/dist/bedrock.cjs
CHANGED
|
@@ -1,39 +1,24 @@
|
|
|
1
|
+
const require_errors = require('./response/errors.cjs');
|
|
2
|
+
const require_policy = require('./response/policy.cjs');
|
|
1
3
|
const require_helpers = require('./helpers.cjs');
|
|
2
4
|
const require_sse_writer = require('./sse-writer.cjs');
|
|
3
5
|
const require_chaos = require('./chaos.cjs');
|
|
4
6
|
const require_misbehavior = require('./misbehavior.cjs');
|
|
5
7
|
const require_router = require('./router.cjs');
|
|
8
|
+
const require_anthropic = require('./response/usage/codecs/anthropic.cjs');
|
|
6
9
|
const require_recorder = require('./recorder.cjs');
|
|
7
|
-
const
|
|
8
|
-
const
|
|
10
|
+
const require_timing = require('./response/timing.cjs');
|
|
11
|
+
const require_deliver = require('./response/deliver.cjs');
|
|
12
|
+
const require_proxy = require('./response/proxy.cjs');
|
|
9
13
|
const require_aws_event_stream = require('./aws-event-stream.cjs');
|
|
14
|
+
const require_raw = require('./response/raw.cjs');
|
|
15
|
+
const require_finish = require('./response/finish.cjs');
|
|
16
|
+
const require_messages = require('./messages.cjs');
|
|
10
17
|
|
|
11
18
|
//#region src/bedrock.ts
|
|
12
19
|
function bedrockStopReason(overrideFinishReason, defaultReason) {
|
|
13
20
|
if (!overrideFinishReason) return defaultReason;
|
|
14
|
-
|
|
15
|
-
if (overrideFinishReason === "tool_calls") return "tool_use";
|
|
16
|
-
if (overrideFinishReason === "length") return "max_tokens";
|
|
17
|
-
return overrideFinishReason;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Build a Bedrock-style usage object from optional overrides.
|
|
21
|
-
*
|
|
22
|
-
* When no overrides are provided (the common case for mock fixtures),
|
|
23
|
-
* returns all-zero token counts. This is intentional — aimock does not
|
|
24
|
-
* attempt to estimate token usage from fixture content. Callers that
|
|
25
|
-
* need realistic usage numbers should set `usage` in their fixture's
|
|
26
|
-
* response overrides.
|
|
27
|
-
*/
|
|
28
|
-
function bedrockUsage(overrides) {
|
|
29
|
-
if (!overrides?.usage) return {
|
|
30
|
-
input_tokens: 0,
|
|
31
|
-
output_tokens: 0
|
|
32
|
-
};
|
|
33
|
-
return {
|
|
34
|
-
input_tokens: overrides.usage.input_tokens ?? overrides.usage.prompt_tokens ?? 0,
|
|
35
|
-
output_tokens: overrides.usage.output_tokens ?? overrides.usage.completion_tokens ?? 0
|
|
36
|
-
};
|
|
21
|
+
return require_finish.mapAnthropicFinish(overrideFinishReason);
|
|
37
22
|
}
|
|
38
23
|
function extractTextContent(content) {
|
|
39
24
|
if (content === null || content === void 0) return "";
|
|
@@ -146,7 +131,7 @@ function buildBedrockTextResponse(content, model, reasoning, overrides) {
|
|
|
146
131
|
model: overrides?.model ?? model,
|
|
147
132
|
stop_reason: bedrockStopReason(overrides?.finishReason, "end_turn"),
|
|
148
133
|
stop_sequence: null,
|
|
149
|
-
usage:
|
|
134
|
+
usage: require_anthropic.render(require_anthropic.resolve(overrides), "bedrock-final")
|
|
150
135
|
};
|
|
151
136
|
}
|
|
152
137
|
function buildBedrockToolCallResponse(toolCalls, model, logger, reasoning, overrides) {
|
|
@@ -173,7 +158,7 @@ function buildBedrockToolCallResponse(toolCalls, model, logger, reasoning, overr
|
|
|
173
158
|
model: overrides?.model ?? model,
|
|
174
159
|
stop_reason: bedrockStopReason(overrides?.finishReason, "tool_use"),
|
|
175
160
|
stop_sequence: null,
|
|
176
|
-
usage:
|
|
161
|
+
usage: require_anthropic.render(require_anthropic.resolve(overrides), "bedrock-final")
|
|
177
162
|
};
|
|
178
163
|
}
|
|
179
164
|
/**
|
|
@@ -217,7 +202,7 @@ function buildBedrockBlocksResponse(blocks, model, logger, reasoning, overrides)
|
|
|
217
202
|
model: overrides?.model ?? model,
|
|
218
203
|
stop_reason: bedrockStopReason(overrides?.finishReason, outcome.hasToolCalls ? "tool_use" : "end_turn"),
|
|
219
204
|
stop_sequence: null,
|
|
220
|
-
usage:
|
|
205
|
+
usage: require_anthropic.render(require_anthropic.resolve(overrides), "bedrock-final")
|
|
221
206
|
};
|
|
222
207
|
}
|
|
223
208
|
async function handleBedrock(req, res, raw, modelId, fixtures, journal, defaults, setCorsHeaders) {
|
|
@@ -239,10 +224,10 @@ async function handleBedrock(req, res, raw, modelId, fixtures, journal, defaults
|
|
|
239
224
|
fixture: null
|
|
240
225
|
}
|
|
241
226
|
});
|
|
242
|
-
require_sse_writer.writeErrorResponse(res, 400,
|
|
227
|
+
require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("bedrock", "validation", {
|
|
243
228
|
message: `Malformed JSON: ${detail}`,
|
|
244
229
|
type: "invalid_request_error"
|
|
245
|
-
}
|
|
230
|
+
}).body);
|
|
246
231
|
return;
|
|
247
232
|
}
|
|
248
233
|
if (!require_helpers.isJsonObject(bedrockReq)) {
|
|
@@ -256,10 +241,10 @@ async function handleBedrock(req, res, raw, modelId, fixtures, journal, defaults
|
|
|
256
241
|
fixture: null
|
|
257
242
|
}
|
|
258
243
|
});
|
|
259
|
-
require_sse_writer.writeErrorResponse(res, 400,
|
|
244
|
+
require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("bedrock", "validation", {
|
|
260
245
|
message: "Request body must be a JSON object",
|
|
261
246
|
type: "invalid_request_error"
|
|
262
|
-
}
|
|
247
|
+
}).body);
|
|
263
248
|
return;
|
|
264
249
|
}
|
|
265
250
|
const bedrockShapeError = require_helpers.validateChatMessages(bedrockReq.messages, { checkToolCalls: false }) ?? require_helpers.validateToolsField(bedrockReq.tools) ?? (bedrockReq.system !== void 0 && bedrockReq.system !== null && typeof bedrockReq.system !== "string" && !Array.isArray(bedrockReq.system) ? "system must be a string or an array" : null);
|
|
@@ -274,17 +259,20 @@ async function handleBedrock(req, res, raw, modelId, fixtures, journal, defaults
|
|
|
274
259
|
fixture: null
|
|
275
260
|
}
|
|
276
261
|
});
|
|
277
|
-
require_sse_writer.writeErrorResponse(res, 400,
|
|
262
|
+
require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("bedrock", "validation", {
|
|
278
263
|
message: `Invalid request: ${bedrockShapeError}`,
|
|
279
264
|
type: "invalid_request_error"
|
|
280
|
-
}
|
|
265
|
+
}).body);
|
|
281
266
|
return;
|
|
282
267
|
}
|
|
283
268
|
const completionReq = bedrockToCompletionRequest(bedrockReq, modelId, logger);
|
|
284
269
|
completionReq._endpointType = "chat";
|
|
285
270
|
completionReq._context = require_helpers.getContext(req);
|
|
286
271
|
const testId = require_helpers.getTestId(req);
|
|
287
|
-
const { fixture, skippedBySequenceOrTurn } = require_router.matchFixtureDiagnostic(fixtures, completionReq, journal.getFixtureMatchCountsForTest(testId), defaults.requestTransform,
|
|
272
|
+
const { fixture, skippedBySequenceOrTurn } = require_router.matchFixtureDiagnostic(fixtures, completionReq, journal.getFixtureMatchCountsForTest(testId), defaults.requestTransform, {
|
|
273
|
+
...require_router.recordMatchOptions(!!defaults.record, defaults.logger),
|
|
274
|
+
wire: "bedrock-invoke"
|
|
275
|
+
});
|
|
288
276
|
if (fixture) logger.debug(`Fixture matched: ${JSON.stringify(fixture.match).slice(0, 120)}`);
|
|
289
277
|
else logger.debug(`No fixture matched for request`);
|
|
290
278
|
if (fixture) journal.incrementFixtureMatchCount(fixture, fixtures, testId);
|
|
@@ -295,7 +283,7 @@ async function handleBedrock(req, res, raw, modelId, fixtures, journal, defaults
|
|
|
295
283
|
body: completionReq
|
|
296
284
|
}, fixture ? "fixture" : "proxy", defaults.registry, defaults.logger)) return;
|
|
297
285
|
if (!fixture) {
|
|
298
|
-
if (
|
|
286
|
+
if (require_policy.resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss) {
|
|
299
287
|
const strictStatus = 503;
|
|
300
288
|
const strictMessage = require_helpers.strictNoMatchMessage(skippedBySequenceOrTurn);
|
|
301
289
|
logger.error(require_helpers.strictNoMatchLogLine(req.method ?? "POST", urlPath, skippedBySequenceOrTurn));
|
|
@@ -307,17 +295,17 @@ async function handleBedrock(req, res, raw, modelId, fixtures, journal, defaults
|
|
|
307
295
|
response: {
|
|
308
296
|
status: strictStatus,
|
|
309
297
|
fixture: null,
|
|
310
|
-
...
|
|
298
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
311
299
|
}
|
|
312
300
|
});
|
|
313
|
-
require_sse_writer.writeErrorResponse(res, strictStatus,
|
|
301
|
+
require_sse_writer.writeErrorResponse(res, strictStatus, require_errors.renderError("bedrock", "strict-miss", {
|
|
314
302
|
message: strictMessage,
|
|
315
303
|
type: "invalid_request_error"
|
|
316
|
-
}
|
|
304
|
+
}).body);
|
|
317
305
|
return;
|
|
318
306
|
}
|
|
319
307
|
if (defaults.record) {
|
|
320
|
-
const outcome = await require_recorder.proxyAndRecord(req, res, completionReq, "bedrock", urlPath, fixtures, defaults, raw);
|
|
308
|
+
const { outcome, clientHungUp } = await require_proxy.withHangUpDetection(req, res, () => require_recorder.proxyAndRecord(req, res, completionReq, "bedrock", urlPath, fixtures, defaults, raw));
|
|
321
309
|
if (outcome === "handled_by_hook") return;
|
|
322
310
|
if (outcome !== "not_configured") {
|
|
323
311
|
journal.add({
|
|
@@ -328,7 +316,8 @@ async function handleBedrock(req, res, raw, modelId, fixtures, journal, defaults
|
|
|
328
316
|
response: {
|
|
329
317
|
status: res.statusCode ?? 200,
|
|
330
318
|
fixture: null,
|
|
331
|
-
source: "proxy"
|
|
319
|
+
source: "proxy",
|
|
320
|
+
...require_proxy.proxyInterruption(res, clientHungUp)
|
|
332
321
|
}
|
|
333
322
|
});
|
|
334
323
|
return;
|
|
@@ -342,13 +331,13 @@ async function handleBedrock(req, res, raw, modelId, fixtures, journal, defaults
|
|
|
342
331
|
response: {
|
|
343
332
|
status: 404,
|
|
344
333
|
fixture: null,
|
|
345
|
-
...
|
|
334
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
346
335
|
}
|
|
347
336
|
});
|
|
348
|
-
require_sse_writer.writeErrorResponse(res, 404,
|
|
337
|
+
require_sse_writer.writeErrorResponse(res, 404, require_errors.renderError("bedrock", "fixture-miss", {
|
|
349
338
|
message: "No fixture matched",
|
|
350
339
|
type: "invalid_request_error"
|
|
351
|
-
}
|
|
340
|
+
}).body);
|
|
352
341
|
return;
|
|
353
342
|
}
|
|
354
343
|
const response = await require_helpers.resolveResponse(fixture, completionReq);
|
|
@@ -385,41 +374,69 @@ async function handleBedrock(req, res, raw, modelId, fixtures, journal, defaults
|
|
|
385
374
|
fixture
|
|
386
375
|
}
|
|
387
376
|
});
|
|
388
|
-
const
|
|
389
|
-
|
|
390
|
-
require_sse_writer.writeErrorResponse(res, misbehavior.status, JSON.stringify({
|
|
391
|
-
__type: type,
|
|
377
|
+
const renderedError = require_errors.renderError("bedrock", "misbehavior", {
|
|
378
|
+
type: misbehavior.status === 400 ? "ValidationException" : "NotImplementedException",
|
|
392
379
|
code: misbehavior.code,
|
|
393
380
|
message: misbehavior.message
|
|
394
|
-
})
|
|
381
|
+
});
|
|
382
|
+
for (const [name, value] of Object.entries(renderedError.headers ?? {})) res.setHeader(name, value);
|
|
383
|
+
require_sse_writer.writeErrorResponse(res, misbehavior.status, renderedError.body);
|
|
395
384
|
return;
|
|
396
385
|
}
|
|
386
|
+
const chunkSize = Math.max(1, fixture.chunkSize ?? defaults.chunkSize);
|
|
387
|
+
const jsonOpts = (payloadLength, duplicateId = false) => ({
|
|
388
|
+
surface: "other",
|
|
389
|
+
payloadLength,
|
|
390
|
+
chunkSize,
|
|
391
|
+
recordedTimings: fixture.recordedTimings,
|
|
392
|
+
duplicateId,
|
|
393
|
+
replaySpeed: fixture.replaySpeed ?? defaults.replaySpeed
|
|
394
|
+
});
|
|
397
395
|
if (misbehavior.kind === "applied") {
|
|
398
396
|
const prepared = require_messages.prepareClaudeMisbehavior(misbehavior, {
|
|
399
397
|
request: completionReq,
|
|
400
398
|
stream: false,
|
|
401
|
-
chunkSize
|
|
399
|
+
chunkSize,
|
|
402
400
|
logger,
|
|
403
|
-
strict:
|
|
401
|
+
strict: require_policy.resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression,
|
|
402
|
+
citations: false
|
|
404
403
|
});
|
|
405
404
|
if (prepared.stream) throw new TypeError("InvokeModel requires non-stream Claude output");
|
|
405
|
+
const entry = journal.add({
|
|
406
|
+
method: req.method ?? "POST",
|
|
407
|
+
path: urlPath,
|
|
408
|
+
headers: require_helpers.flattenHeaders(req.headers),
|
|
409
|
+
body: completionReq,
|
|
410
|
+
response: {
|
|
411
|
+
status: 200,
|
|
412
|
+
fixture
|
|
413
|
+
}
|
|
414
|
+
});
|
|
406
415
|
require_misbehavior.recordMisbehaviorOutcome({
|
|
407
|
-
entry
|
|
408
|
-
method: req.method ?? "POST",
|
|
409
|
-
path: urlPath,
|
|
410
|
-
headers: require_helpers.flattenHeaders(req.headers),
|
|
411
|
-
body: completionReq,
|
|
412
|
-
response: {
|
|
413
|
-
status: 200,
|
|
414
|
-
fixture
|
|
415
|
-
}
|
|
416
|
-
}),
|
|
416
|
+
entry,
|
|
417
417
|
summary: prepared.plan.summary,
|
|
418
418
|
defaults,
|
|
419
419
|
testId
|
|
420
420
|
});
|
|
421
|
-
|
|
422
|
-
res.
|
|
421
|
+
const preparedBody = prepared.body;
|
|
422
|
+
await require_deliver.deliverJson(res, entry, fixture, () => preparedBody, jsonOpts(require_timing.misbehaviorPayloadLength(misbehavior, misbehavior.reasoning === void 0 ? prepared.reasoning : void 0), !!misbehavior.duplicateId));
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
if (require_helpers.isRawResponse(response)) {
|
|
426
|
+
await require_raw.serveRawResponse({
|
|
427
|
+
wire: "bedrock-invoke",
|
|
428
|
+
stream: false,
|
|
429
|
+
req,
|
|
430
|
+
res,
|
|
431
|
+
fixture,
|
|
432
|
+
response,
|
|
433
|
+
body: completionReq,
|
|
434
|
+
journal,
|
|
435
|
+
defaults,
|
|
436
|
+
testId,
|
|
437
|
+
misbehaviorSummary: misbehavior.summary,
|
|
438
|
+
errorWire: "bedrock"
|
|
439
|
+
});
|
|
423
440
|
return;
|
|
424
441
|
}
|
|
425
442
|
if (require_helpers.isErrorResponse(response)) {
|
|
@@ -434,21 +451,14 @@ async function handleBedrock(req, res, raw, modelId, fixtures, journal, defaults
|
|
|
434
451
|
fixture
|
|
435
452
|
}
|
|
436
453
|
});
|
|
437
|
-
|
|
438
|
-
type: "error",
|
|
439
|
-
error: {
|
|
440
|
-
type: response.error.type ?? "api_error",
|
|
441
|
-
message: response.error.message
|
|
442
|
-
}
|
|
443
|
-
};
|
|
444
|
-
require_sse_writer.writeErrorResponse(res, status, JSON.stringify(anthropicError), { retryAfter: response.retryAfter });
|
|
454
|
+
require_sse_writer.writeErrorResponse(res, status, require_errors.renderError("bedrock", "fixture", response.error).body, { retryAfter: response.retryAfter });
|
|
445
455
|
return;
|
|
446
456
|
}
|
|
447
457
|
if (require_helpers.isCombinedFixtureResponse(response)) {
|
|
448
458
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Bedrock API — ignoring");
|
|
449
459
|
const overrides = require_helpers.extractOverrides(response);
|
|
450
|
-
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model,
|
|
451
|
-
addResponseEntry({
|
|
460
|
+
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model, require_policy.resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression, logger);
|
|
461
|
+
const journalEntry = addResponseEntry({
|
|
452
462
|
method: req.method ?? "POST",
|
|
453
463
|
path: urlPath,
|
|
454
464
|
headers: require_helpers.flattenHeaders(req.headers),
|
|
@@ -459,28 +469,27 @@ async function handleBedrock(req, res, raw, modelId, fixtures, journal, defaults
|
|
|
459
469
|
}
|
|
460
470
|
});
|
|
461
471
|
const functionToolCalls = require_helpers.requireEmittedFunctionToolCalls(response, "Bedrock InvokeModel");
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
res.end(JSON.stringify(blocksBody));
|
|
472
|
+
const blocks = response.blocks;
|
|
473
|
+
if (blocks && blocks.length > 0) {
|
|
474
|
+
await require_deliver.deliverJson(res, journalEntry, fixture, () => buildBedrockBlocksResponse(blocks, completionReq.model, logger, effReasoning, overrides), jsonOpts(require_timing.servedPayloadLength(response, effReasoning)));
|
|
466
475
|
return;
|
|
467
476
|
}
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
+
await require_deliver.deliverJson(res, journalEntry, fixture, () => {
|
|
478
|
+
const textBody = buildBedrockTextResponse(response.content ?? "", completionReq.model, effReasoning, overrides);
|
|
479
|
+
const toolBody = buildBedrockToolCallResponse(functionToolCalls, completionReq.model, logger, void 0, overrides);
|
|
480
|
+
return {
|
|
481
|
+
...textBody,
|
|
482
|
+
content: [...textBody.content, ...toolBody.content],
|
|
483
|
+
stop_reason: bedrockStopReason(overrides?.finishReason, "tool_use")
|
|
484
|
+
};
|
|
485
|
+
}, jsonOpts(require_timing.servedPayloadLength(response, effReasoning)));
|
|
477
486
|
return;
|
|
478
487
|
}
|
|
479
488
|
if (require_helpers.isTextResponse(response)) {
|
|
480
489
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Bedrock API — ignoring");
|
|
481
490
|
const overrides = require_helpers.extractOverrides(response);
|
|
482
|
-
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model,
|
|
483
|
-
addResponseEntry({
|
|
491
|
+
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model, require_policy.resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression, logger);
|
|
492
|
+
await require_deliver.deliverJson(res, addResponseEntry({
|
|
484
493
|
method: req.method ?? "POST",
|
|
485
494
|
path: urlPath,
|
|
486
495
|
headers: require_helpers.flattenHeaders(req.headers),
|
|
@@ -489,17 +498,14 @@ async function handleBedrock(req, res, raw, modelId, fixtures, journal, defaults
|
|
|
489
498
|
status: 200,
|
|
490
499
|
fixture
|
|
491
500
|
}
|
|
492
|
-
});
|
|
493
|
-
const body = buildBedrockTextResponse(response.content, completionReq.model, effReasoning, overrides);
|
|
494
|
-
res.writeHead(200, { "Content-Type": "application/json" });
|
|
495
|
-
res.end(JSON.stringify(body));
|
|
501
|
+
}), fixture, () => buildBedrockTextResponse(response.content, completionReq.model, effReasoning, overrides), jsonOpts(require_timing.servedPayloadLength(response, effReasoning)));
|
|
496
502
|
return;
|
|
497
503
|
}
|
|
498
504
|
if (require_helpers.isToolCallResponse(response)) {
|
|
499
505
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Bedrock API — ignoring");
|
|
500
506
|
const overrides = require_helpers.extractOverrides(response);
|
|
501
|
-
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model,
|
|
502
|
-
addResponseEntry({
|
|
507
|
+
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model, require_policy.resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression, logger);
|
|
508
|
+
const journalEntry = addResponseEntry({
|
|
503
509
|
method: req.method ?? "POST",
|
|
504
510
|
path: urlPath,
|
|
505
511
|
headers: require_helpers.flattenHeaders(req.headers),
|
|
@@ -509,9 +515,8 @@ async function handleBedrock(req, res, raw, modelId, fixtures, journal, defaults
|
|
|
509
515
|
fixture
|
|
510
516
|
}
|
|
511
517
|
});
|
|
512
|
-
const
|
|
513
|
-
|
|
514
|
-
res.end(JSON.stringify(body));
|
|
518
|
+
const functionToolCalls = require_helpers.requireEmittedFunctionToolCalls(response, "Bedrock InvokeModel");
|
|
519
|
+
await require_deliver.deliverJson(res, journalEntry, fixture, () => buildBedrockToolCallResponse(functionToolCalls, completionReq.model, logger, effReasoning, overrides), jsonOpts(require_timing.servedPayloadLength(response, effReasoning)));
|
|
515
520
|
return;
|
|
516
521
|
}
|
|
517
522
|
addResponseEntry({
|
|
@@ -524,19 +529,14 @@ async function handleBedrock(req, res, raw, modelId, fixtures, journal, defaults
|
|
|
524
529
|
fixture
|
|
525
530
|
}
|
|
526
531
|
});
|
|
527
|
-
require_sse_writer.writeErrorResponse(res, 500,
|
|
532
|
+
require_sse_writer.writeErrorResponse(res, 500, require_errors.renderError("bedrock", "unknown-response", {
|
|
528
533
|
message: "Fixture response did not match any known type",
|
|
529
534
|
type: "server_error"
|
|
530
|
-
}
|
|
535
|
+
}).body);
|
|
531
536
|
}
|
|
532
537
|
const BEDROCK_INVOKE_STREAM_EVENT_TYPE = "chunk";
|
|
533
538
|
/** Serialize Claude events as InvokeModel PayloadPart, leaving generic AWS framing unchanged. */
|
|
534
|
-
|
|
535
|
-
return require_aws_event_stream.writeEventStream(res, events.map((event) => ({
|
|
536
|
-
eventType: event.eventType,
|
|
537
|
-
payload: { bytes: Buffer.from(JSON.stringify(event.payload), "utf8").toString("base64") }
|
|
538
|
-
})), options);
|
|
539
|
-
}
|
|
539
|
+
const bedrockInvokeCodec = require_aws_event_stream.eventStreamCodec((event) => require_aws_event_stream.encodeEventStreamMessage(event.eventType, { bytes: Buffer.from(JSON.stringify(event.payload), "utf8").toString("base64") }));
|
|
540
540
|
function buildBedrockInvokeMessageStart(model, overrides) {
|
|
541
541
|
return {
|
|
542
542
|
eventType: BEDROCK_INVOKE_STREAM_EVENT_TYPE,
|
|
@@ -550,12 +550,12 @@ function buildBedrockInvokeMessageStart(model, overrides) {
|
|
|
550
550
|
model: overrides?.model ?? model,
|
|
551
551
|
stop_reason: null,
|
|
552
552
|
stop_sequence: null,
|
|
553
|
-
usage:
|
|
553
|
+
usage: require_anthropic.render(require_anthropic.resolve(overrides), "bedrock-start")
|
|
554
554
|
}
|
|
555
555
|
}
|
|
556
556
|
};
|
|
557
557
|
}
|
|
558
|
-
function buildBedrockInvokeMessageDelta(stopReason) {
|
|
558
|
+
function buildBedrockInvokeMessageDelta(stopReason, overrides) {
|
|
559
559
|
return {
|
|
560
560
|
eventType: BEDROCK_INVOKE_STREAM_EVENT_TYPE,
|
|
561
561
|
payload: {
|
|
@@ -564,7 +564,7 @@ function buildBedrockInvokeMessageDelta(stopReason) {
|
|
|
564
564
|
stop_reason: stopReason,
|
|
565
565
|
stop_sequence: null
|
|
566
566
|
},
|
|
567
|
-
usage:
|
|
567
|
+
usage: require_anthropic.render(require_anthropic.resolve(overrides), "bedrock-delta")
|
|
568
568
|
}
|
|
569
569
|
};
|
|
570
570
|
}
|
|
@@ -660,7 +660,7 @@ function buildBedrockStreamTextEvents(content, model, chunkSize, reasoning, over
|
|
|
660
660
|
index: textBlockIndex
|
|
661
661
|
}
|
|
662
662
|
});
|
|
663
|
-
events.push(buildBedrockInvokeMessageDelta(bedrockStopReason(overrides?.finishReason, "end_turn")));
|
|
663
|
+
events.push(buildBedrockInvokeMessageDelta(bedrockStopReason(overrides?.finishReason, "end_turn"), overrides));
|
|
664
664
|
events.push(buildBedrockInvokeMessageStop());
|
|
665
665
|
return events;
|
|
666
666
|
}
|
|
@@ -794,7 +794,7 @@ function buildBedrockStreamContentWithToolCallsEvents(content, toolCalls, model,
|
|
|
794
794
|
});
|
|
795
795
|
blockIndex++;
|
|
796
796
|
}
|
|
797
|
-
events.push(buildBedrockInvokeMessageDelta(bedrockStopReason(overrides?.finishReason, outcome.hasToolCalls ? "tool_use" : "end_turn")));
|
|
797
|
+
events.push(buildBedrockInvokeMessageDelta(bedrockStopReason(overrides?.finishReason, outcome.hasToolCalls ? "tool_use" : "end_turn"), overrides));
|
|
798
798
|
events.push(buildBedrockInvokeMessageStop());
|
|
799
799
|
return events;
|
|
800
800
|
}
|
|
@@ -871,7 +871,7 @@ function buildBedrockStreamContentWithToolCallsEvents(content, toolCalls, model,
|
|
|
871
871
|
}
|
|
872
872
|
});
|
|
873
873
|
}
|
|
874
|
-
events.push(buildBedrockInvokeMessageDelta(bedrockStopReason(overrides?.finishReason, "tool_use")));
|
|
874
|
+
events.push(buildBedrockInvokeMessageDelta(bedrockStopReason(overrides?.finishReason, "tool_use"), overrides));
|
|
875
875
|
events.push(buildBedrockInvokeMessageStop());
|
|
876
876
|
return events;
|
|
877
877
|
}
|
|
@@ -966,7 +966,7 @@ function buildBedrockStreamToolCallEvents(toolCalls, model, chunkSize, logger, r
|
|
|
966
966
|
}
|
|
967
967
|
});
|
|
968
968
|
}
|
|
969
|
-
events.push(buildBedrockInvokeMessageDelta(bedrockStopReason(overrides?.finishReason, "tool_use")));
|
|
969
|
+
events.push(buildBedrockInvokeMessageDelta(bedrockStopReason(overrides?.finishReason, "tool_use"), overrides));
|
|
970
970
|
events.push(buildBedrockInvokeMessageStop());
|
|
971
971
|
return events;
|
|
972
972
|
}
|
|
@@ -989,10 +989,10 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
989
989
|
fixture: null
|
|
990
990
|
}
|
|
991
991
|
});
|
|
992
|
-
require_sse_writer.writeErrorResponse(res, 400,
|
|
992
|
+
require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("bedrock", "validation", {
|
|
993
993
|
message: `Malformed JSON: ${detail}`,
|
|
994
994
|
type: "invalid_request_error"
|
|
995
|
-
}
|
|
995
|
+
}).body);
|
|
996
996
|
return;
|
|
997
997
|
}
|
|
998
998
|
if (!require_helpers.isJsonObject(bedrockReq)) {
|
|
@@ -1006,10 +1006,10 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
1006
1006
|
fixture: null
|
|
1007
1007
|
}
|
|
1008
1008
|
});
|
|
1009
|
-
require_sse_writer.writeErrorResponse(res, 400,
|
|
1009
|
+
require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("bedrock", "validation", {
|
|
1010
1010
|
message: "Request body must be a JSON object",
|
|
1011
1011
|
type: "invalid_request_error"
|
|
1012
|
-
}
|
|
1012
|
+
}).body);
|
|
1013
1013
|
return;
|
|
1014
1014
|
}
|
|
1015
1015
|
const bedrockShapeError = require_helpers.validateChatMessages(bedrockReq.messages, { checkToolCalls: false }) ?? require_helpers.validateToolsField(bedrockReq.tools) ?? (bedrockReq.system !== void 0 && bedrockReq.system !== null && typeof bedrockReq.system !== "string" && !Array.isArray(bedrockReq.system) ? "system must be a string or an array" : null);
|
|
@@ -1024,10 +1024,10 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
1024
1024
|
fixture: null
|
|
1025
1025
|
}
|
|
1026
1026
|
});
|
|
1027
|
-
require_sse_writer.writeErrorResponse(res, 400,
|
|
1027
|
+
require_sse_writer.writeErrorResponse(res, 400, require_errors.renderError("bedrock", "validation", {
|
|
1028
1028
|
message: `Invalid request: ${bedrockShapeError}`,
|
|
1029
1029
|
type: "invalid_request_error"
|
|
1030
|
-
}
|
|
1030
|
+
}).body);
|
|
1031
1031
|
return;
|
|
1032
1032
|
}
|
|
1033
1033
|
const completionReq = bedrockToCompletionRequest(bedrockReq, modelId, logger);
|
|
@@ -1035,7 +1035,10 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
1035
1035
|
completionReq._endpointType = "chat";
|
|
1036
1036
|
completionReq._context = require_helpers.getContext(req);
|
|
1037
1037
|
const testId = require_helpers.getTestId(req);
|
|
1038
|
-
const { fixture, skippedBySequenceOrTurn } = require_router.matchFixtureDiagnostic(fixtures, completionReq, journal.getFixtureMatchCountsForTest(testId), defaults.requestTransform,
|
|
1038
|
+
const { fixture, skippedBySequenceOrTurn } = require_router.matchFixtureDiagnostic(fixtures, completionReq, journal.getFixtureMatchCountsForTest(testId), defaults.requestTransform, {
|
|
1039
|
+
...require_router.recordMatchOptions(!!defaults.record, defaults.logger),
|
|
1040
|
+
wire: "bedrock-invoke"
|
|
1041
|
+
});
|
|
1039
1042
|
if (fixture) logger.debug(`Fixture matched: ${JSON.stringify(fixture.match).slice(0, 120)}`);
|
|
1040
1043
|
else logger.debug(`No fixture matched for request`);
|
|
1041
1044
|
if (fixture) journal.incrementFixtureMatchCount(fixture, fixtures, testId);
|
|
@@ -1046,7 +1049,7 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
1046
1049
|
body: completionReq
|
|
1047
1050
|
}, fixture ? "fixture" : "proxy", defaults.registry, defaults.logger)) return;
|
|
1048
1051
|
if (!fixture) {
|
|
1049
|
-
if (
|
|
1052
|
+
if (require_policy.resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss) {
|
|
1050
1053
|
const strictStatus = 503;
|
|
1051
1054
|
const strictMessage = require_helpers.strictNoMatchMessage(skippedBySequenceOrTurn);
|
|
1052
1055
|
logger.error(require_helpers.strictNoMatchLogLine(req.method ?? "POST", urlPath, skippedBySequenceOrTurn));
|
|
@@ -1058,17 +1061,17 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
1058
1061
|
response: {
|
|
1059
1062
|
status: strictStatus,
|
|
1060
1063
|
fixture: null,
|
|
1061
|
-
...
|
|
1064
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
1062
1065
|
}
|
|
1063
1066
|
});
|
|
1064
|
-
require_sse_writer.writeErrorResponse(res, strictStatus,
|
|
1067
|
+
require_sse_writer.writeErrorResponse(res, strictStatus, require_errors.renderError("bedrock", "strict-miss", {
|
|
1065
1068
|
message: strictMessage,
|
|
1066
1069
|
type: "invalid_request_error"
|
|
1067
|
-
}
|
|
1070
|
+
}).body);
|
|
1068
1071
|
return;
|
|
1069
1072
|
}
|
|
1070
1073
|
if (defaults.record) {
|
|
1071
|
-
const outcome = await require_recorder.proxyAndRecord(req, res, completionReq, "bedrock", urlPath, fixtures, defaults, raw);
|
|
1074
|
+
const { outcome, clientHungUp } = await require_proxy.withHangUpDetection(req, res, () => require_recorder.proxyAndRecord(req, res, completionReq, "bedrock", urlPath, fixtures, defaults, raw));
|
|
1072
1075
|
if (outcome === "handled_by_hook") return;
|
|
1073
1076
|
if (outcome !== "not_configured") {
|
|
1074
1077
|
journal.add({
|
|
@@ -1079,7 +1082,8 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
1079
1082
|
response: {
|
|
1080
1083
|
status: res.statusCode ?? 200,
|
|
1081
1084
|
fixture: null,
|
|
1082
|
-
source: "proxy"
|
|
1085
|
+
source: "proxy",
|
|
1086
|
+
...require_proxy.proxyInterruption(res, clientHungUp)
|
|
1083
1087
|
}
|
|
1084
1088
|
});
|
|
1085
1089
|
return;
|
|
@@ -1093,13 +1097,13 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
1093
1097
|
response: {
|
|
1094
1098
|
status: 404,
|
|
1095
1099
|
fixture: null,
|
|
1096
|
-
...
|
|
1100
|
+
...require_policy.strictOverrideField(defaults.strict, req.headers)
|
|
1097
1101
|
}
|
|
1098
1102
|
});
|
|
1099
|
-
require_sse_writer.writeErrorResponse(res, 404,
|
|
1103
|
+
require_sse_writer.writeErrorResponse(res, 404, require_errors.renderError("bedrock", "fixture-miss", {
|
|
1100
1104
|
message: "No fixture matched",
|
|
1101
1105
|
type: "invalid_request_error"
|
|
1102
|
-
}
|
|
1106
|
+
}).body);
|
|
1103
1107
|
return;
|
|
1104
1108
|
}
|
|
1105
1109
|
const response = await require_helpers.resolveResponse(fixture, completionReq);
|
|
@@ -1136,24 +1140,30 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
1136
1140
|
fixture
|
|
1137
1141
|
}
|
|
1138
1142
|
});
|
|
1139
|
-
const
|
|
1140
|
-
|
|
1141
|
-
require_sse_writer.writeErrorResponse(res, misbehavior.status, JSON.stringify({
|
|
1142
|
-
__type: type,
|
|
1143
|
+
const renderedError = require_errors.renderError("bedrock", "misbehavior", {
|
|
1144
|
+
type: misbehavior.status === 400 ? "ValidationException" : "NotImplementedException",
|
|
1143
1145
|
code: misbehavior.code,
|
|
1144
1146
|
message: misbehavior.message
|
|
1145
|
-
})
|
|
1147
|
+
});
|
|
1148
|
+
for (const [name, value] of Object.entries(renderedError.headers ?? {})) res.setHeader(name, value);
|
|
1149
|
+
require_sse_writer.writeErrorResponse(res, misbehavior.status, renderedError.body);
|
|
1146
1150
|
return;
|
|
1147
1151
|
}
|
|
1148
|
-
const latency = fixture.latency ?? defaults.latency;
|
|
1149
1152
|
const chunkSize = Math.max(1, fixture.chunkSize ?? defaults.chunkSize);
|
|
1153
|
+
const streamTiming = {
|
|
1154
|
+
latency: fixture.latency ?? defaults.latency,
|
|
1155
|
+
streamingProfile: fixture.streamingProfile,
|
|
1156
|
+
recordedTimings: fixture.recordedTimings,
|
|
1157
|
+
replaySpeed: fixture.replaySpeed ?? defaults.replaySpeed
|
|
1158
|
+
};
|
|
1150
1159
|
if (misbehavior.kind === "applied") {
|
|
1151
1160
|
const prepared = require_messages.prepareClaudeMisbehavior(misbehavior, {
|
|
1152
1161
|
request: completionReq,
|
|
1153
1162
|
stream: true,
|
|
1154
1163
|
chunkSize,
|
|
1155
1164
|
logger,
|
|
1156
|
-
strict:
|
|
1165
|
+
strict: require_policy.resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression,
|
|
1166
|
+
citations: false
|
|
1157
1167
|
});
|
|
1158
1168
|
if (!prepared.stream) throw new TypeError("InvokeModel stream requires Claude events");
|
|
1159
1169
|
const entry = journal.add({
|
|
@@ -1172,27 +1182,27 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
1172
1182
|
defaults,
|
|
1173
1183
|
testId
|
|
1174
1184
|
});
|
|
1175
|
-
|
|
1185
|
+
await require_deliver.deliverStream(res, entry, fixture, bedrockInvokeCodec, prepared.events.map((event) => ({
|
|
1176
1186
|
eventType: BEDROCK_INVOKE_STREAM_EVENT_TYPE,
|
|
1177
1187
|
payload: event
|
|
1178
|
-
}));
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
}
|
|
1188
|
+
})), streamTiming);
|
|
1189
|
+
return;
|
|
1190
|
+
}
|
|
1191
|
+
if (require_helpers.isRawResponse(response)) {
|
|
1192
|
+
await require_raw.serveRawResponse({
|
|
1193
|
+
wire: "bedrock-invoke",
|
|
1194
|
+
stream: true,
|
|
1195
|
+
req,
|
|
1196
|
+
res,
|
|
1197
|
+
fixture,
|
|
1198
|
+
response,
|
|
1199
|
+
body: completionReq,
|
|
1200
|
+
journal,
|
|
1201
|
+
defaults,
|
|
1202
|
+
testId,
|
|
1203
|
+
misbehaviorSummary: misbehavior.summary,
|
|
1204
|
+
errorWire: "bedrock"
|
|
1205
|
+
});
|
|
1196
1206
|
return;
|
|
1197
1207
|
}
|
|
1198
1208
|
if (require_helpers.isErrorResponse(response)) {
|
|
@@ -1207,20 +1217,13 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
1207
1217
|
fixture
|
|
1208
1218
|
}
|
|
1209
1219
|
});
|
|
1210
|
-
|
|
1211
|
-
type: "error",
|
|
1212
|
-
error: {
|
|
1213
|
-
type: response.error.type ?? "api_error",
|
|
1214
|
-
message: response.error.message
|
|
1215
|
-
}
|
|
1216
|
-
};
|
|
1217
|
-
require_sse_writer.writeErrorResponse(res, status, JSON.stringify(anthropicError), { retryAfter: response.retryAfter });
|
|
1220
|
+
require_sse_writer.writeErrorResponse(res, status, require_errors.renderError("bedrock", "fixture", response.error).body, { retryAfter: response.retryAfter });
|
|
1218
1221
|
return;
|
|
1219
1222
|
}
|
|
1220
1223
|
if (require_helpers.isCombinedFixtureResponse(response)) {
|
|
1221
1224
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Bedrock API — ignoring");
|
|
1222
1225
|
const overrides = require_helpers.extractOverrides(response);
|
|
1223
|
-
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model,
|
|
1226
|
+
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model, require_policy.resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression, logger);
|
|
1224
1227
|
const journalEntry = addResponseEntry({
|
|
1225
1228
|
method: req.method ?? "POST",
|
|
1226
1229
|
path: urlPath,
|
|
@@ -1232,28 +1235,14 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
1232
1235
|
}
|
|
1233
1236
|
});
|
|
1234
1237
|
const functionToolCalls = require_helpers.requireEmittedFunctionToolCalls(response, "Bedrock InvokeModel");
|
|
1235
|
-
|
|
1236
|
-
const interruption = require_interruption.createInterruptionSignal(fixture);
|
|
1237
|
-
if (!await writeBedrockInvokeStream(res, events, {
|
|
1238
|
-
latency,
|
|
1239
|
-
streamingProfile: fixture.streamingProfile,
|
|
1240
|
-
recordedTimings: fixture.recordedTimings,
|
|
1241
|
-
replaySpeed: fixture.replaySpeed ?? defaults.replaySpeed,
|
|
1242
|
-
signal: interruption?.signal,
|
|
1243
|
-
onChunkSent: interruption?.tick
|
|
1244
|
-
})) {
|
|
1245
|
-
if (!res.writableEnded) res.destroy();
|
|
1246
|
-
journalEntry.response.interrupted = true;
|
|
1247
|
-
journalEntry.response.interruptReason = interruption?.reason();
|
|
1248
|
-
}
|
|
1249
|
-
interruption?.cleanup();
|
|
1238
|
+
await require_deliver.deliverStream(res, journalEntry, fixture, bedrockInvokeCodec, buildBedrockStreamContentWithToolCallsEvents(response.content ?? "", functionToolCalls, completionReq.model, chunkSize, logger, effReasoning, overrides, response.blocks), streamTiming);
|
|
1250
1239
|
return;
|
|
1251
1240
|
}
|
|
1252
1241
|
if (require_helpers.isTextResponse(response)) {
|
|
1253
1242
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Bedrock API — ignoring");
|
|
1254
1243
|
const overrides = require_helpers.extractOverrides(response);
|
|
1255
|
-
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model,
|
|
1256
|
-
|
|
1244
|
+
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model, require_policy.resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression, logger);
|
|
1245
|
+
await require_deliver.deliverStream(res, addResponseEntry({
|
|
1257
1246
|
method: req.method ?? "POST",
|
|
1258
1247
|
path: urlPath,
|
|
1259
1248
|
headers: require_helpers.flattenHeaders(req.headers),
|
|
@@ -1262,29 +1251,14 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
1262
1251
|
status: 200,
|
|
1263
1252
|
fixture
|
|
1264
1253
|
}
|
|
1265
|
-
});
|
|
1266
|
-
const events = buildBedrockStreamTextEvents(response.content, completionReq.model, chunkSize, effReasoning, overrides);
|
|
1267
|
-
const interruption = require_interruption.createInterruptionSignal(fixture);
|
|
1268
|
-
if (!await writeBedrockInvokeStream(res, events, {
|
|
1269
|
-
latency,
|
|
1270
|
-
streamingProfile: fixture.streamingProfile,
|
|
1271
|
-
recordedTimings: fixture.recordedTimings,
|
|
1272
|
-
replaySpeed: fixture.replaySpeed ?? defaults.replaySpeed,
|
|
1273
|
-
signal: interruption?.signal,
|
|
1274
|
-
onChunkSent: interruption?.tick
|
|
1275
|
-
})) {
|
|
1276
|
-
if (!res.writableEnded) res.destroy();
|
|
1277
|
-
journalEntry.response.interrupted = true;
|
|
1278
|
-
journalEntry.response.interruptReason = interruption?.reason();
|
|
1279
|
-
}
|
|
1280
|
-
interruption?.cleanup();
|
|
1254
|
+
}), fixture, bedrockInvokeCodec, buildBedrockStreamTextEvents(response.content, completionReq.model, chunkSize, effReasoning, overrides), streamTiming);
|
|
1281
1255
|
return;
|
|
1282
1256
|
}
|
|
1283
1257
|
if (require_helpers.isToolCallResponse(response)) {
|
|
1284
1258
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Bedrock API — ignoring");
|
|
1285
1259
|
const overrides = require_helpers.extractOverrides(response);
|
|
1286
|
-
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model,
|
|
1287
|
-
|
|
1260
|
+
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, completionReq.model, require_policy.resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression, logger);
|
|
1261
|
+
await require_deliver.deliverStream(res, addResponseEntry({
|
|
1288
1262
|
method: req.method ?? "POST",
|
|
1289
1263
|
path: urlPath,
|
|
1290
1264
|
headers: require_helpers.flattenHeaders(req.headers),
|
|
@@ -1293,22 +1267,7 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
1293
1267
|
status: 200,
|
|
1294
1268
|
fixture
|
|
1295
1269
|
}
|
|
1296
|
-
});
|
|
1297
|
-
const events = buildBedrockStreamToolCallEvents(require_helpers.requireEmittedFunctionToolCalls(response, "Bedrock InvokeModel"), completionReq.model, chunkSize, logger, effReasoning, overrides);
|
|
1298
|
-
const interruption = require_interruption.createInterruptionSignal(fixture);
|
|
1299
|
-
if (!await writeBedrockInvokeStream(res, events, {
|
|
1300
|
-
latency,
|
|
1301
|
-
streamingProfile: fixture.streamingProfile,
|
|
1302
|
-
recordedTimings: fixture.recordedTimings,
|
|
1303
|
-
replaySpeed: fixture.replaySpeed ?? defaults.replaySpeed,
|
|
1304
|
-
signal: interruption?.signal,
|
|
1305
|
-
onChunkSent: interruption?.tick
|
|
1306
|
-
})) {
|
|
1307
|
-
if (!res.writableEnded) res.destroy();
|
|
1308
|
-
journalEntry.response.interrupted = true;
|
|
1309
|
-
journalEntry.response.interruptReason = interruption?.reason();
|
|
1310
|
-
}
|
|
1311
|
-
interruption?.cleanup();
|
|
1270
|
+
}), fixture, bedrockInvokeCodec, buildBedrockStreamToolCallEvents(require_helpers.requireEmittedFunctionToolCalls(response, "Bedrock InvokeModel"), completionReq.model, chunkSize, logger, effReasoning, overrides), streamTiming);
|
|
1312
1271
|
return;
|
|
1313
1272
|
}
|
|
1314
1273
|
addResponseEntry({
|
|
@@ -1321,10 +1280,10 @@ async function handleBedrockStream(req, res, raw, modelId, fixtures, journal, de
|
|
|
1321
1280
|
fixture
|
|
1322
1281
|
}
|
|
1323
1282
|
});
|
|
1324
|
-
require_sse_writer.writeErrorResponse(res, 500,
|
|
1283
|
+
require_sse_writer.writeErrorResponse(res, 500, require_errors.renderError("bedrock", "unknown-response", {
|
|
1325
1284
|
message: "Fixture response did not match any known type",
|
|
1326
1285
|
type: "server_error"
|
|
1327
|
-
}
|
|
1286
|
+
}).body);
|
|
1328
1287
|
}
|
|
1329
1288
|
|
|
1330
1289
|
//#endregion
|