@kitn.ai/ui 0.21.0 → 0.22.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/dist/components/chat-thread.d.ts +9 -0
- package/dist/{create-tween-D3Y5qiij.js → create-tween-COnPwAQN.js} +1 -1
- package/dist/{create-tween-DGKY1FDY.js → create-tween-DmTUaXWE.js} +1 -1
- package/dist/{create-tween-paho5Rh-.js → create-tween-qs-jjvNA.js} +1 -1
- package/dist/custom-elements.json +43 -7
- package/dist/elements/agent-card.js +1 -1
- package/dist/elements/artifact.js +1 -1
- package/dist/elements/attachments.js +1 -1
- package/dist/elements/audio-visualizer.js +1 -1
- package/dist/elements/avatar.js +1 -1
- package/dist/elements/badge.js +1 -1
- package/dist/elements/button.js +1 -1
- package/dist/elements/card.js +1 -1
- package/dist/elements/cards.js +1 -1
- package/dist/elements/chain-of-thought.js +1 -1
- package/dist/elements/chat-scope-picker.js +1 -1
- package/dist/elements/chat-workspace.js +1 -1
- package/dist/elements/chat.js +1 -1
- package/dist/elements/checkpoint.js +1 -1
- package/dist/elements/choice.js +1 -1
- package/dist/elements/chunks/{Icon-C-2LvGDG.js → Icon-CHG5z5L7.js} +1 -1
- package/dist/elements/chunks/{action-icons-CaYoImEk.js → action-icons-BAtCEEgg.js} +1 -1
- package/dist/elements/chunks/arrow-left-CFPTeL1Y.js +1 -0
- package/dist/elements/chunks/{artifact-BBIscOxJ.js → artifact-fBZOE4SO.js} +1 -1
- package/dist/elements/chunks/{attachments-BB56zoji.js → attachments-DpYMe5VQ.js} +1 -1
- package/dist/elements/chunks/{audio-visualizer-BxOx4THz.js → audio-visualizer-DFwzAcuL.js} +1 -1
- package/dist/elements/chunks/{badge-SxLSZ19R.js → badge-D6zodm6E.js} +1 -1
- package/dist/elements/chunks/{button-CmkUkz6c.js → button-C42vrGvO.js} +1 -1
- package/dist/elements/chunks/{card-renderer-Db4ffkWv.js → card-renderer-DMZsSuvU.js} +1 -1
- package/dist/elements/chunks/{chat-thread-B3Ks-cKr.js → chat-thread-CNNEhol-.js} +1 -1
- package/dist/elements/chunks/check-7Q3K-iXE.js +1 -0
- package/dist/elements/chunks/chevron-down-CpNYLn7E.js +1 -0
- package/dist/elements/chunks/chevron-right-DrH85Fha.js +1 -0
- package/dist/elements/chunks/{choice-card-Q9cYYDyM.js → choice-card-YoWjpsFV.js} +1 -1
- package/dist/elements/chunks/circle-C9KRjKYv.js +1 -0
- package/dist/elements/chunks/circle-check-Dmi7Y4zw.js +1 -0
- package/dist/elements/chunks/{circle-x-D0MEfxOM.js → circle-x-QIxXda6k.js} +1 -1
- package/dist/elements/chunks/{code-block-C8VzAraE.js → code-block-CqeugReY.js} +1 -1
- package/dist/elements/chunks/{collapsible-Cvj61obE.js → collapsible-sTv-_5lF.js} +1 -1
- package/dist/elements/chunks/{composer-D86ztyL0.js → composer-ldQyeVEB.js} +1 -1
- package/dist/elements/chunks/{confirm-card-BdyDAGLw.js → confirm-card-C0RNOwfn.js} +1 -1
- package/dist/elements/chunks/context-5qgypNHC.js +1 -0
- package/dist/elements/chunks/conversation-list-DLzOacXz.js +1 -0
- package/dist/elements/chunks/{create-tween-C_A_B638.js → create-tween-V4TXZ93X.js} +1 -1
- package/dist/elements/chunks/default-input-DeeRSDHc.js +1 -0
- package/dist/elements/chunks/{define-BzPnNsXg.js → define-lE-QvQFn.js} +1 -1
- package/dist/elements/chunks/{disclosure-DVKsoc1F.js → disclosure-DZSa9jog.js} +1 -1
- package/dist/elements/chunks/{download-BjA54IMJ.js → download-B2ZmnGqW.js} +1 -1
- package/dist/elements/chunks/{dropdown-BjVVHWXH.js → dropdown-R3B7cSRE.js} +1 -1
- package/dist/elements/chunks/{ellipsis-BNedmqfi.js → ellipsis-BmxceY4l.js} +1 -1
- package/dist/elements/chunks/{embed-DQsl4XEq.js → embed-BVrtTZPo.js} +1 -1
- package/dist/elements/chunks/{external-link-Di-dw2CU.js → external-link-BbdR7YO7.js} +1 -1
- package/dist/elements/chunks/{file-text-B3sAODCV.js → file-text-D7dijo1A.js} +1 -1
- package/dist/elements/chunks/{file-tree-Dgto-bMn.js → file-tree-0upJ5jeb.js} +1 -1
- package/dist/elements/chunks/{folder-D6rMadFV.js → folder-D8z58t7B.js} +1 -1
- package/dist/elements/chunks/{form-CILxvhQ7.js → form-p5BKJNw5.js} +1 -1
- package/dist/elements/chunks/{hover-card-BtiF4XiU.js → hover-card-CN9s2md5.js} +1 -1
- package/dist/elements/chunks/{icon-DKkmze3y.js → icon-CNiKP37E.js} +1 -1
- package/dist/elements/chunks/{info-CWRjZkuy.js → info-BSnuJiHI.js} +1 -1
- package/dist/elements/chunks/{input--QJBK6BA.js → input-BauDmzxX.js} +1 -1
- package/dist/elements/chunks/{kbd-C3zuKh8R.js → kbd-BlHJaP9b.js} +1 -1
- package/dist/elements/chunks/{link-BL5JA7Q0.js → link-DEi5iUWC.js} +1 -1
- package/dist/elements/chunks/{link-preview-CU37bbXh.js → link-preview-BaHyM6W4.js} +1 -1
- package/dist/elements/chunks/{loader-XmpyxyRH.js → loader-CmJG_Fkq.js} +1 -1
- package/dist/elements/chunks/{markdown-3Gv5UZ_o.js → markdown-D2jaMpCN.js} +1 -1
- package/dist/elements/chunks/{message-X5NZbq-W.js → message-C5UfXZ2Z.js} +1 -1
- package/dist/elements/chunks/{message-CnBA2OUt.js → message-CXWLmmLn.js} +1 -1
- package/dist/elements/chunks/message-square-hXylwsy0.js +1 -0
- package/dist/elements/chunks/{minimize-2-DwyrUTcM.js → minimize-2-C9ytZFMU.js} +1 -1
- package/dist/elements/chunks/model-switcher-CivGfD7-.js +1 -0
- package/dist/elements/chunks/{overlay-Cepd-KcS.js → overlay-DJL_sbOm.js} +1 -1
- package/dist/elements/chunks/{paperclip-CdwKjrlu.js → paperclip-CFaB8naM.js} +1 -1
- package/dist/elements/chunks/{progress-bar-DMVXBD3b.js → progress-bar-Br5SksfR.js} +1 -1
- package/dist/elements/chunks/{prompt-suggestion-Di_WZE_5.js → prompt-suggestion-CMIvtAhU.js} +1 -1
- package/dist/elements/chunks/{reasoning-D0jMch5u.js → reasoning-DpZcNzLq.js} +1 -1
- package/dist/elements/chunks/{resizable-1znbL1Gv.js → resizable-Q8i3T9a_.js} +1 -1
- package/dist/elements/chunks/{rotate-cw-DVhhgx8n.js → rotate-cw-B5IHCBFV.js} +1 -1
- package/dist/elements/chunks/{scroll-area-Bs4bFS1P.js → scroll-area-eLeydBje.js} +1 -1
- package/dist/elements/chunks/{scroll-button-Bet5NLc4.js → scroll-button-DWbz0yA1.js} +1 -1
- package/dist/elements/chunks/{separator-C5Gh8qGC.js → separator-Xic78AD_.js} +1 -1
- package/dist/elements/chunks/{settings-5vmEFg0K.js → settings-B8H51pAx.js} +1 -1
- package/dist/elements/chunks/{settings-group-BWLB38kz.js → settings-group-CsG9eYLe.js} +1 -1
- package/dist/elements/chunks/{share-BZ3G_DaB.js → share-CNTx0z__.js} +1 -1
- package/dist/elements/chunks/{skeleton-DafPJQTp.js → skeleton-CLlHTcMI.js} +1 -1
- package/dist/elements/chunks/{source-D_qj_6uJ.js → source-BoVcU5ok.js} +1 -1
- package/dist/elements/chunks/{star-Cuv7j2IE.js → star-CxQVTVhI.js} +1 -1
- package/dist/elements/chunks/{store-C1StPHfW.js → store-CLtS5CUG.js} +1 -1
- package/dist/elements/chunks/{tasks-card-EyoBZfpA.js → tasks-card-CzlkLmUt.js} +1 -1
- package/dist/elements/chunks/{text-shimmer-D9gRSh34.js → text-shimmer-D5NhpIQ1.js} +1 -1
- package/dist/elements/chunks/{textarea-DuhtHfcm.js → textarea-x5Uxsmtm.js} +1 -1
- package/dist/elements/chunks/{thumbs-up-B9hwv43w.js → thumbs-up-UobcJnx9.js} +1 -1
- package/dist/elements/chunks/{toast-store-Bm3DUEDe.js → toast-store-BOfs9eXq.js} +1 -1
- package/dist/elements/chunks/{tool-CDtW7L0z.js → tool-Be6Dh_dt.js} +1 -1
- package/dist/elements/chunks/{tooltip-eB226mGK.js → tooltip-RxMxyCLF.js} +1 -1
- package/dist/elements/chunks/{triangle-alert-C1SNzTqK.js → triangle-alert-C4yxH2XN.js} +1 -1
- package/dist/elements/chunks/{use-card-resolution-YZh2MvI5.js → use-card-resolution-jva9ehH6.js} +1 -1
- package/dist/elements/chunks/{variant-aurora-Cj1F7D0l.js → variant-aurora-Dx4VRcjS.js} +1 -1
- package/dist/elements/chunks/{variant-custom-T9gpt7QE.js → variant-custom-Y1ZTWgEa.js} +1 -1
- package/dist/elements/chunks/{variant-wave-CxU9z-TE.js → variant-wave-B9gml9Cg.js} +1 -1
- package/dist/elements/chunks/{video-CK4R7Rus.js → video-CrPHsytT.js} +1 -1
- package/dist/elements/chunks/x-_-OPHept.js +1 -0
- package/dist/elements/coachmark.js +1 -1
- package/dist/elements/code-block.js +1 -1
- package/dist/elements/command.js +1 -1
- package/dist/elements/compare.js +1 -1
- package/dist/elements/composer.js +1 -1
- package/dist/elements/confirm-card.js +1 -1
- package/dist/elements/context-meter.js +1 -1
- package/dist/elements/conversation-list.js +1 -1
- package/dist/elements/default-input.d.ts +27 -0
- package/dist/elements/dialog.js +1 -1
- package/dist/elements/editable-label.js +1 -1
- package/dist/elements/embed.js +1 -1
- package/dist/elements/empty.js +1 -1
- package/dist/elements/feedback-bar.js +1 -1
- package/dist/elements/file-tree.js +1 -1
- package/dist/elements/file-upload.js +1 -1
- package/dist/elements/form.js +1 -1
- package/dist/elements/hover-card.js +1 -1
- package/dist/elements/icon.js +1 -1
- package/dist/elements/image.js +1 -1
- package/dist/elements/input.js +1 -1
- package/dist/elements/kbd.js +1 -1
- package/dist/elements/link-preview.js +1 -1
- package/dist/elements/loader.js +1 -1
- package/dist/elements/markdown.js +1 -1
- package/dist/elements/menu.js +1 -1
- package/dist/elements/message-skills.js +1 -1
- package/dist/elements/message.js +1 -1
- package/dist/elements/model-switcher.js +1 -1
- package/dist/elements/nav.js +1 -1
- package/dist/elements/notice.js +1 -1
- package/dist/elements/pane-group.js +1 -1
- package/dist/elements/pane.js +1 -1
- package/dist/elements/popover.js +1 -1
- package/dist/elements/progress-bar.js +1 -1
- package/dist/elements/prompt-dock.js +1 -1
- package/dist/elements/prompt-input.js +1 -1
- package/dist/elements/prompt-suggestions.js +1 -1
- package/dist/elements/reasoning.js +1 -1
- package/dist/elements/remote.js +1 -1
- package/dist/elements/resizable.js +1 -1
- package/dist/elements/response-stream.js +2 -2
- package/dist/elements/screen.js +1 -1
- package/dist/elements/scroll-area.js +1 -1
- package/dist/elements/scroll-button.js +1 -1
- package/dist/elements/search.js +1 -1
- package/dist/elements/segmented.js +1 -1
- package/dist/elements/separator.js +1 -1
- package/dist/elements/setting-item.js +1 -1
- package/dist/elements/settings-group.js +1 -1
- package/dist/elements/skeleton.js +1 -1
- package/dist/elements/slot-text.d.ts +51 -0
- package/dist/elements/slots.d.ts +5 -0
- package/dist/elements/source.js +1 -1
- package/dist/elements/status.js +1 -1
- package/dist/elements/switch.js +1 -1
- package/dist/elements/tabs.js +1 -1
- package/dist/elements/tasks.js +1 -1
- package/dist/elements/text-shimmer.js +1 -1
- package/dist/elements/thinking-bar.js +1 -1
- package/dist/elements/thread.js +1 -1
- package/dist/elements/toast.js +1 -1
- package/dist/elements/tool.js +1 -1
- package/dist/elements/tooltip.js +1 -1
- package/dist/elements/voice-input.js +1 -1
- package/dist/elements/voice-output.js +1 -1
- package/dist/elements.d.ts +12 -6
- package/dist/index.js +1535 -1487
- package/dist/index.server.js +2330 -2296
- package/dist/kai.es.js +1 -1
- package/dist/llms/llms-full.txt +12 -3
- package/dist/mcp.es.js +809 -75
- package/dist/react/index.d.ts +13 -3
- package/dist/react.js +14 -14
- package/dist/register-impl-AxIlqjo7.js +145 -0
- package/dist/{solid-BCJUQqwS.js → solid-BGYSJyHG.js} +4901 -4691
- package/dist/{solid-BdENBcEq.js → solid-Dt2nEwfl.js} +4406 -4320
- package/dist/solid.js +1 -1
- package/dist/solid.server.js +1 -1
- package/dist/{variant-aurora-DOb_o4pC.js → variant-aurora-B44X69AG.js} +1 -1
- package/dist/{variant-aurora-BKHHiOgL.js → variant-aurora-BRhV8Flk.js} +2 -2
- package/dist/{variant-aurora-1wMcXRUS.js → variant-aurora-Ds5ou9BH.js} +2 -2
- package/dist/{variant-custom-DWSSgmd2.js → variant-custom-B20FhtYj.js} +2 -2
- package/dist/{variant-custom-CJGB0Kbw.js → variant-custom-BvA1Schl.js} +1 -1
- package/dist/{variant-custom-Co0CkXJF.js → variant-custom-D6Rtvneb.js} +2 -2
- package/dist/{variant-wave-CEODq-9q.js → variant-wave-BUQtkryq.js} +1 -1
- package/dist/{variant-wave-C3-45cL6.js → variant-wave-BVYnqy9L.js} +2 -2
- package/dist/{variant-wave-jdXBnCUZ.js → variant-wave-DXC6_LcH.js} +2 -2
- package/dist/wire/encode.d.ts +79 -6
- package/dist/wire/files.d.ts +116 -0
- package/dist/wire/index.d.ts +3 -1
- package/dist/wire/media-types.d.ts +106 -0
- package/dist/wire.js +596 -368
- package/frameworks/react/index.tsx +9 -5
- package/llms-full.txt +12 -3
- package/package.json +2 -1
- package/src/agent-tooling/archetypes.ts +43 -12
- package/src/agent-tooling/integrations/anthropic.ts +29 -5
- package/src/agent-tooling/integrations/cloudflare.ts +5 -0
- package/src/agent-tooling/integrations/langgraph.ts +13 -0
- package/src/agent-tooling/integrations/mastra.ts +46 -5
- package/src/agent-tooling/integrations/mock.ts +4 -0
- package/src/agent-tooling/integrations/ollama.ts +7 -0
- package/src/agent-tooling/integrations/openai.ts +2 -0
- package/src/agent-tooling/integrations/openrouter.ts +2 -0
- package/src/agent-tooling/integrations/pi.ts +26 -1
- package/src/agent-tooling/integrations/pydantic-ai.ts +37 -3
- package/src/agent-tooling/integrations/vercel-ai-sdk.ts +42 -6
- package/src/agent-tooling/mcp/tools/scaffold.ts +853 -32
- package/src/agent-tooling/registry.ts +57 -0
- package/src/agent-tooling/types.ts +132 -0
- package/src/components/chat-thread.tsx +10 -1
- package/src/components/context.tsx +18 -12
- package/src/components/conversation-item.tsx +6 -0
- package/src/components/model-switcher.tsx +38 -8
- package/src/components/toast.tsx +6 -1
- package/src/elements/button.tsx +26 -3
- package/src/elements/chat.tsx +28 -2
- package/src/elements/default-input.tsx +128 -5
- package/src/elements/element-meta.json +30 -4
- package/src/elements/element-types.d.ts +12 -6
- package/src/elements/menu.tsx +30 -3
- package/src/elements/slot-text.ts +73 -0
- package/src/elements/slots.ts +10 -0
- package/src/index.ts +9 -5
- package/src/wire/encode.ts +229 -14
- package/src/wire/files.ts +342 -0
- package/src/wire/index.ts +21 -0
- package/src/wire/media-types.ts +344 -0
- package/dist/elements/chunks/arrow-left-Bb46H7w9.js +0 -1
- package/dist/elements/chunks/check-C8desc_h.js +0 -1
- package/dist/elements/chunks/chevron-down-DKtc2HNB.js +0 -1
- package/dist/elements/chunks/chevron-right-Dw4GPhwL.js +0 -1
- package/dist/elements/chunks/circle-BeokBsvB.js +0 -1
- package/dist/elements/chunks/circle-check-wJSqt859.js +0 -1
- package/dist/elements/chunks/context-WHDl-xSx.js +0 -1
- package/dist/elements/chunks/conversation-list-CdR14_Y4.js +0 -1
- package/dist/elements/chunks/default-input-CSZqUM81.js +0 -1
- package/dist/elements/chunks/message-square-CnpAm_P0.js +0 -1
- package/dist/elements/chunks/model-switcher-CclaJEHt.js +0 -1
- package/dist/elements/chunks/x-D1qx0aLd.js +0 -1
- package/dist/register-impl-bzrZ44ft.js +0 -145
package/dist/wire.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
async function*
|
|
1
|
+
var z = Object.defineProperty;
|
|
2
|
+
var G = (t, e, n) => e in t ? z(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n;
|
|
3
|
+
var A = (t, e, n) => G(t, typeof e != "symbol" ? e + "" : e, n);
|
|
4
|
+
async function* X(t) {
|
|
5
5
|
const e = t.getReader();
|
|
6
6
|
let n = !1;
|
|
7
7
|
try {
|
|
@@ -18,19 +18,19 @@ async function* D(t) {
|
|
|
18
18
|
}), e.releaseLock();
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
function
|
|
22
|
-
return typeof t.getReader == "function" ?
|
|
21
|
+
function Q(t) {
|
|
22
|
+
return typeof t.getReader == "function" ? X(t) : t;
|
|
23
23
|
}
|
|
24
|
-
async function*
|
|
24
|
+
async function* V(t) {
|
|
25
25
|
const e = new TextDecoder();
|
|
26
26
|
let n = "", o = [];
|
|
27
27
|
const r = () => {
|
|
28
28
|
if (o.length === 0) return;
|
|
29
|
-
const
|
|
29
|
+
const a = o.join(`
|
|
30
30
|
`);
|
|
31
|
-
return o = [],
|
|
32
|
-
}, s = (
|
|
33
|
-
const c =
|
|
31
|
+
return o = [], a;
|
|
32
|
+
}, s = (a) => {
|
|
33
|
+
const c = a.endsWith("\r") ? a.slice(0, -1) : a;
|
|
34
34
|
if (c === "") return "boundary";
|
|
35
35
|
if (c.startsWith(":")) return "skip";
|
|
36
36
|
if (c.startsWith("data:")) {
|
|
@@ -39,27 +39,27 @@ async function* q(t) {
|
|
|
39
39
|
}
|
|
40
40
|
return "skip";
|
|
41
41
|
};
|
|
42
|
-
for await (const
|
|
43
|
-
n += typeof
|
|
42
|
+
for await (const a of Q(t)) {
|
|
43
|
+
n += typeof a == "string" ? a : e.decode(a, { stream: !0 });
|
|
44
44
|
let c = n.indexOf(`
|
|
45
45
|
`);
|
|
46
46
|
for (; c !== -1; ) {
|
|
47
47
|
const u = n.slice(0, c);
|
|
48
48
|
if (n = n.slice(c + 1), s(u) === "boundary") {
|
|
49
|
-
const
|
|
50
|
-
|
|
49
|
+
const d = r();
|
|
50
|
+
d !== void 0 && (yield d);
|
|
51
51
|
}
|
|
52
52
|
c = n.indexOf(`
|
|
53
53
|
`);
|
|
54
54
|
}
|
|
55
55
|
}
|
|
56
56
|
n += e.decode(), n && s(n);
|
|
57
|
-
const
|
|
58
|
-
|
|
57
|
+
const i = r();
|
|
58
|
+
i !== void 0 && (yield i);
|
|
59
59
|
}
|
|
60
|
-
async function*
|
|
60
|
+
async function* Z(t) {
|
|
61
61
|
let e = !1;
|
|
62
|
-
for await (const n of
|
|
62
|
+
for await (const n of V(t))
|
|
63
63
|
if (!e) {
|
|
64
64
|
if (n === "[DONE]") {
|
|
65
65
|
e = !0;
|
|
@@ -71,40 +71,40 @@ async function* L(t) {
|
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
|
-
function
|
|
74
|
+
function E(t) {
|
|
75
75
|
const e = t.toLowerCase();
|
|
76
76
|
return e ? e.includes("bash") || e.includes("command") || e.includes("shell") || e.includes("terminal") || e.includes("exec") ? "command" : e.includes("edit") || e.includes("write") || e.includes("patch") || e.includes("replace") || e.includes("delete") ? "file-change" : e.includes("search") || e.includes("grep") || e.includes("glob") || e.includes("find") ? "search" : e.includes("fetch") || e.includes("http") || e.includes("browse") || e.includes("crawl") ? "fetch" : e.includes("mcp") ? "mcp" : e.includes("image") || e.includes("screenshot") || e.includes("vision") ? "image" : "generic" : "generic";
|
|
77
77
|
}
|
|
78
|
-
function
|
|
78
|
+
function O(t) {
|
|
79
79
|
const e = /* @__PURE__ */ new WeakSet(), n = (o) => {
|
|
80
80
|
if (o === null || typeof o != "object") return o;
|
|
81
81
|
if (e.has(o)) return "[circular]";
|
|
82
82
|
e.add(o);
|
|
83
|
-
const r = o, s = Array.isArray(o) ? o.map(n) : Object.fromEntries(Object.keys(r).sort().map((
|
|
83
|
+
const r = o, s = Array.isArray(o) ? o.map(n) : Object.fromEntries(Object.keys(r).sort().map((i) => [i, n(r[i])]));
|
|
84
84
|
return e.delete(o), s;
|
|
85
85
|
};
|
|
86
86
|
return JSON.stringify(n(t)) ?? "";
|
|
87
87
|
}
|
|
88
|
-
function
|
|
88
|
+
function tt(t, e) {
|
|
89
89
|
const n = t[t.length - 1];
|
|
90
90
|
return (n == null ? void 0 : n.type) === "text" ? [...t.slice(0, -1), { ...n, text: n.text + e }] : [...t, { type: "text", text: e }];
|
|
91
91
|
}
|
|
92
|
-
function
|
|
92
|
+
function et(t, e, n = {}) {
|
|
93
93
|
const o = n.index ?? 0, r = n.streamId, s = t.findIndex(
|
|
94
94
|
(c) => c.type === "reasoning" && (c.index ?? 0) === o && c.streamId === r
|
|
95
95
|
);
|
|
96
96
|
if (s < 0)
|
|
97
97
|
return [...t, { type: "reasoning", text: e, index: o, streamId: r, label: n.label, signature: n.signature, raw: n.raw }];
|
|
98
|
-
const
|
|
99
|
-
...
|
|
100
|
-
text:
|
|
101
|
-
label: n.label ??
|
|
102
|
-
signature: n.signature ??
|
|
103
|
-
raw: n.raw ??
|
|
98
|
+
const i = t[s], a = {
|
|
99
|
+
...i,
|
|
100
|
+
text: i.text + e,
|
|
101
|
+
label: n.label ?? i.label,
|
|
102
|
+
signature: n.signature ?? i.signature,
|
|
103
|
+
raw: n.raw ?? i.raw
|
|
104
104
|
};
|
|
105
|
-
return
|
|
105
|
+
return rt(i, a) ? t : [...t.slice(0, s), a, ...t.slice(s + 1)];
|
|
106
106
|
}
|
|
107
|
-
const
|
|
107
|
+
const nt = [
|
|
108
108
|
"type",
|
|
109
109
|
"text",
|
|
110
110
|
"index",
|
|
@@ -112,7 +112,7 @@ const B = [
|
|
|
112
112
|
"label",
|
|
113
113
|
"signature",
|
|
114
114
|
"raw"
|
|
115
|
-
],
|
|
115
|
+
], ot = {
|
|
116
116
|
type: (t, e) => t.type === e.type,
|
|
117
117
|
text: (t, e) => t.text === e.text,
|
|
118
118
|
index: (t, e) => t.index === e.index,
|
|
@@ -121,27 +121,27 @@ const B = [
|
|
|
121
121
|
signature: (t, e) => t.signature === e.signature,
|
|
122
122
|
raw: (t, e) => t.raw === e.raw
|
|
123
123
|
};
|
|
124
|
-
function
|
|
125
|
-
return
|
|
124
|
+
function rt(t, e) {
|
|
125
|
+
return nt.every((n) => ot[n](t, e));
|
|
126
126
|
}
|
|
127
|
-
function
|
|
128
|
-
const o = t.findIndex((
|
|
127
|
+
function it(t, e, n) {
|
|
128
|
+
const o = t.findIndex((i) => i.type === "tool" && i.tool.toolCallId === e);
|
|
129
129
|
if (o < 0) {
|
|
130
|
-
const
|
|
130
|
+
const i = {
|
|
131
131
|
type: n.type ?? "unknown",
|
|
132
132
|
state: n.state ?? "input-streaming",
|
|
133
133
|
...n,
|
|
134
134
|
toolCallId: e
|
|
135
135
|
};
|
|
136
|
-
return
|
|
136
|
+
return i.kind = i.kind ?? E(i.type), [...t, { type: "tool", tool: i }];
|
|
137
137
|
}
|
|
138
138
|
const r = t[o].tool, s = { ...r, ...n, toolCallId: e };
|
|
139
|
-
return s.kind =
|
|
139
|
+
return s.kind = st(r, n, s.type), s.raw === void 0 && r.raw !== void 0 && (s.raw = r.raw), ct(r, s) ? t : [...t.slice(0, o), { type: "tool", tool: s }, ...t.slice(o + 1)];
|
|
140
140
|
}
|
|
141
|
-
function
|
|
142
|
-
return e.kind !== void 0 ? e.kind : t.kind === void 0 || t.kind ===
|
|
141
|
+
function st(t, e, n) {
|
|
142
|
+
return e.kind !== void 0 ? e.kind : t.kind === void 0 || t.kind === E(t.type) ? E(n) : t.kind;
|
|
143
143
|
}
|
|
144
|
-
const
|
|
144
|
+
const at = [
|
|
145
145
|
"type",
|
|
146
146
|
"state",
|
|
147
147
|
"kind",
|
|
@@ -151,7 +151,7 @@ const Q = [
|
|
|
151
151
|
"raw",
|
|
152
152
|
"input",
|
|
153
153
|
"output"
|
|
154
|
-
],
|
|
154
|
+
], ut = {
|
|
155
155
|
type: (t, e) => t.type === e.type,
|
|
156
156
|
state: (t, e) => t.state === e.state,
|
|
157
157
|
kind: (t, e) => t.kind === e.kind,
|
|
@@ -159,13 +159,13 @@ const Q = [
|
|
|
159
159
|
errorText: (t, e) => t.errorText === e.errorText,
|
|
160
160
|
rawInput: (t, e) => t.rawInput === e.rawInput,
|
|
161
161
|
raw: (t, e) => t.raw === e.raw,
|
|
162
|
-
input: (t, e) => t.input === e.input ||
|
|
163
|
-
output: (t, e) => t.output === e.output ||
|
|
162
|
+
input: (t, e) => t.input === e.input || O(t.input) === O(e.input),
|
|
163
|
+
output: (t, e) => t.output === e.output || O(t.output) === O(e.output)
|
|
164
164
|
};
|
|
165
|
-
function
|
|
166
|
-
return
|
|
165
|
+
function ct(t, e) {
|
|
166
|
+
return at.every((n) => ut[n](t, e));
|
|
167
167
|
}
|
|
168
|
-
const
|
|
168
|
+
const dt = {
|
|
169
169
|
// OpenAI chat completions
|
|
170
170
|
stop: "stop",
|
|
171
171
|
length: "length",
|
|
@@ -181,23 +181,23 @@ const Z = {
|
|
|
181
181
|
refusal: "content-filter",
|
|
182
182
|
pause_turn: "other"
|
|
183
183
|
};
|
|
184
|
-
function
|
|
184
|
+
function lt(t) {
|
|
185
185
|
if (t)
|
|
186
|
-
return
|
|
186
|
+
return dt[t] ?? "other";
|
|
187
187
|
}
|
|
188
|
-
const
|
|
188
|
+
const pt = (t) => ({
|
|
189
189
|
index: t.index,
|
|
190
190
|
id: t.id ?? `call_${t.index}`,
|
|
191
191
|
name: t.name,
|
|
192
192
|
argumentsText: t.argumentsText
|
|
193
|
-
}),
|
|
193
|
+
}), ft = (t) => ({
|
|
194
194
|
source: "custom.wire.tool_call",
|
|
195
195
|
payload: { id: t.id ?? `call_${t.index}`, name: t.name, arguments: t.argumentsText }
|
|
196
196
|
});
|
|
197
|
-
function
|
|
197
|
+
function gt(t, e) {
|
|
198
198
|
return t.length <= e ? t : `${t.slice(0, e)}...`;
|
|
199
199
|
}
|
|
200
|
-
function
|
|
200
|
+
function ht(t) {
|
|
201
201
|
const e = t.trim();
|
|
202
202
|
if (e !== "")
|
|
203
203
|
try {
|
|
@@ -207,22 +207,22 @@ function rt(t) {
|
|
|
207
207
|
return;
|
|
208
208
|
}
|
|
209
209
|
}
|
|
210
|
-
function
|
|
211
|
-
const n = /* @__PURE__ */ new Map(), o = (
|
|
212
|
-
const c =
|
|
213
|
-
if (
|
|
214
|
-
const
|
|
215
|
-
if (
|
|
216
|
-
|
|
210
|
+
function yt(t, e = {}) {
|
|
211
|
+
const n = /* @__PURE__ */ new Map(), o = (a) => {
|
|
212
|
+
const c = a.id, u = a.argumentsText, d = ht(u);
|
|
213
|
+
if (d) {
|
|
214
|
+
const l = O(d);
|
|
215
|
+
if (l !== a.lastInputFp) {
|
|
216
|
+
a.lastInputFp = l, t.upsertTool(c, { rawInput: u, input: d, state: "input-available" });
|
|
217
217
|
return;
|
|
218
218
|
}
|
|
219
219
|
}
|
|
220
220
|
t.upsertTool(c, { rawInput: u });
|
|
221
|
-
}, r = (
|
|
222
|
-
|
|
221
|
+
}, r = (a) => {
|
|
222
|
+
a.announced || (a.id ?? (a.id = `call_${a.index}`), a.announced = !0, t.upsertTool(a.id, { type: a.name || "unknown_tool", state: "input-streaming" }), a.argumentsText && o(a));
|
|
223
223
|
};
|
|
224
|
-
return { apply: (
|
|
225
|
-
const c = typeof
|
|
224
|
+
return { apply: (a) => {
|
|
225
|
+
const c = typeof a.index == "number" ? a.index : 0;
|
|
226
226
|
let u = n.get(c);
|
|
227
227
|
u || (u = {
|
|
228
228
|
index: c,
|
|
@@ -232,71 +232,71 @@ function it(t, e = {}) {
|
|
|
232
232
|
announced: !1,
|
|
233
233
|
lastInputFp: null,
|
|
234
234
|
providerExecuted: !1
|
|
235
|
-
}, n.set(c, u)),
|
|
236
|
-
}, settle: (
|
|
237
|
-
var
|
|
235
|
+
}, n.set(c, u)), a.id && !u.id && (u.id = a.id), a.name && (u.name += a.name), u.id && u.name && r(u), typeof a.arguments == "string" && a.arguments !== "" && (u.argumentsText += a.arguments, u.announced && o(u)), (a.output !== void 0 || a.outputError !== void 0) && (r(u), u.providerExecuted = !0, a.outputError !== void 0 ? (u.outputError = a.outputError, t.upsertTool(u.id, { state: "output-error", errorText: a.outputError })) : (u.output = a.output, t.upsertTool(u.id, { state: "output-available", output: a.output })));
|
|
236
|
+
}, settle: (a, c) => [...n.values()].sort((u, d) => u.index - d.index).map((u) => {
|
|
237
|
+
var m;
|
|
238
238
|
r(u);
|
|
239
|
-
const
|
|
239
|
+
const d = u.id, l = pt(u);
|
|
240
240
|
if (u.providerExecuted)
|
|
241
241
|
return {
|
|
242
|
-
...
|
|
242
|
+
...l,
|
|
243
243
|
providerExecuted: !0,
|
|
244
244
|
...u.output !== void 0 ? { output: u.output } : {},
|
|
245
245
|
...u.outputError !== void 0 ? { error: u.outputError } : {}
|
|
246
246
|
};
|
|
247
|
-
const
|
|
247
|
+
const p = ft(u), h = u.name || "unknown_tool";
|
|
248
248
|
if (c) {
|
|
249
|
-
const
|
|
250
|
-
return t.upsertTool(
|
|
249
|
+
const y = `Stream failed before the tool call completed: ${c}`;
|
|
250
|
+
return t.upsertTool(d, {
|
|
251
251
|
type: h,
|
|
252
252
|
state: "output-error",
|
|
253
|
-
errorText:
|
|
253
|
+
errorText: y,
|
|
254
254
|
rawInput: u.argumentsText,
|
|
255
|
-
raw:
|
|
256
|
-
}), { ...
|
|
255
|
+
raw: p
|
|
256
|
+
}), { ...l, error: y };
|
|
257
257
|
}
|
|
258
258
|
if (!u.name) {
|
|
259
|
-
const
|
|
260
|
-
return t.upsertTool(
|
|
259
|
+
const y = "Tool call arrived with no function name; cannot dispatch it.";
|
|
260
|
+
return t.upsertTool(d, { state: "output-error", errorText: y, raw: p }), { ...l, error: y };
|
|
261
261
|
}
|
|
262
|
-
const
|
|
262
|
+
const k = u.argumentsText.trim();
|
|
263
263
|
try {
|
|
264
|
-
const
|
|
265
|
-
if (
|
|
264
|
+
const y = k === "" ? {} : JSON.parse(k);
|
|
265
|
+
if (y === null || typeof y != "object" || Array.isArray(y))
|
|
266
266
|
throw new Error("arguments must be a JSON object");
|
|
267
|
-
const
|
|
268
|
-
t.upsertTool(
|
|
267
|
+
const T = y;
|
|
268
|
+
t.upsertTool(d, {
|
|
269
269
|
type: h,
|
|
270
270
|
state: "input-available",
|
|
271
|
-
input:
|
|
271
|
+
input: T,
|
|
272
272
|
rawInput: u.argumentsText,
|
|
273
|
-
raw:
|
|
273
|
+
raw: p
|
|
274
274
|
});
|
|
275
|
-
const v = { ...
|
|
276
|
-
return (
|
|
277
|
-
} catch (
|
|
278
|
-
const v = `Malformed tool arguments${
|
|
279
|
-
return t.upsertTool(
|
|
275
|
+
const v = { ...l, input: T };
|
|
276
|
+
return (m = e.onToolCallReady) == null || m.call(e, v), v;
|
|
277
|
+
} catch (y) {
|
|
278
|
+
const v = `Malformed tool arguments${a === "length" ? " (the stream hit the token limit mid-call)" : ""}: ${y.message}. Received ${k.length} chars: ${gt(k, 160)}`;
|
|
279
|
+
return t.upsertTool(d, {
|
|
280
280
|
type: h,
|
|
281
281
|
state: "output-error",
|
|
282
282
|
errorText: v,
|
|
283
283
|
rawInput: u.argumentsText,
|
|
284
|
-
raw:
|
|
285
|
-
}), { ...
|
|
284
|
+
raw: p
|
|
285
|
+
}), { ...l, error: v };
|
|
286
286
|
}
|
|
287
287
|
}) };
|
|
288
288
|
}
|
|
289
|
-
function
|
|
289
|
+
function mt() {
|
|
290
290
|
let t = [];
|
|
291
291
|
return {
|
|
292
292
|
appendText(e) {
|
|
293
|
-
t =
|
|
293
|
+
t = tt(t, e);
|
|
294
294
|
},
|
|
295
295
|
appendReasoning(e, n) {
|
|
296
|
-
t =
|
|
296
|
+
t = et(t, e, { ...n, streamId: void 0 });
|
|
297
297
|
},
|
|
298
298
|
upsertTool(e, n) {
|
|
299
|
-
t =
|
|
299
|
+
t = it(t, e, n);
|
|
300
300
|
},
|
|
301
301
|
addSource(e) {
|
|
302
302
|
t = [...t, { type: "source", source: e }];
|
|
@@ -304,7 +304,7 @@ function st() {
|
|
|
304
304
|
parts: () => t
|
|
305
305
|
};
|
|
306
306
|
}
|
|
307
|
-
function
|
|
307
|
+
function xt(t, e) {
|
|
308
308
|
return {
|
|
309
309
|
appendText(n) {
|
|
310
310
|
t.appendText(n), e.appendText(n);
|
|
@@ -321,195 +321,195 @@ function at(t, e) {
|
|
|
321
321
|
}
|
|
322
322
|
};
|
|
323
323
|
}
|
|
324
|
-
let
|
|
325
|
-
const
|
|
326
|
-
async function
|
|
324
|
+
let bt = 0;
|
|
325
|
+
const kt = () => `wire-${++bt}`;
|
|
326
|
+
async function wt(t, e, n = {}) {
|
|
327
327
|
var v;
|
|
328
|
-
const o = n.reasoningLabel ?? "Thinking", r =
|
|
329
|
-
let c = "", u = "",
|
|
330
|
-
const
|
|
331
|
-
for await (const
|
|
332
|
-
if (
|
|
333
|
-
h =
|
|
328
|
+
const o = n.reasoningLabel ?? "Thinking", r = kt(), s = mt(), i = xt(e, s), a = yt(i, n);
|
|
329
|
+
let c = "", u = "", d = 0, l = 0, p = null, h, k;
|
|
330
|
+
const m = [];
|
|
331
|
+
for await (const f of t) {
|
|
332
|
+
if (l++, f.usage && (k = { ...k, ...f.usage }), f.error) {
|
|
333
|
+
h = f.error, f.finishReason && (p = f.finishReason);
|
|
334
334
|
break;
|
|
335
335
|
}
|
|
336
|
-
if (
|
|
337
|
-
const
|
|
338
|
-
u +=
|
|
339
|
-
index:
|
|
336
|
+
if (f.text && (c += f.text, i.appendText(f.text)), f.reasoning !== void 0 || f.reasoningRaw !== void 0 || f.reasoningSignature !== void 0) {
|
|
337
|
+
const _ = f.reasoning ?? "";
|
|
338
|
+
u += _, _ !== "" && d++, i.appendReasoning(_, {
|
|
339
|
+
index: f.reasoningIndex ?? 0,
|
|
340
340
|
// Namespaces the index to THIS stream, so a later round reading into the
|
|
341
341
|
// same sink opens its own part instead of overwriting this one's `raw`.
|
|
342
342
|
streamId: r,
|
|
343
343
|
label: o,
|
|
344
|
-
...
|
|
345
|
-
...
|
|
344
|
+
...f.reasoningRaw ? { raw: f.reasoningRaw } : {},
|
|
345
|
+
...f.reasoningSignature ? { signature: f.reasoningSignature } : {}
|
|
346
346
|
});
|
|
347
347
|
}
|
|
348
|
-
if (
|
|
349
|
-
if (
|
|
350
|
-
for (const
|
|
351
|
-
|
|
352
|
-
|
|
348
|
+
if (f.toolCalls) for (const _ of f.toolCalls) a.apply(_);
|
|
349
|
+
if (f.sources)
|
|
350
|
+
for (const _ of f.sources)
|
|
351
|
+
m.push(_), (v = i.addSource) == null || v.call(i, _);
|
|
352
|
+
f.finishReason && (p = f.finishReason);
|
|
353
353
|
}
|
|
354
|
-
|
|
354
|
+
l === 0 && !h && (h = {
|
|
355
355
|
code: "empty-stream",
|
|
356
356
|
message: "The model stream produced no chunks. The response was 200 but nothing in its body parsed as a stream frame — check the endpoint really sent Content-Type: text/event-stream and that the request set stream: true. A route that forwards a provider error without its status lands here: the body is a JSON error, not SSE."
|
|
357
357
|
});
|
|
358
|
-
const
|
|
358
|
+
const y = lt(p) ?? (h ? "error" : void 0), T = a.settle(y, h == null ? void 0 : h.message);
|
|
359
359
|
return {
|
|
360
360
|
parts: s.parts(),
|
|
361
361
|
text: c,
|
|
362
362
|
reasoning: u,
|
|
363
|
-
toolCalls:
|
|
364
|
-
sources:
|
|
365
|
-
finishReason:
|
|
366
|
-
reasoningChunks:
|
|
367
|
-
chunks:
|
|
368
|
-
...
|
|
363
|
+
toolCalls: T,
|
|
364
|
+
sources: m,
|
|
365
|
+
finishReason: p,
|
|
366
|
+
reasoningChunks: d,
|
|
367
|
+
chunks: l,
|
|
368
|
+
...y ? { stopReason: y } : {},
|
|
369
369
|
...h ? { error: h } : {},
|
|
370
|
-
...
|
|
370
|
+
...k ? { usage: k } : {}
|
|
371
371
|
};
|
|
372
372
|
}
|
|
373
|
-
function
|
|
373
|
+
function x(t) {
|
|
374
374
|
return typeof t == "object" && t !== null && !Array.isArray(t);
|
|
375
375
|
}
|
|
376
|
-
function
|
|
376
|
+
function b(t) {
|
|
377
377
|
return typeof t == "string" ? t : void 0;
|
|
378
378
|
}
|
|
379
|
-
function
|
|
379
|
+
function I(t) {
|
|
380
380
|
return typeof t == "number" ? t : void 0;
|
|
381
381
|
}
|
|
382
|
-
function
|
|
383
|
-
if (!
|
|
384
|
-
const e = {}, n =
|
|
382
|
+
function Tt(t) {
|
|
383
|
+
if (!x(t)) return;
|
|
384
|
+
const e = {}, n = I(t.prompt_tokens);
|
|
385
385
|
n !== void 0 && (e.inputTokens = n);
|
|
386
|
-
const o =
|
|
386
|
+
const o = I(t.completion_tokens);
|
|
387
387
|
o !== void 0 && (e.outputTokens = o);
|
|
388
|
-
const r =
|
|
388
|
+
const r = I(t.total_tokens);
|
|
389
389
|
r !== void 0 && (e.totalTokens = r);
|
|
390
390
|
const s = t.completion_tokens_details;
|
|
391
|
-
if (
|
|
392
|
-
const c =
|
|
391
|
+
if (x(s)) {
|
|
392
|
+
const c = I(s.reasoning_tokens);
|
|
393
393
|
c !== void 0 && (e.reasoningTokens = c);
|
|
394
394
|
}
|
|
395
|
-
const
|
|
396
|
-
if (
|
|
397
|
-
const c =
|
|
395
|
+
const i = t.prompt_tokens_details;
|
|
396
|
+
if (x(i)) {
|
|
397
|
+
const c = I(i.cached_tokens);
|
|
398
398
|
c !== void 0 && (e.cachedInputTokens = c);
|
|
399
399
|
}
|
|
400
|
-
const
|
|
401
|
-
return
|
|
400
|
+
const a = I(t.cost);
|
|
401
|
+
return a !== void 0 && (e.costUsd = a), Object.keys(e).length > 0 ? e : void 0;
|
|
402
402
|
}
|
|
403
|
-
function
|
|
404
|
-
if (!
|
|
405
|
-
const n =
|
|
403
|
+
function vt(t, e) {
|
|
404
|
+
if (!x(t)) return;
|
|
405
|
+
const n = x(t.function) ? t.function : void 0, o = { index: I(t.index) ?? e }, r = b(t.id);
|
|
406
406
|
r && (o.id = r);
|
|
407
|
-
const s =
|
|
407
|
+
const s = b(n == null ? void 0 : n.name);
|
|
408
408
|
s && (o.name = s);
|
|
409
|
-
const
|
|
410
|
-
return
|
|
409
|
+
const i = b(n == null ? void 0 : n.arguments);
|
|
410
|
+
return i !== void 0 && (o.arguments = i), o;
|
|
411
411
|
}
|
|
412
|
-
function
|
|
412
|
+
function _t(t) {
|
|
413
413
|
let e = "";
|
|
414
414
|
for (const n of t) {
|
|
415
|
-
if (!
|
|
416
|
-
const o =
|
|
415
|
+
if (!x(n)) continue;
|
|
416
|
+
const o = b(n.text) ?? b(n.summary);
|
|
417
417
|
o && (e += o);
|
|
418
418
|
}
|
|
419
419
|
return e;
|
|
420
420
|
}
|
|
421
|
-
function
|
|
421
|
+
function j(t, e) {
|
|
422
422
|
for (const n of t)
|
|
423
|
-
if (
|
|
423
|
+
if (x(n) && n[e] !== void 0) return n[e];
|
|
424
424
|
}
|
|
425
|
-
function
|
|
426
|
-
const n = Array.isArray(t.reasoning_details) ? t.reasoning_details : void 0, o =
|
|
427
|
-
if (
|
|
425
|
+
function It(t, e) {
|
|
426
|
+
const n = Array.isArray(t.reasoning_details) ? t.reasoning_details : void 0, o = b(t.reasoning), r = o !== void 0 && o !== "" ? o : void 0, s = n ? _t(n) : void 0, i = n !== void 0 && n.length > 0, a = r ?? s;
|
|
427
|
+
if (a === void 0 && !i || (e.reasoning = a ?? "", !i)) return;
|
|
428
428
|
e.reasoningRaw = { source: "openai.reasoning_details", payload: n };
|
|
429
|
-
const c =
|
|
429
|
+
const c = I(j(n, "index"));
|
|
430
430
|
c !== void 0 && (e.reasoningIndex = c);
|
|
431
|
-
const u =
|
|
431
|
+
const u = b(j(n, "signature"));
|
|
432
432
|
u !== void 0 && (e.reasoningSignature = u);
|
|
433
433
|
}
|
|
434
|
-
function
|
|
434
|
+
function At(t) {
|
|
435
435
|
if (!Array.isArray(t.annotations)) return [];
|
|
436
436
|
const e = [];
|
|
437
437
|
for (const n of t.annotations) {
|
|
438
|
-
if (!
|
|
439
|
-
const o =
|
|
438
|
+
if (!x(n)) continue;
|
|
439
|
+
const o = x(n.url_citation) ? n.url_citation : void 0, r = b(o == null ? void 0 : o.url);
|
|
440
440
|
if (!r) continue;
|
|
441
|
-
const s = { url: r },
|
|
442
|
-
|
|
443
|
-
const
|
|
444
|
-
|
|
441
|
+
const s = { url: r }, i = b(o == null ? void 0 : o.title);
|
|
442
|
+
i && (s.title = i);
|
|
443
|
+
const a = b(o == null ? void 0 : o.content);
|
|
444
|
+
a && (s.snippet = a), e.push(s);
|
|
445
445
|
}
|
|
446
446
|
return e;
|
|
447
447
|
}
|
|
448
|
-
function
|
|
449
|
-
if (!
|
|
448
|
+
function Rt(t) {
|
|
449
|
+
if (!x(t)) return [];
|
|
450
450
|
const e = {}, n = t.error;
|
|
451
|
-
if (
|
|
452
|
-
const
|
|
453
|
-
if (
|
|
454
|
-
e.error = { message:
|
|
455
|
-
const
|
|
456
|
-
(typeof
|
|
451
|
+
if (x(n)) {
|
|
452
|
+
const i = b(n.message);
|
|
453
|
+
if (i) {
|
|
454
|
+
e.error = { message: i };
|
|
455
|
+
const a = n.code;
|
|
456
|
+
(typeof a == "string" || typeof a == "number") && (e.error.code = a);
|
|
457
457
|
}
|
|
458
458
|
}
|
|
459
|
-
const o =
|
|
459
|
+
const o = Tt(t.usage);
|
|
460
460
|
o && (e.usage = o);
|
|
461
|
-
const r = Array.isArray(t.choices) ? t.choices : [], s =
|
|
461
|
+
const r = Array.isArray(t.choices) ? t.choices : [], s = x(r[0]) ? r[0] : void 0;
|
|
462
462
|
if (s) {
|
|
463
|
-
const
|
|
464
|
-
if (
|
|
465
|
-
const c =
|
|
466
|
-
if (c && (e.text = c),
|
|
467
|
-
const
|
|
468
|
-
|
|
463
|
+
const i = x(s.delta) ? s.delta : void 0;
|
|
464
|
+
if (i) {
|
|
465
|
+
const c = b(i.content);
|
|
466
|
+
if (c && (e.text = c), It(i, e), Array.isArray(i.tool_calls) && i.tool_calls.length > 0) {
|
|
467
|
+
const d = i.tool_calls.map((l, p) => vt(l, p)).filter((l) => l !== void 0);
|
|
468
|
+
d.length > 0 && (e.toolCalls = d);
|
|
469
469
|
}
|
|
470
|
-
const u =
|
|
470
|
+
const u = At(i);
|
|
471
471
|
u.length > 0 && (e.sources = u);
|
|
472
472
|
}
|
|
473
|
-
const
|
|
474
|
-
|
|
473
|
+
const a = b(s.finish_reason);
|
|
474
|
+
a && (e.finishReason = a);
|
|
475
475
|
}
|
|
476
476
|
return Object.keys(e).length > 0 ? [e] : [];
|
|
477
477
|
}
|
|
478
|
-
const
|
|
478
|
+
const Ot = {
|
|
479
479
|
id: "openai.chat-completions",
|
|
480
480
|
open() {
|
|
481
|
-
return { push:
|
|
481
|
+
return { push: Rt };
|
|
482
482
|
}
|
|
483
483
|
};
|
|
484
|
-
function
|
|
484
|
+
function w(t) {
|
|
485
485
|
return typeof t == "object" && t !== null && !Array.isArray(t);
|
|
486
486
|
}
|
|
487
|
-
function
|
|
487
|
+
function g(t) {
|
|
488
488
|
return typeof t == "string" ? t : void 0;
|
|
489
489
|
}
|
|
490
|
-
function
|
|
490
|
+
function R(t) {
|
|
491
491
|
return typeof t == "number" ? t : void 0;
|
|
492
492
|
}
|
|
493
|
-
function
|
|
494
|
-
if (!
|
|
495
|
-
const e = {}, n =
|
|
493
|
+
function W(t) {
|
|
494
|
+
if (!w(t)) return;
|
|
495
|
+
const e = {}, n = R(t.input_tokens);
|
|
496
496
|
n !== void 0 && (e.inputTokens = n);
|
|
497
|
-
const o =
|
|
497
|
+
const o = R(t.output_tokens);
|
|
498
498
|
o !== void 0 && (e.outputTokens = o);
|
|
499
|
-
const r =
|
|
499
|
+
const r = R(t.cache_read_input_tokens);
|
|
500
500
|
return r !== void 0 && (e.cachedInputTokens = r), Object.keys(e).length > 0 ? e : void 0;
|
|
501
501
|
}
|
|
502
|
-
function
|
|
503
|
-
const o =
|
|
504
|
-
if (!
|
|
505
|
-
switch (
|
|
502
|
+
function St(t, e, n) {
|
|
503
|
+
const o = R(t.index) ?? 0, r = t.content_block;
|
|
504
|
+
if (!w(r)) return [];
|
|
505
|
+
switch (g(r.type)) {
|
|
506
506
|
case "text": {
|
|
507
507
|
e.set(o, { kind: "text", thinking: "" });
|
|
508
|
-
const s =
|
|
508
|
+
const s = g(r.text);
|
|
509
509
|
return s ? [{ text: s }] : [];
|
|
510
510
|
}
|
|
511
511
|
case "thinking": {
|
|
512
|
-
const s =
|
|
512
|
+
const s = g(r.thinking) ?? "";
|
|
513
513
|
return e.set(o, { kind: "thinking", thinking: s }), [{ reasoning: s, reasoningIndex: o }];
|
|
514
514
|
}
|
|
515
515
|
case "redacted_thinking":
|
|
@@ -522,28 +522,28 @@ function xt(t, e, n) {
|
|
|
522
522
|
];
|
|
523
523
|
case "tool_use":
|
|
524
524
|
case "server_tool_use": {
|
|
525
|
-
const s =
|
|
526
|
-
return e.set(o, { kind: "tool_use", thinking: "" }), s && n.set(s, o), [{ toolCalls: [{ index: o, ...s ? { id: s } : {}, ...
|
|
525
|
+
const s = g(r.id), i = g(r.name);
|
|
526
|
+
return e.set(o, { kind: "tool_use", thinking: "" }), s && n.set(s, o), [{ toolCalls: [{ index: o, ...s ? { id: s } : {}, ...i ? { name: i } : {} }] }];
|
|
527
527
|
}
|
|
528
528
|
case "web_search_tool_result": {
|
|
529
529
|
e.set(o, { kind: "other", thinking: "" });
|
|
530
|
-
const s =
|
|
531
|
-
if (
|
|
532
|
-
const
|
|
533
|
-
return
|
|
530
|
+
const s = g(r.tool_use_id), i = s !== void 0 ? n.get(s) : void 0;
|
|
531
|
+
if (i === void 0) return [];
|
|
532
|
+
const a = r.content;
|
|
533
|
+
return w(a) && (g(a.type) ?? "").endsWith("_error") ? [
|
|
534
534
|
{
|
|
535
535
|
toolCalls: [
|
|
536
536
|
{
|
|
537
|
-
index:
|
|
537
|
+
index: i,
|
|
538
538
|
...s ? { id: s } : {},
|
|
539
|
-
outputError:
|
|
539
|
+
outputError: g(a.error_code) ?? "web_search_tool_result_error"
|
|
540
540
|
}
|
|
541
541
|
]
|
|
542
542
|
}
|
|
543
543
|
] : [
|
|
544
544
|
{
|
|
545
545
|
toolCalls: [
|
|
546
|
-
{ index:
|
|
546
|
+
{ index: i, ...s ? { id: s } : {}, output: { content: a } }
|
|
547
547
|
]
|
|
548
548
|
}
|
|
549
549
|
];
|
|
@@ -552,40 +552,40 @@ function xt(t, e, n) {
|
|
|
552
552
|
return e.set(o, { kind: "other", thinking: "" }), [];
|
|
553
553
|
}
|
|
554
554
|
}
|
|
555
|
-
function
|
|
556
|
-
const n =
|
|
557
|
-
if (!
|
|
558
|
-
switch (
|
|
555
|
+
function $t(t, e) {
|
|
556
|
+
const n = R(t.index) ?? 0, o = t.delta;
|
|
557
|
+
if (!w(o)) return [];
|
|
558
|
+
switch (g(o.type)) {
|
|
559
559
|
case "text_delta": {
|
|
560
|
-
const r =
|
|
560
|
+
const r = g(o.text);
|
|
561
561
|
return r ? [{ text: r }] : [];
|
|
562
562
|
}
|
|
563
563
|
case "thinking_delta": {
|
|
564
|
-
const r =
|
|
564
|
+
const r = g(o.thinking) ?? "", s = e.get(n);
|
|
565
565
|
return s && (s.thinking += r), [{ reasoning: r, reasoningIndex: n }];
|
|
566
566
|
}
|
|
567
567
|
case "signature_delta": {
|
|
568
|
-
const r =
|
|
568
|
+
const r = g(o.signature) ?? "", s = e.get(n);
|
|
569
569
|
return s && (s.signature = (s.signature ?? "") + r), [{ reasoning: "", reasoningIndex: n, reasoningSignature: r }];
|
|
570
570
|
}
|
|
571
571
|
case "input_json_delta":
|
|
572
|
-
return [{ toolCalls: [{ index: n, arguments:
|
|
572
|
+
return [{ toolCalls: [{ index: n, arguments: g(o.partial_json) ?? "" }] }];
|
|
573
573
|
case "citations_delta": {
|
|
574
574
|
const r = o.citation;
|
|
575
|
-
if (!
|
|
576
|
-
const s = {},
|
|
577
|
-
|
|
578
|
-
const
|
|
579
|
-
|
|
580
|
-
const c =
|
|
575
|
+
if (!w(r)) return [];
|
|
576
|
+
const s = {}, i = g(r.url);
|
|
577
|
+
i && (s.url = i);
|
|
578
|
+
const a = g(r.title);
|
|
579
|
+
a && (s.title = a);
|
|
580
|
+
const c = g(r.cited_text);
|
|
581
581
|
return c && (s.snippet = c), Object.keys(s).length > 0 ? [{ sources: [s] }] : [];
|
|
582
582
|
}
|
|
583
583
|
default:
|
|
584
584
|
return [];
|
|
585
585
|
}
|
|
586
586
|
}
|
|
587
|
-
function
|
|
588
|
-
const n =
|
|
587
|
+
function Et(t, e) {
|
|
588
|
+
const n = R(t.index) ?? 0, o = e.get(n);
|
|
589
589
|
if (!o || o.kind !== "thinking") return [];
|
|
590
590
|
const r = { type: "thinking", thinking: o.thinking };
|
|
591
591
|
return o.signature !== void 0 && (r.signature = o.signature), [
|
|
@@ -596,17 +596,17 @@ function _t(t, e) {
|
|
|
596
596
|
}
|
|
597
597
|
];
|
|
598
598
|
}
|
|
599
|
-
function
|
|
599
|
+
function Ct(t) {
|
|
600
600
|
const e = {}, n = t.delta;
|
|
601
|
-
if (
|
|
602
|
-
const r =
|
|
601
|
+
if (w(n)) {
|
|
602
|
+
const r = g(n.stop_reason);
|
|
603
603
|
r && (e.finishReason = r);
|
|
604
604
|
}
|
|
605
|
-
const o =
|
|
605
|
+
const o = W(t.usage);
|
|
606
606
|
return o && (e.usage = o), Object.keys(e).length > 0 ? [e] : [];
|
|
607
607
|
}
|
|
608
|
-
function
|
|
609
|
-
const e = t.error, n =
|
|
608
|
+
function Ut(t) {
|
|
609
|
+
const e = t.error, n = w(e) ? g(e.message) : void 0, o = w(e) ? g(e.type) : void 0;
|
|
610
610
|
return [
|
|
611
611
|
{
|
|
612
612
|
error: {
|
|
@@ -616,30 +616,30 @@ function Tt(t) {
|
|
|
616
616
|
}
|
|
617
617
|
];
|
|
618
618
|
}
|
|
619
|
-
const
|
|
619
|
+
const Ft = {
|
|
620
620
|
id: "anthropic.messages",
|
|
621
621
|
open() {
|
|
622
622
|
const t = /* @__PURE__ */ new Map(), e = /* @__PURE__ */ new Map();
|
|
623
623
|
return {
|
|
624
624
|
push(n) {
|
|
625
|
-
if (!
|
|
626
|
-
switch (
|
|
625
|
+
if (!w(n)) return [];
|
|
626
|
+
switch (g(n.type)) {
|
|
627
627
|
case "message_start": {
|
|
628
628
|
const o = n.message;
|
|
629
|
-
if (!
|
|
630
|
-
const r =
|
|
629
|
+
if (!w(o)) return [];
|
|
630
|
+
const r = W(o.usage);
|
|
631
631
|
return r ? [{ usage: r }] : [];
|
|
632
632
|
}
|
|
633
633
|
case "content_block_start":
|
|
634
|
-
return
|
|
634
|
+
return St(n, t, e);
|
|
635
635
|
case "content_block_delta":
|
|
636
|
-
return
|
|
636
|
+
return $t(n, t);
|
|
637
637
|
case "content_block_stop":
|
|
638
|
-
return
|
|
638
|
+
return Et(n, t);
|
|
639
639
|
case "message_delta":
|
|
640
|
-
return
|
|
640
|
+
return Ct(n);
|
|
641
641
|
case "error":
|
|
642
|
-
return
|
|
642
|
+
return Ut(n);
|
|
643
643
|
default:
|
|
644
644
|
return [];
|
|
645
645
|
}
|
|
@@ -647,20 +647,20 @@ const bt = {
|
|
|
647
647
|
};
|
|
648
648
|
}
|
|
649
649
|
};
|
|
650
|
-
class
|
|
650
|
+
class U extends Error {
|
|
651
651
|
constructor(n, o, r, s) {
|
|
652
|
-
super(
|
|
653
|
-
|
|
654
|
-
|
|
652
|
+
super(jt(n, o, r, s));
|
|
653
|
+
A(this, "status");
|
|
654
|
+
A(this, "statusText");
|
|
655
655
|
/** The response body parsed as JSON, or undefined when it was not JSON (an
|
|
656
656
|
* HTML error page from a proxy, most often). */
|
|
657
|
-
|
|
657
|
+
A(this, "body");
|
|
658
658
|
/** The raw response body, always. */
|
|
659
|
-
|
|
660
|
-
Object.setPrototypeOf(this,
|
|
659
|
+
A(this, "bodyText");
|
|
660
|
+
Object.setPrototypeOf(this, U.prototype), this.name = "WireError", this.status = n, this.statusText = o, this.bodyText = r, this.body = s;
|
|
661
661
|
}
|
|
662
662
|
}
|
|
663
|
-
function
|
|
663
|
+
function Lt(t) {
|
|
664
664
|
if (typeof t != "object" || t === null) return;
|
|
665
665
|
const e = t.error;
|
|
666
666
|
if (typeof e == "string") return e;
|
|
@@ -671,16 +671,16 @@ function wt(t) {
|
|
|
671
671
|
const n = t.message;
|
|
672
672
|
return typeof n == "string" ? n : void 0;
|
|
673
673
|
}
|
|
674
|
-
function
|
|
675
|
-
const r = `Model request failed: HTTP ${t}${e ? ` ${e}` : ""}`, s =
|
|
674
|
+
function jt(t, e, n, o) {
|
|
675
|
+
const r = `Model request failed: HTTP ${t}${e ? ` ${e}` : ""}`, s = Lt(o);
|
|
676
676
|
if (s) return `${r}: ${s}`;
|
|
677
|
-
const
|
|
678
|
-
return
|
|
677
|
+
const i = n.trim().slice(0, 200);
|
|
678
|
+
return i ? `${r}: ${i}` : r;
|
|
679
679
|
}
|
|
680
|
-
function
|
|
680
|
+
function Mt(t) {
|
|
681
681
|
return typeof t == "object" && t !== null && "ok" in t && "status" in t && "body" in t;
|
|
682
682
|
}
|
|
683
|
-
async function
|
|
683
|
+
async function Nt(t) {
|
|
684
684
|
const e = await t.text().catch(() => "");
|
|
685
685
|
let n;
|
|
686
686
|
try {
|
|
@@ -688,38 +688,38 @@ async function St(t) {
|
|
|
688
688
|
} catch {
|
|
689
689
|
n = void 0;
|
|
690
690
|
}
|
|
691
|
-
return new
|
|
691
|
+
return new U(t.status, t.statusText, e, n);
|
|
692
692
|
}
|
|
693
|
-
async function
|
|
694
|
-
if (!
|
|
695
|
-
if (!t.ok) throw await
|
|
693
|
+
async function Pt(t) {
|
|
694
|
+
if (!Mt(t)) return t;
|
|
695
|
+
if (!t.ok) throw await Nt(t);
|
|
696
696
|
if (!t.body)
|
|
697
697
|
throw new Error(
|
|
698
698
|
"The model response has no body to stream. Check that the request set stream: true and that nothing between you and the provider buffered it."
|
|
699
699
|
);
|
|
700
700
|
return t.body;
|
|
701
701
|
}
|
|
702
|
-
async function
|
|
703
|
-
const o = await
|
|
702
|
+
async function q(t, e, n) {
|
|
703
|
+
const o = await Pt(t), r = n.format.open();
|
|
704
704
|
async function* s() {
|
|
705
|
-
for await (const
|
|
706
|
-
for (const
|
|
705
|
+
for await (const i of Z(o))
|
|
706
|
+
for (const a of r.push(i)) yield a;
|
|
707
707
|
}
|
|
708
|
-
return
|
|
708
|
+
return wt(s(), e, n);
|
|
709
709
|
}
|
|
710
|
-
function
|
|
711
|
-
return
|
|
710
|
+
function se(t, e, n = {}) {
|
|
711
|
+
return q(t, e, { ...n, format: Ot });
|
|
712
712
|
}
|
|
713
|
-
function
|
|
714
|
-
return
|
|
713
|
+
function ae(t, e, n = {}) {
|
|
714
|
+
return q(t, e, { ...n, format: Ft });
|
|
715
715
|
}
|
|
716
|
-
function
|
|
716
|
+
function ue(t, e, n) {
|
|
717
717
|
t.upsertTool(e, { state: "output-available", output: n });
|
|
718
718
|
}
|
|
719
|
-
function
|
|
719
|
+
function ce(t, e, n) {
|
|
720
720
|
t.upsertTool(e, { state: "output-error", errorText: n });
|
|
721
721
|
}
|
|
722
|
-
function
|
|
722
|
+
function de(t) {
|
|
723
723
|
let e = "";
|
|
724
724
|
return {
|
|
725
725
|
appendText(n) {
|
|
@@ -734,165 +734,393 @@ function qt(t) {
|
|
|
734
734
|
buffered: () => e
|
|
735
735
|
};
|
|
736
736
|
}
|
|
737
|
-
|
|
737
|
+
const C = [
|
|
738
|
+
{ pattern: "image/jpeg", kind: "image" },
|
|
739
|
+
{ pattern: "image/png", kind: "image" },
|
|
740
|
+
{ pattern: "image/gif", kind: "image" },
|
|
741
|
+
{ pattern: "image/webp", kind: "image" },
|
|
742
|
+
{ pattern: "application/pdf", kind: "document" },
|
|
743
|
+
{ pattern: "text/*", kind: "text" },
|
|
744
|
+
{ pattern: "application/json", kind: "text" },
|
|
745
|
+
{ pattern: "application/xml", kind: "text" },
|
|
746
|
+
{ pattern: "application/x-yaml", kind: "text" },
|
|
747
|
+
{ pattern: "application/yaml", kind: "text" }
|
|
748
|
+
], J = "text/plain", Dt = ["", "application/octet-stream"], F = (t) => t.trim().toLowerCase(), B = (t) => Dt.includes(t === void 0 ? "" : F(t)), Wt = (t) => {
|
|
749
|
+
if (!t.startsWith(".")) return t;
|
|
750
|
+
throw new Error(
|
|
751
|
+
`\`accept\` entry "${t}" is a file extension, and this kit takes media types only. HTML's own accept attribute does take extensions, which is exactly why this throws rather than quietly matching nothing. Use a media type instead -- "text/*" covers source files, "image/*" images, "application/pdf" PDFs, and \`encodableMediaTypes()\` is the full set. You lose nothing by dropping the extension: a file the browser cannot name is decided by decoding its bytes, which is stronger than matching its name.`
|
|
752
|
+
);
|
|
753
|
+
}, qt = (t) => (typeof t == "string" ? t.split(",") : t).map(F).filter((e) => e !== "").map(Wt), M = (t) => {
|
|
754
|
+
const e = t.indexOf("/");
|
|
755
|
+
return e === -1 ? [t, ""] : [t.slice(0, e), t.slice(e + 1)];
|
|
756
|
+
}, S = (t, e) => {
|
|
757
|
+
const [n, o] = M(t), [r, s] = M(e);
|
|
758
|
+
return n !== "*" && n !== r ? !1 : o === "*" || o === s;
|
|
759
|
+
}, Jt = (t, e) => {
|
|
760
|
+
if (S(t, e)) return e;
|
|
761
|
+
if (S(e, t)) return t;
|
|
762
|
+
};
|
|
763
|
+
function le() {
|
|
764
|
+
return C.map((t) => t.pattern);
|
|
765
|
+
}
|
|
766
|
+
function L(t = {}) {
|
|
767
|
+
const e = t.accept === void 0 ? void 0 : qt(t.accept), n = [];
|
|
768
|
+
for (const o of C) {
|
|
769
|
+
if (e === void 0) {
|
|
770
|
+
n.push({ ...o });
|
|
771
|
+
continue;
|
|
772
|
+
}
|
|
773
|
+
for (const r of e) {
|
|
774
|
+
const s = Jt(o.pattern, r);
|
|
775
|
+
s !== void 0 && !n.some((i) => i.pattern === s) && n.push({ pattern: s, kind: o.kind });
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
return {
|
|
779
|
+
types: n.map((o) => o.pattern),
|
|
780
|
+
accept: n.map((o) => o.pattern).join(","),
|
|
781
|
+
decide(o) {
|
|
782
|
+
const r = o === void 0 ? "" : F(o);
|
|
783
|
+
if (B(r))
|
|
784
|
+
return n.some((i) => S(i.pattern, J)) ? { status: "undetermined" } : (
|
|
785
|
+
// `unsupported` rather than `filtered`, deliberately: `filtered`
|
|
786
|
+
// claims the kit COULD have encoded this file, and nobody has
|
|
787
|
+
// established what it is. Unread and unnamed, it is not a text
|
|
788
|
+
// file the filter excluded -- it is a file with no known type.
|
|
789
|
+
{ status: "unsupported" }
|
|
790
|
+
);
|
|
791
|
+
const s = n.find((i) => S(i.pattern, r));
|
|
792
|
+
return s ? { status: "allowed", kind: s.kind } : C.some((i) => S(i.pattern, r)) ? { status: "filtered" } : { status: "unsupported" };
|
|
793
|
+
}
|
|
794
|
+
};
|
|
795
|
+
}
|
|
796
|
+
const Bt = L(), Ht = /^data:([^;,]*);base64,([\s\S]*)$/, Kt = /^([a-z][a-z0-9+.-]*):/i, N = (t) => t.map((e) => `"${e}"`).join(", ");
|
|
797
|
+
function P(t) {
|
|
798
|
+
try {
|
|
799
|
+
const e = atob(t), n = new Uint8Array(e.length);
|
|
800
|
+
for (let o = 0; o < e.length; o++) n[o] = e.charCodeAt(o);
|
|
801
|
+
return { ok: !0, text: new TextDecoder("utf-8", { fatal: !0 }).decode(n), bytes: e.length };
|
|
802
|
+
} catch {
|
|
803
|
+
return { ok: !1 };
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
const D = (t) => t.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/\r/g, " ").replace(/\n/g, " "), Yt = /<(\/file\s*)>/gi;
|
|
807
|
+
function H(t) {
|
|
808
|
+
const e = D(t.filename ?? "attachment"), n = D(t.mediaType), o = t.text.replace(Yt, "<$1>");
|
|
809
|
+
return `<file name="${e}" type="${n}">
|
|
810
|
+
${o}
|
|
811
|
+
</file>`;
|
|
812
|
+
}
|
|
813
|
+
function zt(t, e = Bt) {
|
|
814
|
+
var a, c, u;
|
|
815
|
+
if (t.type === "source-document") return { status: "kit-side" };
|
|
816
|
+
const n = t.url;
|
|
817
|
+
if (n === void 0 || n === "")
|
|
818
|
+
return {
|
|
819
|
+
status: "unencodable",
|
|
820
|
+
reason: "it has no `url`, so there are no bytes and no address to send. Set `url` to a `data:` URI (read the File with FileReader.readAsDataURL before you stage it) or to an https URL the provider can fetch."
|
|
821
|
+
};
|
|
822
|
+
let o, r;
|
|
823
|
+
const s = Ht.exec(n);
|
|
824
|
+
if (s) {
|
|
825
|
+
const d = s[1].toLowerCase();
|
|
826
|
+
r = B(d) ? ((a = t.mediaType) == null ? void 0 : a.toLowerCase()) ?? d : d, o = { type: "base64", mediaType: r, data: s[2], dataUri: n };
|
|
827
|
+
} else if (/^https?:\/\//i.test(n)) {
|
|
828
|
+
const d = (c = t.mediaType) == null ? void 0 : c.toLowerCase();
|
|
829
|
+
if (d === void 0 || d === "")
|
|
830
|
+
return {
|
|
831
|
+
status: "unencodable",
|
|
832
|
+
reason: `its \`url\` is remote ("${n}") but it has no \`mediaType\`, so there is no way to tell an image from a document without fetching it -- and this layer does no I/O. Set \`mediaType\` when you stage the attachment.`
|
|
833
|
+
};
|
|
834
|
+
r = d, o = { type: "remote", url: n };
|
|
835
|
+
} else {
|
|
836
|
+
if (n.startsWith("data:"))
|
|
837
|
+
return {
|
|
838
|
+
status: "unencodable",
|
|
839
|
+
reason: "its `url` is a `data:` URI that is not base64-encoded with an explicit media type. Both APIs need `data:<media type>;base64,<data>`."
|
|
840
|
+
};
|
|
841
|
+
{
|
|
842
|
+
const d = (u = Kt.exec(n)) == null ? void 0 : u[1].toLowerCase(), l = d === "blob" ? "a `blob:` URL resolves only inside the browser tab that created it, so a model can never fetch it. Read the File with FileReader.readAsDataURL and stage the `data:` URI instead, or upload it and stage the resulting https URL" : `a "${d ?? n}" URL is not something a provider can fetch. Use a \`data:\` URI or an https URL`;
|
|
843
|
+
return { status: "unencodable", reason: `its \`url\` is "${n}": ${l}.` };
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
const i = e.decide(r);
|
|
847
|
+
if (i.status === "undetermined") {
|
|
848
|
+
if (o.type !== "base64")
|
|
849
|
+
return {
|
|
850
|
+
status: "unencodable",
|
|
851
|
+
reason: `it is at a remote URL ("${o.url}") and its media type "${r}" says nothing about the bytes -- that is the label for "arbitrary binary", so it separates an image from a document not at all. Settling it by reading the bytes would need a fetch, and this layer does no I/O. Set \`mediaType\` to what the file actually is when you stage it.`
|
|
852
|
+
};
|
|
853
|
+
const d = P(o.data);
|
|
854
|
+
return d.ok ? {
|
|
855
|
+
status: "encodable",
|
|
856
|
+
file: {
|
|
857
|
+
kind: "text",
|
|
858
|
+
mediaType: J,
|
|
859
|
+
source: o,
|
|
860
|
+
filename: t.filename,
|
|
861
|
+
text: d.text
|
|
862
|
+
}
|
|
863
|
+
} : {
|
|
864
|
+
status: "unencodable",
|
|
865
|
+
reason: `nothing names it -- ${r === "" ? "it carries no media type" : `its media type is "${r}"`}, so the only way to tell what it is was to read it -- and its bytes are not valid UTF-8, so it is binary of some unidentified kind. Neither API has an arbitrary-file block to carry that. Set \`mediaType\` if you know what it is, or hand the file to the model through a tool.`
|
|
866
|
+
};
|
|
867
|
+
}
|
|
868
|
+
if (i.status === "filtered")
|
|
869
|
+
return {
|
|
870
|
+
status: "unencodable",
|
|
871
|
+
reason: `its media type "${r}" is one this kit can encode, but your \`accept\` filter excludes it. The types you allowed are: ${N(e.types)}. Widen \`accept\` to include it, or stop staging it.`
|
|
872
|
+
};
|
|
873
|
+
if (i.status === "unsupported")
|
|
874
|
+
return {
|
|
875
|
+
status: "unencodable",
|
|
876
|
+
reason: `its media type "${r}" is not one either API accepts as message content. Supported: ${N(e.types)}. Extract the content yourself and send it as text, or hand it to the model through a tool.`
|
|
877
|
+
};
|
|
878
|
+
if (i.kind === "text") {
|
|
879
|
+
if (o.type !== "base64")
|
|
880
|
+
return {
|
|
881
|
+
status: "unencodable",
|
|
882
|
+
reason: `it is a text file at a remote URL ("${o.url}"), and text has to ride as text CONTENT -- neither API has an arbitrary-file block to point at a URL with. Reading it here would put I/O in the encoder. Fetch it yourself and stage the \`data:\` URI, or paste the contents as a text part.`
|
|
883
|
+
};
|
|
884
|
+
const d = P(o.data);
|
|
885
|
+
return d.ok ? {
|
|
886
|
+
status: "encodable",
|
|
887
|
+
file: {
|
|
888
|
+
kind: "text",
|
|
889
|
+
mediaType: r,
|
|
890
|
+
source: o,
|
|
891
|
+
filename: t.filename,
|
|
892
|
+
text: d.text
|
|
893
|
+
}
|
|
894
|
+
} : {
|
|
895
|
+
status: "unencodable",
|
|
896
|
+
reason: `its media type "${r}" says text, but its bytes are not valid UTF-8 -- so it is binary wearing a text label, and inlining it would send the model garbage. Send it under its real media type, or extract the text yourself.`
|
|
897
|
+
};
|
|
898
|
+
}
|
|
899
|
+
return {
|
|
900
|
+
status: "encodable",
|
|
901
|
+
file: { kind: i.kind, mediaType: r, source: o, filename: t.filename }
|
|
902
|
+
};
|
|
903
|
+
}
|
|
904
|
+
class $ extends Error {
|
|
738
905
|
constructor(n, o, r) {
|
|
739
906
|
super(n);
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
Object.setPrototypeOf(this,
|
|
907
|
+
A(this, "messageId");
|
|
908
|
+
A(this, "partIndex");
|
|
909
|
+
Object.setPrototypeOf(this, $.prototype), this.name = "WireEncodeError", this.messageId = o, this.partIndex = r;
|
|
743
910
|
}
|
|
744
911
|
}
|
|
745
|
-
const
|
|
746
|
-
function
|
|
912
|
+
const Gt = (t) => t.type === "text", Xt = (t) => t.filter(Gt).map((e) => e.text).join("");
|
|
913
|
+
function K(t, e, n, o, r, s) {
|
|
914
|
+
const i = zt(t.attachment, r);
|
|
915
|
+
if (i.status === "kit-side") return null;
|
|
916
|
+
const a = (u) => {
|
|
917
|
+
if (o === "skip") return null;
|
|
918
|
+
throw new $(
|
|
919
|
+
`Cannot encode file part ${n} of message "${e}": ${u} Pass { onUnencodableFile: 'skip' } to drop it instead of failing.`,
|
|
920
|
+
e,
|
|
921
|
+
n
|
|
922
|
+
);
|
|
923
|
+
};
|
|
924
|
+
if (i.status === "unencodable") return a(i.reason);
|
|
925
|
+
const c = s(i.file);
|
|
926
|
+
return c.ok ? c.block : a(c.reason);
|
|
927
|
+
}
|
|
928
|
+
const Qt = (t) => t.kind === "text" ? { ok: !0, block: { type: "text", text: H(t) } } : t.kind === "image" ? { ok: !0, block: { type: "image_url", image_url: { url: t.source.type === "base64" ? t.source.dataUri : t.source.url } } } : t.source.type === "remote" ? {
|
|
929
|
+
ok: !1,
|
|
930
|
+
reason: `it is a PDF at a remote URL ("${t.source.url}"), and a chat-completions \`file\` content part carries only \`file_id\` or \`file_data\` -- this wire has no URL form for a document. Fetch it and stage it as a \`data:\` URI, or upload it through the Files API and send \`file_id\` yourself; fetching it HERE would put I/O in the encoder. The Anthropic wire does take a remote PDF, so toAnthropicMessages accepts this same message.`
|
|
931
|
+
} : {
|
|
932
|
+
ok: !0,
|
|
933
|
+
block: {
|
|
934
|
+
type: "file",
|
|
935
|
+
file: {
|
|
936
|
+
...t.filename !== void 0 ? { filename: t.filename } : {},
|
|
937
|
+
file_data: t.source.dataUri
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
}, Vt = (t) => t.kind === "text" ? { ok: !0, block: { type: "text", text: H(t) } } : {
|
|
941
|
+
ok: !0,
|
|
942
|
+
block: {
|
|
943
|
+
type: t.kind === "image" ? "image" : "document",
|
|
944
|
+
source: t.source.type === "base64" ? { type: "base64", media_type: t.source.mediaType, data: t.source.data } : { type: "url", url: t.source.url }
|
|
945
|
+
}
|
|
946
|
+
}, Y = (t) => typeof t.toolCallId == "string" && t.toolCallId !== "" && (t.output !== void 0 || t.errorText !== void 0);
|
|
947
|
+
function Zt(t) {
|
|
747
948
|
return t.rawInput !== void 0 && t.rawInput !== "" ? t.rawInput : t.input !== void 0 ? JSON.stringify(t.input) : "{}";
|
|
748
949
|
}
|
|
749
|
-
const
|
|
950
|
+
const te = (t) => ({
|
|
750
951
|
id: t.toolCallId,
|
|
751
952
|
type: "function",
|
|
752
|
-
function: { name: t.type, arguments:
|
|
753
|
-
}),
|
|
953
|
+
function: { name: t.type, arguments: Zt(t) }
|
|
954
|
+
}), ee = (t) => ({
|
|
754
955
|
role: "tool",
|
|
755
956
|
tool_call_id: t.toolCallId,
|
|
756
957
|
name: t.type,
|
|
757
958
|
content: t.errorText ?? JSON.stringify(t.output)
|
|
758
|
-
}),
|
|
759
|
-
function
|
|
959
|
+
}), ne = (t) => typeof t == "object" && t !== null && !Array.isArray(t);
|
|
960
|
+
function oe(t) {
|
|
760
961
|
var s;
|
|
761
962
|
if (((s = t.raw) == null ? void 0 : s.source) !== "openai.reasoning_details") return;
|
|
762
963
|
const e = t.raw.payload;
|
|
763
964
|
if (!Array.isArray(e)) return;
|
|
764
|
-
const n = e.filter(
|
|
965
|
+
const n = e.filter(ne), o = n.filter((i) => i.index === t.index), r = o.length > 0 ? o : n;
|
|
765
966
|
return r[r.length - 1];
|
|
766
967
|
}
|
|
767
|
-
function
|
|
768
|
-
const e =
|
|
968
|
+
function re(t) {
|
|
969
|
+
const e = oe(t);
|
|
769
970
|
if (!e) return;
|
|
770
971
|
if (e.type === "reasoning.encrypted" || typeof e.data == "string") return e;
|
|
771
972
|
if (typeof t.signature != "string" || t.signature === "") return;
|
|
772
973
|
const n = typeof e.type == "string" ? e.type : "reasoning.text", r = { type: n, [n === "reasoning.summary" ? "summary" : "text"]: t.text, signature: t.signature };
|
|
773
974
|
return typeof e.format == "string" && (r.format = e.format), typeof e.id == "string" && (r.id = e.id), e.index !== void 0 && (r.index = e.index), r;
|
|
774
975
|
}
|
|
775
|
-
function
|
|
776
|
-
const n = e.reasoning === "include", o = [];
|
|
777
|
-
for (const
|
|
778
|
-
if (
|
|
779
|
-
const
|
|
780
|
-
|
|
976
|
+
function pe(t, e = {}) {
|
|
977
|
+
const n = e.reasoning === "include", o = e.onUnencodableFile ?? "throw", r = L({ accept: e.accept }), s = [];
|
|
978
|
+
for (const i of t) {
|
|
979
|
+
if (i.role === "user") {
|
|
980
|
+
const l = [];
|
|
981
|
+
let p = "", h = !1;
|
|
982
|
+
const k = () => {
|
|
983
|
+
p !== "" && (l.push({ type: "text", text: p }), p = "");
|
|
984
|
+
};
|
|
985
|
+
if (i.parts.forEach((m, y) => {
|
|
986
|
+
if (m.type === "text") {
|
|
987
|
+
p += m.text;
|
|
988
|
+
return;
|
|
989
|
+
}
|
|
990
|
+
if (m.type !== "file") return;
|
|
991
|
+
const T = K(m, i.id, y, o, r, Qt);
|
|
992
|
+
T && (k(), l.push(T), h = !0);
|
|
993
|
+
}), k(), !h) {
|
|
994
|
+
const m = Xt(i.parts);
|
|
995
|
+
m !== "" && s.push({ role: "user", content: m });
|
|
996
|
+
continue;
|
|
997
|
+
}
|
|
998
|
+
s.push({ role: "user", content: l });
|
|
781
999
|
continue;
|
|
782
1000
|
}
|
|
783
|
-
let
|
|
784
|
-
const
|
|
785
|
-
if (!(
|
|
786
|
-
|
|
1001
|
+
let a = "", c = [], u = [];
|
|
1002
|
+
const d = () => {
|
|
1003
|
+
if (!(a === "" && c.length === 0)) {
|
|
1004
|
+
s.push({
|
|
787
1005
|
role: "assistant",
|
|
788
|
-
content:
|
|
789
|
-
...
|
|
790
|
-
...
|
|
1006
|
+
content: a === "" ? null : a,
|
|
1007
|
+
...u.length > 0 ? { reasoning_details: u } : {},
|
|
1008
|
+
...c.length > 0 ? { tool_calls: c.map(te) } : {}
|
|
791
1009
|
});
|
|
792
|
-
for (const
|
|
793
|
-
|
|
1010
|
+
for (const l of c) s.push(ee(l));
|
|
1011
|
+
a = "", c = [], u = [];
|
|
794
1012
|
}
|
|
795
1013
|
};
|
|
796
|
-
for (const
|
|
797
|
-
if (
|
|
798
|
-
|
|
1014
|
+
for (const l of i.parts) {
|
|
1015
|
+
if (l.type === "text") {
|
|
1016
|
+
c.length > 0 && d(), a += l.text;
|
|
799
1017
|
continue;
|
|
800
1018
|
}
|
|
801
|
-
if (
|
|
1019
|
+
if (l.type === "reasoning") {
|
|
802
1020
|
if (!n) continue;
|
|
803
|
-
|
|
804
|
-
const
|
|
805
|
-
|
|
1021
|
+
c.length > 0 && d();
|
|
1022
|
+
const p = re(l);
|
|
1023
|
+
p && u.push(p);
|
|
806
1024
|
continue;
|
|
807
1025
|
}
|
|
808
|
-
|
|
1026
|
+
l.type === "tool" && Y(l.tool) && c.push(l.tool);
|
|
809
1027
|
}
|
|
810
|
-
|
|
1028
|
+
d();
|
|
811
1029
|
}
|
|
812
|
-
return
|
|
1030
|
+
return s;
|
|
813
1031
|
}
|
|
814
|
-
function
|
|
815
|
-
const e = [],
|
|
816
|
-
const
|
|
817
|
-
(
|
|
1032
|
+
function fe(t, e = {}) {
|
|
1033
|
+
const n = e.onUnencodableFile ?? "throw", o = L({ accept: e.accept }), r = [], s = (i) => {
|
|
1034
|
+
const a = r[r.length - 1];
|
|
1035
|
+
(a == null ? void 0 : a.role) === "user" ? a.content = [...a.content, ...i] : r.push({ role: "user", content: i });
|
|
818
1036
|
};
|
|
819
|
-
for (const
|
|
820
|
-
if (
|
|
821
|
-
const
|
|
822
|
-
i.
|
|
1037
|
+
for (const i of t) {
|
|
1038
|
+
if (i.role === "user") {
|
|
1039
|
+
const d = [];
|
|
1040
|
+
i.parts.forEach((l, p) => {
|
|
1041
|
+
if (l.type === "text") {
|
|
1042
|
+
l.text !== "" && d.push({ type: "text", text: l.text });
|
|
1043
|
+
return;
|
|
1044
|
+
}
|
|
1045
|
+
if (l.type !== "file") return;
|
|
1046
|
+
const h = K(l, i.id, p, n, o, Vt);
|
|
1047
|
+
h && d.push(h);
|
|
1048
|
+
}), d.length > 0 && s(d);
|
|
823
1049
|
continue;
|
|
824
1050
|
}
|
|
825
|
-
let
|
|
826
|
-
const
|
|
827
|
-
|
|
1051
|
+
let a = [], c = [];
|
|
1052
|
+
const u = () => {
|
|
1053
|
+
a.length > 0 && r.push({ role: "assistant", content: a }), c.length > 0 && s(c), a = [], c = [];
|
|
828
1054
|
};
|
|
829
|
-
|
|
830
|
-
switch (
|
|
1055
|
+
i.parts.forEach((d, l) => {
|
|
1056
|
+
switch (d.type) {
|
|
831
1057
|
case "reasoning": {
|
|
832
|
-
if (!
|
|
833
|
-
throw new
|
|
834
|
-
`Cannot encode reasoning part ${
|
|
835
|
-
|
|
836
|
-
|
|
1058
|
+
if (!d.raw)
|
|
1059
|
+
throw new $(
|
|
1060
|
+
`Cannot encode reasoning part ${l} of message "${i.id}": it has no \`raw\` payload, and Anthropic requires a thinking block to be echoed back verbatim. Rebuilding one from text plus signature is the documented 400. Produce reasoning parts with readAnthropicStream, which attaches the provider's own block, and keep \`raw\` when you persist a message.`,
|
|
1061
|
+
i.id,
|
|
1062
|
+
l
|
|
837
1063
|
);
|
|
838
|
-
if (!
|
|
839
|
-
throw new
|
|
840
|
-
`Cannot encode reasoning part ${
|
|
841
|
-
|
|
842
|
-
|
|
1064
|
+
if (!d.raw.source.startsWith("anthropic."))
|
|
1065
|
+
throw new $(
|
|
1066
|
+
`Cannot encode reasoning part ${l} of message "${i.id}": its \`raw\` came from "${d.raw.source}", not from the Anthropic Messages format. Only a payload tagged \`anthropic.\` can be echoed back verbatim. If you are talking to an Anthropic model through an OpenAI-compatible endpoint, use toOpenAIMessages.`,
|
|
1067
|
+
i.id,
|
|
1068
|
+
l
|
|
843
1069
|
);
|
|
844
|
-
|
|
1070
|
+
c.length > 0 && u(), a.push(d.raw.payload);
|
|
845
1071
|
break;
|
|
846
1072
|
}
|
|
847
1073
|
case "text": {
|
|
848
|
-
if (
|
|
849
|
-
|
|
1074
|
+
if (d.text === "") break;
|
|
1075
|
+
c.length > 0 && u(), a.push({ type: "text", text: d.text });
|
|
850
1076
|
break;
|
|
851
1077
|
}
|
|
852
1078
|
case "tool": {
|
|
853
|
-
const
|
|
854
|
-
if (!
|
|
855
|
-
|
|
1079
|
+
const p = d.tool;
|
|
1080
|
+
if (!Y(p)) break;
|
|
1081
|
+
a.push({
|
|
856
1082
|
type: "tool_use",
|
|
857
|
-
id:
|
|
858
|
-
name:
|
|
859
|
-
input:
|
|
860
|
-
}),
|
|
861
|
-
|
|
1083
|
+
id: p.toolCallId,
|
|
1084
|
+
name: p.type,
|
|
1085
|
+
input: p.input ?? {}
|
|
1086
|
+
}), c.push(
|
|
1087
|
+
p.errorText !== void 0 ? {
|
|
862
1088
|
type: "tool_result",
|
|
863
|
-
tool_use_id:
|
|
1089
|
+
tool_use_id: p.toolCallId,
|
|
864
1090
|
is_error: !0,
|
|
865
|
-
content:
|
|
1091
|
+
content: p.errorText
|
|
866
1092
|
} : {
|
|
867
1093
|
type: "tool_result",
|
|
868
|
-
tool_use_id:
|
|
869
|
-
content: JSON.stringify(
|
|
1094
|
+
tool_use_id: p.toolCallId,
|
|
1095
|
+
content: JSON.stringify(p.output)
|
|
870
1096
|
}
|
|
871
1097
|
);
|
|
872
1098
|
break;
|
|
873
1099
|
}
|
|
874
1100
|
}
|
|
875
|
-
}),
|
|
1101
|
+
}), u();
|
|
876
1102
|
}
|
|
877
|
-
return
|
|
1103
|
+
return r;
|
|
878
1104
|
}
|
|
879
1105
|
export {
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
L as
|
|
896
|
-
|
|
897
|
-
|
|
1106
|
+
$ as WireEncodeError,
|
|
1107
|
+
U as WireError,
|
|
1108
|
+
Ft as anthropicMessagesFormat,
|
|
1109
|
+
ce as applyToolFailure,
|
|
1110
|
+
ue as applyToolOutput,
|
|
1111
|
+
de as bufferText,
|
|
1112
|
+
wt as consumeModelStream,
|
|
1113
|
+
yt as createToolCallAccumulator,
|
|
1114
|
+
le as encodableMediaTypes,
|
|
1115
|
+
lt as normalizeStopReason,
|
|
1116
|
+
Ot as openaiChatFormat,
|
|
1117
|
+
ae as readAnthropicStream,
|
|
1118
|
+
q as readModelStream,
|
|
1119
|
+
se as readOpenAIStream,
|
|
1120
|
+
X as readableToAsyncIterable,
|
|
1121
|
+
L as resolveMediaPolicy,
|
|
1122
|
+
V as sseDataFrames,
|
|
1123
|
+
Z as sseJson,
|
|
1124
|
+
fe as toAnthropicMessages,
|
|
1125
|
+
pe as toOpenAIMessages
|
|
898
1126
|
};
|