@copilotkit/aimock 1.16.4 → 1.17.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 +10 -10
- package/dist/a2a-mock.d.cts +2 -2
- package/dist/a2a-mock.d.cts.map +1 -1
- package/dist/a2a-mock.d.ts +2 -2
- package/dist/a2a-mock.d.ts.map +1 -1
- package/dist/a2a-mock.js +2 -2
- package/dist/a2a-mock.js.map +1 -1
- package/dist/agui-handler.cjs +120 -5
- package/dist/agui-handler.cjs.map +1 -1
- package/dist/agui-handler.d.cts +41 -5
- package/dist/agui-handler.d.cts.map +1 -1
- package/dist/agui-handler.d.ts +41 -5
- package/dist/agui-handler.d.ts.map +1 -1
- package/dist/agui-handler.js +114 -6
- package/dist/agui-handler.js.map +1 -1
- package/dist/agui-mock.cjs +18 -7
- package/dist/agui-mock.cjs.map +1 -1
- package/dist/agui-mock.d.cts +2 -2
- package/dist/agui-mock.d.cts.map +1 -1
- package/dist/agui-mock.d.ts +2 -2
- package/dist/agui-mock.d.ts.map +1 -1
- package/dist/agui-mock.js +20 -9
- package/dist/agui-mock.js.map +1 -1
- package/dist/agui-recorder.cjs +43 -22
- package/dist/agui-recorder.cjs.map +1 -1
- package/dist/agui-recorder.d.cts +4 -3
- package/dist/agui-recorder.d.cts.map +1 -1
- package/dist/agui-recorder.d.ts +4 -3
- package/dist/agui-recorder.d.ts.map +1 -1
- package/dist/agui-recorder.js +45 -24
- package/dist/agui-recorder.js.map +1 -1
- package/dist/agui-stub.cjs +28 -0
- package/dist/agui-stub.d.cts +5 -0
- package/dist/agui-stub.d.ts +5 -0
- package/dist/agui-stub.js +5 -0
- package/dist/agui-types.d.cts +33 -6
- package/dist/agui-types.d.cts.map +1 -1
- package/dist/agui-types.d.ts +33 -6
- package/dist/agui-types.d.ts.map +1 -1
- package/dist/aimock-cli.cjs +1 -1
- package/dist/aimock-cli.js +1 -1
- package/dist/aws-event-stream.d.cts +2 -2
- package/dist/aws-event-stream.d.cts.map +1 -1
- package/dist/aws-event-stream.d.ts +2 -2
- package/dist/aws-event-stream.d.ts.map +1 -1
- package/dist/bedrock-converse.d.cts +3 -3
- package/dist/bedrock-converse.d.cts.map +1 -1
- package/dist/bedrock-converse.d.ts +3 -3
- package/dist/bedrock-converse.d.ts.map +1 -1
- package/dist/bedrock.d.cts +3 -3
- package/dist/bedrock.d.cts.map +1 -1
- package/dist/bedrock.d.ts +3 -3
- package/dist/bedrock.d.ts.map +1 -1
- package/dist/chaos.d.cts +3 -3
- package/dist/chaos.d.cts.map +1 -1
- package/dist/chaos.d.ts +3 -3
- package/dist/chaos.d.ts.map +1 -1
- package/dist/cli.cjs +6 -5
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +6 -5
- package/dist/cli.js.map +1 -1
- package/dist/cohere.d.cts +2 -2
- package/dist/cohere.d.cts.map +1 -1
- package/dist/cohere.d.ts +2 -2
- package/dist/cohere.d.ts.map +1 -1
- package/dist/config-loader.cjs +3 -3
- package/dist/config-loader.d.cts +1 -1
- package/dist/config-loader.d.cts.map +1 -1
- package/dist/config-loader.d.ts +1 -1
- package/dist/config-loader.d.ts.map +1 -1
- package/dist/config-loader.js +2 -2
- package/dist/convert-vidaimock.cjs +1 -1
- package/dist/convert-vidaimock.js +1 -1
- package/dist/convert.cjs +1 -1
- package/dist/convert.js +1 -1
- package/dist/elevenlabs-audio.cjs +209 -0
- package/dist/elevenlabs-audio.cjs.map +1 -0
- package/dist/elevenlabs-audio.d.cts +11 -0
- package/dist/elevenlabs-audio.d.cts.map +1 -0
- package/dist/elevenlabs-audio.d.ts +11 -0
- package/dist/elevenlabs-audio.d.ts.map +1 -0
- package/dist/elevenlabs-audio.js +209 -0
- package/dist/elevenlabs-audio.js.map +1 -0
- package/dist/embeddings.d.cts +2 -2
- package/dist/embeddings.d.cts.map +1 -1
- package/dist/embeddings.d.ts +2 -2
- package/dist/embeddings.d.ts.map +1 -1
- package/dist/fal-audio.cjs +477 -0
- package/dist/fal-audio.cjs.map +1 -0
- package/dist/fal-audio.d.cts +10 -0
- package/dist/fal-audio.d.cts.map +1 -0
- package/dist/fal-audio.d.ts +10 -0
- package/dist/fal-audio.d.ts.map +1 -0
- package/dist/fal-audio.js +474 -0
- package/dist/fal-audio.js.map +1 -0
- package/dist/fixture-loader.cjs +14 -1
- package/dist/fixture-loader.cjs.map +1 -1
- package/dist/fixture-loader.js +14 -1
- package/dist/fixture-loader.js.map +1 -1
- package/dist/fixtures-remote.cjs +1 -1
- package/dist/fixtures-remote.js +1 -1
- package/dist/gemini-interactions.cjs +617 -0
- package/dist/gemini-interactions.cjs.map +1 -0
- package/dist/gemini-interactions.d.cts +46 -0
- package/dist/gemini-interactions.d.cts.map +1 -0
- package/dist/gemini-interactions.d.ts +46 -0
- package/dist/gemini-interactions.d.ts.map +1 -0
- package/dist/gemini-interactions.js +616 -0
- package/dist/gemini-interactions.js.map +1 -0
- package/dist/gemini.cjs +76 -0
- package/dist/gemini.cjs.map +1 -1
- package/dist/gemini.d.cts +2 -2
- package/dist/gemini.d.cts.map +1 -1
- package/dist/gemini.d.ts +2 -2
- package/dist/gemini.d.ts.map +1 -1
- package/dist/gemini.js +77 -1
- package/dist/gemini.js.map +1 -1
- package/dist/helpers.cjs +24 -1
- package/dist/helpers.cjs.map +1 -1
- package/dist/helpers.d.cts +13 -3
- package/dist/helpers.d.cts.map +1 -1
- package/dist/helpers.d.ts +13 -3
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +23 -2
- package/dist/helpers.js.map +1 -1
- package/dist/images.d.cts +2 -2
- package/dist/images.d.cts.map +1 -1
- package/dist/images.d.ts +2 -2
- package/dist/images.d.ts.map +1 -1
- package/dist/index.cjs +21 -4
- package/dist/index.d.cts +10 -7
- package/dist/index.d.ts +10 -7
- package/dist/index.js +10 -7
- package/dist/jest.cjs +1 -1
- package/dist/jest.js +1 -1
- package/dist/jsonrpc.d.cts +3 -3
- package/dist/jsonrpc.d.cts.map +1 -1
- package/dist/jsonrpc.d.ts +3 -3
- package/dist/jsonrpc.d.ts.map +1 -1
- package/dist/llmock.cjs +38 -2
- package/dist/llmock.cjs.map +1 -1
- package/dist/llmock.d.cts +4 -0
- package/dist/llmock.d.cts.map +1 -1
- package/dist/llmock.d.ts +4 -0
- package/dist/llmock.d.ts.map +1 -1
- package/dist/llmock.js +38 -2
- package/dist/llmock.js.map +1 -1
- package/dist/logger.cjs +5 -4
- package/dist/logger.cjs.map +1 -1
- package/dist/logger.d.cts +1 -1
- package/dist/logger.d.cts.map +1 -1
- package/dist/logger.d.ts +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +5 -4
- package/dist/logger.js.map +1 -1
- package/dist/mcp-mock.d.cts +2 -2
- package/dist/mcp-mock.d.cts.map +1 -1
- package/dist/mcp-mock.d.ts +2 -2
- package/dist/mcp-mock.d.ts.map +1 -1
- package/dist/mcp-mock.js +2 -2
- package/dist/mcp-mock.js.map +1 -1
- package/dist/messages.d.cts +2 -2
- package/dist/messages.d.cts.map +1 -1
- package/dist/messages.d.ts +2 -2
- package/dist/messages.d.ts.map +1 -1
- package/dist/moderation.d.cts +3 -3
- package/dist/moderation.d.cts.map +1 -1
- package/dist/moderation.d.ts +3 -3
- package/dist/moderation.d.ts.map +1 -1
- package/dist/ndjson-writer.d.cts +2 -2
- package/dist/ndjson-writer.d.cts.map +1 -1
- package/dist/ndjson-writer.d.ts +2 -2
- package/dist/ndjson-writer.d.ts.map +1 -1
- package/dist/ollama.d.cts +3 -3
- package/dist/ollama.d.cts.map +1 -1
- package/dist/ollama.d.ts +3 -3
- package/dist/ollama.d.ts.map +1 -1
- package/dist/recorder.cjs +64 -21
- package/dist/recorder.cjs.map +1 -1
- package/dist/recorder.d.cts +2 -2
- package/dist/recorder.d.cts.map +1 -1
- package/dist/recorder.d.ts +2 -2
- package/dist/recorder.d.ts.map +1 -1
- package/dist/recorder.js +66 -23
- package/dist/recorder.js.map +1 -1
- package/dist/rerank.d.cts +3 -3
- package/dist/rerank.d.cts.map +1 -1
- package/dist/rerank.d.ts +3 -3
- package/dist/rerank.d.ts.map +1 -1
- package/dist/responses.d.cts +2 -2
- package/dist/responses.d.cts.map +1 -1
- package/dist/responses.d.ts +2 -2
- package/dist/responses.d.ts.map +1 -1
- package/dist/router.cjs +1 -1
- package/dist/router.cjs.map +1 -1
- package/dist/router.js +1 -1
- package/dist/router.js.map +1 -1
- package/dist/search.d.cts +3 -3
- package/dist/search.d.cts.map +1 -1
- package/dist/search.d.ts +3 -3
- package/dist/search.d.ts.map +1 -1
- package/dist/server.cjs +170 -1
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +2 -2
- package/dist/server.d.cts.map +1 -1
- package/dist/server.d.ts +2 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +173 -4
- package/dist/server.js.map +1 -1
- package/dist/speech.cjs +18 -9
- package/dist/speech.cjs.map +1 -1
- package/dist/speech.d.cts +2 -2
- package/dist/speech.d.cts.map +1 -1
- package/dist/speech.d.ts +2 -2
- package/dist/speech.d.ts.map +1 -1
- package/dist/speech.js +18 -9
- package/dist/speech.js.map +1 -1
- package/dist/sse-writer.d.cts +3 -3
- package/dist/sse-writer.d.cts.map +1 -1
- package/dist/sse-writer.d.ts +3 -3
- package/dist/sse-writer.d.ts.map +1 -1
- package/dist/stream-collapse.cjs +80 -9
- package/dist/stream-collapse.cjs.map +1 -1
- package/dist/stream-collapse.d.cts +11 -1
- package/dist/stream-collapse.d.cts.map +1 -1
- package/dist/stream-collapse.d.ts +11 -1
- package/dist/stream-collapse.d.ts.map +1 -1
- package/dist/stream-collapse.js +80 -10
- package/dist/stream-collapse.js.map +1 -1
- package/dist/suite.cjs +1 -1
- package/dist/suite.d.cts +2 -2
- package/dist/suite.d.ts +2 -2
- package/dist/suite.js +1 -1
- package/dist/transcription.d.cts +2 -2
- package/dist/transcription.d.cts.map +1 -1
- package/dist/transcription.d.ts +2 -2
- package/dist/transcription.d.ts.map +1 -1
- package/dist/types.d.cts +10 -7
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.ts +10 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/vector-mock.d.cts +2 -2
- package/dist/vector-mock.d.cts.map +1 -1
- package/dist/vector-mock.d.ts +2 -2
- package/dist/vector-mock.d.ts.map +1 -1
- package/dist/vector-mock.js +2 -2
- package/dist/vector-mock.js.map +1 -1
- package/dist/vector-types.d.ts.map +1 -1
- package/dist/video.d.cts +3 -3
- package/dist/video.d.cts.map +1 -1
- package/dist/video.d.ts +3 -3
- package/dist/video.d.ts.map +1 -1
- package/dist/vitest.cjs +1 -1
- package/dist/vitest.js +1 -1
- package/dist/ws-framing.d.cts +2 -2
- package/dist/ws-framing.d.cts.map +1 -1
- package/dist/ws-framing.d.ts +2 -2
- package/dist/ws-framing.d.ts.map +1 -1
- package/dist/ws-gemini-live.cjs +145 -2
- package/dist/ws-gemini-live.cjs.map +1 -1
- package/dist/ws-gemini-live.d.cts.map +1 -1
- package/dist/ws-gemini-live.d.ts.map +1 -1
- package/dist/ws-gemini-live.js +146 -3
- package/dist/ws-gemini-live.js.map +1 -1
- package/package.json +16 -2
- package/skills/write-fixtures/SKILL.md +10 -10
package/dist/server.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { buildContentWithToolCallsChunks, buildContentWithToolCallsCompletion, buildTextChunks, buildTextCompletion, buildToolCallChunks, buildToolCallCompletion, extractOverrides, flattenHeaders, getTestId, isContentWithToolCallsResponse, isErrorResponse, isTextResponse, isToolCallResponse } from "./helpers.js";
|
|
1
|
+
import { buildContentWithToolCallsChunks, buildContentWithToolCallsCompletion, buildTextChunks, buildTextCompletion, buildToolCallChunks, buildToolCallCompletion, extractOverrides, flattenHeaders, getTestId, isAudioResponse, isContentWithToolCallsResponse, isErrorResponse, isTextResponse, isToolCallResponse } from "./helpers.js";
|
|
2
|
+
import { Logger } from "./logger.js";
|
|
2
3
|
import { Journal } from "./journal.js";
|
|
3
4
|
import { matchFixture } from "./router.js";
|
|
4
5
|
import { entryToFixture, validateFixtures } from "./fixture-loader.js";
|
|
@@ -11,11 +12,14 @@ import { handleMessages } from "./messages.js";
|
|
|
11
12
|
import { handleGemini } from "./gemini.js";
|
|
12
13
|
import { handleBedrock, handleBedrockStream } from "./bedrock.js";
|
|
13
14
|
import { handleConverse, handleConverseStream } from "./bedrock-converse.js";
|
|
15
|
+
import { handleGeminiInteractions } from "./gemini-interactions.js";
|
|
14
16
|
import { handleEmbeddings } from "./embeddings.js";
|
|
15
17
|
import { handleImages } from "./images.js";
|
|
16
18
|
import { handleSpeech } from "./speech.js";
|
|
17
19
|
import { handleTranscription } from "./transcription.js";
|
|
18
20
|
import { VideoStateMap, handleVideoCreate, handleVideoStatus } from "./video.js";
|
|
21
|
+
import { handleElevenLabsAudio } from "./elevenlabs-audio.js";
|
|
22
|
+
import { falJobs, handleFalQueue } from "./fal-audio.js";
|
|
19
23
|
import { handleOllama, handleOllamaGenerate } from "./ollama.js";
|
|
20
24
|
import { handleCohere } from "./cohere.js";
|
|
21
25
|
import { handleSearch } from "./search.js";
|
|
@@ -25,9 +29,8 @@ import { upgradeToWebSocket } from "./ws-framing.js";
|
|
|
25
29
|
import { handleWebSocketResponses } from "./ws-responses.js";
|
|
26
30
|
import { handleWebSocketRealtime } from "./ws-realtime.js";
|
|
27
31
|
import { handleWebSocketGeminiLive } from "./ws-gemini-live.js";
|
|
28
|
-
import { Logger } from "./logger.js";
|
|
29
32
|
import { createMetricsRegistry, normalizePathLabel } from "./metrics.js";
|
|
30
|
-
import * as http from "node:http";
|
|
33
|
+
import * as http$1 from "node:http";
|
|
31
34
|
|
|
32
35
|
//#region src/server.ts
|
|
33
36
|
const COMPLETIONS_PATH = "/v1/chat/completions";
|
|
@@ -46,6 +49,11 @@ const TRANSCRIPTIONS_PATH = "/v1/audio/transcriptions";
|
|
|
46
49
|
const VIDEOS_PATH = "/v1/videos";
|
|
47
50
|
const VIDEOS_STATUS_RE = /^\/v1\/videos\/([^/]+)$/;
|
|
48
51
|
const GEMINI_PREDICT_RE = /^\/v1beta\/models\/([^:]+):predict$/;
|
|
52
|
+
const ELEVENLABS_SOUND_GENERATION_PATH = "/v1/sound-generation";
|
|
53
|
+
const ELEVENLABS_MUSIC_RE = /^\/v1\/music(?:\/(.+))?$/;
|
|
54
|
+
const FAL_QUEUE_SUBMIT_RE = /^\/fal\/queue\/submit\/(.+)$/;
|
|
55
|
+
const FAL_QUEUE_REQUESTS_RE = /^\/fal\/queue\/requests\/(.+)$/;
|
|
56
|
+
const FAL_RUN_RE = /^\/fal\/run\/(.+)$/;
|
|
49
57
|
const DEFAULT_CHUNK_SIZE = 20;
|
|
50
58
|
const COMPAT_SUFFIXES = [
|
|
51
59
|
"/chat/completions",
|
|
@@ -71,6 +79,7 @@ function normalizeCompatPath(pathname, logger) {
|
|
|
71
79
|
}
|
|
72
80
|
return pathname;
|
|
73
81
|
}
|
|
82
|
+
const GEMINI_INTERACTIONS_PATH = "/v1beta/interactions";
|
|
74
83
|
const GEMINI_PATH_RE = /^\/v1beta\/models\/([^:]+):(generateContent|streamGenerateContent)$/;
|
|
75
84
|
const AZURE_DEPLOYMENT_RE = /^\/openai\/deployments\/([^/]+)\/(chat\/completions|embeddings)$/;
|
|
76
85
|
const BEDROCK_INVOKE_RE = /^\/model\/([^/]+)\/invoke$/;
|
|
@@ -199,6 +208,7 @@ async function handleControlAPI(req, res, pathname, fixtures, journal, videoStat
|
|
|
199
208
|
fixtures.length = 0;
|
|
200
209
|
journal.clear();
|
|
201
210
|
videoStates.clear();
|
|
211
|
+
falJobs.clear();
|
|
202
212
|
if (defaults.registry) defaults.registry.setGauge("aimock_fixtures_loaded", {}, fixtures.length);
|
|
203
213
|
res.writeHead(200, { "Content-Type": "application/json" });
|
|
204
214
|
res.end(JSON.stringify({ reset: true }));
|
|
@@ -392,6 +402,23 @@ async function handleCompletions(req, res, fixtures, journal, defaults, modelFal
|
|
|
392
402
|
writeErrorResponse(res, status, JSON.stringify(response));
|
|
393
403
|
return;
|
|
394
404
|
}
|
|
405
|
+
if (isAudioResponse(response)) {
|
|
406
|
+
journal.add({
|
|
407
|
+
method: req.method ?? "POST",
|
|
408
|
+
path: req.url ?? COMPLETIONS_PATH,
|
|
409
|
+
headers: flattenHeaders(req.headers),
|
|
410
|
+
body,
|
|
411
|
+
response: {
|
|
412
|
+
status: 422,
|
|
413
|
+
fixture
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
writeErrorResponse(res, 422, JSON.stringify({ error: {
|
|
417
|
+
message: "Audio responses are not supported on the chat completions endpoint. Use Gemini generateContent or a dedicated audio endpoint.",
|
|
418
|
+
type: "invalid_request_error"
|
|
419
|
+
} }));
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
395
422
|
if (isContentWithToolCallsResponse(response)) {
|
|
396
423
|
if (response.webSearches?.length) defaults.logger.warn("webSearches in fixture response are not supported for Chat Completions API — ignoring");
|
|
397
424
|
const overrides = extractOverrides(response);
|
|
@@ -559,7 +586,7 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
559
586
|
if (registry && handler.setRegistry) handler.setRegistry(registry);
|
|
560
587
|
}
|
|
561
588
|
if (registry) registry.setGauge("aimock_fixtures_loaded", {}, fixtures.length);
|
|
562
|
-
const server = http.createServer((req, res) => {
|
|
589
|
+
const server = http$1.createServer((req, res) => {
|
|
563
590
|
handleHttpRequest(req, res).catch((err) => {
|
|
564
591
|
const msg = err instanceof Error ? err.message : "Internal error";
|
|
565
592
|
defaults.logger.warn(`Unhandled request error: ${msg}`);
|
|
@@ -857,6 +884,26 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
857
884
|
}
|
|
858
885
|
return;
|
|
859
886
|
}
|
|
887
|
+
if (pathname === GEMINI_INTERACTIONS_PATH && req.method === "POST") {
|
|
888
|
+
try {
|
|
889
|
+
await handleGeminiInteractions(req, res, await readBody(req), fixtures, journal, defaults, setCorsHeaders);
|
|
890
|
+
} catch (err) {
|
|
891
|
+
const msg = err instanceof Error ? err.message : "Internal error";
|
|
892
|
+
if (!res.headersSent) writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
893
|
+
message: msg,
|
|
894
|
+
type: "server_error"
|
|
895
|
+
} }));
|
|
896
|
+
else if (!res.writableEnded) {
|
|
897
|
+
try {
|
|
898
|
+
res.write(`data: ${JSON.stringify({ error: { message: msg } })}\n\n`);
|
|
899
|
+
} catch (writeErr) {
|
|
900
|
+
logger.debug("Failed to write error recovery response:", writeErr);
|
|
901
|
+
}
|
|
902
|
+
res.end();
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
return;
|
|
906
|
+
}
|
|
860
907
|
const geminiMatch = pathname.match(GEMINI_PATH_RE);
|
|
861
908
|
if (geminiMatch && req.method === "POST") {
|
|
862
909
|
const geminiModel = geminiMatch[1];
|
|
@@ -1044,6 +1091,128 @@ async function createServer(fixtures, options, mounts, serviceFixtures) {
|
|
|
1044
1091
|
}
|
|
1045
1092
|
return;
|
|
1046
1093
|
}
|
|
1094
|
+
if (pathname === ELEVENLABS_SOUND_GENERATION_PATH && req.method === "POST") {
|
|
1095
|
+
setCorsHeaders(res);
|
|
1096
|
+
try {
|
|
1097
|
+
const raw = await readBody(req);
|
|
1098
|
+
if (applyChaos(res, null, defaults.chaos, req.headers, journal, {
|
|
1099
|
+
method: req.method ?? "POST",
|
|
1100
|
+
path: pathname,
|
|
1101
|
+
headers: flattenHeaders(req.headers),
|
|
1102
|
+
body: {
|
|
1103
|
+
model: "",
|
|
1104
|
+
messages: []
|
|
1105
|
+
}
|
|
1106
|
+
}, defaults.registry, defaults.logger)) return;
|
|
1107
|
+
await handleElevenLabsAudio(req, res, raw, fixtures, defaults, journal, "sound-generation");
|
|
1108
|
+
} catch (err) {
|
|
1109
|
+
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1110
|
+
if (!res.headersSent) writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
1111
|
+
message: msg,
|
|
1112
|
+
type: "server_error"
|
|
1113
|
+
} }));
|
|
1114
|
+
else if (!res.writableEnded) res.destroy();
|
|
1115
|
+
}
|
|
1116
|
+
return;
|
|
1117
|
+
}
|
|
1118
|
+
const musicMatch = pathname.match(ELEVENLABS_MUSIC_RE);
|
|
1119
|
+
if (musicMatch && req.method === "POST") {
|
|
1120
|
+
setCorsHeaders(res);
|
|
1121
|
+
const musicSubType = musicMatch[1] ?? "music";
|
|
1122
|
+
try {
|
|
1123
|
+
const raw = await readBody(req);
|
|
1124
|
+
if (applyChaos(res, null, defaults.chaos, req.headers, journal, {
|
|
1125
|
+
method: req.method ?? "POST",
|
|
1126
|
+
path: pathname,
|
|
1127
|
+
headers: flattenHeaders(req.headers),
|
|
1128
|
+
body: {
|
|
1129
|
+
model: "",
|
|
1130
|
+
messages: []
|
|
1131
|
+
}
|
|
1132
|
+
}, defaults.registry, defaults.logger)) return;
|
|
1133
|
+
await handleElevenLabsAudio(req, res, raw, fixtures, defaults, journal, musicSubType);
|
|
1134
|
+
} catch (err) {
|
|
1135
|
+
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1136
|
+
if (!res.headersSent) writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
1137
|
+
message: msg,
|
|
1138
|
+
type: "server_error"
|
|
1139
|
+
} }));
|
|
1140
|
+
else if (!res.writableEnded) res.destroy();
|
|
1141
|
+
}
|
|
1142
|
+
return;
|
|
1143
|
+
}
|
|
1144
|
+
if (pathname.match(FAL_QUEUE_SUBMIT_RE) && req.method === "POST") {
|
|
1145
|
+
setCorsHeaders(res);
|
|
1146
|
+
try {
|
|
1147
|
+
const raw = await readBody(req);
|
|
1148
|
+
if (applyChaos(res, null, defaults.chaos, req.headers, journal, {
|
|
1149
|
+
method: req.method ?? "POST",
|
|
1150
|
+
path: pathname,
|
|
1151
|
+
headers: flattenHeaders(req.headers),
|
|
1152
|
+
body: {
|
|
1153
|
+
model: "",
|
|
1154
|
+
messages: []
|
|
1155
|
+
}
|
|
1156
|
+
}, defaults.registry, defaults.logger)) return;
|
|
1157
|
+
await handleFalQueue(req, res, raw, pathname, fixtures, defaults, journal);
|
|
1158
|
+
} catch (err) {
|
|
1159
|
+
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1160
|
+
if (!res.headersSent) writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
1161
|
+
message: msg,
|
|
1162
|
+
type: "server_error"
|
|
1163
|
+
} }));
|
|
1164
|
+
else if (!res.writableEnded) res.destroy();
|
|
1165
|
+
}
|
|
1166
|
+
return;
|
|
1167
|
+
}
|
|
1168
|
+
if (pathname.match(FAL_QUEUE_REQUESTS_RE) && (req.method === "GET" || req.method === "POST" || req.method === "PUT")) {
|
|
1169
|
+
setCorsHeaders(res);
|
|
1170
|
+
try {
|
|
1171
|
+
const raw = req.method === "POST" ? await readBody(req) : "{}";
|
|
1172
|
+
if (applyChaos(res, null, defaults.chaos, req.headers, journal, {
|
|
1173
|
+
method: req.method ?? "GET",
|
|
1174
|
+
path: pathname,
|
|
1175
|
+
headers: flattenHeaders(req.headers),
|
|
1176
|
+
body: {
|
|
1177
|
+
model: "",
|
|
1178
|
+
messages: []
|
|
1179
|
+
}
|
|
1180
|
+
}, defaults.registry, defaults.logger)) return;
|
|
1181
|
+
await handleFalQueue(req, res, raw, pathname, fixtures, defaults, journal);
|
|
1182
|
+
} catch (err) {
|
|
1183
|
+
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1184
|
+
if (!res.headersSent) writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
1185
|
+
message: msg,
|
|
1186
|
+
type: "server_error"
|
|
1187
|
+
} }));
|
|
1188
|
+
else if (!res.writableEnded) res.destroy();
|
|
1189
|
+
}
|
|
1190
|
+
return;
|
|
1191
|
+
}
|
|
1192
|
+
if (pathname.match(FAL_RUN_RE) && req.method === "POST") {
|
|
1193
|
+
setCorsHeaders(res);
|
|
1194
|
+
try {
|
|
1195
|
+
const raw = await readBody(req);
|
|
1196
|
+
if (applyChaos(res, null, defaults.chaos, req.headers, journal, {
|
|
1197
|
+
method: req.method ?? "POST",
|
|
1198
|
+
path: pathname,
|
|
1199
|
+
headers: flattenHeaders(req.headers),
|
|
1200
|
+
body: {
|
|
1201
|
+
model: "",
|
|
1202
|
+
messages: []
|
|
1203
|
+
}
|
|
1204
|
+
}, defaults.registry, defaults.logger)) return;
|
|
1205
|
+
await handleFalQueue(req, res, raw, pathname, fixtures, defaults, journal);
|
|
1206
|
+
} catch (err) {
|
|
1207
|
+
const msg = err instanceof Error ? err.message : "Internal error";
|
|
1208
|
+
if (!res.headersSent) writeErrorResponse(res, 500, JSON.stringify({ error: {
|
|
1209
|
+
message: msg,
|
|
1210
|
+
type: "server_error"
|
|
1211
|
+
} }));
|
|
1212
|
+
else if (!res.writableEnded) res.destroy();
|
|
1213
|
+
}
|
|
1214
|
+
return;
|
|
1215
|
+
}
|
|
1047
1216
|
if (pathname !== COMPLETIONS_PATH) {
|
|
1048
1217
|
handleNotFound(res, "Not found");
|
|
1049
1218
|
return;
|