@copilotkit/aimock 1.44.0 → 1.45.1
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 +42 -0
- package/README.md +6 -0
- package/dist/agui-types.d.cts.map +1 -1
- package/dist/aimock-cli.cjs +31 -5
- 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 +31 -5
- package/dist/aimock-cli.js.map +1 -1
- package/dist/bedrock-converse.cjs +312 -39
- 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 +313 -40
- package/dist/bedrock-converse.js.map +1 -1
- package/dist/bedrock.cjs +195 -42
- 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 +196 -43
- package/dist/bedrock.js.map +1 -1
- package/dist/chaos.cjs +1 -0
- package/dist/chaos.js +1 -1
- package/dist/cli.cjs +152 -5
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +155 -8
- package/dist/cli.js.map +1 -1
- package/dist/cohere.cjs +132 -71
- 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 +133 -72
- package/dist/cohere.js.map +1 -1
- package/dist/config-loader.cjs +62 -4
- package/dist/config-loader.cjs.map +1 -1
- package/dist/config-loader.d.cts +37 -4
- package/dist/config-loader.d.cts.map +1 -1
- package/dist/config-loader.d.ts +37 -4
- package/dist/config-loader.d.ts.map +1 -1
- package/dist/config-loader.js +62 -4
- package/dist/config-loader.js.map +1 -1
- package/dist/fakes-plugin.cjs +131 -0
- package/dist/fakes-plugin.cjs.map +1 -0
- package/dist/fakes-plugin.d.cts +23 -0
- package/dist/fakes-plugin.d.cts.map +1 -0
- package/dist/fakes-plugin.d.ts +23 -0
- package/dist/fakes-plugin.d.ts.map +1 -0
- package/dist/fakes-plugin.js +127 -0
- package/dist/fakes-plugin.js.map +1 -0
- package/dist/fixture-loader-services.cjs +1 -1
- package/dist/fixture-loader-services.cjs.map +1 -1
- package/dist/fixture-loader-services.js +1 -1
- package/dist/fixture-loader-services.js.map +1 -1
- package/dist/fixture-loader.cjs +389 -27
- package/dist/fixture-loader.cjs.map +1 -1
- package/dist/fixture-loader.d.cts +47 -3
- package/dist/fixture-loader.d.cts.map +1 -1
- package/dist/fixture-loader.d.ts +47 -3
- package/dist/fixture-loader.d.ts.map +1 -1
- package/dist/fixture-loader.js +384 -29
- package/dist/fixture-loader.js.map +1 -1
- package/dist/gemini-interactions.cjs +250 -52
- package/dist/gemini-interactions.cjs.map +1 -1
- package/dist/gemini-interactions.d.cts.map +1 -1
- package/dist/gemini-interactions.d.ts.map +1 -1
- package/dist/gemini-interactions.js +251 -53
- package/dist/gemini-interactions.js.map +1 -1
- package/dist/gemini.cjs +226 -37
- 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 +227 -38
- package/dist/gemini.js.map +1 -1
- package/dist/helpers.cjs +881 -7
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts +85 -4
- package/dist/helpers.d.cts.map +1 -1
- package/dist/helpers.d.ts +85 -4
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +839 -8
- package/dist/helpers.js.map +1 -1
- package/dist/index.cjs +9 -0
- package/dist/index.d.cts +7 -5
- package/dist/index.d.ts +7 -5
- package/dist/index.js +4 -3
- package/dist/jest.cjs +31 -7
- package/dist/jest.cjs.map +1 -1
- package/dist/jest.d.cts +43 -3
- package/dist/jest.d.cts.map +1 -1
- package/dist/jest.d.ts +43 -3
- package/dist/jest.d.ts.map +1 -1
- package/dist/jest.js +33 -9
- package/dist/jest.js.map +1 -1
- package/dist/journal.cjs +135 -13
- package/dist/journal.cjs.map +1 -1
- package/dist/journal.d.cts +38 -4
- package/dist/journal.d.cts.map +1 -1
- package/dist/journal.d.ts +38 -4
- package/dist/journal.d.ts.map +1 -1
- package/dist/journal.js +135 -13
- package/dist/journal.js.map +1 -1
- package/dist/live-sanitize.cjs +4 -32
- package/dist/live-sanitize.cjs.map +1 -1
- package/dist/live-sanitize.js +4 -32
- package/dist/live-sanitize.js.map +1 -1
- package/dist/llmock.cjs +123 -30
- package/dist/llmock.cjs.map +1 -1
- package/dist/llmock.d.cts +16 -1
- package/dist/llmock.d.cts.map +1 -1
- package/dist/llmock.d.ts +16 -1
- package/dist/llmock.d.ts.map +1 -1
- package/dist/llmock.js +125 -32
- package/dist/llmock.js.map +1 -1
- package/dist/mcp-fakes-mount.cjs +1 -0
- package/dist/mcp-fakes-mount.cjs.map +1 -1
- package/dist/mcp-fakes-mount.js +1 -0
- package/dist/mcp-fakes-mount.js.map +1 -1
- package/dist/mcp-fakes-report.cjs +111 -0
- package/dist/mcp-fakes-report.cjs.map +1 -0
- package/dist/mcp-fakes-report.d.cts +40 -0
- package/dist/mcp-fakes-report.d.cts.map +1 -0
- package/dist/mcp-fakes-report.d.ts +40 -0
- package/dist/mcp-fakes-report.d.ts.map +1 -0
- package/dist/mcp-fakes-report.js +107 -0
- package/dist/mcp-fakes-report.js.map +1 -0
- package/dist/mcp-fakes.cjs +331 -8
- package/dist/mcp-fakes.cjs.map +1 -1
- package/dist/mcp-fakes.d.cts +406 -3
- package/dist/mcp-fakes.d.cts.map +1 -1
- package/dist/mcp-fakes.d.ts +406 -3
- package/dist/mcp-fakes.d.ts.map +1 -1
- package/dist/mcp-fakes.js +331 -8
- package/dist/mcp-fakes.js.map +1 -1
- package/dist/mcp-handler.cjs +216 -17
- package/dist/mcp-handler.cjs.map +1 -1
- package/dist/mcp-handler.d.cts +49 -0
- package/dist/mcp-handler.d.cts.map +1 -0
- package/dist/mcp-handler.d.ts +49 -0
- package/dist/mcp-handler.d.ts.map +1 -0
- package/dist/mcp-handler.js +214 -18
- package/dist/mcp-handler.js.map +1 -1
- package/dist/mcp-mock.cjs +112 -1
- package/dist/mcp-mock.cjs.map +1 -1
- package/dist/mcp-mock.d.cts +33 -2
- package/dist/mcp-mock.d.cts.map +1 -1
- package/dist/mcp-mock.d.ts +33 -2
- package/dist/mcp-mock.d.ts.map +1 -1
- package/dist/mcp-mock.js +112 -1
- package/dist/mcp-mock.js.map +1 -1
- package/dist/mcp-recorder.cjs +1224 -0
- package/dist/mcp-recorder.cjs.map +1 -0
- package/dist/mcp-recorder.d.cts +108 -0
- package/dist/mcp-recorder.d.cts.map +1 -0
- package/dist/mcp-recorder.d.ts +108 -0
- package/dist/mcp-recorder.d.ts.map +1 -0
- package/dist/mcp-recorder.js +1215 -0
- package/dist/mcp-recorder.js.map +1 -0
- package/dist/messages.cjs +362 -56
- 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 +363 -58
- package/dist/messages.js.map +1 -1
- package/dist/misbehavior.cjs +1523 -0
- package/dist/misbehavior.cjs.map +1 -0
- package/dist/misbehavior.d.cts +43 -0
- package/dist/misbehavior.d.cts.map +1 -0
- package/dist/misbehavior.d.ts +43 -0
- package/dist/misbehavior.d.ts.map +1 -0
- package/dist/misbehavior.js +1511 -0
- package/dist/misbehavior.js.map +1 -0
- package/dist/ollama.cjs +310 -112
- 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 +311 -113
- package/dist/ollama.js.map +1 -1
- package/dist/openrouter-video.cjs +30 -2
- 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 +30 -2
- package/dist/openrouter-video.js.map +1 -1
- package/dist/record-sanitize.cjs +231 -0
- package/dist/record-sanitize.cjs.map +1 -0
- package/dist/record-sanitize.js +224 -0
- package/dist/record-sanitize.js.map +1 -0
- package/dist/recorder.cjs +106 -5
- package/dist/recorder.cjs.map +1 -1
- package/dist/recorder.d.cts +2 -1
- package/dist/recorder.d.cts.map +1 -1
- package/dist/recorder.d.ts +2 -1
- package/dist/recorder.d.ts.map +1 -1
- package/dist/recorder.js +107 -7
- package/dist/recorder.js.map +1 -1
- package/dist/responses.cjs +667 -171
- package/dist/responses.cjs.map +1 -1
- package/dist/responses.d.cts +5 -13
- package/dist/responses.d.cts.map +1 -1
- package/dist/responses.d.ts +5 -13
- package/dist/responses.d.ts.map +1 -1
- package/dist/responses.js +665 -174
- package/dist/responses.js.map +1 -1
- package/dist/router.cjs +24 -2
- 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 +25 -4
- package/dist/router.js.map +1 -1
- package/dist/server.cjs +572 -76
- 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 +574 -78
- package/dist/server.js.map +1 -1
- package/dist/stream-collapse.cjs +236 -34
- package/dist/stream-collapse.cjs.map +1 -1
- package/dist/stream-collapse.d.cts +39 -4
- package/dist/stream-collapse.d.cts.map +1 -1
- package/dist/stream-collapse.d.ts +39 -4
- package/dist/stream-collapse.d.ts.map +1 -1
- package/dist/stream-collapse.js +235 -35
- package/dist/stream-collapse.js.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +315 -4
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +315 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/validate-cli.cjs +36 -4
- package/dist/validate-cli.cjs.map +1 -1
- package/dist/validate-cli.js +37 -5
- package/dist/validate-cli.js.map +1 -1
- package/dist/vector-types.d.ts.map +1 -1
- package/dist/version.cjs +45 -0
- package/dist/version.cjs.map +1 -0
- package/dist/version.js +44 -0
- package/dist/version.js.map +1 -0
- package/dist/vitest.cjs +66 -10
- package/dist/vitest.cjs.map +1 -1
- package/dist/vitest.d.cts +35 -4
- package/dist/vitest.d.cts.map +1 -1
- package/dist/vitest.d.ts +35 -4
- package/dist/vitest.d.ts.map +1 -1
- package/dist/vitest.js +67 -11
- package/dist/vitest.js.map +1 -1
- package/dist/watcher.cjs +6 -2
- package/dist/watcher.cjs.map +1 -1
- package/dist/watcher.js +6 -2
- package/dist/watcher.js.map +1 -1
- package/dist/ws-gemini-live.cjs +210 -101
- package/dist/ws-gemini-live.cjs.map +1 -1
- package/dist/ws-gemini-live.d.cts +9 -3
- package/dist/ws-gemini-live.d.cts.map +1 -1
- package/dist/ws-gemini-live.d.ts +9 -3
- package/dist/ws-gemini-live.d.ts.map +1 -1
- package/dist/ws-gemini-live.js +211 -102
- package/dist/ws-gemini-live.js.map +1 -1
- package/dist/ws-realtime.cjs +175 -62
- package/dist/ws-realtime.cjs.map +1 -1
- package/dist/ws-realtime.d.cts +8 -3
- package/dist/ws-realtime.d.cts.map +1 -1
- package/dist/ws-realtime.d.ts +8 -3
- package/dist/ws-realtime.d.ts.map +1 -1
- package/dist/ws-realtime.js +176 -63
- package/dist/ws-realtime.js.map +1 -1
- package/dist/ws-responses.cjs +109 -16
- package/dist/ws-responses.cjs.map +1 -1
- package/dist/ws-responses.d.cts +8 -12
- package/dist/ws-responses.d.cts.map +1 -1
- package/dist/ws-responses.d.ts +8 -12
- package/dist/ws-responses.d.ts.map +1 -1
- package/dist/ws-responses.js +111 -18
- package/dist/ws-responses.js.map +1 -1
- package/package.json +10 -2
- package/skills/write-fixtures/SKILL.md +179 -21
package/dist/cohere.cjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const require_helpers = require('./helpers.cjs');
|
|
2
2
|
const require_sse_writer = require('./sse-writer.cjs');
|
|
3
3
|
const require_chaos = require('./chaos.cjs');
|
|
4
|
+
const require_misbehavior = require('./misbehavior.cjs');
|
|
4
5
|
const require_router = require('./router.cjs');
|
|
5
6
|
const require_recorder = require('./recorder.cjs');
|
|
6
7
|
const require_interruption = require('./interruption.cjs');
|
|
@@ -96,12 +97,17 @@ function cohereToCompletionRequest(req) {
|
|
|
96
97
|
parameters: t.function.parameters
|
|
97
98
|
}
|
|
98
99
|
};
|
|
100
|
+
const schema = require_misbehavior.normalizeDirectToolSchema({ tools: [t] }, t.name);
|
|
99
101
|
return {
|
|
100
102
|
type: "function",
|
|
101
103
|
function: {
|
|
102
104
|
name: t.name,
|
|
103
105
|
description: t.description,
|
|
104
|
-
parameters:
|
|
106
|
+
parameters: schema ? {
|
|
107
|
+
type: "object",
|
|
108
|
+
properties: schema.properties,
|
|
109
|
+
required: [...schema.required]
|
|
110
|
+
} : void 0
|
|
105
111
|
}
|
|
106
112
|
};
|
|
107
113
|
});
|
|
@@ -140,14 +146,7 @@ function buildCohereTextResponse(content, reasoning, overrides) {
|
|
|
140
146
|
}
|
|
141
147
|
function buildCohereToolCallResponse(toolCalls, logger, reasoning, overrides) {
|
|
142
148
|
const cohereCalls = toolCalls.map((tc) => {
|
|
143
|
-
|
|
144
|
-
try {
|
|
145
|
-
JSON.parse(tc.arguments || "{}");
|
|
146
|
-
argsJson = tc.arguments || "{}";
|
|
147
|
-
} catch {
|
|
148
|
-
logger.warn(`Malformed JSON in fixture tool call arguments for "${tc.name}": ${tc.arguments}`);
|
|
149
|
-
argsJson = "{}";
|
|
150
|
-
}
|
|
149
|
+
const argsJson = require_helpers.servedToolArgs(tc, "string", logger).raw;
|
|
151
150
|
return {
|
|
152
151
|
id: tc.id || require_helpers.generateToolCallId(),
|
|
153
152
|
type: "function",
|
|
@@ -183,14 +182,7 @@ function buildCohereContentWithToolCallsResponse(content, toolCalls, logger, rea
|
|
|
183
182
|
arguments: b.arguments,
|
|
184
183
|
id: b.id
|
|
185
184
|
})) : toolCalls).map((tc) => {
|
|
186
|
-
|
|
187
|
-
try {
|
|
188
|
-
JSON.parse(tc.arguments || "{}");
|
|
189
|
-
argsJson = tc.arguments || "{}";
|
|
190
|
-
} catch {
|
|
191
|
-
logger.warn(`Malformed JSON in fixture tool call arguments for "${tc.name}": ${tc.arguments}`);
|
|
192
|
-
argsJson = "{}";
|
|
193
|
-
}
|
|
185
|
+
const argsJson = require_helpers.servedToolArgs(tc, "string", logger).raw;
|
|
194
186
|
return {
|
|
195
187
|
id: tc.id || require_helpers.generateToolCallId(),
|
|
196
188
|
type: "function",
|
|
@@ -335,14 +327,7 @@ function buildCohereToolCallStreamEvents(toolCalls, chunkSize, logger, reasoning
|
|
|
335
327
|
for (let idx = 0; idx < toolCalls.length; idx++) {
|
|
336
328
|
const tc = toolCalls[idx];
|
|
337
329
|
const callId = tc.id || require_helpers.generateToolCallId();
|
|
338
|
-
|
|
339
|
-
try {
|
|
340
|
-
JSON.parse(tc.arguments || "{}");
|
|
341
|
-
argsJson = tc.arguments || "{}";
|
|
342
|
-
} catch {
|
|
343
|
-
logger.warn(`Malformed JSON in fixture tool call arguments for "${tc.name}": ${tc.arguments}`);
|
|
344
|
-
argsJson = "{}";
|
|
345
|
-
}
|
|
330
|
+
const argsJson = require_helpers.servedToolArgs(tc, "string", logger).raw;
|
|
346
331
|
events.push({
|
|
347
332
|
type: "tool-call-start",
|
|
348
333
|
index: idx,
|
|
@@ -430,14 +415,7 @@ function buildCohereContentWithToolCallsStreamEvents(content, toolCalls, chunkSi
|
|
|
430
415
|
toolPlanEmitted = true;
|
|
431
416
|
}
|
|
432
417
|
const callId = block.id || require_helpers.generateToolCallId();
|
|
433
|
-
|
|
434
|
-
try {
|
|
435
|
-
JSON.parse(block.arguments || "{}");
|
|
436
|
-
argsJson = block.arguments || "{}";
|
|
437
|
-
} catch {
|
|
438
|
-
logger.warn(`Malformed JSON in fixture tool call arguments for "${block.name}": ${block.arguments}`);
|
|
439
|
-
argsJson = "{}";
|
|
440
|
-
}
|
|
418
|
+
const argsJson = require_helpers.servedToolArgs(block, "string", logger).raw;
|
|
441
419
|
events.push({
|
|
442
420
|
type: "tool-call-start",
|
|
443
421
|
index: toolIdx,
|
|
@@ -517,14 +495,7 @@ function buildCohereContentWithToolCallsStreamEvents(content, toolCalls, chunkSi
|
|
|
517
495
|
for (let idx = 0; idx < toolCalls.length; idx++) {
|
|
518
496
|
const tc = toolCalls[idx];
|
|
519
497
|
const callId = tc.id || require_helpers.generateToolCallId();
|
|
520
|
-
|
|
521
|
-
try {
|
|
522
|
-
JSON.parse(tc.arguments || "{}");
|
|
523
|
-
argsJson = tc.arguments || "{}";
|
|
524
|
-
} catch {
|
|
525
|
-
logger.warn(`Malformed JSON in fixture tool call arguments for "${tc.name}": ${tc.arguments}`);
|
|
526
|
-
argsJson = "{}";
|
|
527
|
-
}
|
|
498
|
+
const argsJson = require_helpers.servedToolArgs(tc, "string", logger).raw;
|
|
528
499
|
events.push({
|
|
529
500
|
type: "tool-call-start",
|
|
530
501
|
index: idx,
|
|
@@ -581,7 +552,10 @@ async function writeCohereSSEStream(res, events, optionsOrLatency) {
|
|
|
581
552
|
if (signal?.aborted) return false;
|
|
582
553
|
chunkIndex++;
|
|
583
554
|
}
|
|
584
|
-
if (!res.writableEnded)
|
|
555
|
+
if (!res.writableEnded) {
|
|
556
|
+
if (opts.terminalSentinel && !signal?.aborted) res.write("data: [DONE]\n\n");
|
|
557
|
+
res.end();
|
|
558
|
+
}
|
|
585
559
|
return true;
|
|
586
560
|
}
|
|
587
561
|
async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsHeaders) {
|
|
@@ -736,29 +710,79 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
736
710
|
} }));
|
|
737
711
|
return;
|
|
738
712
|
}
|
|
739
|
-
const
|
|
713
|
+
const resolvedResponse = await require_helpers.resolveResponse(fixture, completionReq);
|
|
714
|
+
const misbehavior = require_misbehavior.planMisbehavior({
|
|
715
|
+
wire: "cohere",
|
|
716
|
+
fixture,
|
|
717
|
+
response: resolvedResponse,
|
|
718
|
+
request: completionReq,
|
|
719
|
+
stream: cohereReq.stream === true,
|
|
720
|
+
emitsToolCallIds: true,
|
|
721
|
+
defaults,
|
|
722
|
+
rawHeaders: req.headers,
|
|
723
|
+
url: req.url
|
|
724
|
+
});
|
|
725
|
+
if (misbehavior.kind === "error") {
|
|
726
|
+
require_misbehavior.recordMisbehaviorOutcome({
|
|
727
|
+
entry: journal.add({
|
|
728
|
+
method: req.method ?? "POST",
|
|
729
|
+
path: req.url ?? "/v2/chat",
|
|
730
|
+
headers: require_helpers.flattenHeaders(req.headers),
|
|
731
|
+
body: completionReq,
|
|
732
|
+
response: {
|
|
733
|
+
status: misbehavior.status,
|
|
734
|
+
fixture
|
|
735
|
+
}
|
|
736
|
+
}),
|
|
737
|
+
summary: misbehavior.summary,
|
|
738
|
+
defaults,
|
|
739
|
+
testId
|
|
740
|
+
});
|
|
741
|
+
if (!misbehavior.summary?.evaluations.length) logger.error(misbehavior.message);
|
|
742
|
+
require_sse_writer.writeErrorResponse(res, misbehavior.status, JSON.stringify({
|
|
743
|
+
message: misbehavior.message,
|
|
744
|
+
code: misbehavior.code
|
|
745
|
+
}));
|
|
746
|
+
return;
|
|
747
|
+
}
|
|
748
|
+
const prepared = misbehavior.kind === "applied" ? require_helpers.prepareOpenAIChatMisbehavior(misbehavior) : void 0;
|
|
749
|
+
const observedK5Stream = cohereReq.stream === true && prepared?.summary.fault === "stop-length-mid-tool";
|
|
750
|
+
const appliedReasoning = prepared && "reasoning" in prepared.response ? require_helpers.resolveReasoningForModel(prepared.response.reasoning, cohereReq.model, require_helpers.resolveStrictMode(defaults.strict, req.headers), logger) : void 0;
|
|
751
|
+
const usage = prepared ? require_helpers.resolveOpenAIChatMisbehaviorUsage(prepared, completionReq, appliedReasoning !== void 0) : void 0;
|
|
752
|
+
const response = prepared && usage ? {
|
|
753
|
+
...prepared.response,
|
|
754
|
+
usage,
|
|
755
|
+
...prepared.stop ? { finishReason: observedK5Stream ? "tool_calls" : prepared.stop } : {}
|
|
756
|
+
} : resolvedResponse;
|
|
757
|
+
const summary = prepared?.summary ?? misbehavior.summary;
|
|
758
|
+
const empty = prepared?.summary.fault === "empty-response";
|
|
740
759
|
const latency = fixture.latency ?? defaults.latency;
|
|
741
760
|
const chunkSize = Math.max(1, fixture.chunkSize ?? defaults.chunkSize);
|
|
742
761
|
if (require_helpers.isErrorResponse(response)) {
|
|
743
762
|
const status = response.status ?? 500;
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
763
|
+
require_misbehavior.recordMisbehaviorOutcome({
|
|
764
|
+
entry: journal.add({
|
|
765
|
+
method: req.method ?? "POST",
|
|
766
|
+
path: req.url ?? "/v2/chat",
|
|
767
|
+
headers: require_helpers.flattenHeaders(req.headers),
|
|
768
|
+
body: completionReq,
|
|
769
|
+
response: {
|
|
770
|
+
status,
|
|
771
|
+
fixture
|
|
772
|
+
}
|
|
773
|
+
}),
|
|
774
|
+
summary,
|
|
775
|
+
defaults,
|
|
776
|
+
testId
|
|
753
777
|
});
|
|
754
778
|
require_sse_writer.writeErrorResponse(res, status, require_helpers.serializeErrorResponse(response), { retryAfter: response.retryAfter });
|
|
755
779
|
return;
|
|
756
780
|
}
|
|
757
|
-
if (require_helpers.
|
|
781
|
+
if (require_helpers.isCombinedFixtureResponse(response)) {
|
|
758
782
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Cohere v2 Chat API — ignoring");
|
|
759
783
|
const overrides = require_helpers.extractOverrides(response);
|
|
760
784
|
const effectiveStrict = require_helpers.resolveStrictMode(defaults.strict, req.headers);
|
|
761
|
-
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, cohereReq.model, effectiveStrict, logger);
|
|
785
|
+
const effReasoning = prepared ? appliedReasoning : require_helpers.resolveReasoningForModel(response.reasoning, cohereReq.model, effectiveStrict, logger);
|
|
762
786
|
const journalEntry = journal.add({
|
|
763
787
|
method: req.method ?? "POST",
|
|
764
788
|
path: req.url ?? "/v2/chat",
|
|
@@ -769,14 +793,22 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
769
793
|
fixture
|
|
770
794
|
}
|
|
771
795
|
});
|
|
796
|
+
require_misbehavior.recordMisbehaviorOutcome({
|
|
797
|
+
entry: journalEntry,
|
|
798
|
+
summary,
|
|
799
|
+
defaults,
|
|
800
|
+
testId
|
|
801
|
+
});
|
|
802
|
+
const functionToolCalls = require_helpers.requireEmittedFunctionToolCalls(response, "Cohere");
|
|
772
803
|
if (cohereReq.stream !== true) {
|
|
773
|
-
const body = buildCohereContentWithToolCallsResponse(response.content ?? "",
|
|
804
|
+
const body = buildCohereContentWithToolCallsResponse(response.content ?? "", functionToolCalls, logger, effReasoning, overrides, response.blocks);
|
|
774
805
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
775
806
|
res.end(JSON.stringify(body));
|
|
776
807
|
} else {
|
|
777
|
-
const events = buildCohereContentWithToolCallsStreamEvents(response.content ?? "",
|
|
808
|
+
const events = buildCohereContentWithToolCallsStreamEvents(response.content ?? "", functionToolCalls, chunkSize, logger, effReasoning, overrides, response.blocks);
|
|
778
809
|
const interruption = require_interruption.createInterruptionSignal(fixture);
|
|
779
810
|
if (!await writeCohereSSEStream(res, events, {
|
|
811
|
+
terminalSentinel: observedK5Stream,
|
|
780
812
|
latency,
|
|
781
813
|
streamingProfile: fixture.streamingProfile,
|
|
782
814
|
recordedTimings: fixture.recordedTimings,
|
|
@@ -796,7 +828,7 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
796
828
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Cohere v2 Chat API — ignoring");
|
|
797
829
|
const overrides = require_helpers.extractOverrides(response);
|
|
798
830
|
const effectiveStrict = require_helpers.resolveStrictMode(defaults.strict, req.headers);
|
|
799
|
-
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, cohereReq.model, effectiveStrict, logger);
|
|
831
|
+
const effReasoning = prepared ? appliedReasoning : require_helpers.resolveReasoningForModel(response.reasoning, cohereReq.model, effectiveStrict, logger);
|
|
800
832
|
const journalEntry = journal.add({
|
|
801
833
|
method: req.method ?? "POST",
|
|
802
834
|
path: req.url ?? "/v2/chat",
|
|
@@ -807,14 +839,30 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
807
839
|
fixture
|
|
808
840
|
}
|
|
809
841
|
});
|
|
842
|
+
require_misbehavior.recordMisbehaviorOutcome({
|
|
843
|
+
entry: journalEntry,
|
|
844
|
+
summary,
|
|
845
|
+
defaults,
|
|
846
|
+
testId
|
|
847
|
+
});
|
|
810
848
|
if (cohereReq.stream !== true) {
|
|
811
|
-
const body =
|
|
849
|
+
const body = empty ? {
|
|
850
|
+
...buildCohereTextResponse("", void 0, overrides),
|
|
851
|
+
message: {
|
|
852
|
+
role: "assistant",
|
|
853
|
+
content: [],
|
|
854
|
+
tool_calls: [],
|
|
855
|
+
tool_plan: "",
|
|
856
|
+
citations: []
|
|
857
|
+
}
|
|
858
|
+
} : buildCohereTextResponse(response.content, effReasoning, overrides);
|
|
812
859
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
813
860
|
res.end(JSON.stringify(body));
|
|
814
861
|
} else {
|
|
815
|
-
const events = buildCohereTextStreamEvents(response.content, chunkSize, effReasoning, overrides);
|
|
862
|
+
const events = buildCohereTextStreamEvents(response.content, chunkSize, effReasoning, overrides).filter((event) => !empty || event.type === "message-start" || event.type === "message-end");
|
|
816
863
|
const interruption = require_interruption.createInterruptionSignal(fixture);
|
|
817
864
|
if (!await writeCohereSSEStream(res, events, {
|
|
865
|
+
terminalSentinel: observedK5Stream,
|
|
818
866
|
latency,
|
|
819
867
|
streamingProfile: fixture.streamingProfile,
|
|
820
868
|
recordedTimings: fixture.recordedTimings,
|
|
@@ -834,7 +882,7 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
834
882
|
if (response.webSearches?.length) logger.warn("webSearches in fixture response are not supported for Cohere v2 Chat API — ignoring");
|
|
835
883
|
const overrides = require_helpers.extractOverrides(response);
|
|
836
884
|
const effectiveStrict = require_helpers.resolveStrictMode(defaults.strict, req.headers);
|
|
837
|
-
const effReasoning = require_helpers.resolveReasoningForModel(response.reasoning, cohereReq.model, effectiveStrict, logger);
|
|
885
|
+
const effReasoning = prepared ? appliedReasoning : require_helpers.resolveReasoningForModel(response.reasoning, cohereReq.model, effectiveStrict, logger);
|
|
838
886
|
const journalEntry = journal.add({
|
|
839
887
|
method: req.method ?? "POST",
|
|
840
888
|
path: req.url ?? "/v2/chat",
|
|
@@ -845,14 +893,22 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
845
893
|
fixture
|
|
846
894
|
}
|
|
847
895
|
});
|
|
896
|
+
require_misbehavior.recordMisbehaviorOutcome({
|
|
897
|
+
entry: journalEntry,
|
|
898
|
+
summary,
|
|
899
|
+
defaults,
|
|
900
|
+
testId
|
|
901
|
+
});
|
|
902
|
+
const functionToolCalls = require_helpers.requireEmittedFunctionToolCalls(response, "Cohere");
|
|
848
903
|
if (cohereReq.stream !== true) {
|
|
849
|
-
const body = buildCohereToolCallResponse(
|
|
904
|
+
const body = buildCohereToolCallResponse(functionToolCalls, logger, effReasoning, overrides);
|
|
850
905
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
851
906
|
res.end(JSON.stringify(body));
|
|
852
907
|
} else {
|
|
853
|
-
const events = buildCohereToolCallStreamEvents(
|
|
908
|
+
const events = buildCohereToolCallStreamEvents(functionToolCalls, chunkSize, logger, effReasoning, overrides);
|
|
854
909
|
const interruption = require_interruption.createInterruptionSignal(fixture);
|
|
855
910
|
if (!await writeCohereSSEStream(res, events, {
|
|
911
|
+
terminalSentinel: observedK5Stream,
|
|
856
912
|
latency,
|
|
857
913
|
streamingProfile: fixture.streamingProfile,
|
|
858
914
|
recordedTimings: fixture.recordedTimings,
|
|
@@ -868,15 +924,20 @@ async function handleCohere(req, res, raw, fixtures, journal, defaults, setCorsH
|
|
|
868
924
|
}
|
|
869
925
|
return;
|
|
870
926
|
}
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
927
|
+
require_misbehavior.recordMisbehaviorOutcome({
|
|
928
|
+
entry: journal.add({
|
|
929
|
+
method: req.method ?? "POST",
|
|
930
|
+
path: req.url ?? "/v2/chat",
|
|
931
|
+
headers: require_helpers.flattenHeaders(req.headers),
|
|
932
|
+
body: completionReq,
|
|
933
|
+
response: {
|
|
934
|
+
status: 500,
|
|
935
|
+
fixture
|
|
936
|
+
}
|
|
937
|
+
}),
|
|
938
|
+
summary,
|
|
939
|
+
defaults,
|
|
940
|
+
testId
|
|
880
941
|
});
|
|
881
942
|
require_sse_writer.writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
882
943
|
message: "Fixture response did not match any known type",
|