@copilotkit/aimock 1.45.0 → 1.46.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 +24 -0
- package/README.md +7 -1
- 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.ts.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/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 +61 -80
- 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 +58 -77
- package/dist/bedrock-converse.js.map +1 -1
- package/dist/bedrock.cjs +65 -97
- 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 +62 -94
- 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 +49 -74
- 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 +47 -72
- 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 +37 -42
- 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 +37 -42
- 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 +50 -35
- 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 +49 -34
- package/dist/gemini-interactions.js.map +1 -1
- package/dist/gemini.cjs +57 -67
- 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 +56 -67
- 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 +11 -68
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts.map +1 -1
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +12 -67
- 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.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- 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 +14 -4
- package/dist/mcp-handler.cjs.map +1 -1
- package/dist/mcp-handler.js +14 -4
- 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 +111 -96
- 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 +109 -95
- 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/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/ollama.cjs +128 -68
- 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 +124 -64
- 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 +76 -71
- 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 +63 -58
- package/dist/openrouter-video.js.map +1 -1
- 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/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/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/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 +45 -58
- 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 +44 -57
- 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 +4 -0
- package/dist/router.cjs.map +1 -1
- package/dist/router.d.cts.map +1 -1
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +3 -0
- 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 +222 -146
- 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 +223 -147
- 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 +7 -0
- package/dist/sse-writer.cjs.map +1 -1
- package/dist/sse-writer.d.cts.map +1 -1
- package/dist/sse-writer.d.ts.map +1 -1
- package/dist/sse-writer.js +7 -1
- 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 +12 -10
- 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 +11 -9
- package/dist/transcription.js.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +62 -3
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +62 -3
- 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-gemini-live.cjs +11 -3
- 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 +10 -2
- 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 +28 -54
- 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 +25 -51
- package/dist/ws-realtime.js.map +1 -1
- package/dist/ws-responses.cjs +8 -6
- package/dist/ws-responses.cjs.map +1 -1
- package/dist/ws-responses.js +7 -5
- package/dist/ws-responses.js.map +1 -1
- package/package.json +4 -1
- package/skills/write-fixtures/SKILL.md +25 -16
package/dist/messages.js
CHANGED
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { missingRequiredHeader } from "./response/profiles.js";
|
|
2
|
+
import { renderError } from "./response/errors.js";
|
|
3
|
+
import { resolvePolicy, resolveRequestDecisions, strictOverrideField } from "./response/policy.js";
|
|
4
|
+
import { estimatePromptTokens, estimateTokens, extractOverrides, flattenHeaders, generateMessageId, generateToolUseId, getContext, getTestId, isCombinedFixtureResponse, isErrorResponse, isJsonObject, isTextResponse, isToolCallResponse, requireEmittedFunctionToolCalls, resolveFixtureBlockOutcome, resolveReasoningArtifactsForModel, resolveReasoningForModel, resolveRequestId, resolveResponse, servedToolArgs, strictNoMatchLogLine, strictNoMatchMessage, toolArgsForWire } from "./helpers.js";
|
|
2
5
|
import { calculateDelay, delay, writeErrorResponse } from "./sse-writer.js";
|
|
3
6
|
import { applyChaosAsync } from "./chaos.js";
|
|
4
7
|
import { planMisbehavior, recordMisbehaviorOutcome } from "./misbehavior.js";
|
|
5
8
|
import { matchFixtureDiagnostic, recordMatchOptions } from "./router.js";
|
|
9
|
+
import { render, resolve } from "./response/usage/codecs/anthropic.js";
|
|
6
10
|
import { proxyAndRecord } from "./recorder.js";
|
|
7
11
|
import { createInterruptionSignal } from "./interruption.js";
|
|
12
|
+
import { mapAnthropicFinish } from "./response/finish.js";
|
|
8
13
|
|
|
9
14
|
//#region src/messages.ts
|
|
10
15
|
/**
|
|
@@ -191,20 +196,7 @@ function thinkingViolationMessage(v) {
|
|
|
191
196
|
}
|
|
192
197
|
function claudeStopReason(finishReason, defaultReason) {
|
|
193
198
|
if (!finishReason) return defaultReason;
|
|
194
|
-
|
|
195
|
-
if (finishReason === "tool_calls") return "tool_use";
|
|
196
|
-
if (finishReason === "length") return "max_tokens";
|
|
197
|
-
return finishReason;
|
|
198
|
-
}
|
|
199
|
-
function claudeUsage(overrides) {
|
|
200
|
-
if (!overrides?.usage) return {
|
|
201
|
-
input_tokens: 0,
|
|
202
|
-
output_tokens: 0
|
|
203
|
-
};
|
|
204
|
-
return {
|
|
205
|
-
input_tokens: overrides.usage.input_tokens ?? overrides.usage.prompt_tokens ?? 0,
|
|
206
|
-
output_tokens: overrides.usage.output_tokens ?? overrides.usage.completion_tokens ?? 0
|
|
207
|
-
};
|
|
199
|
+
return mapAnthropicFinish(finishReason);
|
|
208
200
|
}
|
|
209
201
|
/**
|
|
210
202
|
* Emit faithful Anthropic `redacted_thinking` content-block events at the head
|
|
@@ -255,7 +247,7 @@ function buildClaudeTextStreamEvents(content, model, chunkSize, reasoning, overr
|
|
|
255
247
|
model: effectiveModel,
|
|
256
248
|
stop_reason: null,
|
|
257
249
|
stop_sequence: null,
|
|
258
|
-
usage:
|
|
250
|
+
usage: render(resolve(overrides), "messages-start")
|
|
259
251
|
}
|
|
260
252
|
});
|
|
261
253
|
let blockIndex = 0;
|
|
@@ -324,7 +316,7 @@ function buildClaudeTextStreamEvents(content, model, chunkSize, reasoning, overr
|
|
|
324
316
|
stop_reason: claudeStopReason(overrides?.finishReason, "end_turn"),
|
|
325
317
|
stop_sequence: null
|
|
326
318
|
},
|
|
327
|
-
usage:
|
|
319
|
+
usage: render(resolve(overrides), "messages-delta")
|
|
328
320
|
});
|
|
329
321
|
events.push({ type: "message_stop" });
|
|
330
322
|
return events;
|
|
@@ -344,7 +336,7 @@ function buildClaudeToolCallStreamEvents(toolCalls, model, chunkSize, logger, re
|
|
|
344
336
|
model: effectiveModel,
|
|
345
337
|
stop_reason: null,
|
|
346
338
|
stop_sequence: null,
|
|
347
|
-
usage:
|
|
339
|
+
usage: render(resolve(overrides), "messages-start")
|
|
348
340
|
}
|
|
349
341
|
});
|
|
350
342
|
let blockIndex = 0;
|
|
@@ -420,7 +412,7 @@ function buildClaudeToolCallStreamEvents(toolCalls, model, chunkSize, logger, re
|
|
|
420
412
|
stop_reason: claudeStopReason(overrides?.finishReason, "tool_use"),
|
|
421
413
|
stop_sequence: null
|
|
422
414
|
},
|
|
423
|
-
usage:
|
|
415
|
+
usage: render(resolve(overrides), "messages-delta")
|
|
424
416
|
});
|
|
425
417
|
events.push({ type: "message_stop" });
|
|
426
418
|
return events;
|
|
@@ -463,7 +455,7 @@ function buildClaudeTextResponse(content, model, reasoning, overrides, reasoning
|
|
|
463
455
|
model: overrides?.model ?? model,
|
|
464
456
|
stop_reason: claudeStopReason(overrides?.finishReason, "end_turn"),
|
|
465
457
|
stop_sequence: null,
|
|
466
|
-
usage:
|
|
458
|
+
usage: render(resolve(overrides), "messages-final")
|
|
467
459
|
};
|
|
468
460
|
}
|
|
469
461
|
function buildClaudeToolCallResponse(toolCalls, model, logger, reasoning, overrides, reasoningSignature, redactedThinking) {
|
|
@@ -491,7 +483,7 @@ function buildClaudeToolCallResponse(toolCalls, model, logger, reasoning, overri
|
|
|
491
483
|
model: overrides?.model ?? model,
|
|
492
484
|
stop_reason: claudeStopReason(overrides?.finishReason, "tool_use"),
|
|
493
485
|
stop_sequence: null,
|
|
494
|
-
usage:
|
|
486
|
+
usage: render(resolve(overrides), "messages-final")
|
|
495
487
|
};
|
|
496
488
|
}
|
|
497
489
|
function buildClaudeContentWithToolCallsStreamEvents(content, toolCalls, model, chunkSize, logger, reasoning, overrides, reasoningSignature, redactedThinking, blocks) {
|
|
@@ -509,7 +501,7 @@ function buildClaudeContentWithToolCallsStreamEvents(content, toolCalls, model,
|
|
|
509
501
|
model: effectiveModel,
|
|
510
502
|
stop_reason: null,
|
|
511
503
|
stop_sequence: null,
|
|
512
|
-
usage:
|
|
504
|
+
usage: render(resolve(overrides), "messages-start")
|
|
513
505
|
}
|
|
514
506
|
});
|
|
515
507
|
let blockIndex = 0;
|
|
@@ -613,7 +605,7 @@ function buildClaudeContentWithToolCallsStreamEvents(content, toolCalls, model,
|
|
|
613
605
|
stop_reason: claudeStopReason(overrides?.finishReason, outcome.hasToolCalls ? "tool_use" : "end_turn"),
|
|
614
606
|
stop_sequence: null
|
|
615
607
|
},
|
|
616
|
-
usage:
|
|
608
|
+
usage: render(resolve(overrides), "messages-delta")
|
|
617
609
|
});
|
|
618
610
|
events.push({ type: "message_stop" });
|
|
619
611
|
return events;
|
|
@@ -678,7 +670,7 @@ function buildClaudeContentWithToolCallsStreamEvents(content, toolCalls, model,
|
|
|
678
670
|
stop_reason: claudeStopReason(overrides?.finishReason, "tool_use"),
|
|
679
671
|
stop_sequence: null
|
|
680
672
|
},
|
|
681
|
-
usage:
|
|
673
|
+
usage: render(resolve(overrides), "messages-delta")
|
|
682
674
|
});
|
|
683
675
|
events.push({ type: "message_stop" });
|
|
684
676
|
return events;
|
|
@@ -729,7 +721,7 @@ function buildClaudeContentWithToolCallsResponse(content, toolCalls, model, logg
|
|
|
729
721
|
model: overrides?.model ?? model,
|
|
730
722
|
stop_reason: claudeStopReason(overrides?.finishReason, blockHasTools === false ? "end_turn" : "tool_use"),
|
|
731
723
|
stop_sequence: null,
|
|
732
|
-
usage:
|
|
724
|
+
usage: render(resolve(overrides), "messages-final")
|
|
733
725
|
};
|
|
734
726
|
}
|
|
735
727
|
/**
|
|
@@ -783,10 +775,11 @@ function prepareClaudeMisbehavior(plan, context) {
|
|
|
783
775
|
const reasoning = plan.summary.fault === "reasoning-only" ? plan.reasoning ?? "" : resolveReasoningForModel(response.reasoning, context.request.model, context.strict, context.logger);
|
|
784
776
|
const artifacts = resolveReasoningArtifactsForModel(response.reasoningSignature, response.redactedThinking, context.request.model, context.strict, context.logger);
|
|
785
777
|
const content = outcome?.content ?? ("content" in response ? response.content ?? "" : "");
|
|
786
|
-
const
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
};
|
|
778
|
+
const resolvedUsage = resolve(void 0, {
|
|
779
|
+
inputTokens: estimatePromptTokens(context.request.messages),
|
|
780
|
+
outputTokens: estimateTokens(content + servedToolCalls.map((call) => call.name + call.arguments).join("") + (reasoning ?? "") + (plan.refusal ?? ""))
|
|
781
|
+
});
|
|
782
|
+
const usage = render(resolvedUsage, "messages-final", "applied-misbehavior");
|
|
790
783
|
const overrides = {
|
|
791
784
|
...extractOverrides(response),
|
|
792
785
|
...plan.stop === "length" ? { finishReason: "length" } : {},
|
|
@@ -857,7 +850,7 @@ function prepareClaudeMisbehavior(plan, context) {
|
|
|
857
850
|
stop_reason: "max_tokens",
|
|
858
851
|
stop_sequence: null
|
|
859
852
|
},
|
|
860
|
-
usage:
|
|
853
|
+
usage: render(resolvedUsage, "messages-delta", "applied-misbehavior")
|
|
861
854
|
}, { type: "message_stop" });
|
|
862
855
|
return {
|
|
863
856
|
stream: true,
|
|
@@ -908,7 +901,7 @@ function prepareClaudeMisbehavior(plan, context) {
|
|
|
908
901
|
stop_sequence: null,
|
|
909
902
|
...detail
|
|
910
903
|
},
|
|
911
|
-
usage:
|
|
904
|
+
usage: render(resolvedUsage, "messages-delta", "applied-misbehavior")
|
|
912
905
|
},
|
|
913
906
|
{ type: "message_stop" }
|
|
914
907
|
],
|
|
@@ -958,29 +951,66 @@ async function writeClaudeSSEStream(res, events, optionsOrLatency) {
|
|
|
958
951
|
const latency = opts.latency ?? 0;
|
|
959
952
|
const profile = opts.streamingProfile;
|
|
960
953
|
const { recordedTimings, replaySpeed } = opts;
|
|
961
|
-
const signal = opts.signal;
|
|
962
954
|
const onChunkSent = opts.onChunkSent;
|
|
963
955
|
if (res.writableEnded) return true;
|
|
964
|
-
res.
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
956
|
+
if (res.destroyed) return false;
|
|
957
|
+
const controller = new AbortController();
|
|
958
|
+
const signal = controller.signal;
|
|
959
|
+
const abort = () => controller.abort();
|
|
960
|
+
const onClose = () => {
|
|
961
|
+
if (!res.writableFinished) abort();
|
|
962
|
+
};
|
|
963
|
+
res.once("close", onClose);
|
|
964
|
+
opts.signal?.addEventListener("abort", abort, { once: true });
|
|
965
|
+
if (opts.signal?.aborted) abort();
|
|
966
|
+
try {
|
|
967
|
+
res.setHeader("Content-Type", "text/event-stream");
|
|
968
|
+
res.setHeader("Cache-Control", "no-cache");
|
|
969
|
+
res.setHeader("Connection", "keep-alive");
|
|
970
|
+
let chunkIndex = 0;
|
|
971
|
+
for (const event of events) {
|
|
972
|
+
const chunkDelay = calculateDelay(chunkIndex, profile, latency, recordedTimings, replaySpeed);
|
|
973
|
+
if (chunkDelay > 0) await delay(chunkDelay, signal);
|
|
974
|
+
if (signal.aborted || res.destroyed) return false;
|
|
975
|
+
if (res.writableEnded) return true;
|
|
976
|
+
res.write(`event: ${event.type}\ndata: ${JSON.stringify(event)}\n\n`);
|
|
977
|
+
onChunkSent?.();
|
|
978
|
+
if (signal.aborted || res.destroyed) return false;
|
|
979
|
+
chunkIndex++;
|
|
980
|
+
}
|
|
981
|
+
if (!res.writableEnded) res.end();
|
|
982
|
+
return true;
|
|
983
|
+
} finally {
|
|
984
|
+
res.off("close", onClose);
|
|
985
|
+
opts.signal?.removeEventListener("abort", abort);
|
|
977
986
|
}
|
|
978
|
-
if (!res.writableEnded) res.end();
|
|
979
|
-
return true;
|
|
980
987
|
}
|
|
981
988
|
async function handleMessages(req, res, raw, fixtures, journal, defaults, setCorsHeaders) {
|
|
982
989
|
const { logger } = defaults;
|
|
983
990
|
setCorsHeaders(res);
|
|
991
|
+
const missingHeader = resolvePolicy(defaults, req.headers).requiredHeaders === "enforce" ? missingRequiredHeader("messages", req.headers) : void 0;
|
|
992
|
+
if (missingHeader) {
|
|
993
|
+
const { id: requestId } = resolveRequestId(req.headers);
|
|
994
|
+
req.headers["x-request-id"] = requestId;
|
|
995
|
+
res.setHeader("X-Request-Id", requestId);
|
|
996
|
+
journal.add({
|
|
997
|
+
method: req.method ?? "POST",
|
|
998
|
+
path: req.url ?? "/v1/messages",
|
|
999
|
+
headers: flattenHeaders(req.headers),
|
|
1000
|
+
body: null,
|
|
1001
|
+
response: {
|
|
1002
|
+
status: 400,
|
|
1003
|
+
fixture: null,
|
|
1004
|
+
source: "internal",
|
|
1005
|
+
...strictOverrideField(defaults.strict, req.headers)
|
|
1006
|
+
}
|
|
1007
|
+
});
|
|
1008
|
+
writeErrorResponse(res, 400, renderError("messages", "thinking", {
|
|
1009
|
+
message: `${missingHeader}: header is required`,
|
|
1010
|
+
requestId
|
|
1011
|
+
}).body);
|
|
1012
|
+
return;
|
|
1013
|
+
}
|
|
984
1014
|
let claudeReq;
|
|
985
1015
|
try {
|
|
986
1016
|
claudeReq = JSON.parse(raw);
|
|
@@ -996,10 +1026,10 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
996
1026
|
fixture: null
|
|
997
1027
|
}
|
|
998
1028
|
});
|
|
999
|
-
writeErrorResponse(res, 400,
|
|
1029
|
+
writeErrorResponse(res, 400, renderError("messages", "validation", {
|
|
1000
1030
|
message: `Malformed JSON: ${detail}`,
|
|
1001
1031
|
type: "invalid_request_error"
|
|
1002
|
-
}
|
|
1032
|
+
}).body);
|
|
1003
1033
|
return;
|
|
1004
1034
|
}
|
|
1005
1035
|
if (!isJsonObject(claudeReq)) {
|
|
@@ -1013,10 +1043,10 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1013
1043
|
fixture: null
|
|
1014
1044
|
}
|
|
1015
1045
|
});
|
|
1016
|
-
writeErrorResponse(res, 400,
|
|
1046
|
+
writeErrorResponse(res, 400, renderError("messages", "validation", {
|
|
1017
1047
|
message: "Request body must be a JSON object",
|
|
1018
1048
|
type: "invalid_request_error"
|
|
1019
|
-
}
|
|
1049
|
+
}).body);
|
|
1020
1050
|
return;
|
|
1021
1051
|
}
|
|
1022
1052
|
const messagesError = !Array.isArray(claudeReq.messages) ? "messages must be an array" : claudeReq.messages.some((message) => !isJsonObject(message)) ? "messages entries must be JSON objects" : claudeReq.messages.some((message) => (message.role === "user" || message.role === "assistant") && typeof message.content === "number") ? "messages content must be a string or an array of content blocks" : null;
|
|
@@ -1031,15 +1061,15 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1031
1061
|
fixture: null
|
|
1032
1062
|
}
|
|
1033
1063
|
});
|
|
1034
|
-
writeErrorResponse(res, 400,
|
|
1064
|
+
writeErrorResponse(res, 400, renderError("messages", "validation", {
|
|
1035
1065
|
message: messagesError,
|
|
1036
1066
|
type: "invalid_request_error"
|
|
1037
|
-
}
|
|
1067
|
+
}).body);
|
|
1038
1068
|
return;
|
|
1039
1069
|
}
|
|
1040
1070
|
const thinkingViolation = validateThinkingInvariants(claudeReq);
|
|
1041
1071
|
if (thinkingViolation) {
|
|
1042
|
-
const effectiveStrict =
|
|
1072
|
+
const effectiveStrict = resolveRequestDecisions(defaults.strict, req.headers).thinkingRejection;
|
|
1043
1073
|
const violationMessage = thinkingViolationMessage(thinkingViolation);
|
|
1044
1074
|
if (effectiveStrict) {
|
|
1045
1075
|
logger.error(`THINKING: ${violationMessage}`);
|
|
@@ -1054,13 +1084,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1054
1084
|
...strictOverrideField(defaults.strict, req.headers)
|
|
1055
1085
|
}
|
|
1056
1086
|
});
|
|
1057
|
-
writeErrorResponse(res, 400,
|
|
1058
|
-
type: "error",
|
|
1059
|
-
error: {
|
|
1060
|
-
type: "invalid_request_error",
|
|
1061
|
-
message: violationMessage
|
|
1062
|
-
}
|
|
1063
|
-
}));
|
|
1087
|
+
writeErrorResponse(res, 400, renderError("messages", "thinking", { message: violationMessage }).body);
|
|
1064
1088
|
return;
|
|
1065
1089
|
}
|
|
1066
1090
|
logger.warn(`THINKING: ${violationMessage} (strict off — replaying anyway)`);
|
|
@@ -1078,10 +1102,10 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1078
1102
|
fixture: null
|
|
1079
1103
|
}
|
|
1080
1104
|
});
|
|
1081
|
-
writeErrorResponse(res, 400,
|
|
1105
|
+
writeErrorResponse(res, 400, renderError("messages", "validation", {
|
|
1082
1106
|
message: toolsError,
|
|
1083
1107
|
type: "invalid_request_error"
|
|
1084
|
-
}
|
|
1108
|
+
}).body);
|
|
1085
1109
|
return;
|
|
1086
1110
|
}
|
|
1087
1111
|
}
|
|
@@ -1104,7 +1128,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1104
1128
|
body: completionReq
|
|
1105
1129
|
}, fixture ? "fixture" : "proxy", defaults.registry, defaults.logger)) return;
|
|
1106
1130
|
if (!fixture) {
|
|
1107
|
-
if (
|
|
1131
|
+
if (resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss) {
|
|
1108
1132
|
const strictStatus = 503;
|
|
1109
1133
|
const strictMessage = strictNoMatchMessage(skippedBySequenceOrTurn);
|
|
1110
1134
|
logger.error(strictNoMatchLogLine(req.method ?? "POST", req.url ?? "/v1/messages", skippedBySequenceOrTurn));
|
|
@@ -1119,10 +1143,10 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1119
1143
|
...strictOverrideField(defaults.strict, req.headers)
|
|
1120
1144
|
}
|
|
1121
1145
|
});
|
|
1122
|
-
writeErrorResponse(res, strictStatus,
|
|
1146
|
+
writeErrorResponse(res, strictStatus, renderError("messages", "strict-miss", {
|
|
1123
1147
|
message: strictMessage,
|
|
1124
1148
|
type: "invalid_request_error"
|
|
1125
|
-
}
|
|
1149
|
+
}).body);
|
|
1126
1150
|
return;
|
|
1127
1151
|
}
|
|
1128
1152
|
if (defaults.record) {
|
|
@@ -1154,10 +1178,10 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1154
1178
|
...strictOverrideField(defaults.strict, req.headers)
|
|
1155
1179
|
}
|
|
1156
1180
|
});
|
|
1157
|
-
writeErrorResponse(res, 404,
|
|
1181
|
+
writeErrorResponse(res, 404, renderError("messages", "fixture-miss", {
|
|
1158
1182
|
message: "No fixture matched",
|
|
1159
1183
|
type: "invalid_request_error"
|
|
1160
|
-
}
|
|
1184
|
+
}).body);
|
|
1161
1185
|
return;
|
|
1162
1186
|
}
|
|
1163
1187
|
const response = await resolveResponse(fixture, completionReq);
|
|
@@ -1189,14 +1213,11 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1189
1213
|
testId
|
|
1190
1214
|
});
|
|
1191
1215
|
if (!misbehavior.summary?.evaluations.length) logger.error(`POST /v1/messages: ${misbehavior.message}`);
|
|
1192
|
-
writeErrorResponse(res, misbehavior.status,
|
|
1193
|
-
type: "
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
message: misbehavior.message
|
|
1198
|
-
}
|
|
1199
|
-
}));
|
|
1216
|
+
writeErrorResponse(res, misbehavior.status, renderError("messages", "misbehavior", {
|
|
1217
|
+
type: misbehavior.status === 400 ? "invalid_request_error" : "api_error",
|
|
1218
|
+
code: misbehavior.code,
|
|
1219
|
+
message: misbehavior.message
|
|
1220
|
+
}).body);
|
|
1200
1221
|
return;
|
|
1201
1222
|
}
|
|
1202
1223
|
const latency = fixture.latency ?? defaults.latency;
|
|
@@ -1207,7 +1228,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1207
1228
|
stream: claudeReq.stream === true,
|
|
1208
1229
|
chunkSize,
|
|
1209
1230
|
logger,
|
|
1210
|
-
strict:
|
|
1231
|
+
strict: resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression
|
|
1211
1232
|
});
|
|
1212
1233
|
const entry = journal.add({
|
|
1213
1234
|
method: req.method ?? "POST",
|
|
@@ -1241,7 +1262,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1241
1262
|
})) {
|
|
1242
1263
|
if (!res.writableEnded) res.destroy();
|
|
1243
1264
|
entry.response.interrupted = true;
|
|
1244
|
-
entry.response.interruptReason = interruption?.reason();
|
|
1265
|
+
entry.response.interruptReason = interruption?.reason() ?? "client aborted";
|
|
1245
1266
|
}
|
|
1246
1267
|
} finally {
|
|
1247
1268
|
interruption?.cleanup();
|
|
@@ -1266,20 +1287,13 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1266
1287
|
defaults,
|
|
1267
1288
|
testId
|
|
1268
1289
|
});
|
|
1269
|
-
|
|
1270
|
-
type: "error",
|
|
1271
|
-
error: {
|
|
1272
|
-
type: response.error.type ?? "api_error",
|
|
1273
|
-
message: response.error.message
|
|
1274
|
-
}
|
|
1275
|
-
};
|
|
1276
|
-
writeErrorResponse(res, status, JSON.stringify(anthropicError), { retryAfter: response.retryAfter });
|
|
1290
|
+
writeErrorResponse(res, status, renderError("messages", "fixture", response.error).body, { retryAfter: response.retryAfter });
|
|
1277
1291
|
return;
|
|
1278
1292
|
}
|
|
1279
1293
|
if (isCombinedFixtureResponse(response)) {
|
|
1280
1294
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Claude Messages API — ignoring");
|
|
1281
1295
|
const overrides = extractOverrides(response);
|
|
1282
|
-
const effectiveStrict =
|
|
1296
|
+
const effectiveStrict = resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression;
|
|
1283
1297
|
const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, effectiveStrict, defaults.logger);
|
|
1284
1298
|
const { reasoningSignature: effReasoningSignature, redactedThinking: effRedactedThinking } = resolveReasoningArtifactsForModel(response.reasoningSignature, response.redactedThinking, completionReq.model, effectiveStrict, defaults.logger);
|
|
1285
1299
|
const journalEntry = journal.add({
|
|
@@ -1316,7 +1330,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1316
1330
|
})) {
|
|
1317
1331
|
if (!res.writableEnded) res.destroy();
|
|
1318
1332
|
journalEntry.response.interrupted = true;
|
|
1319
|
-
journalEntry.response.interruptReason = interruption?.reason();
|
|
1333
|
+
journalEntry.response.interruptReason = interruption?.reason() ?? "client aborted";
|
|
1320
1334
|
}
|
|
1321
1335
|
interruption?.cleanup();
|
|
1322
1336
|
}
|
|
@@ -1325,7 +1339,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1325
1339
|
if (isTextResponse(response)) {
|
|
1326
1340
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Claude Messages API — ignoring");
|
|
1327
1341
|
const overrides = extractOverrides(response);
|
|
1328
|
-
const effectiveStrict =
|
|
1342
|
+
const effectiveStrict = resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression;
|
|
1329
1343
|
const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, effectiveStrict, defaults.logger);
|
|
1330
1344
|
const { reasoningSignature: effReasoningSignature, redactedThinking: effRedactedThinking } = resolveReasoningArtifactsForModel(response.reasoningSignature, response.redactedThinking, completionReq.model, effectiveStrict, defaults.logger);
|
|
1331
1345
|
const journalEntry = journal.add({
|
|
@@ -1361,7 +1375,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1361
1375
|
})) {
|
|
1362
1376
|
if (!res.writableEnded) res.destroy();
|
|
1363
1377
|
journalEntry.response.interrupted = true;
|
|
1364
|
-
journalEntry.response.interruptReason = interruption?.reason();
|
|
1378
|
+
journalEntry.response.interruptReason = interruption?.reason() ?? "client aborted";
|
|
1365
1379
|
}
|
|
1366
1380
|
interruption?.cleanup();
|
|
1367
1381
|
}
|
|
@@ -1370,7 +1384,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1370
1384
|
if (isToolCallResponse(response)) {
|
|
1371
1385
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Claude Messages API — ignoring");
|
|
1372
1386
|
const overrides = extractOverrides(response);
|
|
1373
|
-
const effectiveStrict =
|
|
1387
|
+
const effectiveStrict = resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression;
|
|
1374
1388
|
const effReasoning = resolveReasoningForModel(response.reasoning, completionReq.model, effectiveStrict, defaults.logger);
|
|
1375
1389
|
const { reasoningSignature: effReasoningSignature, redactedThinking: effRedactedThinking } = resolveReasoningArtifactsForModel(response.reasoningSignature, response.redactedThinking, completionReq.model, effectiveStrict, defaults.logger);
|
|
1376
1390
|
const journalEntry = journal.add({
|
|
@@ -1407,7 +1421,7 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1407
1421
|
})) {
|
|
1408
1422
|
if (!res.writableEnded) res.destroy();
|
|
1409
1423
|
journalEntry.response.interrupted = true;
|
|
1410
|
-
journalEntry.response.interruptReason = interruption?.reason();
|
|
1424
|
+
journalEntry.response.interruptReason = interruption?.reason() ?? "client aborted";
|
|
1411
1425
|
}
|
|
1412
1426
|
interruption?.cleanup();
|
|
1413
1427
|
}
|
|
@@ -1428,12 +1442,12 @@ async function handleMessages(req, res, raw, fixtures, journal, defaults, setCor
|
|
|
1428
1442
|
defaults,
|
|
1429
1443
|
testId
|
|
1430
1444
|
});
|
|
1431
|
-
writeErrorResponse(res, 500,
|
|
1445
|
+
writeErrorResponse(res, 500, renderError("messages", "unknown-response", {
|
|
1432
1446
|
message: "Fixture response did not match any known type",
|
|
1433
1447
|
type: "server_error"
|
|
1434
|
-
}
|
|
1448
|
+
}).body);
|
|
1435
1449
|
}
|
|
1436
1450
|
|
|
1437
1451
|
//#endregion
|
|
1438
|
-
export { handleMessages, prepareClaudeMisbehavior };
|
|
1452
|
+
export { claudeToCompletionRequest, handleMessages, prepareClaudeMisbehavior };
|
|
1439
1453
|
//# sourceMappingURL=messages.js.map
|