@copilotkit/aimock 1.45.1 → 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 +13 -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.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/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-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 +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 +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/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/cohere.js
CHANGED
|
@@ -1,47 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { renderError } from "./response/errors.js";
|
|
2
|
+
import { resolveRequestDecisions, strictOverrideField } from "./response/policy.js";
|
|
3
|
+
import { extractOverrides, flattenHeaders, generateDeterministicEmbedding, generateMessageId, generateToolCallId, getContext, getTestId, isCombinedFixtureResponse, isEmbeddingResponse, isErrorResponse, isJsonObject, isTextResponse, isToolCallResponse, prepareOpenAIChatMisbehavior, requireEmittedFunctionToolCalls, resolveFixtureBlockOutcome, resolveOpenAIChatMisbehaviorUsage, resolveReasoningForModel, resolveResponse, servedToolArgs, strictNoMatchLogLine, strictNoMatchMessage, validateChatMessages, validateToolsField } from "./helpers.js";
|
|
2
4
|
import { calculateDelay, delay, writeErrorResponse } from "./sse-writer.js";
|
|
3
5
|
import { applyChaosAsync } from "./chaos.js";
|
|
4
6
|
import { normalizeDirectToolSchema, planMisbehavior, recordMisbehaviorOutcome } from "./misbehavior.js";
|
|
5
7
|
import { matchFixtureDiagnostic, recordMatchOptions } from "./router.js";
|
|
6
8
|
import { proxyAndRecord } from "./recorder.js";
|
|
7
9
|
import { createInterruptionSignal } from "./interruption.js";
|
|
10
|
+
import { mapCohereFinish } from "./response/finish.js";
|
|
11
|
+
import { render } from "./response/usage/codecs/cohere.js";
|
|
8
12
|
|
|
9
13
|
//#region src/cohere.ts
|
|
10
|
-
const ZERO_USAGE = {
|
|
11
|
-
billed_units: {
|
|
12
|
-
input_tokens: 0,
|
|
13
|
-
output_tokens: 0,
|
|
14
|
-
search_units: 0,
|
|
15
|
-
classifications: 0
|
|
16
|
-
},
|
|
17
|
-
tokens: {
|
|
18
|
-
input_tokens: 0,
|
|
19
|
-
output_tokens: 0
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
14
|
function cohereFinishReason(overrideFinishReason, defaultReason) {
|
|
23
15
|
if (!overrideFinishReason) return defaultReason;
|
|
24
|
-
|
|
25
|
-
if (overrideFinishReason === "tool_calls") return "TOOL_CALL";
|
|
26
|
-
if (overrideFinishReason === "length") return "MAX_TOKENS";
|
|
27
|
-
return overrideFinishReason;
|
|
16
|
+
return mapCohereFinish(overrideFinishReason);
|
|
28
17
|
}
|
|
29
18
|
function cohereUsage(overrides) {
|
|
30
|
-
|
|
31
|
-
const inputTokens = overrides.usage.input_tokens ?? overrides.usage.prompt_tokens ?? 0;
|
|
32
|
-
const outputTokens = overrides.usage.output_tokens ?? overrides.usage.completion_tokens ?? 0;
|
|
33
|
-
return {
|
|
34
|
-
billed_units: {
|
|
35
|
-
input_tokens: inputTokens,
|
|
36
|
-
output_tokens: outputTokens,
|
|
37
|
-
search_units: 0,
|
|
38
|
-
classifications: 0
|
|
39
|
-
},
|
|
40
|
-
tokens: {
|
|
41
|
-
input_tokens: inputTokens,
|
|
42
|
-
output_tokens: outputTokens
|
|
43
|
-
}
|
|
44
|
-
};
|
|
19
|
+
return render(overrides);
|
|
45
20
|
}
|
|
46
21
|
/** Extract plain text from structured content (array of { type, text } parts) or passthrough string. */
|
|
47
22
|
function extractTextContent(content) {
|
|
@@ -576,10 +551,10 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
576
551
|
fixture: null
|
|
577
552
|
}
|
|
578
553
|
});
|
|
579
|
-
writeErrorResponse(res, 400,
|
|
554
|
+
writeErrorResponse(res, 400, renderError("cohere", "validation", {
|
|
580
555
|
message: `Malformed JSON body: ${detail}`,
|
|
581
556
|
type: "invalid_request_error"
|
|
582
|
-
}
|
|
557
|
+
}).body);
|
|
583
558
|
return;
|
|
584
559
|
}
|
|
585
560
|
if (!isJsonObject(cohereReq)) {
|
|
@@ -593,10 +568,10 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
593
568
|
fixture: null
|
|
594
569
|
}
|
|
595
570
|
});
|
|
596
|
-
writeErrorResponse(res, 400,
|
|
571
|
+
writeErrorResponse(res, 400, renderError("cohere", "validation", {
|
|
597
572
|
message: "Request body must be a JSON object",
|
|
598
573
|
type: "invalid_request_error"
|
|
599
|
-
}
|
|
574
|
+
}).body);
|
|
600
575
|
return;
|
|
601
576
|
}
|
|
602
577
|
if (!cohereReq.model) {
|
|
@@ -610,10 +585,10 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
610
585
|
fixture: null
|
|
611
586
|
}
|
|
612
587
|
});
|
|
613
|
-
writeErrorResponse(res, 400,
|
|
588
|
+
writeErrorResponse(res, 400, renderError("cohere", "validation", {
|
|
614
589
|
message: "model is required",
|
|
615
590
|
type: "invalid_request_error"
|
|
616
|
-
}
|
|
591
|
+
}).body);
|
|
617
592
|
return;
|
|
618
593
|
}
|
|
619
594
|
let shapeError = validateChatMessages(cohereReq.messages) ?? validateToolsField(cohereReq.tools);
|
|
@@ -632,10 +607,10 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
632
607
|
fixture: null
|
|
633
608
|
}
|
|
634
609
|
});
|
|
635
|
-
writeErrorResponse(res, 400,
|
|
610
|
+
writeErrorResponse(res, 400, renderError("cohere", "validation", {
|
|
636
611
|
message: `Invalid request: ${shapeError}`,
|
|
637
612
|
type: "invalid_request_error"
|
|
638
|
-
}
|
|
613
|
+
}).body);
|
|
639
614
|
return;
|
|
640
615
|
}
|
|
641
616
|
const completionReq = cohereToCompletionRequest(cohereReq);
|
|
@@ -654,7 +629,7 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
654
629
|
body: completionReq
|
|
655
630
|
}, fixture ? "fixture" : "proxy", defaults.registry, defaults.logger)) return;
|
|
656
631
|
if (!fixture) {
|
|
657
|
-
if (
|
|
632
|
+
if (resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss) {
|
|
658
633
|
const strictStatus = 503;
|
|
659
634
|
const strictMessage = strictNoMatchMessage(skippedBySequenceOrTurn);
|
|
660
635
|
logger.error(strictNoMatchLogLine(req.method ?? "POST", req.url ?? "/v2/chat", skippedBySequenceOrTurn));
|
|
@@ -669,10 +644,10 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
669
644
|
...strictOverrideField(defaults.strict, req.headers)
|
|
670
645
|
}
|
|
671
646
|
});
|
|
672
|
-
writeErrorResponse(res, strictStatus,
|
|
647
|
+
writeErrorResponse(res, strictStatus, renderError("cohere", "strict-miss", {
|
|
673
648
|
message: strictMessage,
|
|
674
649
|
type: "invalid_request_error"
|
|
675
|
-
}
|
|
650
|
+
}).body);
|
|
676
651
|
return;
|
|
677
652
|
}
|
|
678
653
|
if (defaults.record) {
|
|
@@ -704,10 +679,10 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
704
679
|
...strictOverrideField(defaults.strict, req.headers)
|
|
705
680
|
}
|
|
706
681
|
});
|
|
707
|
-
writeErrorResponse(res, 404,
|
|
682
|
+
writeErrorResponse(res, 404, renderError("cohere", "fixture-miss", {
|
|
708
683
|
message: "No fixture matched",
|
|
709
684
|
type: "invalid_request_error"
|
|
710
|
-
}
|
|
685
|
+
}).body);
|
|
711
686
|
return;
|
|
712
687
|
}
|
|
713
688
|
const resolvedResponse = await resolveResponse(fixture, completionReq);
|
|
@@ -739,15 +714,15 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
739
714
|
testId
|
|
740
715
|
});
|
|
741
716
|
if (!misbehavior.summary?.evaluations.length) logger.error(misbehavior.message);
|
|
742
|
-
writeErrorResponse(res, misbehavior.status,
|
|
717
|
+
writeErrorResponse(res, misbehavior.status, renderError("cohere", "misbehavior", {
|
|
743
718
|
message: misbehavior.message,
|
|
744
719
|
code: misbehavior.code
|
|
745
|
-
}));
|
|
720
|
+
}).body);
|
|
746
721
|
return;
|
|
747
722
|
}
|
|
748
723
|
const prepared = misbehavior.kind === "applied" ? prepareOpenAIChatMisbehavior(misbehavior) : void 0;
|
|
749
724
|
const observedK5Stream = cohereReq.stream === true && prepared?.summary.fault === "stop-length-mid-tool";
|
|
750
|
-
const appliedReasoning = prepared && "reasoning" in prepared.response ? resolveReasoningForModel(prepared.response.reasoning, cohereReq.model,
|
|
725
|
+
const appliedReasoning = prepared && "reasoning" in prepared.response ? resolveReasoningForModel(prepared.response.reasoning, cohereReq.model, resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression, logger) : void 0;
|
|
751
726
|
const usage = prepared ? resolveOpenAIChatMisbehaviorUsage(prepared, completionReq, appliedReasoning !== void 0) : void 0;
|
|
752
727
|
const response = prepared && usage ? {
|
|
753
728
|
...prepared.response,
|
|
@@ -775,13 +750,13 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
775
750
|
defaults,
|
|
776
751
|
testId
|
|
777
752
|
});
|
|
778
|
-
writeErrorResponse(res, status,
|
|
753
|
+
writeErrorResponse(res, status, renderError("openai", "fixture", response.error).body, { retryAfter: response.retryAfter });
|
|
779
754
|
return;
|
|
780
755
|
}
|
|
781
756
|
if (isCombinedFixtureResponse(response)) {
|
|
782
757
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Cohere v2 Chat API — ignoring");
|
|
783
758
|
const overrides = extractOverrides(response);
|
|
784
|
-
const effectiveStrict =
|
|
759
|
+
const effectiveStrict = resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression;
|
|
785
760
|
const effReasoning = prepared ? appliedReasoning : resolveReasoningForModel(response.reasoning, cohereReq.model, effectiveStrict, logger);
|
|
786
761
|
const journalEntry = journal.add({
|
|
787
762
|
method: req.method ?? "POST",
|
|
@@ -827,7 +802,7 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
827
802
|
if (isTextResponse(response)) {
|
|
828
803
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Cohere v2 Chat API — ignoring");
|
|
829
804
|
const overrides = extractOverrides(response);
|
|
830
|
-
const effectiveStrict =
|
|
805
|
+
const effectiveStrict = resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression;
|
|
831
806
|
const effReasoning = prepared ? appliedReasoning : resolveReasoningForModel(response.reasoning, cohereReq.model, effectiveStrict, logger);
|
|
832
807
|
const journalEntry = journal.add({
|
|
833
808
|
method: req.method ?? "POST",
|
|
@@ -881,7 +856,7 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
881
856
|
if (isToolCallResponse(response)) {
|
|
882
857
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Cohere v2 Chat API — ignoring");
|
|
883
858
|
const overrides = extractOverrides(response);
|
|
884
|
-
const effectiveStrict =
|
|
859
|
+
const effectiveStrict = resolveRequestDecisions(defaults.strict, req.headers).reasoningSuppression;
|
|
885
860
|
const effReasoning = prepared ? appliedReasoning : resolveReasoningForModel(response.reasoning, cohereReq.model, effectiveStrict, logger);
|
|
886
861
|
const journalEntry = journal.add({
|
|
887
862
|
method: req.method ?? "POST",
|
|
@@ -939,10 +914,10 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
939
914
|
defaults,
|
|
940
915
|
testId
|
|
941
916
|
});
|
|
942
|
-
writeErrorResponse(res, 500,
|
|
917
|
+
writeErrorResponse(res, 500, renderError("cohere", "unknown-response", {
|
|
943
918
|
message: "Fixture response did not match any known type",
|
|
944
919
|
type: "server_error"
|
|
945
|
-
}
|
|
920
|
+
}).body);
|
|
946
921
|
}
|
|
947
922
|
async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, setCorsHeaders) {
|
|
948
923
|
const { logger } = defaults;
|
|
@@ -962,10 +937,10 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
|
|
|
962
937
|
fixture: null
|
|
963
938
|
}
|
|
964
939
|
});
|
|
965
|
-
writeErrorResponse(res, 400,
|
|
940
|
+
writeErrorResponse(res, 400, renderError("cohere", "validation", {
|
|
966
941
|
message: `Malformed JSON body: ${detail}`,
|
|
967
942
|
type: "invalid_request_error"
|
|
968
|
-
}
|
|
943
|
+
}).body);
|
|
969
944
|
return;
|
|
970
945
|
}
|
|
971
946
|
if (!isJsonObject(embedReq)) {
|
|
@@ -979,10 +954,10 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
|
|
|
979
954
|
fixture: null
|
|
980
955
|
}
|
|
981
956
|
});
|
|
982
|
-
writeErrorResponse(res, 400,
|
|
957
|
+
writeErrorResponse(res, 400, renderError("cohere", "validation", {
|
|
983
958
|
message: "Request body must be a JSON object",
|
|
984
959
|
type: "invalid_request_error"
|
|
985
|
-
}
|
|
960
|
+
}).body);
|
|
986
961
|
return;
|
|
987
962
|
}
|
|
988
963
|
if (!embedReq.model) {
|
|
@@ -996,10 +971,10 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
|
|
|
996
971
|
fixture: null
|
|
997
972
|
}
|
|
998
973
|
});
|
|
999
|
-
writeErrorResponse(res, 400,
|
|
974
|
+
writeErrorResponse(res, 400, renderError("cohere", "validation", {
|
|
1000
975
|
message: "model is required",
|
|
1001
976
|
type: "invalid_request_error"
|
|
1002
|
-
}
|
|
977
|
+
}).body);
|
|
1003
978
|
return;
|
|
1004
979
|
}
|
|
1005
980
|
if (!embedReq.texts || !Array.isArray(embedReq.texts)) {
|
|
@@ -1013,10 +988,10 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
|
|
|
1013
988
|
fixture: null
|
|
1014
989
|
}
|
|
1015
990
|
});
|
|
1016
|
-
writeErrorResponse(res, 400,
|
|
991
|
+
writeErrorResponse(res, 400, renderError("cohere", "validation", {
|
|
1017
992
|
message: "Invalid request: texts array is required",
|
|
1018
993
|
type: "invalid_request_error"
|
|
1019
|
-
}
|
|
994
|
+
}).body);
|
|
1020
995
|
return;
|
|
1021
996
|
}
|
|
1022
997
|
if (!embedReq.texts.every((text) => typeof text === "string")) {
|
|
@@ -1030,10 +1005,10 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
|
|
|
1030
1005
|
fixture: null
|
|
1031
1006
|
}
|
|
1032
1007
|
});
|
|
1033
|
-
writeErrorResponse(res, 400,
|
|
1008
|
+
writeErrorResponse(res, 400, renderError("cohere", "validation", {
|
|
1034
1009
|
message: "Invalid request: texts must be an array of strings",
|
|
1035
1010
|
type: "invalid_request_error"
|
|
1036
|
-
}
|
|
1011
|
+
}).body);
|
|
1037
1012
|
return;
|
|
1038
1013
|
}
|
|
1039
1014
|
const combinedInput = embedReq.texts.join(" ");
|
|
@@ -1071,10 +1046,10 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
|
|
|
1071
1046
|
fixture: fixture ?? null
|
|
1072
1047
|
}
|
|
1073
1048
|
});
|
|
1074
|
-
writeErrorResponse(res, 400,
|
|
1049
|
+
writeErrorResponse(res, 400, renderError("cohere", "validation", {
|
|
1075
1050
|
message: isArray ? "Invalid request: embedding_types must be an array of strings" : "Invalid request: embedding_types must be an array",
|
|
1076
1051
|
type: "invalid_request_error"
|
|
1077
|
-
}
|
|
1052
|
+
}).body);
|
|
1078
1053
|
return true;
|
|
1079
1054
|
}
|
|
1080
1055
|
if (fixture) {
|
|
@@ -1091,7 +1066,7 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
|
|
|
1091
1066
|
fixture
|
|
1092
1067
|
}
|
|
1093
1068
|
});
|
|
1094
|
-
writeErrorResponse(res, status,
|
|
1069
|
+
writeErrorResponse(res, status, renderError("openai", "fixture", response.error).body, { retryAfter: response.retryAfter });
|
|
1095
1070
|
return;
|
|
1096
1071
|
}
|
|
1097
1072
|
if (isEmbeddingResponse(response)) {
|
|
@@ -1129,13 +1104,13 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
|
|
|
1129
1104
|
fixture
|
|
1130
1105
|
}
|
|
1131
1106
|
});
|
|
1132
|
-
writeErrorResponse(res, 500,
|
|
1107
|
+
writeErrorResponse(res, 500, renderError("cohere", "unknown-response", {
|
|
1133
1108
|
message: "Fixture response did not match any known embedding type (must have embedding or error)",
|
|
1134
1109
|
type: "server_error"
|
|
1135
|
-
}
|
|
1110
|
+
}).body);
|
|
1136
1111
|
return;
|
|
1137
1112
|
}
|
|
1138
|
-
if (
|
|
1113
|
+
if (resolveRequestDecisions(defaults.strict, req.headers).fixtureMiss) {
|
|
1139
1114
|
const strictMessage = strictNoMatchMessage(skippedBySequenceOrTurn);
|
|
1140
1115
|
logger.error(strictNoMatchLogLine(req.method ?? "POST", req.url ?? "/v2/embed", skippedBySequenceOrTurn));
|
|
1141
1116
|
journal.add({
|
|
@@ -1149,10 +1124,10 @@ async function handleCohereEmbed(req, res, raw, fixtures, journal, defaults, set
|
|
|
1149
1124
|
...strictOverrideField(defaults.strict, req.headers)
|
|
1150
1125
|
}
|
|
1151
1126
|
});
|
|
1152
|
-
writeErrorResponse(res, 503,
|
|
1127
|
+
writeErrorResponse(res, 503, renderError("cohere", "strict-miss", {
|
|
1153
1128
|
message: strictMessage,
|
|
1154
1129
|
type: "invalid_request_error"
|
|
1155
|
-
}
|
|
1130
|
+
}).body);
|
|
1156
1131
|
return;
|
|
1157
1132
|
}
|
|
1158
1133
|
if (defaults.record) {
|