@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/stream-collapse.cjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
|
|
2
|
+
const require_recording = require('./response/usage/recording.cjs');
|
|
2
3
|
const require_harmony = require('./harmony.cjs');
|
|
3
4
|
let node_zlib = require("node:zlib");
|
|
4
5
|
|
|
@@ -361,7 +362,15 @@ function collapseOpenAISSEWithResponsesTools(rawBody) {
|
|
|
361
362
|
transcript = parsed.text;
|
|
362
363
|
transcriptSeen = true;
|
|
363
364
|
if (Array.isArray(parsed.languages)) transcriptLanguages = parsed.languages.filter((language) => typeof language === "object" && language !== null && typeof language.code === "string").map((language) => ({ code: language.code }));
|
|
364
|
-
|
|
365
|
+
transcriptUsage = require_recording.captureUsage({
|
|
366
|
+
provider: "openai",
|
|
367
|
+
contentType: "text/event-stream",
|
|
368
|
+
operation: "transcription",
|
|
369
|
+
family: "transcription",
|
|
370
|
+
stage: "stream",
|
|
371
|
+
previous: transcriptUsage,
|
|
372
|
+
observation: parsed
|
|
373
|
+
});
|
|
365
374
|
continue;
|
|
366
375
|
}
|
|
367
376
|
if (parsed.type === "response.reasoning_summary_text.delta" && typeof parsed.delta === "string") {
|
|
@@ -548,7 +557,15 @@ function collapseOpenAISSEWithResponsesTools(rawBody) {
|
|
|
548
557
|
continue;
|
|
549
558
|
}
|
|
550
559
|
if (typeof parsed.type === "string" && parsed.type.startsWith("response.")) continue;
|
|
551
|
-
|
|
560
|
+
usage = require_recording.captureUsage({
|
|
561
|
+
provider: "openai",
|
|
562
|
+
contentType: "text/event-stream",
|
|
563
|
+
operation: "chat",
|
|
564
|
+
family: "openai",
|
|
565
|
+
stage: "stream",
|
|
566
|
+
previous: usage,
|
|
567
|
+
observation: parsed
|
|
568
|
+
});
|
|
552
569
|
const choices = parsed.choices;
|
|
553
570
|
if (!choices || choices.length === 0) continue;
|
|
554
571
|
const delta = choices[0].delta;
|
|
@@ -664,6 +681,8 @@ function collapseOpenAISSEWithResponsesTools(rawBody) {
|
|
|
664
681
|
}
|
|
665
682
|
/**
|
|
666
683
|
* Collapse Anthropic Claude Messages SSE stream into a single response.
|
|
684
|
+
* Captures start usage and numeric delta updates; null keeps the start value.
|
|
685
|
+
* Cache TTL objects are captured from message_start, alongside flat counts.
|
|
667
686
|
*
|
|
668
687
|
* Format:
|
|
669
688
|
* event: message_start\ndata: {...}\n\n
|
|
@@ -672,6 +691,7 @@ function collapseOpenAISSEWithResponsesTools(rawBody) {
|
|
|
672
691
|
function collapseAnthropicSSE(rawBody) {
|
|
673
692
|
const inputTruncated = isCollapseInputTruncated(rawBody);
|
|
674
693
|
const blocks = splitSSEEvents(guardCollapseBody(rawBody));
|
|
694
|
+
let usage;
|
|
675
695
|
let content = "";
|
|
676
696
|
let reasoning = "";
|
|
677
697
|
let reasoningSignature;
|
|
@@ -697,6 +717,15 @@ function collapseAnthropicSSE(rawBody) {
|
|
|
697
717
|
if (droppedChunks === 1) firstDroppedSample = `parse failed (${err instanceof Error ? err.message : "unknown"}): ${surrogateSafeSlice(payload, 200)}`;
|
|
698
718
|
continue;
|
|
699
719
|
}
|
|
720
|
+
usage = require_recording.captureUsage({
|
|
721
|
+
provider: "anthropic",
|
|
722
|
+
contentType: "text/event-stream",
|
|
723
|
+
operation: "chat",
|
|
724
|
+
family: "anthropic",
|
|
725
|
+
stage: "stream",
|
|
726
|
+
previous: usage,
|
|
727
|
+
observation: parsed
|
|
728
|
+
});
|
|
700
729
|
if (eventType === "content_block_start") {
|
|
701
730
|
const contentBlock = parsed.content_block;
|
|
702
731
|
const redactedData = capturedRedactedData(contentBlock);
|
|
@@ -754,6 +783,7 @@ function collapseAnthropicSSE(rawBody) {
|
|
|
754
783
|
...tc.id ? { id: tc.id } : {}
|
|
755
784
|
}));
|
|
756
785
|
return {
|
|
786
|
+
...usage ? { usage } : {},
|
|
757
787
|
...orderedBlocks ? { blocks: orderedBlocks } : {},
|
|
758
788
|
...content ? { content } : {},
|
|
759
789
|
toolCalls: orderedBlocks ? orderedToolCalls : indexSortedToolCalls,
|
|
@@ -766,6 +796,7 @@ function collapseAnthropicSSE(rawBody) {
|
|
|
766
796
|
};
|
|
767
797
|
}
|
|
768
798
|
return {
|
|
799
|
+
...usage ? { usage } : {},
|
|
769
800
|
content,
|
|
770
801
|
...reasoning ? { reasoning } : {},
|
|
771
802
|
...reasoningSignature ? { reasoningSignature } : {},
|
|
@@ -784,6 +815,7 @@ function collapseAnthropicSSE(rawBody) {
|
|
|
784
815
|
function collapseGeminiSSE(rawBody) {
|
|
785
816
|
const inputTruncated = isCollapseInputTruncated(rawBody);
|
|
786
817
|
const lines = splitSSEEvents(guardCollapseBody(rawBody));
|
|
818
|
+
let usage;
|
|
787
819
|
let content = "";
|
|
788
820
|
let reasoning = "";
|
|
789
821
|
let droppedChunks = 0;
|
|
@@ -804,6 +836,15 @@ function collapseGeminiSSE(rawBody) {
|
|
|
804
836
|
if (droppedChunks === 1) firstDroppedSample = `parse failed (${err instanceof Error ? err.message : "unknown"}): ${surrogateSafeSlice(payload, 200)}`;
|
|
805
837
|
continue;
|
|
806
838
|
}
|
|
839
|
+
usage = require_recording.captureUsage({
|
|
840
|
+
provider: "gemini",
|
|
841
|
+
contentType: "text/event-stream",
|
|
842
|
+
operation: "chat",
|
|
843
|
+
family: "gemini",
|
|
844
|
+
stage: "stream",
|
|
845
|
+
previous: usage,
|
|
846
|
+
observation: parsed
|
|
847
|
+
});
|
|
807
848
|
const candidates = parsed.candidates;
|
|
808
849
|
if (!candidates || candidates.length === 0) continue;
|
|
809
850
|
const candidateContent = candidates[0].content;
|
|
@@ -839,6 +880,7 @@ function collapseGeminiSSE(rawBody) {
|
|
|
839
880
|
arguments: normalizeToolArguments(tc.arguments)
|
|
840
881
|
}));
|
|
841
882
|
if (audioB64) return {
|
|
883
|
+
...usage ? { usage } : {},
|
|
842
884
|
audioB64,
|
|
843
885
|
audioMimeType,
|
|
844
886
|
...content ? { content } : {},
|
|
@@ -851,6 +893,7 @@ function collapseGeminiSSE(rawBody) {
|
|
|
851
893
|
if (toolCalls.length > 0) {
|
|
852
894
|
const blocks = buildOrderedBlocks(orderAtoms);
|
|
853
895
|
return {
|
|
896
|
+
...usage ? { usage } : {},
|
|
854
897
|
...blocks ? { blocks } : {},
|
|
855
898
|
...content ? { content } : {},
|
|
856
899
|
toolCalls: normalizedToolCalls,
|
|
@@ -861,6 +904,7 @@ function collapseGeminiSSE(rawBody) {
|
|
|
861
904
|
};
|
|
862
905
|
}
|
|
863
906
|
return {
|
|
907
|
+
...usage ? { usage } : {},
|
|
864
908
|
content,
|
|
865
909
|
...reasoning ? { reasoning } : {},
|
|
866
910
|
...droppedChunks > 0 ? { droppedChunks } : {},
|
|
@@ -885,6 +929,7 @@ function collapseGeminiSSE(rawBody) {
|
|
|
885
929
|
function collapseOllamaNDJSON(rawBody) {
|
|
886
930
|
const inputTruncated = isCollapseInputTruncated(rawBody);
|
|
887
931
|
const lines = guardCollapseBody(rawBody).split("\n").filter((l) => l.trim().length > 0);
|
|
932
|
+
let usage;
|
|
888
933
|
let content = "";
|
|
889
934
|
let reasoning = "";
|
|
890
935
|
let droppedChunks = 0;
|
|
@@ -902,6 +947,15 @@ function collapseOllamaNDJSON(rawBody) {
|
|
|
902
947
|
if (droppedChunks === 1) firstDroppedSample = `parse failed (${err instanceof Error ? err.message : "unknown"}): ${surrogateSafeSlice(line.trim(), 200)}`;
|
|
903
948
|
continue;
|
|
904
949
|
}
|
|
950
|
+
usage = require_recording.captureUsage({
|
|
951
|
+
provider: "ollama",
|
|
952
|
+
contentType: "application/x-ndjson",
|
|
953
|
+
operation: "chat",
|
|
954
|
+
family: "ollama",
|
|
955
|
+
stage: "stream",
|
|
956
|
+
previous: usage,
|
|
957
|
+
observation: parsed
|
|
958
|
+
});
|
|
905
959
|
const message = parsed.message;
|
|
906
960
|
if (message) {
|
|
907
961
|
if (typeof message.content === "string") {
|
|
@@ -951,6 +1005,7 @@ function collapseOllamaNDJSON(rawBody) {
|
|
|
951
1005
|
arguments: normalizeToolArguments(tc.arguments)
|
|
952
1006
|
}));
|
|
953
1007
|
return {
|
|
1008
|
+
...usage ? { usage } : {},
|
|
954
1009
|
...blocks ? { blocks } : {},
|
|
955
1010
|
...content ? { content } : {},
|
|
956
1011
|
toolCalls: normalizedToolCalls,
|
|
@@ -963,6 +1018,7 @@ function collapseOllamaNDJSON(rawBody) {
|
|
|
963
1018
|
};
|
|
964
1019
|
}
|
|
965
1020
|
return {
|
|
1021
|
+
...usage ? { usage } : {},
|
|
966
1022
|
content,
|
|
967
1023
|
...reasoning ? { reasoning } : {},
|
|
968
1024
|
...droppedChunks > 0 ? { droppedChunks } : {},
|
|
@@ -981,6 +1037,7 @@ function collapseOllamaNDJSON(rawBody) {
|
|
|
981
1037
|
function collapseCohereSSE(rawBody) {
|
|
982
1038
|
const inputTruncated = isCollapseInputTruncated(rawBody);
|
|
983
1039
|
const blocks = splitSSEEvents(guardCollapseBody(rawBody));
|
|
1040
|
+
let usage;
|
|
984
1041
|
let content = "";
|
|
985
1042
|
let reasoning = "";
|
|
986
1043
|
let droppedChunks = 0;
|
|
@@ -1004,6 +1061,15 @@ function collapseCohereSSE(rawBody) {
|
|
|
1004
1061
|
if (droppedChunks === 1) firstDroppedSample = `parse failed (${err instanceof Error ? err.message : "unknown"}): ${surrogateSafeSlice(payload, 200)}`;
|
|
1005
1062
|
continue;
|
|
1006
1063
|
}
|
|
1064
|
+
usage = require_recording.captureUsage({
|
|
1065
|
+
provider: "cohere",
|
|
1066
|
+
contentType: "text/event-stream",
|
|
1067
|
+
operation: "chat",
|
|
1068
|
+
family: "cohere",
|
|
1069
|
+
stage: "stream",
|
|
1070
|
+
previous: usage,
|
|
1071
|
+
observation: parsed
|
|
1072
|
+
});
|
|
1007
1073
|
if (eventType === "content-delta") {
|
|
1008
1074
|
const contentObj = (parsed.delta?.message)?.content;
|
|
1009
1075
|
if (contentObj && contentObj.type === "thinking" && typeof contentObj.thinking === "string") reasoning += contentObj.thinking;
|
|
@@ -1064,6 +1130,7 @@ function collapseCohereSSE(rawBody) {
|
|
|
1064
1130
|
...tc.id ? { id: tc.id } : {}
|
|
1065
1131
|
}));
|
|
1066
1132
|
return {
|
|
1133
|
+
...usage ? { usage } : {},
|
|
1067
1134
|
...orderedBlocks ? { blocks: orderedBlocks } : {},
|
|
1068
1135
|
...content ? { content } : {},
|
|
1069
1136
|
toolCalls: orderedBlocks ? orderedToolCalls : indexSortedToolCalls,
|
|
@@ -1074,6 +1141,7 @@ function collapseCohereSSE(rawBody) {
|
|
|
1074
1141
|
};
|
|
1075
1142
|
}
|
|
1076
1143
|
return {
|
|
1144
|
+
...usage ? { usage } : {},
|
|
1077
1145
|
content,
|
|
1078
1146
|
...reasoning ? { reasoning } : {},
|
|
1079
1147
|
...droppedChunks > 0 ? { droppedChunks } : {},
|
|
@@ -1168,6 +1236,8 @@ function decodeEventStreamFrames(buf) {
|
|
|
1168
1236
|
}
|
|
1169
1237
|
/**
|
|
1170
1238
|
* Collapse Bedrock binary Event Stream into a single response.
|
|
1239
|
+
* Claude invoke events preserve usage with the Anthropic start/delta rules;
|
|
1240
|
+
* Converse usage remains omitted.
|
|
1171
1241
|
*
|
|
1172
1242
|
* Each frame contains a JSON payload with event types like:
|
|
1173
1243
|
* contentBlockDelta, contentBlockStart, etc.
|
|
@@ -1177,6 +1247,7 @@ function collapseBedrockEventStream(rawBody) {
|
|
|
1177
1247
|
const inputTruncated = rawBody.byteLength > limit;
|
|
1178
1248
|
const { frames, truncated: frameTruncated } = decodeEventStreamFrames(inputTruncated ? rawBody.subarray(0, limit) : rawBody);
|
|
1179
1249
|
const truncated = frameTruncated || inputTruncated;
|
|
1250
|
+
let usage;
|
|
1180
1251
|
let content = "";
|
|
1181
1252
|
let reasoning = "";
|
|
1182
1253
|
let reasoningSignature;
|
|
@@ -1205,6 +1276,15 @@ function collapseBedrockEventStream(rawBody) {
|
|
|
1205
1276
|
if (droppedChunks === 1) firstDroppedSample = `parse failed (${err instanceof Error ? err.message : "unknown"}): ${surrogateSafeSlice(frameStr, 200)}`;
|
|
1206
1277
|
continue;
|
|
1207
1278
|
}
|
|
1279
|
+
usage = require_recording.captureUsage({
|
|
1280
|
+
provider: "bedrock",
|
|
1281
|
+
contentType: "application/vnd.amazon.eventstream",
|
|
1282
|
+
operation: "chat",
|
|
1283
|
+
family: typeof parsed.type === "string" ? "bedrock-invoke" : "bedrock-converse",
|
|
1284
|
+
stage: "stream",
|
|
1285
|
+
previous: usage,
|
|
1286
|
+
observation: parsed
|
|
1287
|
+
});
|
|
1208
1288
|
if (parsed.type === "content_block_delta") {
|
|
1209
1289
|
const delta = parsed.delta;
|
|
1210
1290
|
if (delta?.type === "text_delta" && typeof delta.text === "string") {
|
|
@@ -1312,6 +1392,7 @@ function collapseBedrockEventStream(rawBody) {
|
|
|
1312
1392
|
...tc.id ? { id: tc.id } : {}
|
|
1313
1393
|
}));
|
|
1314
1394
|
return {
|
|
1395
|
+
...usage ? { usage } : {},
|
|
1315
1396
|
...orderedBlocks ? { blocks: orderedBlocks } : {},
|
|
1316
1397
|
...content ? { content } : {},
|
|
1317
1398
|
toolCalls: orderedBlocks ? orderedToolCalls : indexSortedToolCalls,
|
|
@@ -1324,6 +1405,7 @@ function collapseBedrockEventStream(rawBody) {
|
|
|
1324
1405
|
};
|
|
1325
1406
|
}
|
|
1326
1407
|
return {
|
|
1408
|
+
...usage ? { usage } : {},
|
|
1327
1409
|
content,
|
|
1328
1410
|
...reasoning ? { reasoning } : {},
|
|
1329
1411
|
...reasoningSignature ? { reasoningSignature } : {},
|
|
@@ -1350,6 +1432,7 @@ function collapseBedrockEventStream(rawBody) {
|
|
|
1350
1432
|
function collapseGeminiInteractionsSSE(rawBody) {
|
|
1351
1433
|
const inputTruncated = isCollapseInputTruncated(rawBody);
|
|
1352
1434
|
const lines = splitSSEEvents(guardCollapseBody(rawBody));
|
|
1435
|
+
let usage;
|
|
1353
1436
|
let content = "";
|
|
1354
1437
|
let reasoning = "";
|
|
1355
1438
|
let droppedChunks = 0;
|
|
@@ -1369,6 +1452,15 @@ function collapseGeminiInteractionsSSE(rawBody) {
|
|
|
1369
1452
|
if (droppedChunks === 1) firstDroppedSample = `parse failed (${err instanceof Error ? err.message : "unknown"}): ${surrogateSafeSlice(payload, 200)}`;
|
|
1370
1453
|
continue;
|
|
1371
1454
|
}
|
|
1455
|
+
usage = require_recording.captureUsage({
|
|
1456
|
+
provider: "gemini-interactions",
|
|
1457
|
+
contentType: "text/event-stream",
|
|
1458
|
+
operation: "chat",
|
|
1459
|
+
family: "interactions",
|
|
1460
|
+
stage: "stream",
|
|
1461
|
+
previous: usage,
|
|
1462
|
+
observation: parsed
|
|
1463
|
+
});
|
|
1372
1464
|
const eventType = parsed.event_type;
|
|
1373
1465
|
if (!eventType) continue;
|
|
1374
1466
|
const index = typeof parsed.index === "number" ? parsed.index : void 0;
|
|
@@ -1426,6 +1518,7 @@ function collapseGeminiInteractionsSSE(rawBody) {
|
|
|
1426
1518
|
});
|
|
1427
1519
|
}
|
|
1428
1520
|
if (toolCalls.length > 0) return {
|
|
1521
|
+
...usage ? { usage } : {},
|
|
1429
1522
|
...content ? { content } : {},
|
|
1430
1523
|
toolCalls,
|
|
1431
1524
|
...reasoning ? { reasoning } : {},
|
|
@@ -1434,6 +1527,7 @@ function collapseGeminiInteractionsSSE(rawBody) {
|
|
|
1434
1527
|
...inputTruncated ? { truncated: true } : {}
|
|
1435
1528
|
};
|
|
1436
1529
|
return {
|
|
1530
|
+
...usage ? { usage } : {},
|
|
1437
1531
|
content,
|
|
1438
1532
|
...reasoning ? { reasoning } : {},
|
|
1439
1533
|
...droppedChunks > 0 ? { droppedChunks } : {},
|
|
@@ -1459,24 +1553,37 @@ function collapseStreamingResponse(contentType, providerKey, body, logger) {
|
|
|
1459
1553
|
*/
|
|
1460
1554
|
function collapseStreamingResponseWithResponsesTools(contentType, providerKey, body, logger) {
|
|
1461
1555
|
const ct = contentType.toLowerCase();
|
|
1462
|
-
|
|
1463
|
-
|
|
1556
|
+
const complete = (result) => {
|
|
1557
|
+
const usage = require_recording.captureUsage({
|
|
1558
|
+
provider: providerKey,
|
|
1559
|
+
contentType,
|
|
1560
|
+
family: "stream-dispatch",
|
|
1561
|
+
stage: "collapsed",
|
|
1562
|
+
observation: result
|
|
1563
|
+
});
|
|
1564
|
+
return usage ? {
|
|
1565
|
+
...result,
|
|
1566
|
+
usage
|
|
1567
|
+
} : result;
|
|
1568
|
+
};
|
|
1569
|
+
if (ct.includes("application/vnd.amazon.eventstream")) return complete(collapseBedrockEventStream(typeof body === "string" ? Buffer.from(body, "binary") : body));
|
|
1570
|
+
if (ct.includes("application/x-ndjson")) return complete(collapseOllamaNDJSON(typeof body === "string" ? body : body.toString("utf8")));
|
|
1464
1571
|
if (ct.includes("text/event-stream")) {
|
|
1465
1572
|
const str = typeof body === "string" ? body : body.toString("utf8");
|
|
1466
1573
|
switch (providerKey) {
|
|
1467
1574
|
case "openai":
|
|
1468
1575
|
case "azure":
|
|
1469
1576
|
case "openrouter":
|
|
1470
|
-
case "byteplus": return collapseOpenAISSEWithResponsesTools(str);
|
|
1471
|
-
case "anthropic": return collapseAnthropicSSE(str);
|
|
1577
|
+
case "byteplus": return complete(collapseOpenAISSEWithResponsesTools(str));
|
|
1578
|
+
case "anthropic": return complete(collapseAnthropicSSE(str));
|
|
1472
1579
|
case "gemini":
|
|
1473
|
-
case "vertexai": return collapseGeminiSSE(str);
|
|
1474
|
-
case "gemini-interactions": return collapseGeminiInteractionsSSE(str);
|
|
1475
|
-
case "cohere": return collapseCohereSSE(str);
|
|
1476
|
-
case "bedrock": return collapseAnthropicSSE(str);
|
|
1580
|
+
case "vertexai": return complete(collapseGeminiSSE(str));
|
|
1581
|
+
case "gemini-interactions": return complete(collapseGeminiInteractionsSSE(str));
|
|
1582
|
+
case "cohere": return complete(collapseCohereSSE(str));
|
|
1583
|
+
case "bedrock": return complete(collapseAnthropicSSE(str));
|
|
1477
1584
|
default:
|
|
1478
1585
|
logger?.warn(`[stream-collapse] unknown SSE provider "${providerKey}", falling back to OpenAI SSE format`);
|
|
1479
|
-
return collapseOpenAISSEWithResponsesTools(str);
|
|
1586
|
+
return complete(collapseOpenAISSEWithResponsesTools(str));
|
|
1480
1587
|
}
|
|
1481
1588
|
}
|
|
1482
1589
|
return null;
|