@omnicross/core 0.1.10 → 0.2.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/README.md +7 -0
- package/dist/{BuiltinToolExecutor-CS2WpXhM.d.cts → BuiltinToolExecutor-BHgH-EaZ.d.cts} +25 -2
- package/dist/{BuiltinToolExecutor-BluWyeob.d.ts → BuiltinToolExecutor-Bi1LmiTP.d.ts} +25 -2
- package/dist/{CompletionService-kNA17cfI.d.cts → CompletionService-BniP7j88.d.cts} +2 -2
- package/dist/{CompletionService-C3BX0Ovy.d.ts → CompletionService-BqrKPwfA.d.ts} +2 -2
- package/dist/{ProviderProxy-QdwNV6l1.d.cts → ProviderProxy-Bz_nkOwq.d.cts} +1 -1
- package/dist/{ProviderProxy--ROec6VI.d.ts → ProviderProxy-Ckr6oTrE.d.ts} +1 -1
- package/dist/auth/GeminiCodeAssistProjectResolver.cjs +6 -6
- package/dist/auth/GeminiCodeAssistProjectResolver.js +4 -4
- package/dist/{chunk-NGYOO5TO.js → chunk-2C3TTBS7.js} +7 -7
- package/dist/{chunk-QUSEZNYS.cjs → chunk-32SRZFFP.cjs} +4 -1
- package/dist/chunk-4JOU54M5.js +200 -0
- package/dist/{chunk-2UTGX6FM.js → chunk-4VVCXVB7.js} +1 -1
- package/dist/{chunk-RJUONLUQ.cjs → chunk-4Z3ZLLC2.cjs} +14 -8
- package/dist/chunk-6DDYNS2B.cjs +384 -0
- package/dist/{chunk-GXEZ2R3E.js → chunk-6OKXH2TW.js} +18 -7
- package/dist/{chunk-YWL7YZWS.cjs → chunk-7LRTPNFL.cjs} +5 -0
- package/dist/{chunk-CCVRRJOX.js → chunk-7PIUVCKK.js} +9 -2
- package/dist/chunk-7RJI3NDI.cjs +236 -0
- package/dist/{chunk-IIRPUVPH.cjs → chunk-7ZHBN75N.cjs} +3 -1
- package/dist/chunk-D4WNI6BR.cjs +386 -0
- package/dist/chunk-DBBR6RHF.js +236 -0
- package/dist/chunk-E4QHVXV5.cjs +118 -0
- package/dist/{chunk-HKB656B4.js → chunk-EUZRH544.js} +55 -287
- package/dist/{chunk-WNKWAEUR.js → chunk-EYGBM2VC.js} +3 -1
- package/dist/{chunk-UWDW6PN3.cjs → chunk-FX325I5Q.cjs} +20 -9
- package/dist/chunk-G4CZIUIB.cjs +200 -0
- package/dist/chunk-HCOQQAZE.cjs +123 -0
- package/dist/chunk-HL2YSPL7.cjs +673 -0
- package/dist/{chunk-55FMGZ3L.js → chunk-HN74IGEO.js} +1 -1
- package/dist/{chunk-ZY6KU6P3.js → chunk-HOMUGKHR.js} +8 -5
- package/dist/{chunk-AOFWNWLT.cjs → chunk-IUL4VWNU.cjs} +22 -1
- package/dist/{chunk-5LNYGCIW.cjs → chunk-KIQ2HA2A.cjs} +5 -5
- package/dist/{chunk-MUHWHQVM.cjs → chunk-KQBLZMP6.cjs} +4 -3
- package/dist/chunk-LFEH7CEO.js +384 -0
- package/dist/chunk-LFPQ2OVH.js +386 -0
- package/dist/{chunk-FEBAQI5A.js → chunk-LKDAN4D7.js} +6363 -1350
- package/dist/chunk-LQYS2N47.js +3923 -0
- package/dist/{chunk-NZYN7C3P.cjs → chunk-MPXOKQJP.cjs} +53 -53
- package/dist/chunk-MZEGQSKQ.js +118 -0
- package/dist/chunk-N76KU6F5.js +123 -0
- package/dist/chunk-NLUOTJWB.js +673 -0
- package/dist/{chunk-CMVXX7ON.cjs → chunk-NOITAVHA.cjs} +114 -58
- package/dist/{chunk-Q27JY5RG.cjs → chunk-OIKREZVQ.cjs} +7 -4
- package/dist/{chunk-ZQQUD66M.cjs → chunk-POUTD5AM.cjs} +63 -295
- package/dist/{chunk-6D4W22P4.js → chunk-QIIAMBTM.js} +4 -1
- package/dist/{chunk-56QD3YW6.cjs → chunk-QWNUOR7F.cjs} +11 -4
- package/dist/{chunk-S3DYFEBE.js → chunk-R4VCO2CB.js} +10 -1
- package/dist/{chunk-4VZX5F4T.cjs → chunk-T6NWPIYZ.cjs} +5 -2
- package/dist/{chunk-EBLFCNPY.js → chunk-U47LQXPB.js} +5 -2
- package/dist/chunk-UPQIWJIE.cjs +3923 -0
- package/dist/{chunk-N7OOJI5V.js → chunk-V2UKUTJ3.js} +5 -0
- package/dist/{chunk-45FHEOKW.js → chunk-V53ZEFXC.js} +92 -36
- package/dist/{chunk-RJ5ZGNI3.js → chunk-VL5TUDTM.js} +8 -2
- package/dist/{chunk-TIT74RIL.cjs → chunk-VSYQ6XYN.cjs} +6837 -1824
- package/dist/{chunk-OC6DOOFX.cjs → chunk-VXRTQZF2.cjs} +5 -5
- package/dist/{chunk-RICPANBY.cjs → chunk-WX2E2G7H.cjs} +13 -4
- package/dist/{chunk-DE2SRBFZ.js → chunk-X335TJNS.js} +4 -3
- package/dist/{chunk-CDHS2QDC.js → chunk-Y4CRNHJO.js} +53 -53
- package/dist/{chunk-P7EM6BND.cjs → chunk-ZAPN7XA6.cjs} +10 -10
- package/dist/{chunk-N2EIM2XJ.js → chunk-ZLNHPUFA.js} +22 -1
- package/dist/completion/BuiltinToolExecutor.cjs +2 -2
- package/dist/completion/BuiltinToolExecutor.d.cts +3 -1
- package/dist/completion/BuiltinToolExecutor.d.ts +3 -1
- package/dist/completion/BuiltinToolExecutor.js +1 -1
- package/dist/completion/CompletionService.cjs +32 -28
- package/dist/completion/CompletionService.d.cts +7 -3
- package/dist/completion/CompletionService.d.ts +7 -3
- package/dist/completion/CompletionService.js +31 -27
- package/dist/completion.cjs +40 -36
- package/dist/completion.d.cts +7 -3
- package/dist/completion.d.ts +7 -3
- package/dist/completion.js +39 -35
- package/dist/egress-I46O_p5L.d.cts +126 -0
- package/dist/egress-I46O_p5L.d.ts +126 -0
- package/dist/frontends-Doz0RaWu.d.cts +97 -0
- package/dist/frontends-Doz0RaWu.d.ts +97 -0
- package/dist/image-generation.cjs +52 -0
- package/dist/image-generation.d.cts +96 -0
- package/dist/image-generation.d.ts +96 -0
- package/dist/image-generation.js +52 -0
- package/dist/index.cjs +142 -32
- package/dist/index.d.cts +16 -8
- package/dist/index.d.ts +16 -8
- package/dist/index.js +159 -49
- package/dist/openai-operation.cjs +18 -0
- package/dist/openai-operation.d.cts +22 -0
- package/dist/openai-operation.d.ts +22 -0
- package/dist/openai-operation.js +18 -0
- package/dist/outbound-api/auditCapture.cjs +3 -3
- package/dist/outbound-api/auditCapture.d.cts +13 -2
- package/dist/outbound-api/auditCapture.d.ts +13 -2
- package/dist/outbound-api/auditCapture.js +2 -2
- package/dist/outbound-api/auditRedact.cjs +2 -2
- package/dist/outbound-api/auditRedact.js +1 -1
- package/dist/outbound-api/routeResolver.cjs +2 -2
- package/dist/outbound-api/routeResolver.d.cts +11 -4
- package/dist/outbound-api/routeResolver.d.ts +11 -4
- package/dist/outbound-api/routeResolver.js +1 -1
- package/dist/outbound-api/subscriptionRegistryPort.d.cts +5 -1
- package/dist/outbound-api/subscriptionRegistryPort.d.ts +5 -1
- package/dist/outbound-api/types.d.cts +10 -3
- package/dist/outbound-api/types.d.ts +10 -3
- package/dist/outbound-api.cjs +65 -33
- package/dist/outbound-api.d.cts +205 -10
- package/dist/outbound-api.d.ts +205 -10
- package/dist/outbound-api.js +64 -32
- package/dist/pipeline/AccountAllowanceScheduling.d.cts +22 -15
- package/dist/pipeline/AccountAllowanceScheduling.d.ts +22 -15
- package/dist/pipeline/LlmConfigProviderAuth.cjs +3 -3
- package/dist/pipeline/LlmConfigProviderAuth.js +2 -2
- package/dist/pipeline/SubscriptionAccountHealth.cjs +2 -2
- package/dist/pipeline/SubscriptionAccountHealth.d.cts +7 -0
- package/dist/pipeline/SubscriptionAccountHealth.d.ts +7 -0
- package/dist/pipeline/SubscriptionAccountHealth.js +1 -1
- package/dist/pipeline/executeProviderCall.cjs +2 -2
- package/dist/pipeline/executeProviderCall.d.cts +11 -6
- package/dist/pipeline/executeProviderCall.d.ts +11 -6
- package/dist/pipeline/executeProviderCall.js +1 -1
- package/dist/pipeline/upstreamFetch.cjs +2 -2
- package/dist/pipeline/upstreamFetch.d.cts +5 -0
- package/dist/pipeline/upstreamFetch.d.ts +5 -0
- package/dist/pipeline/upstreamFetch.js +1 -1
- package/dist/ports.d.cts +10 -3
- package/dist/ports.d.ts +10 -3
- package/dist/provider-proxy/ProviderProxy.cjs +32 -28
- package/dist/provider-proxy/ProviderProxy.d.cts +6 -2
- package/dist/provider-proxy/ProviderProxy.d.ts +6 -2
- package/dist/provider-proxy/ProviderProxy.js +31 -27
- package/dist/provider-proxy/identity/codexCliHeaders.cjs +4 -2
- package/dist/provider-proxy/identity/codexCliHeaders.d.cts +26 -6
- package/dist/provider-proxy/identity/codexCliHeaders.d.ts +26 -6
- package/dist/provider-proxy/identity/codexCliHeaders.js +5 -3
- package/dist/provider-proxy/ingress/providerProxyShared.cjs +36 -28
- package/dist/provider-proxy/ingress/providerProxyShared.d.cts +41 -9
- package/dist/provider-proxy/ingress/providerProxyShared.d.ts +41 -9
- package/dist/provider-proxy/ingress/providerProxyShared.js +35 -27
- package/dist/provider-proxy/types.d.cts +17 -483
- package/dist/provider-proxy/types.d.ts +17 -483
- package/dist/provider-proxy.cjs +46 -28
- package/dist/provider-proxy.d.cts +34 -8
- package/dist/provider-proxy.d.ts +34 -8
- package/dist/provider-proxy.js +45 -27
- package/dist/proxy-UZTtjPZx.d.cts +18 -0
- package/dist/proxy-UZTtjPZx.d.ts +18 -0
- package/dist/{routeResolver-CVFE8KKe.d.cts → routeResolver-Da0yvkL1.d.cts} +4 -2
- package/dist/{routeResolver-C0mkkZaM.d.ts → routeResolver-STwMz_G4.d.ts} +4 -2
- package/dist/runtime-6QXNU526.cjs +8 -0
- package/dist/runtime-M5WXLD2R.js +8 -0
- package/dist/runtime-t8AZacFF.d.cts +233 -0
- package/dist/runtime-t8AZacFF.d.ts +233 -0
- package/dist/search/api.cjs +761 -0
- package/dist/search/api.d.cts +370 -0
- package/dist/search/api.d.ts +370 -0
- package/dist/search/api.js +761 -0
- package/dist/search/http.cjs +37 -0
- package/dist/search/http.d.cts +269 -0
- package/dist/search/http.d.ts +269 -0
- package/dist/search/http.js +37 -0
- package/dist/search.cjs +57 -0
- package/dist/search.d.cts +113 -0
- package/dist/search.d.ts +113 -0
- package/dist/search.js +57 -0
- package/dist/transformer/TransformerChainExecutor.cjs +2 -2
- package/dist/transformer/TransformerChainExecutor.d.cts +2 -2
- package/dist/transformer/TransformerChainExecutor.d.ts +2 -2
- package/dist/transformer/TransformerChainExecutor.js +1 -1
- package/dist/transformer/transformers/AnthropicOpenAIToAnthropicStream.cjs +16 -0
- package/dist/transformer/transformers/AnthropicOpenAIToAnthropicStream.d.cts +53 -0
- package/dist/transformer/transformers/AnthropicOpenAIToAnthropicStream.d.ts +53 -0
- package/dist/transformer/transformers/AnthropicOpenAIToAnthropicStream.js +16 -0
- package/dist/transformer/transformers/AnthropicTransformer.cjs +4 -3
- package/dist/transformer/transformers/AnthropicTransformer.js +3 -2
- package/dist/transformer/transformers/GeminiCodeAssistTransformer.cjs +4 -4
- package/dist/transformer/transformers/GeminiCodeAssistTransformer.js +3 -3
- package/dist/transformer/transformers/GeminiTransformer.cjs +4 -4
- package/dist/transformer/transformers/GeminiTransformer.js +3 -3
- package/dist/transformer/transformers/OpenAIResponseTransformer.cjs +3 -3
- package/dist/transformer/transformers/OpenAIResponseTransformer.js +2 -2
- package/dist/transformer/transformers/OpenAITransformer.cjs +3 -3
- package/dist/transformer/transformers/OpenAITransformer.js +2 -2
- package/dist/transformer/transformers.cjs +11 -10
- package/dist/transformer/transformers.js +12 -11
- package/dist/transformer/types.d.cts +39 -4
- package/dist/transformer/types.d.ts +39 -4
- package/dist/transformer.cjs +14 -13
- package/dist/transformer.js +13 -12
- package/dist/types-BSIJdsyl.d.cts +1130 -0
- package/dist/types-Be-yt_6T.d.cts +196 -0
- package/dist/types-By9Tg6-I.d.ts +1130 -0
- package/dist/types-CbCZqLGg.d.cts +127 -0
- package/dist/types-CbCZqLGg.d.ts +127 -0
- package/dist/{types-C2MwkLah.d.cts → types-D-oHYusb.d.cts} +250 -21
- package/dist/types-Dm4_36V4.d.ts +196 -0
- package/dist/{types-BB8pxk_3.d.ts → types-Dvlpjn0d.d.ts} +250 -21
- package/dist/usage.cjs +2 -2
- package/dist/usage.d.cts +6 -1
- package/dist/usage.d.ts +6 -1
- package/dist/usage.js +1 -1
- package/package.json +71 -64
- package/dist/chunk-FCR77GYM.cjs +0 -33
- package/dist/chunk-K5NM7VAH.js +0 -33
- /package/dist/{chunk-XXFYLL7R.js → chunk-ECZ3ZE2C.js} +0 -0
- /package/dist/{chunk-3SCOLIPT.cjs → chunk-MXI2PWIC.cjs} +0 -0
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
convertOpenAIStreamToAnthropic
|
|
3
|
+
} from "./chunk-LFEH7CEO.js";
|
|
1
4
|
import {
|
|
2
5
|
anthropicUsageToChatUsage
|
|
3
6
|
} from "./chunk-FU7EAR73.js";
|
|
@@ -9,8 +12,9 @@ import {
|
|
|
9
12
|
import {
|
|
10
13
|
extractReasoningIntent,
|
|
11
14
|
normalizeThinkLevel,
|
|
15
|
+
recordDroppedField,
|
|
12
16
|
resolveReasoningPlan
|
|
13
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-ZLNHPUFA.js";
|
|
14
18
|
|
|
15
19
|
// src/transformer/transformers/AnthropicToolHandling.ts
|
|
16
20
|
function isServerSideTool(tool) {
|
|
@@ -155,6 +159,14 @@ function buildAnthropicRequestBody(request, provider) {
|
|
|
155
159
|
if (request.temperature !== void 0) {
|
|
156
160
|
body.temperature = request.temperature;
|
|
157
161
|
}
|
|
162
|
+
if (request.stop !== void 0 && request.stop.length > 0) {
|
|
163
|
+
body.stop_sequences = request.stop;
|
|
164
|
+
}
|
|
165
|
+
if (request.top_p !== void 0) body.top_p = request.top_p;
|
|
166
|
+
if (request.top_k !== void 0) body.top_k = request.top_k;
|
|
167
|
+
if (request.metadata_user_id !== void 0) {
|
|
168
|
+
body.metadata = { user_id: request.metadata_user_id };
|
|
169
|
+
}
|
|
158
170
|
if (systemContent !== void 0) {
|
|
159
171
|
body.system = systemContent;
|
|
160
172
|
}
|
|
@@ -325,6 +337,7 @@ function convertOpenAIResponseToAnthropic(openaiResponse) {
|
|
|
325
337
|
function transformAnthropicRequestToUnified(request) {
|
|
326
338
|
const anthropicRequest = request;
|
|
327
339
|
const messages = [];
|
|
340
|
+
let redactedSeen = false;
|
|
328
341
|
if (anthropicRequest.system) {
|
|
329
342
|
if (typeof anthropicRequest.system === "string") {
|
|
330
343
|
messages.push({
|
|
@@ -419,15 +432,40 @@ function transformAnthropicRequestToUnified(request) {
|
|
|
419
432
|
}
|
|
420
433
|
}));
|
|
421
434
|
}
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
435
|
+
let thinkingText = "";
|
|
436
|
+
let firstSignature;
|
|
437
|
+
let sawRedacted = false;
|
|
438
|
+
for (const block of msg.content) {
|
|
439
|
+
if (block.type === "thinking") {
|
|
440
|
+
const t = block.thinking;
|
|
441
|
+
if (typeof t === "string" && t.length > 0) {
|
|
442
|
+
if (thinkingText.length > 0) thinkingText += "\n";
|
|
443
|
+
thinkingText += t;
|
|
444
|
+
}
|
|
445
|
+
const signature = block.signature;
|
|
446
|
+
if (signature) {
|
|
447
|
+
if (firstSignature === void 0) {
|
|
448
|
+
firstSignature = signature;
|
|
449
|
+
} else if (typeof t === "string" && t.length > 0) {
|
|
450
|
+
thinkingText += `
|
|
451
|
+
[signature: ${signature}]`;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
} else if (block.type === "redacted_thinking") {
|
|
455
|
+
sawRedacted = true;
|
|
456
|
+
if (thinkingText.length > 0) thinkingText += "\n";
|
|
457
|
+
thinkingText += "[redacted thinking omitted]";
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
if (thinkingText.length > 0) {
|
|
426
461
|
assistantMessage.thinking = {
|
|
427
|
-
content:
|
|
428
|
-
signature:
|
|
462
|
+
content: thinkingText,
|
|
463
|
+
signature: firstSignature
|
|
429
464
|
};
|
|
430
465
|
}
|
|
466
|
+
if (sawRedacted) {
|
|
467
|
+
redactedSeen = true;
|
|
468
|
+
}
|
|
431
469
|
messages.push(assistantMessage);
|
|
432
470
|
}
|
|
433
471
|
}
|
|
@@ -443,6 +481,16 @@ function transformAnthropicRequestToUnified(request) {
|
|
|
443
481
|
stream: anthropicRequest.stream,
|
|
444
482
|
tools: functionTools?.length ? functionTools : void 0
|
|
445
483
|
};
|
|
484
|
+
const raw = anthropicRequest;
|
|
485
|
+
if (Array.isArray(raw.stop_sequences)) {
|
|
486
|
+
result.stop = raw.stop_sequences.filter((s) => typeof s === "string");
|
|
487
|
+
}
|
|
488
|
+
if (typeof raw.top_p === "number") result.top_p = raw.top_p;
|
|
489
|
+
if (typeof raw.top_k === "number") result.top_k = raw.top_k;
|
|
490
|
+
if (typeof raw.metadata?.user_id === "string") result.metadata_user_id = raw.metadata.user_id;
|
|
491
|
+
if (redactedSeen) {
|
|
492
|
+
recordDroppedField(result, "redacted_thinking", "unified");
|
|
493
|
+
}
|
|
446
494
|
if (serverSideTools.length > 0) {
|
|
447
495
|
result._serverSideTools = serverSideTools;
|
|
448
496
|
}
|
|
@@ -644,286 +692,6 @@ ${formatted}` },
|
|
|
644
692
|
});
|
|
645
693
|
}
|
|
646
694
|
|
|
647
|
-
// src/transformer/transformers/AnthropicOpenAIToAnthropicStream.ts
|
|
648
|
-
function convertOpenAIStreamToAnthropic(openaiStream, _context, logger) {
|
|
649
|
-
const decoder = new TextDecoder();
|
|
650
|
-
const encoder = new TextEncoder();
|
|
651
|
-
let hasStarted = false;
|
|
652
|
-
let hasTextContentStarted = false;
|
|
653
|
-
let isThinkingStarted = false;
|
|
654
|
-
let contentIndex = 0;
|
|
655
|
-
let currentContentBlockIndex = -1;
|
|
656
|
-
const toolCallIndexToContentBlockIndex = /* @__PURE__ */ new Map();
|
|
657
|
-
return new ReadableStream({
|
|
658
|
-
start: async (controller) => {
|
|
659
|
-
const reader = openaiStream.getReader();
|
|
660
|
-
let buffer = "";
|
|
661
|
-
const messageId = `msg_${Date.now()}`;
|
|
662
|
-
let model = "unknown";
|
|
663
|
-
let isClosed = false;
|
|
664
|
-
let stopReasonDelta = null;
|
|
665
|
-
const safeEnqueue = (data) => {
|
|
666
|
-
if (!isClosed) {
|
|
667
|
-
try {
|
|
668
|
-
controller.enqueue(encoder.encode(data));
|
|
669
|
-
} catch (_e) {
|
|
670
|
-
isClosed = true;
|
|
671
|
-
}
|
|
672
|
-
}
|
|
673
|
-
};
|
|
674
|
-
const assignContentBlockIndex = () => {
|
|
675
|
-
return contentIndex++;
|
|
676
|
-
};
|
|
677
|
-
const safeClose = () => {
|
|
678
|
-
if (isClosed) return;
|
|
679
|
-
if (currentContentBlockIndex >= 0) {
|
|
680
|
-
safeEnqueue(`event: content_block_stop
|
|
681
|
-
data: ${JSON.stringify({
|
|
682
|
-
type: "content_block_stop",
|
|
683
|
-
index: currentContentBlockIndex
|
|
684
|
-
})}
|
|
685
|
-
|
|
686
|
-
`);
|
|
687
|
-
}
|
|
688
|
-
if (stopReasonDelta) {
|
|
689
|
-
safeEnqueue(`event: message_delta
|
|
690
|
-
data: ${JSON.stringify(stopReasonDelta)}
|
|
691
|
-
|
|
692
|
-
`);
|
|
693
|
-
} else {
|
|
694
|
-
safeEnqueue(`event: message_delta
|
|
695
|
-
data: ${JSON.stringify({
|
|
696
|
-
type: "message_delta",
|
|
697
|
-
delta: { stop_reason: "end_turn", stop_sequence: null },
|
|
698
|
-
usage: { input_tokens: 0, output_tokens: 0 }
|
|
699
|
-
})}
|
|
700
|
-
|
|
701
|
-
`);
|
|
702
|
-
}
|
|
703
|
-
safeEnqueue(`event: message_stop
|
|
704
|
-
data: ${JSON.stringify({ type: "message_stop" })}
|
|
705
|
-
|
|
706
|
-
`);
|
|
707
|
-
try {
|
|
708
|
-
controller.close();
|
|
709
|
-
} catch (_e) {
|
|
710
|
-
}
|
|
711
|
-
isClosed = true;
|
|
712
|
-
};
|
|
713
|
-
try {
|
|
714
|
-
while (true) {
|
|
715
|
-
const { done, value } = await reader.read();
|
|
716
|
-
if (done) break;
|
|
717
|
-
buffer += decoder.decode(value, { stream: true });
|
|
718
|
-
const lines = buffer.split("\n");
|
|
719
|
-
buffer = lines.pop() || "";
|
|
720
|
-
for (const line of lines) {
|
|
721
|
-
if (isClosed) break;
|
|
722
|
-
if (!line.startsWith("data:")) continue;
|
|
723
|
-
const data = line.slice(5).trim();
|
|
724
|
-
if (data === "[DONE]") continue;
|
|
725
|
-
try {
|
|
726
|
-
const chunk = JSON.parse(data);
|
|
727
|
-
if (chunk.error) {
|
|
728
|
-
safeEnqueue(`event: error
|
|
729
|
-
data: ${JSON.stringify({
|
|
730
|
-
type: "error",
|
|
731
|
-
message: { type: "api_error", message: JSON.stringify(chunk.error) }
|
|
732
|
-
})}
|
|
733
|
-
|
|
734
|
-
`);
|
|
735
|
-
continue;
|
|
736
|
-
}
|
|
737
|
-
model = chunk.model || model;
|
|
738
|
-
if (!hasStarted) {
|
|
739
|
-
hasStarted = true;
|
|
740
|
-
safeEnqueue(`event: message_start
|
|
741
|
-
data: ${JSON.stringify({
|
|
742
|
-
type: "message_start",
|
|
743
|
-
message: {
|
|
744
|
-
id: messageId,
|
|
745
|
-
type: "message",
|
|
746
|
-
role: "assistant",
|
|
747
|
-
content: [],
|
|
748
|
-
model,
|
|
749
|
-
stop_reason: null,
|
|
750
|
-
stop_sequence: null,
|
|
751
|
-
usage: { input_tokens: 0, output_tokens: 0 }
|
|
752
|
-
}
|
|
753
|
-
})}
|
|
754
|
-
|
|
755
|
-
`);
|
|
756
|
-
}
|
|
757
|
-
const choice = chunk.choices?.[0];
|
|
758
|
-
if (!choice) continue;
|
|
759
|
-
if (chunk.usage) {
|
|
760
|
-
stopReasonDelta = {
|
|
761
|
-
type: "message_delta",
|
|
762
|
-
delta: { stop_reason: "end_turn", stop_sequence: null },
|
|
763
|
-
usage: {
|
|
764
|
-
input_tokens: (chunk.usage.prompt_tokens || 0) - (chunk.usage.prompt_tokens_details?.cached_tokens || 0),
|
|
765
|
-
output_tokens: chunk.usage.completion_tokens || 0,
|
|
766
|
-
cache_read_input_tokens: chunk.usage.prompt_tokens_details?.cached_tokens || 0
|
|
767
|
-
}
|
|
768
|
-
};
|
|
769
|
-
}
|
|
770
|
-
if (choice.delta?.thinking) {
|
|
771
|
-
if (!isThinkingStarted) {
|
|
772
|
-
const thinkingBlockIndex = assignContentBlockIndex();
|
|
773
|
-
safeEnqueue(`event: content_block_start
|
|
774
|
-
data: ${JSON.stringify({
|
|
775
|
-
type: "content_block_start",
|
|
776
|
-
index: thinkingBlockIndex,
|
|
777
|
-
content_block: { type: "thinking", thinking: "" }
|
|
778
|
-
})}
|
|
779
|
-
|
|
780
|
-
`);
|
|
781
|
-
currentContentBlockIndex = thinkingBlockIndex;
|
|
782
|
-
isThinkingStarted = true;
|
|
783
|
-
}
|
|
784
|
-
if (choice.delta.thinking.signature) {
|
|
785
|
-
safeEnqueue(`event: content_block_delta
|
|
786
|
-
data: ${JSON.stringify({
|
|
787
|
-
type: "content_block_delta",
|
|
788
|
-
index: currentContentBlockIndex,
|
|
789
|
-
delta: { type: "signature_delta", signature: choice.delta.thinking.signature }
|
|
790
|
-
})}
|
|
791
|
-
|
|
792
|
-
`);
|
|
793
|
-
safeEnqueue(`event: content_block_stop
|
|
794
|
-
data: ${JSON.stringify({
|
|
795
|
-
type: "content_block_stop",
|
|
796
|
-
index: currentContentBlockIndex
|
|
797
|
-
})}
|
|
798
|
-
|
|
799
|
-
`);
|
|
800
|
-
currentContentBlockIndex = -1;
|
|
801
|
-
} else if (choice.delta.thinking.content) {
|
|
802
|
-
safeEnqueue(`event: content_block_delta
|
|
803
|
-
data: ${JSON.stringify({
|
|
804
|
-
type: "content_block_delta",
|
|
805
|
-
index: currentContentBlockIndex,
|
|
806
|
-
delta: { type: "thinking_delta", thinking: choice.delta.thinking.content }
|
|
807
|
-
})}
|
|
808
|
-
|
|
809
|
-
`);
|
|
810
|
-
}
|
|
811
|
-
}
|
|
812
|
-
if (choice.delta?.content) {
|
|
813
|
-
if (!hasTextContentStarted) {
|
|
814
|
-
if (currentContentBlockIndex >= 0 && isThinkingStarted) {
|
|
815
|
-
safeEnqueue(`event: content_block_stop
|
|
816
|
-
data: ${JSON.stringify({
|
|
817
|
-
type: "content_block_stop",
|
|
818
|
-
index: currentContentBlockIndex
|
|
819
|
-
})}
|
|
820
|
-
|
|
821
|
-
`);
|
|
822
|
-
}
|
|
823
|
-
hasTextContentStarted = true;
|
|
824
|
-
const textBlockIndex = assignContentBlockIndex();
|
|
825
|
-
safeEnqueue(`event: content_block_start
|
|
826
|
-
data: ${JSON.stringify({
|
|
827
|
-
type: "content_block_start",
|
|
828
|
-
index: textBlockIndex,
|
|
829
|
-
content_block: { type: "text", text: "" }
|
|
830
|
-
})}
|
|
831
|
-
|
|
832
|
-
`);
|
|
833
|
-
currentContentBlockIndex = textBlockIndex;
|
|
834
|
-
}
|
|
835
|
-
safeEnqueue(`event: content_block_delta
|
|
836
|
-
data: ${JSON.stringify({
|
|
837
|
-
type: "content_block_delta",
|
|
838
|
-
index: currentContentBlockIndex,
|
|
839
|
-
delta: { type: "text_delta", text: choice.delta.content }
|
|
840
|
-
})}
|
|
841
|
-
|
|
842
|
-
`);
|
|
843
|
-
}
|
|
844
|
-
if (choice.delta?.tool_calls) {
|
|
845
|
-
for (const toolCall of choice.delta.tool_calls) {
|
|
846
|
-
const toolCallIndex = toolCall.index ?? 0;
|
|
847
|
-
if (!toolCallIndexToContentBlockIndex.has(toolCallIndex)) {
|
|
848
|
-
if (currentContentBlockIndex >= 0) {
|
|
849
|
-
safeEnqueue(`event: content_block_stop
|
|
850
|
-
data: ${JSON.stringify({
|
|
851
|
-
type: "content_block_stop",
|
|
852
|
-
index: currentContentBlockIndex
|
|
853
|
-
})}
|
|
854
|
-
|
|
855
|
-
`);
|
|
856
|
-
hasTextContentStarted = false;
|
|
857
|
-
}
|
|
858
|
-
const newBlockIndex = assignContentBlockIndex();
|
|
859
|
-
toolCallIndexToContentBlockIndex.set(toolCallIndex, newBlockIndex);
|
|
860
|
-
safeEnqueue(`event: content_block_start
|
|
861
|
-
data: ${JSON.stringify({
|
|
862
|
-
type: "content_block_start",
|
|
863
|
-
index: newBlockIndex,
|
|
864
|
-
content_block: {
|
|
865
|
-
type: "tool_use",
|
|
866
|
-
id: toolCall.id || `call_${Date.now()}_${toolCallIndex}`,
|
|
867
|
-
name: toolCall.function?.name || `tool_${toolCallIndex}`,
|
|
868
|
-
input: {}
|
|
869
|
-
}
|
|
870
|
-
})}
|
|
871
|
-
|
|
872
|
-
`);
|
|
873
|
-
currentContentBlockIndex = newBlockIndex;
|
|
874
|
-
}
|
|
875
|
-
if (toolCall.function?.arguments) {
|
|
876
|
-
const blockIndex = toolCallIndexToContentBlockIndex.get(toolCallIndex);
|
|
877
|
-
if (blockIndex !== void 0) {
|
|
878
|
-
safeEnqueue(`event: content_block_delta
|
|
879
|
-
data: ${JSON.stringify({
|
|
880
|
-
type: "content_block_delta",
|
|
881
|
-
index: blockIndex,
|
|
882
|
-
delta: { type: "input_json_delta", partial_json: toolCall.function.arguments }
|
|
883
|
-
})}
|
|
884
|
-
|
|
885
|
-
`);
|
|
886
|
-
}
|
|
887
|
-
}
|
|
888
|
-
}
|
|
889
|
-
}
|
|
890
|
-
if (choice.finish_reason) {
|
|
891
|
-
const stopReasonMapping = {
|
|
892
|
-
stop: "end_turn",
|
|
893
|
-
length: "max_tokens",
|
|
894
|
-
tool_calls: "tool_use",
|
|
895
|
-
content_filter: "stop_sequence"
|
|
896
|
-
};
|
|
897
|
-
stopReasonDelta = {
|
|
898
|
-
type: "message_delta",
|
|
899
|
-
delta: {
|
|
900
|
-
stop_reason: stopReasonMapping[choice.finish_reason] || "end_turn",
|
|
901
|
-
stop_sequence: null
|
|
902
|
-
},
|
|
903
|
-
usage: {
|
|
904
|
-
input_tokens: (chunk.usage?.prompt_tokens || 0) - (chunk.usage?.prompt_tokens_details?.cached_tokens || 0),
|
|
905
|
-
output_tokens: chunk.usage?.completion_tokens || 0,
|
|
906
|
-
cache_read_input_tokens: chunk.usage?.prompt_tokens_details?.cached_tokens || 0
|
|
907
|
-
}
|
|
908
|
-
};
|
|
909
|
-
}
|
|
910
|
-
} catch (e) {
|
|
911
|
-
logger?.error("Error parsing stream chunk:", e);
|
|
912
|
-
}
|
|
913
|
-
}
|
|
914
|
-
}
|
|
915
|
-
} catch (e) {
|
|
916
|
-
if (!isClosed) {
|
|
917
|
-
controller.error(e);
|
|
918
|
-
}
|
|
919
|
-
} finally {
|
|
920
|
-
safeClose();
|
|
921
|
-
reader.releaseLock();
|
|
922
|
-
}
|
|
923
|
-
}
|
|
924
|
-
});
|
|
925
|
-
}
|
|
926
|
-
|
|
927
695
|
// src/transformer/transformers/AnthropicTransformer.ts
|
|
928
696
|
var AnthropicTransformer = class {
|
|
929
697
|
static TransformerName = "anthropic";
|
|
@@ -30,6 +30,7 @@ var TransformerChainExecutor = class {
|
|
|
30
30
|
providerName: provider.name
|
|
31
31
|
};
|
|
32
32
|
let requestBody = request;
|
|
33
|
+
let endpointRequest;
|
|
33
34
|
let config = {};
|
|
34
35
|
let bypass = false;
|
|
35
36
|
bypass = this.shouldBypassTransformers(
|
|
@@ -60,6 +61,7 @@ var TransformerChainExecutor = class {
|
|
|
60
61
|
this.logger.error(`transformRequestOut error: ${this.getErrorMessage(error)}`);
|
|
61
62
|
throw error;
|
|
62
63
|
}
|
|
64
|
+
endpointRequest = requestBody;
|
|
63
65
|
}
|
|
64
66
|
if (!bypass && chain.providerTransformers.length > 0) {
|
|
65
67
|
this.logger.debug(`Executing ${chain.providerTransformers.length} provider transformers`);
|
|
@@ -118,7 +120,7 @@ var TransformerChainExecutor = class {
|
|
|
118
120
|
true
|
|
119
121
|
);
|
|
120
122
|
}
|
|
121
|
-
return { requestBody, config, bypass };
|
|
123
|
+
return { requestBody, endpointRequest, config, bypass };
|
|
122
124
|
}
|
|
123
125
|
/**
|
|
124
126
|
* Execute the response transformation chain
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var _chunkFCR77GYMcjs = require('./chunk-FCR77GYM.cjs');
|
|
4
3
|
|
|
4
|
+
var _chunkAEOZIDEBcjs = require('./chunk-AEOZIDEB.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _chunkHCOQQAZEcjs = require('./chunk-HCOQQAZE.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
var _chunkXSVNC2UDcjs = require('./chunk-XSVNC2UD.cjs');
|
|
@@ -195,24 +195,35 @@ function resolveClientIp(req, trustForwardedFor) {
|
|
|
195
195
|
}
|
|
196
196
|
return _nullishCoalesce(_optionalChain([req, 'access', _8 => _8.socket, 'optionalAccess', _9 => _9.remoteAddress]), () => ( void 0));
|
|
197
197
|
}
|
|
198
|
-
function beginAuditCapture(req, res, now) {
|
|
198
|
+
function beginAuditCapture(req, res, now, options) {
|
|
199
199
|
const config = _chunkAEOZIDEBcjs.getAuditCaptureConfig.call(void 0, );
|
|
200
200
|
if (!config) return null;
|
|
201
|
+
const captureBodies = config.captureBodies;
|
|
201
202
|
let requestBody;
|
|
202
203
|
const responseChunks = [];
|
|
203
204
|
let responseBytes = 0;
|
|
204
205
|
let responseTruncated = false;
|
|
206
|
+
let bodiesSuppressed = _optionalChain([options, 'optionalAccess', _10 => _10.suppressBodies]) === true;
|
|
205
207
|
let finished = false;
|
|
206
208
|
const ctx = {
|
|
207
209
|
setRequestBody(raw) {
|
|
208
|
-
if (
|
|
209
|
-
requestBody = truncateToBytes(
|
|
210
|
+
if (captureBodies && !bodiesSuppressed) {
|
|
211
|
+
requestBody = truncateToBytes(_chunkHCOQQAZEcjs.redactAuditText.call(void 0, raw), config.maxBodyBytes);
|
|
210
212
|
}
|
|
213
|
+
},
|
|
214
|
+
suppressBodies() {
|
|
215
|
+
if (bodiesSuppressed) return;
|
|
216
|
+
bodiesSuppressed = true;
|
|
217
|
+
requestBody = void 0;
|
|
218
|
+
responseChunks.length = 0;
|
|
219
|
+
responseBytes = 0;
|
|
220
|
+
responseTruncated = false;
|
|
211
221
|
}
|
|
212
222
|
};
|
|
213
|
-
if (
|
|
223
|
+
if (captureBodies && !bodiesSuppressed) {
|
|
214
224
|
installResponseCapture(res, {
|
|
215
225
|
push(chunk) {
|
|
226
|
+
if (bodiesSuppressed) return;
|
|
216
227
|
if (config.maxBodyBytes < 0) {
|
|
217
228
|
responseChunks.push(chunk);
|
|
218
229
|
responseBytes += chunk.length;
|
|
@@ -261,9 +272,9 @@ function beginAuditCapture(req, res, now) {
|
|
|
261
272
|
if (!record.model && usage.model) record.model = usage.model;
|
|
262
273
|
if (!record.provider && usage.provider) record.provider = usage.provider;
|
|
263
274
|
}
|
|
264
|
-
if (ctx.error) record.error =
|
|
275
|
+
if (ctx.error) record.error = _chunkHCOQQAZEcjs.redactAuditText.call(void 0, ctx.error);
|
|
265
276
|
if (ctx.sessionKey) record.sessionKey = ctx.sessionKey;
|
|
266
|
-
if (
|
|
277
|
+
if (captureBodies && !bodiesSuppressed) {
|
|
267
278
|
if (requestBody != null && requestBody.length > 0) {
|
|
268
279
|
record.requestBody = requestBody;
|
|
269
280
|
}
|
|
@@ -271,7 +282,7 @@ function beginAuditCapture(req, res, now) {
|
|
|
271
282
|
const captured = Buffer.concat(responseChunks, responseBytes);
|
|
272
283
|
const decoded = decodeCapturedBody(captured, responseTruncated);
|
|
273
284
|
const body = config.compactStreamingBodies ? compactSseBody(decoded) : decoded;
|
|
274
|
-
record.responseBody = truncateToBytes(
|
|
285
|
+
record.responseBody = truncateToBytes(_chunkHCOQQAZEcjs.redactAuditText.call(void 0, body), config.maxBodyBytes);
|
|
275
286
|
}
|
|
276
287
|
if (record.requestBody !== void 0 || record.responseBody !== void 0) {
|
|
277
288
|
record.hasBody = true;
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _class; var _class2; var _class3;// src/openai-operation/openAIOperation.ts
|
|
2
|
+
var OPERATIONS = {
|
|
3
|
+
"chat.completions.create": {
|
|
4
|
+
id: "chat.completions.create",
|
|
5
|
+
policyFamily: "chat",
|
|
6
|
+
routeFamily: "chat",
|
|
7
|
+
owner: "builtin",
|
|
8
|
+
bodyKind: "json",
|
|
9
|
+
requestedModelSource: "request"
|
|
10
|
+
},
|
|
11
|
+
"responses.create": {
|
|
12
|
+
id: "responses.create",
|
|
13
|
+
policyFamily: "responses",
|
|
14
|
+
routeFamily: "responses",
|
|
15
|
+
owner: "builtin",
|
|
16
|
+
bodyKind: "json",
|
|
17
|
+
requestedModelSource: "request"
|
|
18
|
+
},
|
|
19
|
+
"responses.compact": {
|
|
20
|
+
id: "responses.compact",
|
|
21
|
+
policyFamily: "responses",
|
|
22
|
+
routeFamily: "responses",
|
|
23
|
+
owner: "extension",
|
|
24
|
+
bodyKind: "json",
|
|
25
|
+
requestedModelSource: "request"
|
|
26
|
+
},
|
|
27
|
+
"images.generate": {
|
|
28
|
+
id: "images.generate",
|
|
29
|
+
policyFamily: "images",
|
|
30
|
+
routeFamily: "images",
|
|
31
|
+
owner: "extension",
|
|
32
|
+
bodyKind: "json",
|
|
33
|
+
requestedModelSource: "configured"
|
|
34
|
+
},
|
|
35
|
+
"images.edit": {
|
|
36
|
+
id: "images.edit",
|
|
37
|
+
policyFamily: "images",
|
|
38
|
+
routeFamily: "images",
|
|
39
|
+
owner: "extension",
|
|
40
|
+
bodyKind: "multipart",
|
|
41
|
+
requestedModelSource: "configured"
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
var MATCH_ORDER = [
|
|
45
|
+
{ id: "responses.compact", suffix: ["responses", "compact"] },
|
|
46
|
+
{ id: "images.generate", suffix: ["images", "generations"] },
|
|
47
|
+
{ id: "images.edit", suffix: ["images", "edits"] },
|
|
48
|
+
{ id: "chat.completions.create", suffix: ["chat", "completions"] },
|
|
49
|
+
{ id: "responses.create", suffix: ["responses"] }
|
|
50
|
+
];
|
|
51
|
+
function getOpenAIOperation(id) {
|
|
52
|
+
return OPERATIONS[id];
|
|
53
|
+
}
|
|
54
|
+
function pathSegments(url) {
|
|
55
|
+
const queryIndex = url.indexOf("?");
|
|
56
|
+
const path = queryIndex >= 0 ? url.slice(0, queryIndex) : url;
|
|
57
|
+
return path.split("/").filter(Boolean);
|
|
58
|
+
}
|
|
59
|
+
function hasExactSuffix(segments, suffix) {
|
|
60
|
+
if (segments.length < suffix.length) return false;
|
|
61
|
+
const offset = segments.length - suffix.length;
|
|
62
|
+
return suffix.every((segment, index) => segments[offset + index] === segment);
|
|
63
|
+
}
|
|
64
|
+
function classifyOpenAIOperation(method, url) {
|
|
65
|
+
if (method !== "POST" || !url) return null;
|
|
66
|
+
const segments = pathSegments(url);
|
|
67
|
+
for (const candidate of MATCH_ORDER) {
|
|
68
|
+
if (hasExactSuffix(segments, candidate.suffix)) return OPERATIONS[candidate.id];
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// src/openai-operation/openAIOperationRegistry.ts
|
|
74
|
+
var OpenAIOperationRegistrationError = (_class = class extends Error {
|
|
75
|
+
constructor(code, message) {
|
|
76
|
+
super(message);_class.prototype.__init.call(this);;
|
|
77
|
+
this.code = code;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
__init() {this.name = "OpenAIOperationRegistrationError"}
|
|
81
|
+
}, _class);
|
|
82
|
+
var OpenAIOperationError = (_class2 = class extends Error {
|
|
83
|
+
__init2() {this.name = "OpenAIOperationError"}
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
constructor(init) {
|
|
89
|
+
super(init.message);_class2.prototype.__init2.call(this);;
|
|
90
|
+
this.status = init.status;
|
|
91
|
+
this.code = init.code;
|
|
92
|
+
this.retryable = _nullishCoalesce(init.retryable, () => ( false));
|
|
93
|
+
this.headers = _nullishCoalesce(init.headers, () => ( {}));
|
|
94
|
+
}
|
|
95
|
+
}, _class2);
|
|
96
|
+
var SAFE_LOCAL_ERROR_HEADERS = /* @__PURE__ */ new Set(["retry-after", "x-request-id"]);
|
|
97
|
+
function safeErrorHeaders(headers) {
|
|
98
|
+
const safe = {};
|
|
99
|
+
for (const [name, value] of Object.entries(headers)) {
|
|
100
|
+
if (SAFE_LOCAL_ERROR_HEADERS.has(name.toLowerCase())) safe[name] = value;
|
|
101
|
+
}
|
|
102
|
+
return safe;
|
|
103
|
+
}
|
|
104
|
+
function writeOpenAIOperationError(res, error) {
|
|
105
|
+
if (res.headersSent || res.writableEnded) return false;
|
|
106
|
+
res.writeHead(error.status, {
|
|
107
|
+
"Content-Type": "application/json",
|
|
108
|
+
...safeErrorHeaders(error.headers)
|
|
109
|
+
});
|
|
110
|
+
res.end(JSON.stringify({
|
|
111
|
+
error: {
|
|
112
|
+
type: "openai_operation_error",
|
|
113
|
+
code: error.code,
|
|
114
|
+
message: error.message,
|
|
115
|
+
retryable: error.retryable
|
|
116
|
+
}
|
|
117
|
+
}));
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
function unsupportedOpenAIOperation(operation) {
|
|
121
|
+
return new OpenAIOperationError({
|
|
122
|
+
status: 501,
|
|
123
|
+
code: "unsupported_capability",
|
|
124
|
+
message: `Operation '${operation.id}' is not available`
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
var OpenAIOperationRegistry = (_class3 = class {constructor() { _class3.prototype.__init3.call(this); }
|
|
128
|
+
__init3() {this.handlers = /* @__PURE__ */ new Map()}
|
|
129
|
+
register(operationId, handler) {
|
|
130
|
+
const operation = getOpenAIOperation(operationId);
|
|
131
|
+
if (operation.owner !== "extension") {
|
|
132
|
+
throw new OpenAIOperationRegistrationError(
|
|
133
|
+
"builtin_operation",
|
|
134
|
+
`Operation '${operationId}' is owned by a built-in ingress`
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
if (this.handlers.has(operationId)) {
|
|
138
|
+
throw new OpenAIOperationRegistrationError(
|
|
139
|
+
"duplicate_operation_handler",
|
|
140
|
+
`Operation '${operationId}' already has a handler`
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
this.handlers.set(operationId, handler);
|
|
144
|
+
let disposed = false;
|
|
145
|
+
return () => {
|
|
146
|
+
if (disposed) return;
|
|
147
|
+
disposed = true;
|
|
148
|
+
if (this.handlers.get(operationId) === handler) this.handlers.delete(operationId);
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
has(operationId) {
|
|
152
|
+
return this.handlers.has(operationId);
|
|
153
|
+
}
|
|
154
|
+
async dispatch(context) {
|
|
155
|
+
const handler = this.handlers.get(context.operation.id);
|
|
156
|
+
if (!handler) return false;
|
|
157
|
+
const controller = new AbortController();
|
|
158
|
+
const abort = () => {
|
|
159
|
+
if (!controller.signal.aborted) controller.abort();
|
|
160
|
+
};
|
|
161
|
+
const onRequestClose = () => {
|
|
162
|
+
if (context.request.aborted || !context.request.complete) abort();
|
|
163
|
+
};
|
|
164
|
+
const onResponseClose = () => {
|
|
165
|
+
if (!context.response.writableEnded) abort();
|
|
166
|
+
};
|
|
167
|
+
context.request.once("aborted", abort);
|
|
168
|
+
context.request.once("close", onRequestClose);
|
|
169
|
+
context.response.once("close", onResponseClose);
|
|
170
|
+
if (context.request.aborted || context.response.destroyed) abort();
|
|
171
|
+
try {
|
|
172
|
+
await handler({ ...context, signal: controller.signal });
|
|
173
|
+
return true;
|
|
174
|
+
} catch (error) {
|
|
175
|
+
const publicError = error instanceof OpenAIOperationError ? error : new OpenAIOperationError({
|
|
176
|
+
status: 500,
|
|
177
|
+
code: "operation_handler_failed",
|
|
178
|
+
message: `Operation '${context.operation.id}' handler failed`
|
|
179
|
+
});
|
|
180
|
+
if (!writeOpenAIOperationError(context.response, publicError)) {
|
|
181
|
+
throw new Error(publicError.message);
|
|
182
|
+
}
|
|
183
|
+
return true;
|
|
184
|
+
} finally {
|
|
185
|
+
context.request.removeListener("aborted", abort);
|
|
186
|
+
context.request.removeListener("close", onRequestClose);
|
|
187
|
+
context.response.removeListener("close", onResponseClose);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}, _class3);
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
exports.getOpenAIOperation = getOpenAIOperation; exports.classifyOpenAIOperation = classifyOpenAIOperation; exports.OpenAIOperationRegistrationError = OpenAIOperationRegistrationError; exports.OpenAIOperationError = OpenAIOperationError; exports.writeOpenAIOperationError = writeOpenAIOperationError; exports.unsupportedOpenAIOperation = unsupportedOpenAIOperation; exports.OpenAIOperationRegistry = OpenAIOperationRegistry;
|