@poe-platform/safe-bash 0.1.544 → 0.1.546
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 +1 -0
- package/dist/safe-bash/chunks/{chunk-66VSWIUC.js → chunk-4V3NGZAG.js} +10 -6
- package/dist/safe-bash/chunks/{chunk-66VSWIUC.js.map → chunk-4V3NGZAG.js.map} +1 -1
- package/dist/safe-bash/chunks/{chunk-ZYS7YCMY.js → chunk-AWP6Z3RR.js} +13 -9
- package/dist/safe-bash/chunks/{chunk-ZYS7YCMY.js.map → chunk-AWP6Z3RR.js.map} +1 -1
- package/dist/safe-bash/chunks/chunk-BZUQJTOZ.js +322 -0
- package/dist/safe-bash/chunks/chunk-BZUQJTOZ.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-EZLQA6ON.js → chunk-DKT746UJ.js} +9 -5
- package/dist/safe-bash/chunks/{chunk-EZLQA6ON.js.map → chunk-DKT746UJ.js.map} +1 -1
- package/dist/safe-bash/chunks/{chunk-PZMJ4EC3.js → chunk-EUNOVYVT.js} +17 -4
- package/dist/safe-bash/chunks/chunk-EUNOVYVT.js.map +7 -0
- package/dist/safe-bash/chunks/chunk-EUTSYRNM.js +111 -0
- package/dist/safe-bash/chunks/chunk-EUTSYRNM.js.map +7 -0
- package/dist/safe-bash/chunks/chunk-F5AOPLRZ.js +355 -0
- package/dist/safe-bash/chunks/chunk-F5AOPLRZ.js.map +7 -0
- package/dist/safe-bash/chunks/chunk-FDGESHPB.js +224 -0
- package/dist/safe-bash/chunks/chunk-FDGESHPB.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-YEJBZLE5.js → chunk-FIY2BMTU.js} +12 -8
- package/dist/safe-bash/chunks/{chunk-YEJBZLE5.js.map → chunk-FIY2BMTU.js.map} +1 -1
- package/dist/safe-bash/chunks/{chunk-R3QJL5HH.js → chunk-IDJQT32M.js} +12 -8
- package/dist/safe-bash/chunks/{chunk-R3QJL5HH.js.map → chunk-IDJQT32M.js.map} +1 -1
- package/dist/safe-bash/chunks/chunk-KYU6MXVK.js +58 -0
- package/dist/safe-bash/chunks/chunk-KYU6MXVK.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-T5BV7HPD.js → chunk-O7BRWSKX.js} +17 -60
- package/dist/safe-bash/chunks/chunk-O7BRWSKX.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-6PSMEBVP.js → chunk-PPFWG34Y.js} +2 -2
- package/dist/safe-bash/chunks/{chunk-VNDFKT6F.js → chunk-QX2X5EC5.js} +13 -9
- package/dist/safe-bash/chunks/{chunk-VNDFKT6F.js.map → chunk-QX2X5EC5.js.map} +1 -1
- package/dist/safe-bash/chunks/chunk-TTTOMUAY.js +33 -0
- package/dist/safe-bash/chunks/chunk-TTTOMUAY.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-5VBLSPNM.js → chunk-UO33SQJU.js} +2 -239
- package/dist/safe-bash/chunks/chunk-UO33SQJU.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-TPD45VUZ.js → chunk-VY5N6O6I.js} +22 -109
- package/dist/safe-bash/chunks/chunk-VY5N6O6I.js.map +7 -0
- package/dist/safe-bash/chunks/{chunk-HFEU5SBQ.js → chunk-WISNTI7E.js} +11 -7
- package/dist/safe-bash/chunks/{chunk-HFEU5SBQ.js.map → chunk-WISNTI7E.js.map} +1 -1
- package/dist/safe-bash/chunks/{chunk-A4UXQKWZ.js → chunk-WJWYJDQE.js} +12 -8
- package/dist/safe-bash/chunks/{chunk-A4UXQKWZ.js.map → chunk-WJWYJDQE.js.map} +1 -1
- package/dist/safe-bash/chunks/{chunk-AZNI263O.js → chunk-WXUZXY35.js} +3 -3
- package/dist/safe-bash/chunks/{chunk-WODV2DVM.js → chunk-X7C3PN2T.js} +11 -7
- package/dist/safe-bash/chunks/{chunk-WODV2DVM.js.map → chunk-X7C3PN2T.js.map} +1 -1
- package/dist/safe-bash/chunks/{chunk-WF4P7XKI.js → chunk-YFFFBLBC.js} +12 -8
- package/dist/safe-bash/chunks/{chunk-WF4P7XKI.js.map → chunk-YFFFBLBC.js.map} +1 -1
- package/dist/safe-bash/commands/csplit/index.browser.js +6 -4
- package/dist/safe-bash/commands/factor/index.browser.js +5 -3
- package/dist/safe-bash/commands/getopt/index.browser.js +5 -3
- package/dist/safe-bash/commands/hexdump/index.browser.js +5 -3
- package/dist/safe-bash/commands/iconv/index.browser.js +5 -3
- package/dist/safe-bash/commands/line-endings/index.browser.js +6 -4
- package/dist/safe-bash/commands/llm/command.d.ts +4 -0
- package/dist/safe-bash/commands/llm/command.d.ts.map +1 -0
- package/dist/safe-bash/commands/llm/command.js +194 -0
- package/dist/safe-bash/commands/llm/command.js.map +1 -0
- package/dist/safe-bash/commands/llm/index.browser.js +14 -0
- package/dist/safe-bash/commands/llm/index.browser.js.map +7 -0
- package/dist/safe-bash/commands/llm/index.d.ts +6 -0
- package/dist/safe-bash/commands/llm/index.d.ts.map +1 -0
- package/dist/safe-bash/commands/llm/index.js +12 -0
- package/dist/safe-bash/commands/llm/index.js.map +1 -0
- package/dist/safe-bash/commands/llm/mime.d.ts +2 -0
- package/dist/safe-bash/commands/llm/mime.d.ts.map +1 -0
- package/dist/safe-bash/commands/llm/mime.js +33 -0
- package/dist/safe-bash/commands/llm/mime.js.map +1 -0
- package/dist/safe-bash/commands/llm/providers/elevenlabs.d.ts +16 -0
- package/dist/safe-bash/commands/llm/providers/elevenlabs.d.ts.map +1 -0
- package/dist/safe-bash/commands/llm/providers/elevenlabs.js +51 -0
- package/dist/safe-bash/commands/llm/providers/elevenlabs.js.map +1 -0
- package/dist/safe-bash/commands/llm/providers/index.browser.js +13 -0
- package/dist/safe-bash/commands/llm/providers/index.browser.js.map +7 -0
- package/dist/safe-bash/commands/llm/providers/index.d.ts +4 -0
- package/dist/safe-bash/commands/llm/providers/index.d.ts.map +1 -0
- package/dist/safe-bash/commands/llm/providers/index.js +3 -0
- package/dist/safe-bash/commands/llm/providers/index.js.map +1 -0
- package/dist/safe-bash/commands/llm/providers/openai.d.ts +15 -0
- package/dist/safe-bash/commands/llm/providers/openai.d.ts.map +1 -0
- package/dist/safe-bash/commands/llm/providers/openai.js +78 -0
- package/dist/safe-bash/commands/llm/providers/openai.js.map +1 -0
- package/dist/safe-bash/commands/llm/providers/shared.d.ts +34 -0
- package/dist/safe-bash/commands/llm/providers/shared.d.ts.map +1 -0
- package/dist/safe-bash/commands/llm/providers/shared.js +220 -0
- package/dist/safe-bash/commands/llm/providers/shared.js.map +1 -0
- package/dist/safe-bash/commands/llm/types.d.ts +28 -0
- package/dist/safe-bash/commands/llm/types.d.ts.map +1 -0
- package/dist/safe-bash/commands/llm/types.js +2 -0
- package/dist/safe-bash/commands/llm/types.js.map +1 -0
- package/dist/safe-bash/commands/network/index.browser.js +13 -8
- package/dist/safe-bash/commands/pr/index.browser.js +5 -3
- package/dist/safe-bash/commands/tsort/index.browser.js +5 -3
- package/dist/safe-bash/commands/xml/index.browser.js +7 -4
- package/dist/safe-bash/commands/yq/index.browser.js +8 -5
- package/dist/safe-bash/contracts/command.d.ts +4 -0
- package/dist/safe-bash/contracts/command.d.ts.map +1 -1
- package/dist/safe-bash/contracts/command.js.map +1 -1
- package/dist/safe-bash/contracts/output.d.ts.map +1 -1
- package/dist/safe-bash/contracts/output.js +12 -2
- package/dist/safe-bash/contracts/output.js.map +1 -1
- package/dist/safe-bash/core.browser.js +1093 -1160
- package/dist/safe-bash/core.browser.js.map +4 -4
- package/dist/safe-bash/core.d.ts +2 -0
- package/dist/safe-bash/core.d.ts.map +1 -1
- package/dist/safe-bash/core.js +2 -0
- package/dist/safe-bash/core.js.map +1 -1
- package/dist/safe-bash/shell/runtime.d.ts.map +1 -1
- package/dist/safe-bash/shell/runtime.js +10 -0
- package/dist/safe-bash/shell/runtime.js.map +1 -1
- package/package.json +14 -2
- package/dist/safe-bash/chunks/chunk-5VBLSPNM.js.map +0 -7
- package/dist/safe-bash/chunks/chunk-PZMJ4EC3.js.map +0 -7
- package/dist/safe-bash/chunks/chunk-T5BV7HPD.js.map +0 -7
- package/dist/safe-bash/chunks/chunk-TPD45VUZ.js.map +0 -7
- /package/dist/safe-bash/chunks/{chunk-6PSMEBVP.js.map → chunk-PPFWG34Y.js.map} +0 -0
- /package/dist/safe-bash/chunks/{chunk-AZNI263O.js.map → chunk-WXUZXY35.js.map} +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { LlmModel, LlmProvider } from "../types.js";
|
|
2
|
+
import type { HttpTransport } from "../../network/types.js";
|
|
3
|
+
import { type LlmProviderLimits } from "./shared.js";
|
|
4
|
+
export interface ElevenLabsModel extends LlmModel {
|
|
5
|
+
readonly endpoint: "tts" | "music";
|
|
6
|
+
readonly defaultVoiceId?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ElevenLabsProviderOptions {
|
|
9
|
+
readonly transport: HttpTransport;
|
|
10
|
+
readonly apiKey: string;
|
|
11
|
+
readonly baseUrl?: string;
|
|
12
|
+
readonly models: readonly ElevenLabsModel[];
|
|
13
|
+
readonly limits?: Partial<LlmProviderLimits>;
|
|
14
|
+
}
|
|
15
|
+
export declare function createElevenLabsProvider(options: ElevenLabsProviderOptions): LlmProvider;
|
|
16
|
+
//# sourceMappingURL=elevenlabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elevenlabs.d.ts","sourceRoot":"","sources":["../../../../src/commands/llm/providers/elevenlabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAwE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAI3H,MAAM,WAAW,eAAgB,SAAQ,QAAQ;IAC/C,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,OAAO,CAAC;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC9C;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,WAAW,CAqCxF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { baseUrl, credential, providerLimits, fields, jsonBody, responseBytes } from "./shared.js";
|
|
2
|
+
const audioFormats = { "audio/mpeg": "mp3_44100_128", "audio/wav": "wav_44100", "audio/pcm": "pcm_44100", "audio/ogg": "opus_48000_128", "audio/basic": "ulaw_8000" };
|
|
3
|
+
export function createElevenLabsProvider(options) {
|
|
4
|
+
const origin = baseUrl(options.baseUrl ?? "https://api.elevenlabs.io");
|
|
5
|
+
const headers = [["xi-api-key", credential(options.apiKey)]];
|
|
6
|
+
const transport = options.transport;
|
|
7
|
+
const limits = providerLimits(options.limits);
|
|
8
|
+
const models = options.models.map(model => Object.freeze({ ...model, ...(model.aliases ? { aliases: Object.freeze([...model.aliases]) } : {}), ...(model.attachmentTypes ? { attachmentTypes: Object.freeze([...model.attachmentTypes]) } : {}) }));
|
|
9
|
+
if (typeof transport !== "function")
|
|
10
|
+
throw new TypeError("Provider transport is required");
|
|
11
|
+
for (const model of models) {
|
|
12
|
+
if (!["tts", "music"].includes(model.endpoint))
|
|
13
|
+
throw new TypeError("Invalid ElevenLabs endpoint");
|
|
14
|
+
if (!Object.hasOwn(audioFormats, model.outputType ?? "") || (model.endpoint === "music" && model.outputType === "audio/wav"))
|
|
15
|
+
throw new TypeError("Unsupported ElevenLabs model outputType");
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
name: "elevenlabs", models: Object.freeze(models),
|
|
19
|
+
async *complete(request) {
|
|
20
|
+
request.signal.throwIfAborted();
|
|
21
|
+
const model = models.find(candidate => candidate.id === request.model);
|
|
22
|
+
if (!model)
|
|
23
|
+
throw new Error(`Unknown model: ${request.model}`);
|
|
24
|
+
if (request.attachments.length)
|
|
25
|
+
throw new TypeError("ElevenLabs reference endpoints do not accept attachments");
|
|
26
|
+
if (request.system !== undefined)
|
|
27
|
+
throw new TypeError("ElevenLabs reference endpoints do not accept system prompts");
|
|
28
|
+
const format = audioFormats[model.outputType];
|
|
29
|
+
const { output_format: requestedFormat, ...requestOptions } = request.options;
|
|
30
|
+
if (requestedFormat !== undefined && requestedFormat !== format)
|
|
31
|
+
throw new TypeError("output_format conflicts with model outputType");
|
|
32
|
+
let path, body;
|
|
33
|
+
if (model.endpoint === "tts") {
|
|
34
|
+
const { voice_id: selectedVoice, ...settings } = requestOptions;
|
|
35
|
+
const voice = selectedVoice ?? model.defaultVoiceId;
|
|
36
|
+
if (!voice)
|
|
37
|
+
throw new TypeError("ElevenLabs TTS requires voice_id or defaultVoiceId");
|
|
38
|
+
path = `/v1/text-to-speech/${encodeURIComponent(voice)}`;
|
|
39
|
+
body = { text: request.prompt, model_id: model.id, voice_settings: fields(settings, ["stability", "similarity_boost", "style", "speed"], ["use_speaker_boost"]) };
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
path = "/v1/music";
|
|
43
|
+
body = { ...fields(requestOptions, ["music_length_ms", "seed"], ["force_instrumental", "respect_sections_durations"]), prompt: request.prompt, model_id: model.id };
|
|
44
|
+
if (body.music_length_ms !== undefined && !Number.isInteger(body.music_length_ms))
|
|
45
|
+
throw new TypeError("Invalid music_length_ms: expected integer");
|
|
46
|
+
}
|
|
47
|
+
yield* responseBytes(transport, `${origin}${path}?output_format=${format}`, headers, request.signal, limits.maxResponseBytes, jsonBody(body, limits.maxRequestBytes));
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=elevenlabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elevenlabs.js","sourceRoot":"","sources":["../../../../src/commands/llm/providers/elevenlabs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createElevenLabsProvider,
|
|
3
|
+
createOpenAiProvider
|
|
4
|
+
} from "../../../chunks/chunk-BZUQJTOZ.js";
|
|
5
|
+
import "../../../chunks/chunk-EUTSYRNM.js";
|
|
6
|
+
import "../../../chunks/chunk-KYU6MXVK.js";
|
|
7
|
+
import "../../../chunks/chunk-FDGESHPB.js";
|
|
8
|
+
import "../../../chunks/chunk-2KL6W6NB.js";
|
|
9
|
+
export {
|
|
10
|
+
createElevenLabsProvider,
|
|
11
|
+
createOpenAiProvider
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=index.browser.js.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { createOpenAiProvider, type OpenAiProviderOptions, type OpenAiModel } from "./openai.js";
|
|
2
|
+
export { createElevenLabsProvider, type ElevenLabsProviderOptions, type ElevenLabsModel } from "./elevenlabs.js";
|
|
3
|
+
export type { LlmProviderLimits } from "./shared.js";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/llm/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,wBAAwB,EAAE,KAAK,yBAAyB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACjH,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/commands/llm/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAgD,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,wBAAwB,EAAwD,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { LlmModel, LlmProvider } from "../types.js";
|
|
2
|
+
import type { HttpTransport } from "../../network/types.js";
|
|
3
|
+
import { type LlmProviderLimits } from "./shared.js";
|
|
4
|
+
export interface OpenAiModel extends LlmModel {
|
|
5
|
+
readonly endpoint: "chat" | "images" | "videos";
|
|
6
|
+
}
|
|
7
|
+
export interface OpenAiProviderOptions {
|
|
8
|
+
readonly transport: HttpTransport;
|
|
9
|
+
readonly apiKey: string;
|
|
10
|
+
readonly baseUrl?: string;
|
|
11
|
+
readonly models: readonly OpenAiModel[];
|
|
12
|
+
readonly limits?: Partial<LlmProviderLimits>;
|
|
13
|
+
}
|
|
14
|
+
export declare function createOpenAiProvider(options: OpenAiProviderOptions): LlmProvider;
|
|
15
|
+
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../../src/commands/llm/providers/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,EAAmI,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEtL,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;CACjD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC9C;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,WAAW,CAyDhF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { delay } from "../../network/shared.js";
|
|
2
|
+
import { baseUrl, credential, providerLimits, fields, jsonBody, multipart, toBase64, fromBase64, responseBytes, responseJson, chatEvents } from "./shared.js";
|
|
3
|
+
export function createOpenAiProvider(options) {
|
|
4
|
+
const origin = baseUrl(options.baseUrl ?? "https://api.openai.com/v1");
|
|
5
|
+
const headers = [["Authorization", `Bearer ${credential(options.apiKey)}`]];
|
|
6
|
+
const transport = options.transport;
|
|
7
|
+
const limits = providerLimits(options.limits);
|
|
8
|
+
const models = options.models.map(model => Object.freeze({ ...model, ...(model.aliases ? { aliases: Object.freeze([...model.aliases]) } : {}), ...(model.attachmentTypes ? { attachmentTypes: Object.freeze([...model.attachmentTypes]) } : {}) }));
|
|
9
|
+
if (typeof transport !== "function")
|
|
10
|
+
throw new TypeError("Provider transport is required");
|
|
11
|
+
for (const model of models) {
|
|
12
|
+
if (!["chat", "images", "videos"].includes(model.endpoint))
|
|
13
|
+
throw new TypeError("Invalid OpenAI endpoint");
|
|
14
|
+
if (model.endpoint === "images" && !["image/png", "image/jpeg", "image/webp"].includes(model.outputType ?? ""))
|
|
15
|
+
throw new TypeError("Image models require outputType image/png, image/jpeg or image/webp");
|
|
16
|
+
if (model.endpoint === "videos" && model.outputType !== "video/mp4")
|
|
17
|
+
throw new TypeError("Video models require outputType video/mp4");
|
|
18
|
+
if (model.endpoint === "chat" && model.outputType !== undefined && !model.outputType.startsWith("text/"))
|
|
19
|
+
throw new TypeError("Chat models require a text outputType");
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
name: "openai", models: Object.freeze(models),
|
|
23
|
+
async *complete(request) {
|
|
24
|
+
request.signal.throwIfAborted();
|
|
25
|
+
const model = models.find(candidate => candidate.id === request.model);
|
|
26
|
+
if (!model)
|
|
27
|
+
throw new Error(`Unknown model: ${request.model}`);
|
|
28
|
+
if (request.attachments.some(attachment => !attachment.mimeType.startsWith("image/")))
|
|
29
|
+
throw new TypeError("OpenAI reference endpoints accept only image attachments");
|
|
30
|
+
if (request.attachments.reduce((size, file) => size + file.bytes.length, 0) > limits.maxRequestBytes)
|
|
31
|
+
throw new RangeError("Provider request byte limit exceeded");
|
|
32
|
+
const send = (path, payload) => responseBytes(transport, `${origin}${path}`, headers, request.signal, limits.maxResponseBytes, payload);
|
|
33
|
+
if (model.endpoint === "chat") {
|
|
34
|
+
const content = request.attachments.length ? [{ type: "text", text: request.prompt }, ...request.attachments.map(attachment => ({ type: "image_url", image_url: { url: `data:${attachment.mimeType};base64,${toBase64(attachment.bytes, limits.maxRequestBytes)}` } }))] : request.prompt;
|
|
35
|
+
const messages = [...(request.system === undefined ? [] : [{ role: "system", content: request.system }]), { role: "user", content }];
|
|
36
|
+
const body = jsonBody({ ...fields(request.options, ["temperature", "top_p", "max_tokens", "max_completion_tokens", "frequency_penalty", "presence_penalty", "seed", "n", "top_logprobs"], ["store", "parallel_tool_calls", "logprobs"]), model: model.id, messages, stream: true }, limits.maxRequestBytes);
|
|
37
|
+
yield* chatEvents(send("/chat/completions", body), limits.maxEventBytes, request.signal);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (request.system !== undefined)
|
|
41
|
+
throw new TypeError("System prompts are supported only by chat models");
|
|
42
|
+
if (model.endpoint === "images") {
|
|
43
|
+
const outputFormat = model.outputType === "image/jpeg" ? "jpeg" : model.outputType === "image/webp" ? "webp" : "png";
|
|
44
|
+
if (request.options.output_format !== undefined && request.options.output_format !== outputFormat)
|
|
45
|
+
throw new TypeError("output_format conflicts with model outputType");
|
|
46
|
+
const values = { ...fields(request.options, ["n", "output_compression", "partial_images"], ["stream"]), output_format: outputFormat, model: model.id, prompt: request.prompt };
|
|
47
|
+
if (values.stream === true)
|
|
48
|
+
throw new TypeError("Image event streaming is not supported by this reference provider");
|
|
49
|
+
const payload = request.attachments.length ? multipart(values, request.attachments.map(file => ({ ...file, field: "image[]" })), limits.maxRequestBytes) : jsonBody(values, limits.maxRequestBytes);
|
|
50
|
+
const result = await responseJson(send(request.attachments.length ? "/images/edits" : "/images/generations", payload), limits.maxResponseBytes, request.signal);
|
|
51
|
+
if (!Array.isArray(result.data) || result.data.length !== 1)
|
|
52
|
+
throw new TypeError("Expected one generated image");
|
|
53
|
+
yield fromBase64(result.data[0]?.b64_json, limits.maxResponseBytes);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (request.attachments.length > 1)
|
|
57
|
+
throw new TypeError("Videos accept one input_reference attachment");
|
|
58
|
+
const payload = multipart({ ...request.options, model: model.id, prompt: request.prompt }, request.attachments.map(file => ({ ...file, field: "input_reference" })), limits.maxRequestBytes);
|
|
59
|
+
let job = await responseJson(send("/videos", payload), limits.maxResponseBytes, request.signal);
|
|
60
|
+
if (typeof job.id !== "string" || !job.id)
|
|
61
|
+
throw new TypeError("Invalid video job id");
|
|
62
|
+
const path = `/videos/${encodeURIComponent(job.id)}`;
|
|
63
|
+
let polls = 0;
|
|
64
|
+
while (job.status !== "completed") {
|
|
65
|
+
if (job.status === "failed")
|
|
66
|
+
throw new Error("Provider video generation failed");
|
|
67
|
+
if (job.status !== "queued" && job.status !== "in_progress")
|
|
68
|
+
throw new TypeError("Invalid video job status");
|
|
69
|
+
if (polls++ >= limits.maxPolls)
|
|
70
|
+
throw new RangeError("Provider video polling limit exceeded");
|
|
71
|
+
await delay(limits.pollIntervalMs, request.signal);
|
|
72
|
+
job = await responseJson(send(path), limits.maxResponseBytes, request.signal);
|
|
73
|
+
}
|
|
74
|
+
yield* send(`${path}/content`);
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../src/commands/llm/providers/openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type ByteSource } from "../../../contracts/io.js";
|
|
2
|
+
import type { HttpHeaders, HttpTransport } from "../../network/types.js";
|
|
3
|
+
export interface LlmProviderLimits {
|
|
4
|
+
readonly maxRequestBytes: number;
|
|
5
|
+
readonly maxResponseBytes: number;
|
|
6
|
+
readonly maxEventBytes: number;
|
|
7
|
+
readonly maxPolls: number;
|
|
8
|
+
readonly pollIntervalMs: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function providerLimits(input?: Partial<LlmProviderLimits>): LlmProviderLimits;
|
|
11
|
+
export declare function baseUrl(value: string): string;
|
|
12
|
+
export declare function credential(value: string): string;
|
|
13
|
+
export declare function fields(options: Readonly<Record<string, string>>, numbers: readonly string[], booleans: readonly string[]): Record<string, unknown>;
|
|
14
|
+
export declare function jsonBody(value: unknown, limit: number): {
|
|
15
|
+
body: ByteSource;
|
|
16
|
+
contentType: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function toBase64(bytes: Uint8Array, limit: number): string;
|
|
19
|
+
export declare function fromBase64(value: unknown, limit: number): Uint8Array;
|
|
20
|
+
export declare function multipart(options: Record<string, unknown>, files: readonly {
|
|
21
|
+
field: string;
|
|
22
|
+
mimeType: string;
|
|
23
|
+
bytes: Uint8Array;
|
|
24
|
+
}[], limit: number): {
|
|
25
|
+
body: ByteSource;
|
|
26
|
+
contentType: string;
|
|
27
|
+
};
|
|
28
|
+
export declare function responseBytes(transport: HttpTransport, url: string, headers: HttpHeaders, signal: AbortSignal, limit: number, payload?: {
|
|
29
|
+
body: ByteSource;
|
|
30
|
+
contentType: string;
|
|
31
|
+
}): AsyncGenerator<Uint8Array>;
|
|
32
|
+
export declare function responseJson(source: ByteSource, limit: number, signal: AbortSignal): Promise<Record<string, unknown>>;
|
|
33
|
+
export declare function chatEvents(source: ByteSource, limit: number, signal: AbortSignal): AsyncGenerator<string>;
|
|
34
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../../src/commands/llm/providers/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAgB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,KAAK,GAAE,OAAO,CAAC,iBAAiB,CAAM,GAAG,iBAAiB,CAMxF;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI7C;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGhD;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAclJ;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAMjG;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAKpE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAkC9L;AAED,wBAAuB,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAAC,UAAU,CAAC,CAkCrN;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAK3H;AAED,wBAAuB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAmChH"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import { collectBytes, readBytes } from "../../../contracts/io.js";
|
|
2
|
+
import { withSignal } from "../../network/shared.js";
|
|
3
|
+
export function providerLimits(input = {}) {
|
|
4
|
+
const limits = { maxRequestBytes: 64 * 1024 * 1024, maxResponseBytes: 64 * 1024 * 1024, maxEventBytes: 1024 * 1024, maxPolls: 120, pollIntervalMs: 1000, ...input };
|
|
5
|
+
for (const [name, value] of Object.entries(limits)) {
|
|
6
|
+
if (!Number.isSafeInteger(value) || value < (name === "maxPolls" || name === "pollIntervalMs" ? 0 : 1))
|
|
7
|
+
throw new RangeError(`Invalid provider limit: ${name}`);
|
|
8
|
+
}
|
|
9
|
+
return Object.freeze(limits);
|
|
10
|
+
}
|
|
11
|
+
export function baseUrl(value) {
|
|
12
|
+
const url = new URL(value);
|
|
13
|
+
if (!["https:", "http:"].includes(url.protocol) || url.username || url.password || url.search || url.hash)
|
|
14
|
+
throw new TypeError("Invalid provider baseUrl");
|
|
15
|
+
return url.href.endsWith("/") ? url.href.slice(0, -1) : url.href;
|
|
16
|
+
}
|
|
17
|
+
export function credential(value) {
|
|
18
|
+
if (typeof value !== "string" || value.length === 0 || [...value].some(char => char.charCodeAt(0) < 32 || char.charCodeAt(0) === 127))
|
|
19
|
+
throw new TypeError("Invalid provider apiKey");
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
export function fields(options, numbers, booleans) {
|
|
23
|
+
const result = Object.create(null);
|
|
24
|
+
for (const [key, value] of Object.entries(options)) {
|
|
25
|
+
if (numbers.includes(key)) {
|
|
26
|
+
let numeric;
|
|
27
|
+
try {
|
|
28
|
+
numeric = JSON.parse(value);
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
throw new TypeError(`Invalid numeric option: ${key}`);
|
|
32
|
+
}
|
|
33
|
+
if (typeof numeric !== "number" || !Number.isFinite(numeric))
|
|
34
|
+
throw new TypeError(`Invalid numeric option: ${key}`);
|
|
35
|
+
result[key] = numeric;
|
|
36
|
+
}
|
|
37
|
+
else if (booleans.includes(key)) {
|
|
38
|
+
if (value !== "true" && value !== "false")
|
|
39
|
+
throw new TypeError(`Invalid boolean option: ${key}`);
|
|
40
|
+
result[key] = value === "true";
|
|
41
|
+
}
|
|
42
|
+
else
|
|
43
|
+
result[key] = value;
|
|
44
|
+
}
|
|
45
|
+
return result;
|
|
46
|
+
}
|
|
47
|
+
export function jsonBody(value, limit) {
|
|
48
|
+
const text = JSON.stringify(value);
|
|
49
|
+
if (text.length > limit)
|
|
50
|
+
throw new RangeError("Provider request byte limit exceeded");
|
|
51
|
+
const bytes = new TextEncoder().encode(text);
|
|
52
|
+
if (bytes.length > limit)
|
|
53
|
+
throw new RangeError("Provider request byte limit exceeded");
|
|
54
|
+
return { body: (async function* () { yield bytes; })(), contentType: "application/json" };
|
|
55
|
+
}
|
|
56
|
+
export function toBase64(bytes, limit) {
|
|
57
|
+
if (Math.ceil(bytes.length / 3) * 4 > limit)
|
|
58
|
+
throw new RangeError("Provider request byte limit exceeded");
|
|
59
|
+
let text = "";
|
|
60
|
+
for (let index = 0; index < bytes.length; index += 8192)
|
|
61
|
+
text += String.fromCharCode(...bytes.subarray(index, index + 8192));
|
|
62
|
+
return btoa(text);
|
|
63
|
+
}
|
|
64
|
+
export function fromBase64(value, limit) {
|
|
65
|
+
if (typeof value !== "string" || value.length % 4 !== 0 || value.length > Math.ceil(limit / 3) * 4)
|
|
66
|
+
throw new TypeError("Invalid bounded image base64 response");
|
|
67
|
+
const text = atob(value);
|
|
68
|
+
if (btoa(text) !== value || text.length > limit)
|
|
69
|
+
throw new TypeError("Invalid bounded image base64 response");
|
|
70
|
+
return Uint8Array.from(text, char => char.charCodeAt(0));
|
|
71
|
+
}
|
|
72
|
+
export function multipart(options, files, limit) {
|
|
73
|
+
const encoder = new TextEncoder();
|
|
74
|
+
const parts = [];
|
|
75
|
+
const entries = Object.entries(options).map(([name, value]) => {
|
|
76
|
+
if (![...name].every(char => "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-".includes(char)))
|
|
77
|
+
throw new TypeError("Invalid multipart option name");
|
|
78
|
+
return [name, String(value)];
|
|
79
|
+
});
|
|
80
|
+
let size = files.reduce((sum, file) => sum + file.bytes.length, 0);
|
|
81
|
+
for (const [, value] of entries) {
|
|
82
|
+
if (value.length > limit)
|
|
83
|
+
throw new RangeError("Provider request byte limit exceeded");
|
|
84
|
+
size += encoder.encode(value).length;
|
|
85
|
+
}
|
|
86
|
+
if (size > limit)
|
|
87
|
+
throw new RangeError("Provider request byte limit exceeded");
|
|
88
|
+
let boundary = "safe-bash-llm-boundary";
|
|
89
|
+
const contains = (bytes, needle) => {
|
|
90
|
+
outer: for (let start = 0; start <= bytes.length - needle.length; start++) {
|
|
91
|
+
for (let index = 0; index < needle.length; index++)
|
|
92
|
+
if (bytes[start + index] !== needle[index])
|
|
93
|
+
continue outer;
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
};
|
|
98
|
+
let attempts = 0;
|
|
99
|
+
while (entries.some(([, value]) => value.includes(boundary)) || files.some(file => contains(file.bytes, encoder.encode(boundary)))) {
|
|
100
|
+
if (attempts++ === 32)
|
|
101
|
+
throw new RangeError("Provider multipart boundary collision limit exceeded");
|
|
102
|
+
boundary += "x";
|
|
103
|
+
}
|
|
104
|
+
for (const [name, value] of entries)
|
|
105
|
+
parts.push(encoder.encode(`--${boundary}\r\nContent-Disposition: form-data; name="${name}"\r\n\r\n${value}\r\n`));
|
|
106
|
+
for (const [index, file] of files.entries()) {
|
|
107
|
+
if ([...file.mimeType].some(char => char.charCodeAt(0) < 32 || char.charCodeAt(0) > 126))
|
|
108
|
+
throw new TypeError("Invalid attachment MIME type");
|
|
109
|
+
parts.push(encoder.encode(`--${boundary}\r\nContent-Disposition: form-data; name="${file.field}"; filename="attachment-${index}"\r\nContent-Type: ${file.mimeType}\r\n\r\n`), file.bytes, encoder.encode("\r\n"));
|
|
110
|
+
}
|
|
111
|
+
parts.push(encoder.encode(`--${boundary}--\r\n`));
|
|
112
|
+
if (parts.reduce((sum, part) => sum + part.length, 0) > limit)
|
|
113
|
+
throw new RangeError("Provider request byte limit exceeded");
|
|
114
|
+
return { body: (async function* () { yield* parts; })(), contentType: `multipart/form-data; boundary=${boundary}` };
|
|
115
|
+
}
|
|
116
|
+
export async function* responseBytes(transport, url, headers, signal, limit, payload) {
|
|
117
|
+
signal.throwIfAborted();
|
|
118
|
+
let response;
|
|
119
|
+
let abandoned = false;
|
|
120
|
+
let disposal;
|
|
121
|
+
const dispose = () => {
|
|
122
|
+
disposal ??= Promise.resolve().then(() => response.dispose());
|
|
123
|
+
void disposal.catch(() => { });
|
|
124
|
+
return disposal;
|
|
125
|
+
};
|
|
126
|
+
const acquiring = Promise.resolve().then(() => {
|
|
127
|
+
signal.throwIfAborted();
|
|
128
|
+
return transport({ url, method: payload ? "POST" : "GET", headers: payload ? [...headers, ["Content-Type", payload.contentType]] : headers, signal, ...(payload ? { body: payload.body } : {}) });
|
|
129
|
+
}).then(value => {
|
|
130
|
+
response = value;
|
|
131
|
+
if (abandoned) {
|
|
132
|
+
void dispose();
|
|
133
|
+
throw signal.reason;
|
|
134
|
+
}
|
|
135
|
+
return value;
|
|
136
|
+
});
|
|
137
|
+
try {
|
|
138
|
+
response = await withSignal(() => acquiring, signal);
|
|
139
|
+
if (response.status < 200 || response.status >= 300)
|
|
140
|
+
throw new Error(`Provider HTTP ${response.status}`);
|
|
141
|
+
let size = 0;
|
|
142
|
+
for await (const chunk of readBytes(response.body, signal)) {
|
|
143
|
+
size += chunk.length;
|
|
144
|
+
if (size > limit)
|
|
145
|
+
throw new RangeError("Provider response byte limit exceeded");
|
|
146
|
+
yield chunk;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
abandoned = true;
|
|
151
|
+
if (response) {
|
|
152
|
+
const disposing = dispose();
|
|
153
|
+
if (!signal.aborted)
|
|
154
|
+
await withSignal(() => disposing, signal);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
export async function responseJson(source, limit, signal) {
|
|
159
|
+
const bytes = await collectBytes(source, { maxBytes: limit, signal });
|
|
160
|
+
const value = JSON.parse(new TextDecoder("utf-8", { fatal: true }).decode(bytes));
|
|
161
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
162
|
+
throw new TypeError("Invalid provider JSON response");
|
|
163
|
+
return value;
|
|
164
|
+
}
|
|
165
|
+
export async function* chatEvents(source, limit, signal) {
|
|
166
|
+
const decoder = new TextDecoder("utf-8", { fatal: true });
|
|
167
|
+
let line = "", data = [], size = 0, afterCR = false, done = false;
|
|
168
|
+
const processLine = () => {
|
|
169
|
+
const value = line;
|
|
170
|
+
line = "";
|
|
171
|
+
if (value === "") {
|
|
172
|
+
const event = data.join("\n");
|
|
173
|
+
data = [];
|
|
174
|
+
size = 0;
|
|
175
|
+
if (!event)
|
|
176
|
+
return;
|
|
177
|
+
if (event === "[DONE]") {
|
|
178
|
+
done = true;
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
const parsed = JSON.parse(event);
|
|
182
|
+
if (parsed.error)
|
|
183
|
+
throw new Error("Provider chat error");
|
|
184
|
+
if (!Array.isArray(parsed.choices))
|
|
185
|
+
throw new TypeError("Invalid chat event");
|
|
186
|
+
const content = parsed.choices[0]?.delta?.content;
|
|
187
|
+
if (content !== undefined && content !== null && typeof content !== "string")
|
|
188
|
+
throw new TypeError("Invalid chat content");
|
|
189
|
+
return typeof content === "string" ? content : undefined;
|
|
190
|
+
}
|
|
191
|
+
if (value.startsWith("data:"))
|
|
192
|
+
data.push(value.slice(value[5] === " " ? 6 : 5));
|
|
193
|
+
};
|
|
194
|
+
for await (const chunk of readBytes(source, signal)) {
|
|
195
|
+
const text = decoder.decode(chunk, { stream: true });
|
|
196
|
+
for (const char of text) {
|
|
197
|
+
if (afterCR && char === "\n") {
|
|
198
|
+
afterCR = false;
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
afterCR = char === "\r";
|
|
202
|
+
const codePoint = char.codePointAt(0);
|
|
203
|
+
size += codePoint < 0x80 ? 1 : codePoint < 0x800 ? 2 : codePoint < 0x10000 ? 3 : 4;
|
|
204
|
+
if (size > limit)
|
|
205
|
+
throw new RangeError("Provider SSE event byte limit exceeded");
|
|
206
|
+
if (char === "\r" || char === "\n") {
|
|
207
|
+
const output = processLine();
|
|
208
|
+
if (output !== undefined)
|
|
209
|
+
yield output;
|
|
210
|
+
if (done)
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
else
|
|
214
|
+
line += char;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
decoder.decode();
|
|
218
|
+
throw new Error("Truncated provider chat stream");
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../src/commands/llm/providers/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAmB,MAAM,0BAA0B,CAAC;AAEpF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAUrD,MAAM,UAAU,cAAc,CAAC,QAAoC,EAAE;IACnE,MAAM,MAAM,GAAG,EAAE,eAAe,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,gBAAgB,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,aAAa,EAAE,IAAI,GAAG,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;IACpK,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;IAClK,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC3B,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI;QAAE,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAC3J,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,yBAAyB,CAAC,CAAC;IACtL,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,OAAyC,EAAE,OAA0B,EAAE,QAA2B;IACvH,MAAM,MAAM,GAA4B,MAAM,CAAC,MAAM,CAAC,IAAI,CAA4B,CAAC;IACvF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,OAAgB,CAAC;YACrB,IAAI,CAAC;gBAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,MAAM,IAAI,SAAS,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;YAAC,CAAC;YACrG,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,MAAM,IAAI,SAAS,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;YACpH,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;QACxB,CAAC;aAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO;gBAAE,MAAM,IAAI,SAAS,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;YACjG,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,KAAK,MAAM,CAAC;QACjC,CAAC;;YAAM,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAc,EAAE,KAAa;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK;QAAE,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;IACtF,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK;QAAE,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;IACvF,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC,MAAM,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAiB,EAAE,KAAa;IACvD,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;QAAE,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;IAC1G,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI;QAAE,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;IAC7H,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,KAAa;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;IACjK,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;IACzB,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,uCAAuC,CAAC,CAAC;IAC9G,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAgC,EAAE,KAAwE,EAAE,KAAa;IACjJ,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QAC5D,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,kEAAkE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACtK,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAU,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnE,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK;YAAE,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;QACvF,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IACvC,CAAC;IACD,IAAI,IAAI,GAAG,KAAK;QAAE,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;IAC/E,IAAI,QAAQ,GAAG,wBAAwB,CAAC;IACxC,MAAM,QAAQ,GAAG,CAAC,KAAiB,EAAE,MAAkB,EAAW,EAAE;QAClE,KAAK,EAAE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YAC1E,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE;gBAAE,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC;oBAAE,SAAS,KAAK,CAAC;YAC/G,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACnI,IAAI,QAAQ,EAAE,KAAK,EAAE;YAAE,MAAM,IAAI,UAAU,CAAC,sDAAsD,CAAC,CAAC;QACpG,QAAQ,IAAI,GAAG,CAAC;IAClB,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,6CAA6C,IAAI,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC;IACvJ,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5C,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAC9I,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,6CAA6C,IAAI,CAAC,KAAK,2BAA2B,KAAK,sBAAsB,IAAI,CAAC,QAAQ,UAAU,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACpN,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,QAAQ,CAAC,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,KAAK;QAAE,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;IAC5H,OAAO,EAAE,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,iCAAiC,QAAQ,EAAE,EAAE,CAAC;AACtH,CAAC;AAED,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,aAAa,CAAC,SAAwB,EAAE,GAAW,EAAE,OAAoB,EAAE,MAAmB,EAAE,KAAa,EAAE,OAAmD;IACvL,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,IAAI,QAAkC,CAAC;IACvC,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,QAAmC,CAAC;IACxC,MAAM,OAAO,GAAG,GAAkB,EAAE;QAClC,QAAQ,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/D,KAAK,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC9B,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IACF,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;QAC5C,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;QACd,QAAQ,GAAG,KAAK,CAAC;QACjB,IAAI,SAAS,EAAE,CAAC;YAAC,KAAK,OAAO,EAAE,CAAC;YAAC,MAAM,MAAM,CAAC,MAAM,CAAC;QAAC,CAAC;QACvD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACrD,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QACzG,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;YAC3D,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;YACrB,IAAI,IAAI,GAAG,KAAK;gBAAE,MAAM,IAAI,UAAU,CAAC,uCAAuC,CAAC,CAAC;YAChF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;YAAS,CAAC;QACT,SAAS,GAAG,IAAI,CAAC;QACjB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,SAAS,GAAG,OAAO,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,OAAO;gBAAE,MAAM,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAkB,EAAE,KAAa,EAAE,MAAmB;IACvF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3F,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;IACvH,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,UAAU,CAAC,MAAkB,EAAE,KAAa,EAAE,MAAmB;IACtF,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,IAAI,IAAI,GAAG,EAAE,EAAE,IAAI,GAAa,EAAE,EAAE,IAAI,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,CAAC;IAC5E,MAAM,WAAW,GAAG,GAAuB,EAAE;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC;QAAC,IAAI,GAAG,EAAE,CAAC;QAC9B,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAAC,IAAI,GAAG,EAAE,CAAC;YAAC,IAAI,GAAG,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAAC,IAAI,GAAG,IAAI,CAAC;gBAAC,OAAO;YAAC,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAuE,CAAC;YACvG,IAAI,MAAM,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACzD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;gBAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,CAAC,CAAC;YAC9E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;YAClD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,MAAM,IAAI,SAAS,CAAC,sBAAsB,CAAC,CAAC;YAC1H,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC;IACF,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,OAAO,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAAC,OAAO,GAAG,KAAK,CAAC;gBAAC,SAAS;YAAC,CAAC;YAC5D,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;YACxB,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;YACvC,IAAI,IAAI,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnF,IAAI,IAAI,GAAG,KAAK;gBAAE,MAAM,IAAI,UAAU,CAAC,wCAAwC,CAAC,CAAC;YACjF,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;gBAC7B,IAAI,MAAM,KAAK,SAAS;oBAAE,MAAM,MAAM,CAAC;gBACvC,IAAI,IAAI;oBAAE,OAAO;YACnB,CAAC;;gBAAM,IAAI,IAAI,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,MAAM,EAAE,CAAC;IACjB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACpD,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface LlmProvider {
|
|
2
|
+
readonly name: string;
|
|
3
|
+
readonly models: readonly LlmModel[];
|
|
4
|
+
complete(request: LlmRequest): AsyncIterable<string | Uint8Array>;
|
|
5
|
+
}
|
|
6
|
+
export interface LlmModel {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly aliases?: readonly string[];
|
|
9
|
+
readonly attachmentTypes?: readonly string[];
|
|
10
|
+
readonly outputType?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface LlmRequest {
|
|
13
|
+
model: string;
|
|
14
|
+
prompt: string;
|
|
15
|
+
system?: string;
|
|
16
|
+
attachments: readonly {
|
|
17
|
+
mimeType: string;
|
|
18
|
+
bytes: Uint8Array;
|
|
19
|
+
}[];
|
|
20
|
+
options: Readonly<Record<string, string>>;
|
|
21
|
+
signal: AbortSignal;
|
|
22
|
+
}
|
|
23
|
+
export interface LlmCommandsOptions {
|
|
24
|
+
readonly providers: readonly LlmProvider[];
|
|
25
|
+
readonly defaultModel?: string;
|
|
26
|
+
readonly replace?: boolean;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/commands/llm/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,SAAS;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC;IAChE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,MAAM,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,SAAS,EAAE,SAAS,WAAW,EAAE,CAAC;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/commands/llm/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import {
|
|
2
|
-
CurlError,
|
|
3
|
-
cloudflareWorkerNetworkLimits,
|
|
4
2
|
createCurlCommand,
|
|
5
3
|
createCurlCommands,
|
|
6
4
|
createFetchTransport,
|
|
@@ -8,14 +6,21 @@ import {
|
|
|
8
6
|
createOriginAuthorizer,
|
|
9
7
|
createWgetCommand,
|
|
10
8
|
curlCommands,
|
|
11
|
-
defaultNetworkLimits,
|
|
12
9
|
networkCommands
|
|
13
|
-
} from "../../chunks/chunk-
|
|
14
|
-
import
|
|
15
|
-
|
|
10
|
+
} from "../../chunks/chunk-VY5N6O6I.js";
|
|
11
|
+
import {
|
|
12
|
+
CurlError,
|
|
13
|
+
cloudflareWorkerNetworkLimits,
|
|
14
|
+
defaultNetworkLimits
|
|
15
|
+
} from "../../chunks/chunk-EUTSYRNM.js";
|
|
16
|
+
import "../../chunks/chunk-O7BRWSKX.js";
|
|
17
|
+
import "../../chunks/chunk-KYU6MXVK.js";
|
|
18
|
+
import "../../chunks/chunk-WXUZXY35.js";
|
|
19
|
+
import "../../chunks/chunk-EUNOVYVT.js";
|
|
20
|
+
import "../../chunks/chunk-TTTOMUAY.js";
|
|
16
21
|
import "../../chunks/chunk-DPJWEGIX.js";
|
|
17
|
-
import "../../chunks/chunk-
|
|
18
|
-
import "../../chunks/chunk-
|
|
22
|
+
import "../../chunks/chunk-UO33SQJU.js";
|
|
23
|
+
import "../../chunks/chunk-FDGESHPB.js";
|
|
19
24
|
import "../../chunks/chunk-2KL6W6NB.js";
|
|
20
25
|
export {
|
|
21
26
|
CurlError,
|
|
@@ -2,10 +2,12 @@ import {
|
|
|
2
2
|
createPrCommand,
|
|
3
3
|
createPrCommands,
|
|
4
4
|
prCommands
|
|
5
|
-
} from "../../chunks/chunk-
|
|
5
|
+
} from "../../chunks/chunk-QX2X5EC5.js";
|
|
6
|
+
import "../../chunks/chunk-EUNOVYVT.js";
|
|
7
|
+
import "../../chunks/chunk-TTTOMUAY.js";
|
|
6
8
|
import "../../chunks/chunk-DPJWEGIX.js";
|
|
7
|
-
import "../../chunks/chunk-
|
|
8
|
-
import "../../chunks/chunk-
|
|
9
|
+
import "../../chunks/chunk-UO33SQJU.js";
|
|
10
|
+
import "../../chunks/chunk-FDGESHPB.js";
|
|
9
11
|
import "../../chunks/chunk-2KL6W6NB.js";
|
|
10
12
|
export {
|
|
11
13
|
createPrCommand,
|