@anvia/core 1.0.0-rc.1 → 1.0.0-rc.2
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 +283 -84
- package/dist/agent/index.d.ts +26 -18
- package/dist/agent/index.js +19 -15
- package/dist/agent-yBG8e9Jj.d.ts +153 -0
- package/dist/chunk-4WI3VGZK.js +127 -0
- package/dist/chunk-4WI3VGZK.js.map +1 -0
- package/dist/{chunk-R2LJSQUW.js → chunk-77AIYARB.js} +251 -104
- package/dist/chunk-77AIYARB.js.map +1 -0
- package/dist/chunk-AI5JMUW7.js +45 -0
- package/dist/chunk-AI5JMUW7.js.map +1 -0
- package/dist/chunk-BEYBU7VJ.js +53 -0
- package/dist/chunk-BEYBU7VJ.js.map +1 -0
- package/dist/chunk-CWM7B2OO.js +315 -0
- package/dist/chunk-CWM7B2OO.js.map +1 -0
- package/dist/{chunk-6WGGTJE6.js → chunk-D37WMSP6.js} +52 -60
- package/dist/chunk-D37WMSP6.js.map +1 -0
- package/dist/{chunk-IL3ZSNJI.js → chunk-DBSCKTUL.js} +845 -800
- package/dist/chunk-DBSCKTUL.js.map +1 -0
- package/dist/chunk-EINTGEGY.js +629 -0
- package/dist/chunk-EINTGEGY.js.map +1 -0
- package/dist/chunk-FMHLROPQ.js +351 -0
- package/dist/chunk-FMHLROPQ.js.map +1 -0
- package/dist/{chunk-A3UBYTJT.js → chunk-FN7HLLAZ.js} +60 -6
- package/dist/chunk-FN7HLLAZ.js.map +1 -0
- package/dist/chunk-GKDERULJ.js +50 -0
- package/dist/chunk-GKDERULJ.js.map +1 -0
- package/dist/{chunk-FNQB2JEH.js → chunk-KIDGIJM7.js} +26 -5
- package/dist/chunk-KIDGIJM7.js.map +1 -0
- package/dist/chunk-KR3RCCHJ.js +500 -0
- package/dist/chunk-KR3RCCHJ.js.map +1 -0
- package/dist/{chunk-I6G7BC42.js → chunk-MGNTXGTX.js} +2 -6
- package/dist/chunk-MGNTXGTX.js.map +1 -0
- package/dist/{chunk-5XKDW36Z.js → chunk-OJH6HWHX.js} +64 -75
- package/dist/chunk-OJH6HWHX.js.map +1 -0
- package/dist/chunk-QOUPWOGW.js +29 -0
- package/dist/chunk-QOUPWOGW.js.map +1 -0
- package/dist/chunk-TIZYTPJO.js +208 -0
- package/dist/chunk-TIZYTPJO.js.map +1 -0
- package/dist/{chunk-DMPUP4R3.js → chunk-XKYYBABH.js} +5 -5
- package/dist/client-B8DT1vUG.d.ts +83 -0
- package/dist/completion/index.d.ts +5 -4
- package/dist/completion/index.js +25 -28
- package/dist/{dynamic-tools-i9woysFa.d.ts → dynamic-tools-KwEGRbHp.d.ts} +21 -9
- package/dist/embeddings/index.d.ts +11 -9
- package/dist/embeddings/index.js +2 -3
- package/dist/evals/index.d.ts +44 -24
- package/dist/evals/index.js +86 -69
- package/dist/evals/index.js.map +1 -1
- package/dist/extractor/index.d.ts +23 -26
- package/dist/extractor/index.js +7 -8
- package/dist/guardrails/index.d.ts +2 -1
- package/dist/guardrails/index.js +1 -1
- package/dist/image-generation/index.d.ts +18 -16
- package/dist/image-generation/index.js +2 -2
- package/dist/index.d.ts +24 -22
- package/dist/index.js +50 -48
- package/dist/internal/agent.d.ts +30 -19
- package/dist/internal/agent.js +13 -11
- package/dist/loaders/index.d.ts +2 -1
- package/dist/mcp/index.d.ts +19 -13
- package/dist/mcp/index.js +13 -348
- package/dist/mcp/index.js.map +1 -1
- package/dist/memory/index.d.ts +20 -6
- package/dist/memory/index.js +10 -10
- package/dist/message-schema-Cn7ezRfJ.d.ts +52 -0
- package/dist/{middleware-KynLg_RW.d.ts → middleware-C7PdmKF7.d.ts} +4 -4
- package/dist/model-call-options-CZkSw_xN.d.ts +6 -0
- package/dist/model-listing/index.d.ts +3 -1
- package/dist/observability/index.d.ts +19 -5
- package/dist/observability/index.js +8 -5
- package/dist/observability/index.js.map +1 -1
- package/dist/pipeline/index.d.ts +105 -56
- package/dist/pipeline/index.js +422 -230
- package/dist/pipeline/index.js.map +1 -1
- package/dist/{retry-D3Ruy-ba.d.ts → retry-CjvSlKGW.d.ts} +2 -1
- package/dist/skills/index.d.ts +5 -4
- package/dist/skills/index.js +7 -7
- package/dist/speech-generation/index.d.ts +37 -0
- package/dist/speech-generation/index.js +8 -0
- package/dist/{think-tool-DZqZj2LV.d.ts → think-tool-6H2QNQzQ.d.ts} +1 -1
- package/dist/tool/index.d.ts +9 -7
- package/dist/tool/index.js +7 -10
- package/dist/{tool-C_8GudXn.d.ts → tool--Mz4v1eL.d.ts} +15 -7
- package/dist/transcription/index.d.ts +23 -14
- package/dist/transcription/index.js +2 -2
- package/dist/{index-DxB74ybJ.d.ts → types-3x3mOLHU.d.ts} +94 -64
- package/dist/types-BVzM4RsC.d.ts +155 -0
- package/dist/types-CQ_ioXWK.d.ts +319 -0
- package/dist/types-Cr4uiYo5.d.ts +99 -0
- package/dist/{types-DhQfwiZn.d.ts → types-DiJqJejp.d.ts} +1 -1
- package/dist/types-Dld1TpWj.d.ts +130 -0
- package/dist/vector-store/index.d.ts +33 -34
- package/dist/vector-store/index.js +6 -6
- package/package.json +6 -10
- package/dist/agent-DGYY_onS.d.ts +0 -145
- package/dist/audio-generation/index.d.ts +0 -31
- package/dist/audio-generation/index.js +0 -8
- package/dist/chunk-5XKDW36Z.js.map +0 -1
- package/dist/chunk-6WGGTJE6.js.map +0 -1
- package/dist/chunk-A3UBYTJT.js.map +0 -1
- package/dist/chunk-ADH7NNCS.js +0 -512
- package/dist/chunk-ADH7NNCS.js.map +0 -1
- package/dist/chunk-DZ3CKYTH.js +0 -267
- package/dist/chunk-DZ3CKYTH.js.map +0 -1
- package/dist/chunk-FNQB2JEH.js.map +0 -1
- package/dist/chunk-I6G7BC42.js.map +0 -1
- package/dist/chunk-IL3ZSNJI.js.map +0 -1
- package/dist/chunk-J6GNQART.js +0 -122
- package/dist/chunk-J6GNQART.js.map +0 -1
- package/dist/chunk-M3IOWB4Y.js +0 -280
- package/dist/chunk-M3IOWB4Y.js.map +0 -1
- package/dist/chunk-QY5GZ7HR.js +0 -39
- package/dist/chunk-QY5GZ7HR.js.map +0 -1
- package/dist/chunk-R2LJSQUW.js.map +0 -1
- package/dist/chunk-RFDVKCIE.js +0 -12
- package/dist/chunk-RFDVKCIE.js.map +0 -1
- package/dist/chunk-RMUBRRSK.js +0 -34
- package/dist/chunk-RMUBRRSK.js.map +0 -1
- package/dist/chunk-RXKHOYEH.js +0 -466
- package/dist/chunk-RXKHOYEH.js.map +0 -1
- package/dist/chunk-XDRSPSR7.js +0 -38
- package/dist/chunk-XDRSPSR7.js.map +0 -1
- package/dist/chunk-XWUC7CIT.js +0 -1
- package/dist/chunk-XWUC7CIT.js.map +0 -1
- package/dist/errors-CYKUcU89.d.ts +0 -17
- package/dist/json-Zo7K3xmt.d.ts +0 -40
- package/dist/types-B3A4YxaA.d.ts +0 -354
- package/dist/types-BBEGKB9m.d.ts +0 -119
- package/dist/types-DT3nEemY.d.ts +0 -79
- package/dist/types-DulRCYdB.d.ts +0 -70
- package/dist/types-p55Jc-sr.d.ts +0 -47
- package/dist/ui/index.d.ts +0 -107
- package/dist/ui/index.js +0 -10
- package/dist/ui/index.js.map +0 -1
- /package/dist/{chunk-DMPUP4R3.js.map → chunk-XKYYBABH.js.map} +0 -0
- /package/dist/{audio-generation → speech-generation}/index.js.map +0 -0
package/dist/chunk-J6GNQART.js
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createCompletion
|
|
3
|
-
} from "./chunk-M3IOWB4Y.js";
|
|
4
|
-
import {
|
|
5
|
-
toProviderJsonSchema
|
|
6
|
-
} from "./chunk-RFDVKCIE.js";
|
|
7
|
-
import {
|
|
8
|
-
CompletionCapabilityError,
|
|
9
|
-
Message,
|
|
10
|
-
Usage
|
|
11
|
-
} from "./chunk-ADH7NNCS.js";
|
|
12
|
-
import {
|
|
13
|
-
resolveRetryOptions,
|
|
14
|
-
retryDelayMs,
|
|
15
|
-
waitForRetry
|
|
16
|
-
} from "./chunk-A3UBYTJT.js";
|
|
17
|
-
|
|
18
|
-
// src/extractor/extractor.ts
|
|
19
|
-
import { z } from "zod";
|
|
20
|
-
var SUBMIT_TOOL_NAME = "submit";
|
|
21
|
-
var DEFAULT_EXTRACTOR_INSTRUCTIONS = "You are an AI assistant whose purpose is to extract structured data from the provided text.\nYou have access to a `submit` function that defines the structure of the data to extract.\nAlways call the `submit` function with the structured data. Use default or null values when information is missing.";
|
|
22
|
-
var ExtractionError = class extends Error {
|
|
23
|
-
constructor(message, cause) {
|
|
24
|
-
super(message);
|
|
25
|
-
this.cause = cause;
|
|
26
|
-
this.name = "ExtractionError";
|
|
27
|
-
}
|
|
28
|
-
cause;
|
|
29
|
-
};
|
|
30
|
-
var Extractor = class {
|
|
31
|
-
model;
|
|
32
|
-
outputSchema;
|
|
33
|
-
instructions;
|
|
34
|
-
submitTool;
|
|
35
|
-
constructor(options) {
|
|
36
|
-
if (!(options.outputSchema instanceof z.ZodType)) {
|
|
37
|
-
throw new TypeError("Extractor outputSchema must be a Zod schema.");
|
|
38
|
-
}
|
|
39
|
-
this.model = options.model;
|
|
40
|
-
this.outputSchema = options.outputSchema;
|
|
41
|
-
this.instructions = options.instructions === void 0 || options.instructions.length === 0 ? DEFAULT_EXTRACTOR_INSTRUCTIONS : `${DEFAULT_EXTRACTOR_INSTRUCTIONS}
|
|
42
|
-
|
|
43
|
-
${options.instructions}`;
|
|
44
|
-
this.submitTool = {
|
|
45
|
-
name: SUBMIT_TOOL_NAME,
|
|
46
|
-
description: "Submit the structured data extracted from the provided text.",
|
|
47
|
-
parameters: toProviderJsonSchema(this.outputSchema, { io: "input" })
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
async extract(text, options = {}) {
|
|
51
|
-
return (await this.extractResult(text, options)).data;
|
|
52
|
-
}
|
|
53
|
-
async extractResult(text, options = {}) {
|
|
54
|
-
const prompt = Message.user(text);
|
|
55
|
-
const retries = resolveExtractionRetries(options.retries);
|
|
56
|
-
const maxAttempts = retries?.maxAttempts ?? 1;
|
|
57
|
-
let usage = Usage.empty();
|
|
58
|
-
let lastError;
|
|
59
|
-
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
|
|
60
|
-
try {
|
|
61
|
-
const result = await createCompletion(prompt, {
|
|
62
|
-
model: this.model,
|
|
63
|
-
instructions: this.instructions,
|
|
64
|
-
tools: [globalThis.structuredClone(this.submitTool)],
|
|
65
|
-
temperature: options.temperature,
|
|
66
|
-
maxTokens: options.maxTokens,
|
|
67
|
-
additionalParams: options.additionalParams,
|
|
68
|
-
toolChoice: "required"
|
|
69
|
-
});
|
|
70
|
-
const response = result.response;
|
|
71
|
-
usage = Usage.add(usage, response.usage);
|
|
72
|
-
const data = extractSubmittedData(response, this.outputSchema);
|
|
73
|
-
return {
|
|
74
|
-
data,
|
|
75
|
-
usage,
|
|
76
|
-
messages: [prompt, Message.assistant(response.choice, response.messageId)]
|
|
77
|
-
};
|
|
78
|
-
} catch (error) {
|
|
79
|
-
if (error instanceof CompletionCapabilityError) {
|
|
80
|
-
throw error;
|
|
81
|
-
}
|
|
82
|
-
lastError = error;
|
|
83
|
-
if (retries === void 0 || attempt >= retries.maxAttempts || !retries.shouldRetry({
|
|
84
|
-
error,
|
|
85
|
-
attempt,
|
|
86
|
-
maxAttempts: retries.maxAttempts,
|
|
87
|
-
streaming: false
|
|
88
|
-
})) {
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
await waitForRetry(retryDelayMs(retries, attempt));
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
throw new ExtractionError("No data extracted", lastError);
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
function resolveExtractionRetries(options) {
|
|
98
|
-
if (options === void 0) {
|
|
99
|
-
return void 0;
|
|
100
|
-
}
|
|
101
|
-
return resolveRetryOptions({
|
|
102
|
-
...options,
|
|
103
|
-
shouldRetry: options.shouldRetry ?? (() => true)
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
function extractSubmittedData(response, schema) {
|
|
107
|
-
const submitted = response.choice.filter((content) => content.type === "tool_call").filter((toolCall) => toolCall.function.name === SUBMIT_TOOL_NAME).at(-1);
|
|
108
|
-
if (submitted === void 0) {
|
|
109
|
-
throw new ExtractionError("The model did not call the submit tool");
|
|
110
|
-
}
|
|
111
|
-
try {
|
|
112
|
-
return schema.parse(submitted.function.arguments);
|
|
113
|
-
} catch (error) {
|
|
114
|
-
throw new ExtractionError("Submitted data failed output schema validation", error);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
export {
|
|
119
|
-
ExtractionError,
|
|
120
|
-
Extractor
|
|
121
|
-
};
|
|
122
|
-
//# sourceMappingURL=chunk-J6GNQART.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/extractor/extractor.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n CompletionCapabilityError,\n type CompletionModel,\n type CompletionResponse,\n createCompletion,\n type JsonValue,\n type Message,\n Message as MessageFactory,\n type ToolDefinition,\n Usage,\n} from \"../completion/index\";\nimport {\n type ResolvedRetryOptions,\n type RetryOptions,\n resolveRetryOptions,\n retryDelayMs,\n waitForRetry,\n} from \"../retry\";\nimport { toProviderJsonSchema, type ZodSchema } from \"../schema/zod-schema\";\n\nconst SUBMIT_TOOL_NAME = \"submit\";\n\nconst DEFAULT_EXTRACTOR_INSTRUCTIONS =\n \"You are an AI assistant whose purpose is to extract structured data from the provided text.\\n\" +\n \"You have access to a `submit` function that defines the structure of the data to extract.\\n\" +\n \"Always call the `submit` function with the structured data. Use default or null values when information is missing.\";\n\nexport type ExtractorOptions<T, M extends CompletionModel = CompletionModel> = {\n model: M;\n outputSchema: ZodSchema<T>;\n instructions?: string | undefined;\n};\n\nexport type ExtractOptions = {\n retries?: RetryOptions | undefined;\n temperature?: number | undefined;\n maxTokens?: number | undefined;\n additionalParams?: JsonValue | undefined;\n};\n\nexport type ExtractionResult<T> = {\n data: T;\n usage: Usage;\n messages: Message[];\n};\n\nexport class ExtractionError extends Error {\n constructor(\n message: string,\n readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"ExtractionError\";\n }\n}\n\n/** Converts text into data validated and transformed by a Zod output schema. */\nexport class Extractor<T, M extends CompletionModel = CompletionModel> {\n readonly model: M;\n readonly outputSchema: ZodSchema<T>;\n\n private readonly instructions: string;\n private readonly submitTool: ToolDefinition;\n\n constructor(options: ExtractorOptions<T, M>) {\n if (!(options.outputSchema instanceof z.ZodType)) {\n throw new TypeError(\"Extractor outputSchema must be a Zod schema.\");\n }\n\n this.model = options.model;\n this.outputSchema = options.outputSchema;\n this.instructions =\n options.instructions === undefined || options.instructions.length === 0\n ? DEFAULT_EXTRACTOR_INSTRUCTIONS\n : `${DEFAULT_EXTRACTOR_INSTRUCTIONS}\\n\\n${options.instructions}`;\n this.submitTool = {\n name: SUBMIT_TOOL_NAME,\n description: \"Submit the structured data extracted from the provided text.\",\n parameters: toProviderJsonSchema(this.outputSchema, { io: \"input\" }),\n };\n }\n\n async extract(text: string, options: ExtractOptions = {}): Promise<T> {\n return (await this.extractResult(text, options)).data;\n }\n\n async extractResult(text: string, options: ExtractOptions = {}): Promise<ExtractionResult<T>> {\n const prompt = MessageFactory.user(text);\n const retries = resolveExtractionRetries(options.retries);\n const maxAttempts = retries?.maxAttempts ?? 1;\n let usage = Usage.empty();\n let lastError: unknown;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n const result = await createCompletion(prompt, {\n model: this.model,\n instructions: this.instructions,\n tools: [globalThis.structuredClone(this.submitTool)],\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n additionalParams: options.additionalParams,\n toolChoice: \"required\",\n });\n const response = result.response;\n usage = Usage.add(usage, response.usage);\n const data = extractSubmittedData(response, this.outputSchema);\n return {\n data,\n usage,\n messages: [prompt, MessageFactory.assistant(response.choice, response.messageId)],\n };\n } catch (error) {\n if (error instanceof CompletionCapabilityError) {\n throw error;\n }\n lastError = error;\n if (\n retries === undefined ||\n attempt >= retries.maxAttempts ||\n !retries.shouldRetry({\n error,\n attempt,\n maxAttempts: retries.maxAttempts,\n streaming: false,\n })\n ) {\n break;\n }\n await waitForRetry(retryDelayMs(retries, attempt));\n }\n }\n\n throw new ExtractionError(\"No data extracted\", lastError);\n }\n}\n\nfunction resolveExtractionRetries(\n options: RetryOptions | undefined,\n): ResolvedRetryOptions | undefined {\n if (options === undefined) {\n return undefined;\n }\n return resolveRetryOptions({\n ...options,\n shouldRetry: options.shouldRetry ?? (() => true),\n });\n}\n\nfunction extractSubmittedData<T>(response: CompletionResponse, schema: ZodSchema<T>): T {\n const submitted = response.choice\n .filter((content) => content.type === \"tool_call\")\n .filter((toolCall) => toolCall.function.name === SUBMIT_TOOL_NAME)\n .at(-1);\n\n if (submitted === undefined) {\n throw new ExtractionError(\"The model did not call the submit tool\");\n }\n\n try {\n return schema.parse(submitted.function.arguments);\n } catch (error) {\n throw new ExtractionError(\"Submitted data failed output schema validation\", error);\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/chunk-M3IOWB4Y.js
DELETED
|
@@ -1,280 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
toProviderJsonSchema
|
|
3
|
-
} from "./chunk-RFDVKCIE.js";
|
|
4
|
-
import {
|
|
5
|
-
Message,
|
|
6
|
-
Usage,
|
|
7
|
-
assertCompletionRequestSupported,
|
|
8
|
-
isProviderTool,
|
|
9
|
-
textFromAssistantContent
|
|
10
|
-
} from "./chunk-ADH7NNCS.js";
|
|
11
|
-
import {
|
|
12
|
-
resolveRetryOptions,
|
|
13
|
-
retryDelayMs,
|
|
14
|
-
retryOptionsForFailure,
|
|
15
|
-
runWithRetries,
|
|
16
|
-
waitForRetry
|
|
17
|
-
} from "./chunk-A3UBYTJT.js";
|
|
18
|
-
|
|
19
|
-
// src/internal/completion-request.ts
|
|
20
|
-
function createCompletionRequest(input, options) {
|
|
21
|
-
const configuredTools = options.tools ?? [];
|
|
22
|
-
const request = {
|
|
23
|
-
chatHistory: messagesFromInput(input),
|
|
24
|
-
documents: [...options.documents ?? []],
|
|
25
|
-
tools: configuredTools.filter((tool) => !isProviderTool(tool))
|
|
26
|
-
};
|
|
27
|
-
const providerTools = configuredTools.filter(isProviderTool);
|
|
28
|
-
if (providerTools.length > 0) request.providerTools = providerTools;
|
|
29
|
-
if (options.modelOverride !== void 0) request.model = options.modelOverride;
|
|
30
|
-
if (options.instructions !== void 0 && options.instructions.length > 0) {
|
|
31
|
-
request.instructions = options.instructions;
|
|
32
|
-
}
|
|
33
|
-
if (options.temperature !== void 0) request.temperature = options.temperature;
|
|
34
|
-
if (options.maxTokens !== void 0) request.maxTokens = options.maxTokens;
|
|
35
|
-
if (options.toolChoice !== void 0) request.toolChoice = options.toolChoice;
|
|
36
|
-
if (options.outputSchema !== void 0) request.outputSchema = options.outputSchema;
|
|
37
|
-
if (options.additionalParams !== void 0) request.additionalParams = options.additionalParams;
|
|
38
|
-
return request;
|
|
39
|
-
}
|
|
40
|
-
function messagesFromInput(input) {
|
|
41
|
-
if (typeof input === "string") {
|
|
42
|
-
return [Message.user(input)];
|
|
43
|
-
}
|
|
44
|
-
if (Array.isArray(input)) {
|
|
45
|
-
return normalizeMessageArray(input);
|
|
46
|
-
}
|
|
47
|
-
if (!isCoreMessage(input)) {
|
|
48
|
-
throw new TypeError("input must be a string, Message, or Message[].");
|
|
49
|
-
}
|
|
50
|
-
return [input];
|
|
51
|
-
}
|
|
52
|
-
function normalizeMessageArray(messages) {
|
|
53
|
-
if (messages.length === 0) {
|
|
54
|
-
throw new Error("input must contain at least one Message.");
|
|
55
|
-
}
|
|
56
|
-
if (!messages.every(isCoreMessage)) {
|
|
57
|
-
throw new TypeError("input must contain only Message values.");
|
|
58
|
-
}
|
|
59
|
-
return [...messages];
|
|
60
|
-
}
|
|
61
|
-
function isCoreMessage(value) {
|
|
62
|
-
if (!isRecord(value)) {
|
|
63
|
-
return false;
|
|
64
|
-
}
|
|
65
|
-
if (value.role === "system") {
|
|
66
|
-
return typeof value.content === "string";
|
|
67
|
-
}
|
|
68
|
-
if (value.role === "user") {
|
|
69
|
-
return Array.isArray(value.content) && value.content.every(isUserContent);
|
|
70
|
-
}
|
|
71
|
-
if (value.role === "assistant") {
|
|
72
|
-
return (value.id === void 0 || typeof value.id === "string") && Array.isArray(value.content) && value.content.every(isAssistantContent);
|
|
73
|
-
}
|
|
74
|
-
if (value.role === "tool") {
|
|
75
|
-
return Array.isArray(value.content) && value.content.every(isToolContent);
|
|
76
|
-
}
|
|
77
|
-
return false;
|
|
78
|
-
}
|
|
79
|
-
function isUserContent(value) {
|
|
80
|
-
if (!isRecord(value)) {
|
|
81
|
-
return false;
|
|
82
|
-
}
|
|
83
|
-
if (value.type === "text") {
|
|
84
|
-
return typeof value.text === "string";
|
|
85
|
-
}
|
|
86
|
-
if (value.type === "image") {
|
|
87
|
-
return isImageContent(value);
|
|
88
|
-
}
|
|
89
|
-
if (value.type === "document") {
|
|
90
|
-
return isDocumentContent(value);
|
|
91
|
-
}
|
|
92
|
-
return false;
|
|
93
|
-
}
|
|
94
|
-
function isAssistantContent(value) {
|
|
95
|
-
if (!isRecord(value)) {
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
if (value.type === "text") {
|
|
99
|
-
return typeof value.text === "string";
|
|
100
|
-
}
|
|
101
|
-
if (value.type === "reasoning") {
|
|
102
|
-
return typeof value.text === "string" && (value.id === void 0 || typeof value.id === "string") && (value.content === void 0 || Array.isArray(value.content));
|
|
103
|
-
}
|
|
104
|
-
if (value.type === "tool_call") {
|
|
105
|
-
return typeof value.id === "string" && (value.callId === void 0 || typeof value.callId === "string") && isRecord(value.function) && typeof value.function.name === "string" && "arguments" in value.function;
|
|
106
|
-
}
|
|
107
|
-
if (value.type === "image") {
|
|
108
|
-
return isImageContent(value);
|
|
109
|
-
}
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
|
-
function isToolContent(value) {
|
|
113
|
-
return isRecord(value) && value.type === "tool_result" && typeof value.id === "string" && (value.callId === void 0 || typeof value.callId === "string") && (value.toolName === void 0 || typeof value.toolName === "string") && Array.isArray(value.content) && value.content.every(isToolResultContent);
|
|
114
|
-
}
|
|
115
|
-
function isToolResultContent(value) {
|
|
116
|
-
if (!isRecord(value)) {
|
|
117
|
-
return false;
|
|
118
|
-
}
|
|
119
|
-
if (value.type === "text") {
|
|
120
|
-
return typeof value.text === "string";
|
|
121
|
-
}
|
|
122
|
-
if (value.type === "image") {
|
|
123
|
-
return typeof value.data === "string" && (value.mediaType === void 0 || typeof value.mediaType === "string");
|
|
124
|
-
}
|
|
125
|
-
return false;
|
|
126
|
-
}
|
|
127
|
-
function isImageContent(value) {
|
|
128
|
-
if (!isRecord(value.source)) {
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
if (value.source.type === "url") {
|
|
132
|
-
return typeof value.source.url === "string";
|
|
133
|
-
}
|
|
134
|
-
if (value.source.type === "base64") {
|
|
135
|
-
return typeof value.source.data === "string" && typeof value.source.mediaType === "string";
|
|
136
|
-
}
|
|
137
|
-
return false;
|
|
138
|
-
}
|
|
139
|
-
function isDocumentContent(value) {
|
|
140
|
-
if (!isRecord(value.source)) {
|
|
141
|
-
return false;
|
|
142
|
-
}
|
|
143
|
-
if (value.source.type === "url") {
|
|
144
|
-
return typeof value.source.url === "string" && typeof value.source.mediaType === "string";
|
|
145
|
-
}
|
|
146
|
-
if (value.source.type === "base64") {
|
|
147
|
-
return typeof value.source.data === "string" && typeof value.source.mediaType === "string";
|
|
148
|
-
}
|
|
149
|
-
if (value.source.type === "text") {
|
|
150
|
-
return typeof value.source.text === "string" && (value.source.mediaType === void 0 || typeof value.source.mediaType === "string");
|
|
151
|
-
}
|
|
152
|
-
return false;
|
|
153
|
-
}
|
|
154
|
-
function isRecord(value) {
|
|
155
|
-
return typeof value === "object" && value !== null;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// src/completion/create-completion.ts
|
|
159
|
-
async function createCompletion(input, options) {
|
|
160
|
-
const request = createCompletionRequest(input, options);
|
|
161
|
-
assertCompletionRequestSupported(options.model, request);
|
|
162
|
-
const retries = resolveOptionalRetries(options.retries);
|
|
163
|
-
return sendCompletion(options.model, request, retries);
|
|
164
|
-
}
|
|
165
|
-
function createCompletionStream(input, options) {
|
|
166
|
-
const request = createCompletionRequest(input, options);
|
|
167
|
-
if (!isStreamingCompletionModel(options.model) || !options.model.capabilities.streaming) {
|
|
168
|
-
throw new Error("This completion model does not support streaming");
|
|
169
|
-
}
|
|
170
|
-
assertCompletionRequestSupported(options.model, request, { streaming: true });
|
|
171
|
-
const retries = resolveOptionalRetries(options.retries);
|
|
172
|
-
return streamCompletionWithRetries(options.model, request, retries);
|
|
173
|
-
}
|
|
174
|
-
async function createParsedCompletion(input, options) {
|
|
175
|
-
const { schema, ...completionOptions } = options;
|
|
176
|
-
const result = await createCompletion(input, {
|
|
177
|
-
...completionOptions,
|
|
178
|
-
outputSchema: toProviderJsonSchema(schema)
|
|
179
|
-
});
|
|
180
|
-
return {
|
|
181
|
-
...result,
|
|
182
|
-
data: parseCompletionData(result.text, schema)
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
async function sendCompletion(model, request, retries) {
|
|
186
|
-
const response = await runWithRetries(
|
|
187
|
-
() => model.completion(request),
|
|
188
|
-
retries,
|
|
189
|
-
{ streaming: false }
|
|
190
|
-
);
|
|
191
|
-
return {
|
|
192
|
-
text: textFromAssistantContent(response.choice),
|
|
193
|
-
content: response.choice,
|
|
194
|
-
usage: response.usage,
|
|
195
|
-
response
|
|
196
|
-
};
|
|
197
|
-
}
|
|
198
|
-
function resolveOptionalRetries(options) {
|
|
199
|
-
return options === void 0 ? void 0 : resolveRetryOptions(options);
|
|
200
|
-
}
|
|
201
|
-
async function* streamCompletionWithRetries(model, request, retries) {
|
|
202
|
-
let attempt = 1;
|
|
203
|
-
let swallowedUsage = Usage.empty();
|
|
204
|
-
while (true) {
|
|
205
|
-
let exposedEvent = false;
|
|
206
|
-
let retryDelay;
|
|
207
|
-
try {
|
|
208
|
-
const events = model.streamCompletion(request);
|
|
209
|
-
for await (const event of events) {
|
|
210
|
-
if (event.type === "error" && !exposedEvent) {
|
|
211
|
-
const retryOptions = retryOptionsForFailure(retries, {
|
|
212
|
-
error: event.error,
|
|
213
|
-
attempt,
|
|
214
|
-
streaming: true
|
|
215
|
-
});
|
|
216
|
-
if (retryOptions !== void 0) {
|
|
217
|
-
if (event.usage !== void 0) {
|
|
218
|
-
swallowedUsage = Usage.add(swallowedUsage, event.usage);
|
|
219
|
-
}
|
|
220
|
-
retryDelay = retryDelayMs(retryOptions, attempt);
|
|
221
|
-
break;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
exposedEvent = true;
|
|
225
|
-
if (event.type === "final" && swallowedUsage.totalTokens > 0) {
|
|
226
|
-
yield {
|
|
227
|
-
...event,
|
|
228
|
-
response: {
|
|
229
|
-
...event.response,
|
|
230
|
-
usage: Usage.add(swallowedUsage, event.response.usage)
|
|
231
|
-
}
|
|
232
|
-
};
|
|
233
|
-
} else if (event.type === "error" && swallowedUsage.totalTokens > 0) {
|
|
234
|
-
yield {
|
|
235
|
-
...event,
|
|
236
|
-
usage: Usage.add(swallowedUsage, event.usage ?? Usage.empty())
|
|
237
|
-
};
|
|
238
|
-
} else {
|
|
239
|
-
yield event;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
if (retryDelay === void 0) return;
|
|
243
|
-
await waitForRetry(retryDelay);
|
|
244
|
-
attempt += 1;
|
|
245
|
-
} catch (error) {
|
|
246
|
-
if (exposedEvent) throw error;
|
|
247
|
-
const retryOptions = retryOptionsForFailure(retries, {
|
|
248
|
-
error,
|
|
249
|
-
attempt,
|
|
250
|
-
streaming: true
|
|
251
|
-
});
|
|
252
|
-
if (retryOptions === void 0) throw error;
|
|
253
|
-
await waitForRetry(retryDelayMs(retryOptions, attempt));
|
|
254
|
-
attempt += 1;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
function isStreamingCompletionModel(model) {
|
|
259
|
-
return typeof model.streamCompletion === "function";
|
|
260
|
-
}
|
|
261
|
-
function parseCompletionData(text, schema) {
|
|
262
|
-
let json;
|
|
263
|
-
try {
|
|
264
|
-
json = JSON.parse(text);
|
|
265
|
-
} catch (error) {
|
|
266
|
-
throw new Error("createParsedCompletion expected the model response to be valid JSON.", {
|
|
267
|
-
cause: error
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
return schema.parse(json);
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
export {
|
|
274
|
-
createCompletionRequest,
|
|
275
|
-
createCompletion,
|
|
276
|
-
createCompletionStream,
|
|
277
|
-
createParsedCompletion,
|
|
278
|
-
isStreamingCompletionModel
|
|
279
|
-
};
|
|
280
|
-
//# sourceMappingURL=chunk-M3IOWB4Y.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/internal/completion-request.ts","../src/completion/create-completion.ts"],"sourcesContent":["import type {\n CompletionModel,\n CompletionRequest,\n CompletionTool,\n Document,\n JsonObject,\n JsonValue,\n Message as MessageType,\n ToolChoice,\n ToolDefinition,\n} from \"../completion/types\";\nimport { isProviderTool, Message } from \"../completion/types\";\n\ntype ModelNameOf<Model extends CompletionModel> =\n Model extends CompletionModel<unknown, infer ModelName> ? ModelName : string;\n\nexport type CompletionRequestFor<Model extends CompletionModel> = CompletionRequest<\n ModelNameOf<Model>\n>;\n\nexport type CompletionRequestOptions<Model extends CompletionModel = CompletionModel> = {\n model: Model;\n modelOverride?: ModelNameOf<Model> | undefined;\n instructions?: string | undefined;\n documents?: readonly Document[] | undefined;\n tools?: readonly CompletionTool[] | undefined;\n temperature?: number | undefined;\n maxTokens?: number | undefined;\n toolChoice?: ToolChoice | undefined;\n outputSchema?: JsonObject | undefined;\n additionalParams?: JsonValue | undefined;\n};\n\nexport function createCompletionRequest<Model extends CompletionModel>(\n input: string | MessageType | readonly MessageType[],\n options: CompletionRequestOptions<Model>,\n): CompletionRequestFor<Model> {\n const configuredTools = options.tools ?? [];\n const request: CompletionRequestFor<Model> = {\n chatHistory: messagesFromInput(input),\n documents: [...(options.documents ?? [])],\n tools: configuredTools.filter((tool): tool is ToolDefinition => !isProviderTool(tool)),\n };\n const providerTools = configuredTools.filter(isProviderTool);\n\n if (providerTools.length > 0) request.providerTools = providerTools;\n if (options.modelOverride !== undefined) request.model = options.modelOverride;\n if (options.instructions !== undefined && options.instructions.length > 0) {\n request.instructions = options.instructions;\n }\n if (options.temperature !== undefined) request.temperature = options.temperature;\n if (options.maxTokens !== undefined) request.maxTokens = options.maxTokens;\n if (options.toolChoice !== undefined) request.toolChoice = options.toolChoice;\n if (options.outputSchema !== undefined) request.outputSchema = options.outputSchema;\n if (options.additionalParams !== undefined) request.additionalParams = options.additionalParams;\n\n return request;\n}\n\nfunction messagesFromInput(input: string | MessageType | readonly MessageType[]): MessageType[] {\n if (typeof input === \"string\") {\n return [Message.user(input)];\n }\n if (Array.isArray(input)) {\n return normalizeMessageArray(input);\n }\n if (!isCoreMessage(input)) {\n throw new TypeError(\"input must be a string, Message, or Message[].\");\n }\n return [input];\n}\n\nfunction normalizeMessageArray(messages: readonly MessageType[]): MessageType[] {\n if (messages.length === 0) {\n throw new Error(\"input must contain at least one Message.\");\n }\n if (!messages.every(isCoreMessage)) {\n throw new TypeError(\"input must contain only Message values.\");\n }\n\n return [...messages];\n}\n\nfunction isCoreMessage(value: unknown): value is MessageType {\n if (!isRecord(value)) {\n return false;\n }\n\n if (value.role === \"system\") {\n return typeof value.content === \"string\";\n }\n\n if (value.role === \"user\") {\n return Array.isArray(value.content) && value.content.every(isUserContent);\n }\n\n if (value.role === \"assistant\") {\n return (\n (value.id === undefined || typeof value.id === \"string\") &&\n Array.isArray(value.content) &&\n value.content.every(isAssistantContent)\n );\n }\n\n if (value.role === \"tool\") {\n return Array.isArray(value.content) && value.content.every(isToolContent);\n }\n\n return false;\n}\n\nfunction isUserContent(value: unknown): boolean {\n if (!isRecord(value)) {\n return false;\n }\n\n if (value.type === \"text\") {\n return typeof value.text === \"string\";\n }\n\n if (value.type === \"image\") {\n return isImageContent(value);\n }\n\n if (value.type === \"document\") {\n return isDocumentContent(value);\n }\n\n return false;\n}\n\nfunction isAssistantContent(value: unknown): boolean {\n if (!isRecord(value)) {\n return false;\n }\n\n if (value.type === \"text\") {\n return typeof value.text === \"string\";\n }\n\n if (value.type === \"reasoning\") {\n return (\n typeof value.text === \"string\" &&\n (value.id === undefined || typeof value.id === \"string\") &&\n (value.content === undefined || Array.isArray(value.content))\n );\n }\n\n if (value.type === \"tool_call\") {\n return (\n typeof value.id === \"string\" &&\n (value.callId === undefined || typeof value.callId === \"string\") &&\n isRecord(value.function) &&\n typeof value.function.name === \"string\" &&\n \"arguments\" in value.function\n );\n }\n\n if (value.type === \"image\") {\n return isImageContent(value);\n }\n\n return false;\n}\n\nfunction isToolContent(value: unknown): boolean {\n return (\n isRecord(value) &&\n value.type === \"tool_result\" &&\n typeof value.id === \"string\" &&\n (value.callId === undefined || typeof value.callId === \"string\") &&\n (value.toolName === undefined || typeof value.toolName === \"string\") &&\n Array.isArray(value.content) &&\n value.content.every(isToolResultContent)\n );\n}\n\nfunction isToolResultContent(value: unknown): boolean {\n if (!isRecord(value)) {\n return false;\n }\n\n if (value.type === \"text\") {\n return typeof value.text === \"string\";\n }\n\n if (value.type === \"image\") {\n return (\n typeof value.data === \"string\" &&\n (value.mediaType === undefined || typeof value.mediaType === \"string\")\n );\n }\n\n return false;\n}\n\nfunction isImageContent(value: Record<string, unknown>): boolean {\n if (!isRecord(value.source)) {\n return false;\n }\n\n if (value.source.type === \"url\") {\n return typeof value.source.url === \"string\";\n }\n\n if (value.source.type === \"base64\") {\n return typeof value.source.data === \"string\" && typeof value.source.mediaType === \"string\";\n }\n\n return false;\n}\n\nfunction isDocumentContent(value: Record<string, unknown>): boolean {\n if (!isRecord(value.source)) {\n return false;\n }\n\n if (value.source.type === \"url\") {\n return typeof value.source.url === \"string\" && typeof value.source.mediaType === \"string\";\n }\n\n if (value.source.type === \"base64\") {\n return typeof value.source.data === \"string\" && typeof value.source.mediaType === \"string\";\n }\n\n if (value.source.type === \"text\") {\n return (\n typeof value.source.text === \"string\" &&\n (value.source.mediaType === undefined || typeof value.source.mediaType === \"string\")\n );\n }\n\n return false;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n","import { createCompletionRequest } from \"../internal/completion-request\";\nimport {\n type ResolvedRetryOptions,\n type RetryOptions,\n resolveRetryOptions,\n retryDelayMs,\n retryOptionsForFailure,\n runWithRetries,\n waitForRetry,\n} from \"../retry\";\nimport { toProviderJsonSchema, type ZodSchema } from \"../schema/zod-schema\";\nimport type {\n AssistantContent,\n CompletionModel,\n CompletionRequest,\n CompletionResponse,\n CompletionStreamEvent,\n CompletionTool,\n Document,\n JsonObject,\n JsonValue,\n Message as MessageType,\n StreamingCompletionModel,\n ToolChoice,\n} from \"./types\";\nimport { assertCompletionRequestSupported, textFromAssistantContent, Usage } from \"./types\";\n\nexport type CreateCompletionInput = string | MessageType | MessageType[];\n\nexport type CreateCompletionBaseOptions<Model extends CompletionModel = CompletionModel> = {\n model: Model;\n instructions?: string | undefined;\n documents?: Document[] | undefined;\n tools?: CompletionTool[] | undefined;\n temperature?: number | undefined;\n maxTokens?: number | undefined;\n toolChoice?: ToolChoice | undefined;\n outputSchema?: JsonObject | undefined;\n additionalParams?: JsonValue | undefined;\n retries?: RetryOptions | undefined;\n};\n\nexport type CreateCompletionOptions<Model extends CompletionModel = CompletionModel> =\n CreateCompletionBaseOptions<Model>;\n\nexport type CreateCompletionStreamOptions<\n Model extends StreamingCompletionModel = StreamingCompletionModel,\n> = CreateCompletionBaseOptions<Model>;\n\nexport type CreateParsedCompletionOptions<\n T,\n Model extends CompletionModel = CompletionModel,\n> = Omit<CreateCompletionBaseOptions<Model>, \"outputSchema\"> & { schema: ZodSchema<T> };\n\nexport type CreateCompletionResult<RawResponse = unknown> = {\n text: string;\n content: AssistantContent[];\n usage: Usage;\n response: CompletionResponse<RawResponse>;\n};\n\nexport type CreateParsedCompletionResult<\n T,\n RawResponse = unknown,\n> = CreateCompletionResult<RawResponse> & {\n data: T;\n};\n\ntype RawResponseOf<Model> =\n Model extends CompletionModel<infer RawResponse, infer _ModelName> ? RawResponse : unknown;\n\nexport async function createCompletion<Model extends CompletionModel>(\n input: CreateCompletionInput,\n options: CreateCompletionOptions<Model>,\n): Promise<CreateCompletionResult<RawResponseOf<Model>>> {\n const request = createCompletionRequest(input, options);\n assertCompletionRequestSupported(options.model, request);\n const retries = resolveOptionalRetries(options.retries);\n return sendCompletion(options.model, request, retries);\n}\n\nexport function createCompletionStream<Model extends StreamingCompletionModel>(\n input: CreateCompletionInput,\n options: CreateCompletionStreamOptions<Model>,\n): AsyncIterable<CompletionStreamEvent<RawResponseOf<Model>>> {\n const request = createCompletionRequest(input, options);\n if (!isStreamingCompletionModel(options.model) || !options.model.capabilities.streaming) {\n throw new Error(\"This completion model does not support streaming\");\n }\n assertCompletionRequestSupported(options.model, request, { streaming: true });\n const retries = resolveOptionalRetries(options.retries);\n return streamCompletionWithRetries(options.model, request, retries);\n}\n\nexport async function createParsedCompletion<T, Model extends CompletionModel>(\n input: CreateCompletionInput,\n options: CreateParsedCompletionOptions<T, Model>,\n): Promise<CreateParsedCompletionResult<T, RawResponseOf<Model>>> {\n const { schema, ...completionOptions } = options;\n const result = await createCompletion(input, {\n ...completionOptions,\n outputSchema: toProviderJsonSchema(schema),\n });\n return {\n ...result,\n data: parseCompletionData(result.text, schema),\n };\n}\n\nasync function sendCompletion<Model extends CompletionModel>(\n model: Model,\n request: CompletionRequest,\n retries: ResolvedRetryOptions | undefined,\n): Promise<CreateCompletionResult<RawResponseOf<Model>>> {\n const response = await runWithRetries(\n () => model.completion(request) as Promise<CompletionResponse<RawResponseOf<Model>>>,\n retries,\n { streaming: false },\n );\n return {\n text: textFromAssistantContent(response.choice),\n content: response.choice,\n usage: response.usage,\n response,\n };\n}\n\nfunction resolveOptionalRetries(\n options: RetryOptions | undefined,\n): ResolvedRetryOptions | undefined {\n return options === undefined ? undefined : resolveRetryOptions(options);\n}\n\nasync function* streamCompletionWithRetries<Model extends StreamingCompletionModel>(\n model: Model,\n request: CompletionRequest,\n retries: ResolvedRetryOptions | undefined,\n): AsyncIterable<CompletionStreamEvent<RawResponseOf<Model>>> {\n let attempt = 1;\n let swallowedUsage = Usage.empty();\n\n while (true) {\n let exposedEvent = false;\n let retryDelay: number | undefined;\n try {\n const events = model.streamCompletion(request) as AsyncIterable<\n CompletionStreamEvent<RawResponseOf<Model>>\n >;\n for await (const event of events) {\n if (event.type === \"error\" && !exposedEvent) {\n const retryOptions = retryOptionsForFailure(retries, {\n error: event.error,\n attempt,\n streaming: true,\n });\n if (retryOptions !== undefined) {\n if (event.usage !== undefined) {\n swallowedUsage = Usage.add(swallowedUsage, event.usage);\n }\n retryDelay = retryDelayMs(retryOptions, attempt);\n break;\n }\n }\n\n exposedEvent = true;\n if (event.type === \"final\" && swallowedUsage.totalTokens > 0) {\n yield {\n ...event,\n response: {\n ...event.response,\n usage: Usage.add(swallowedUsage, event.response.usage),\n },\n };\n } else if (event.type === \"error\" && swallowedUsage.totalTokens > 0) {\n yield {\n ...event,\n usage: Usage.add(swallowedUsage, event.usage ?? Usage.empty()),\n };\n } else {\n yield event;\n }\n }\n if (retryDelay === undefined) return;\n await waitForRetry(retryDelay);\n attempt += 1;\n } catch (error) {\n if (exposedEvent) throw error;\n const retryOptions = retryOptionsForFailure(retries, {\n error,\n attempt,\n streaming: true,\n });\n if (retryOptions === undefined) throw error;\n await waitForRetry(retryDelayMs(retryOptions, attempt));\n attempt += 1;\n }\n }\n}\n\nexport function isStreamingCompletionModel(\n model: CompletionModel,\n): model is StreamingCompletionModel {\n return typeof (model as { streamCompletion?: unknown }).streamCompletion === \"function\";\n}\n\nfunction parseCompletionData<T>(text: string, schema: ZodSchema<T>): T {\n let json: unknown;\n try {\n json = JSON.parse(text);\n } catch (error) {\n throw new Error(\"createParsedCompletion expected the model response to be valid JSON.\", {\n cause: error,\n });\n }\n\n return schema.parse(json);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAiCO,SAAS,wBACd,OACA,SAC6B;AAC7B,QAAM,kBAAkB,QAAQ,SAAS,CAAC;AAC1C,QAAM,UAAuC;AAAA,IAC3C,aAAa,kBAAkB,KAAK;AAAA,IACpC,WAAW,CAAC,GAAI,QAAQ,aAAa,CAAC,CAAE;AAAA,IACxC,OAAO,gBAAgB,OAAO,CAAC,SAAiC,CAAC,eAAe,IAAI,CAAC;AAAA,EACvF;AACA,QAAM,gBAAgB,gBAAgB,OAAO,cAAc;AAE3D,MAAI,cAAc,SAAS,EAAG,SAAQ,gBAAgB;AACtD,MAAI,QAAQ,kBAAkB,OAAW,SAAQ,QAAQ,QAAQ;AACjE,MAAI,QAAQ,iBAAiB,UAAa,QAAQ,aAAa,SAAS,GAAG;AACzE,YAAQ,eAAe,QAAQ;AAAA,EACjC;AACA,MAAI,QAAQ,gBAAgB,OAAW,SAAQ,cAAc,QAAQ;AACrE,MAAI,QAAQ,cAAc,OAAW,SAAQ,YAAY,QAAQ;AACjE,MAAI,QAAQ,eAAe,OAAW,SAAQ,aAAa,QAAQ;AACnE,MAAI,QAAQ,iBAAiB,OAAW,SAAQ,eAAe,QAAQ;AACvE,MAAI,QAAQ,qBAAqB,OAAW,SAAQ,mBAAmB,QAAQ;AAE/E,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAqE;AAC9F,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,CAAC,QAAQ,KAAK,KAAK,CAAC;AAAA,EAC7B;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,sBAAsB,KAAK;AAAA,EACpC;AACA,MAAI,CAAC,cAAc,KAAK,GAAG;AACzB,UAAM,IAAI,UAAU,gDAAgD;AAAA,EACtE;AACA,SAAO,CAAC,KAAK;AACf;AAEA,SAAS,sBAAsB,UAAiD;AAC9E,MAAI,SAAS,WAAW,GAAG;AACzB,UAAM,IAAI,MAAM,0CAA0C;AAAA,EAC5D;AACA,MAAI,CAAC,SAAS,MAAM,aAAa,GAAG;AAClC,UAAM,IAAI,UAAU,yCAAyC;AAAA,EAC/D;AAEA,SAAO,CAAC,GAAG,QAAQ;AACrB;AAEA,SAAS,cAAc,OAAsC;AAC3D,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,SAAS,UAAU;AAC3B,WAAO,OAAO,MAAM,YAAY;AAAA,EAClC;AAEA,MAAI,MAAM,SAAS,QAAQ;AACzB,WAAO,MAAM,QAAQ,MAAM,OAAO,KAAK,MAAM,QAAQ,MAAM,aAAa;AAAA,EAC1E;AAEA,MAAI,MAAM,SAAS,aAAa;AAC9B,YACG,MAAM,OAAO,UAAa,OAAO,MAAM,OAAO,aAC/C,MAAM,QAAQ,MAAM,OAAO,KAC3B,MAAM,QAAQ,MAAM,kBAAkB;AAAA,EAE1C;AAEA,MAAI,MAAM,SAAS,QAAQ;AACzB,WAAO,MAAM,QAAQ,MAAM,OAAO,KAAK,MAAM,QAAQ,MAAM,aAAa;AAAA,EAC1E;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,OAAyB;AAC9C,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,SAAS,QAAQ;AACzB,WAAO,OAAO,MAAM,SAAS;AAAA,EAC/B;AAEA,MAAI,MAAM,SAAS,SAAS;AAC1B,WAAO,eAAe,KAAK;AAAA,EAC7B;AAEA,MAAI,MAAM,SAAS,YAAY;AAC7B,WAAO,kBAAkB,KAAK;AAAA,EAChC;AAEA,SAAO;AACT;AAEA,SAAS,mBAAmB,OAAyB;AACnD,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,SAAS,QAAQ;AACzB,WAAO,OAAO,MAAM,SAAS;AAAA,EAC/B;AAEA,MAAI,MAAM,SAAS,aAAa;AAC9B,WACE,OAAO,MAAM,SAAS,aACrB,MAAM,OAAO,UAAa,OAAO,MAAM,OAAO,cAC9C,MAAM,YAAY,UAAa,MAAM,QAAQ,MAAM,OAAO;AAAA,EAE/D;AAEA,MAAI,MAAM,SAAS,aAAa;AAC9B,WACE,OAAO,MAAM,OAAO,aACnB,MAAM,WAAW,UAAa,OAAO,MAAM,WAAW,aACvD,SAAS,MAAM,QAAQ,KACvB,OAAO,MAAM,SAAS,SAAS,YAC/B,eAAe,MAAM;AAAA,EAEzB;AAEA,MAAI,MAAM,SAAS,SAAS;AAC1B,WAAO,eAAe,KAAK;AAAA,EAC7B;AAEA,SAAO;AACT;AAEA,SAAS,cAAc,OAAyB;AAC9C,SACE,SAAS,KAAK,KACd,MAAM,SAAS,iBACf,OAAO,MAAM,OAAO,aACnB,MAAM,WAAW,UAAa,OAAO,MAAM,WAAW,cACtD,MAAM,aAAa,UAAa,OAAO,MAAM,aAAa,aAC3D,MAAM,QAAQ,MAAM,OAAO,KAC3B,MAAM,QAAQ,MAAM,mBAAmB;AAE3C;AAEA,SAAS,oBAAoB,OAAyB;AACpD,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,SAAS,QAAQ;AACzB,WAAO,OAAO,MAAM,SAAS;AAAA,EAC/B;AAEA,MAAI,MAAM,SAAS,SAAS;AAC1B,WACE,OAAO,MAAM,SAAS,aACrB,MAAM,cAAc,UAAa,OAAO,MAAM,cAAc;AAAA,EAEjE;AAEA,SAAO;AACT;AAEA,SAAS,eAAe,OAAyC;AAC/D,MAAI,CAAC,SAAS,MAAM,MAAM,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,OAAO,SAAS,OAAO;AAC/B,WAAO,OAAO,MAAM,OAAO,QAAQ;AAAA,EACrC;AAEA,MAAI,MAAM,OAAO,SAAS,UAAU;AAClC,WAAO,OAAO,MAAM,OAAO,SAAS,YAAY,OAAO,MAAM,OAAO,cAAc;AAAA,EACpF;AAEA,SAAO;AACT;AAEA,SAAS,kBAAkB,OAAyC;AAClE,MAAI,CAAC,SAAS,MAAM,MAAM,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,OAAO,SAAS,OAAO;AAC/B,WAAO,OAAO,MAAM,OAAO,QAAQ,YAAY,OAAO,MAAM,OAAO,cAAc;AAAA,EACnF;AAEA,MAAI,MAAM,OAAO,SAAS,UAAU;AAClC,WAAO,OAAO,MAAM,OAAO,SAAS,YAAY,OAAO,MAAM,OAAO,cAAc;AAAA,EACpF;AAEA,MAAI,MAAM,OAAO,SAAS,QAAQ;AAChC,WACE,OAAO,MAAM,OAAO,SAAS,aAC5B,MAAM,OAAO,cAAc,UAAa,OAAO,MAAM,OAAO,cAAc;AAAA,EAE/E;AAEA,SAAO;AACT;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;;;ACtKA,eAAsB,iBACpB,OACA,SACuD;AACvD,QAAM,UAAU,wBAAwB,OAAO,OAAO;AACtD,mCAAiC,QAAQ,OAAO,OAAO;AACvD,QAAM,UAAU,uBAAuB,QAAQ,OAAO;AACtD,SAAO,eAAe,QAAQ,OAAO,SAAS,OAAO;AACvD;AAEO,SAAS,uBACd,OACA,SAC4D;AAC5D,QAAM,UAAU,wBAAwB,OAAO,OAAO;AACtD,MAAI,CAAC,2BAA2B,QAAQ,KAAK,KAAK,CAAC,QAAQ,MAAM,aAAa,WAAW;AACvF,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE;AACA,mCAAiC,QAAQ,OAAO,SAAS,EAAE,WAAW,KAAK,CAAC;AAC5E,QAAM,UAAU,uBAAuB,QAAQ,OAAO;AACtD,SAAO,4BAA4B,QAAQ,OAAO,SAAS,OAAO;AACpE;AAEA,eAAsB,uBACpB,OACA,SACgE;AAChE,QAAM,EAAE,QAAQ,GAAG,kBAAkB,IAAI;AACzC,QAAM,SAAS,MAAM,iBAAiB,OAAO;AAAA,IAC3C,GAAG;AAAA,IACH,cAAc,qBAAqB,MAAM;AAAA,EAC3C,CAAC;AACD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,MAAM,oBAAoB,OAAO,MAAM,MAAM;AAAA,EAC/C;AACF;AAEA,eAAe,eACb,OACA,SACA,SACuD;AACvD,QAAM,WAAW,MAAM;AAAA,IACrB,MAAM,MAAM,WAAW,OAAO;AAAA,IAC9B;AAAA,IACA,EAAE,WAAW,MAAM;AAAA,EACrB;AACA,SAAO;AAAA,IACL,MAAM,yBAAyB,SAAS,MAAM;AAAA,IAC9C,SAAS,SAAS;AAAA,IAClB,OAAO,SAAS;AAAA,IAChB;AAAA,EACF;AACF;AAEA,SAAS,uBACP,SACkC;AAClC,SAAO,YAAY,SAAY,SAAY,oBAAoB,OAAO;AACxE;AAEA,gBAAgB,4BACd,OACA,SACA,SAC4D;AAC5D,MAAI,UAAU;AACd,MAAI,iBAAiB,MAAM,MAAM;AAEjC,SAAO,MAAM;AACX,QAAI,eAAe;AACnB,QAAI;AACJ,QAAI;AACF,YAAM,SAAS,MAAM,iBAAiB,OAAO;AAG7C,uBAAiB,SAAS,QAAQ;AAChC,YAAI,MAAM,SAAS,WAAW,CAAC,cAAc;AAC3C,gBAAM,eAAe,uBAAuB,SAAS;AAAA,YACnD,OAAO,MAAM;AAAA,YACb;AAAA,YACA,WAAW;AAAA,UACb,CAAC;AACD,cAAI,iBAAiB,QAAW;AAC9B,gBAAI,MAAM,UAAU,QAAW;AAC7B,+BAAiB,MAAM,IAAI,gBAAgB,MAAM,KAAK;AAAA,YACxD;AACA,yBAAa,aAAa,cAAc,OAAO;AAC/C;AAAA,UACF;AAAA,QACF;AAEA,uBAAe;AACf,YAAI,MAAM,SAAS,WAAW,eAAe,cAAc,GAAG;AAC5D,gBAAM;AAAA,YACJ,GAAG;AAAA,YACH,UAAU;AAAA,cACR,GAAG,MAAM;AAAA,cACT,OAAO,MAAM,IAAI,gBAAgB,MAAM,SAAS,KAAK;AAAA,YACvD;AAAA,UACF;AAAA,QACF,WAAW,MAAM,SAAS,WAAW,eAAe,cAAc,GAAG;AACnE,gBAAM;AAAA,YACJ,GAAG;AAAA,YACH,OAAO,MAAM,IAAI,gBAAgB,MAAM,SAAS,MAAM,MAAM,CAAC;AAAA,UAC/D;AAAA,QACF,OAAO;AACL,gBAAM;AAAA,QACR;AAAA,MACF;AACA,UAAI,eAAe,OAAW;AAC9B,YAAM,aAAa,UAAU;AAC7B,iBAAW;AAAA,IACb,SAAS,OAAO;AACd,UAAI,aAAc,OAAM;AACxB,YAAM,eAAe,uBAAuB,SAAS;AAAA,QACnD;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACb,CAAC;AACD,UAAI,iBAAiB,OAAW,OAAM;AACtC,YAAM,aAAa,aAAa,cAAc,OAAO,CAAC;AACtD,iBAAW;AAAA,IACb;AAAA,EACF;AACF;AAEO,SAAS,2BACd,OACmC;AACnC,SAAO,OAAQ,MAAyC,qBAAqB;AAC/E;AAEA,SAAS,oBAAuB,MAAc,QAAyB;AACrE,MAAI;AACJ,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,wEAAwE;AAAA,MACtF,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,SAAO,OAAO,MAAM,IAAI;AAC1B;","names":[]}
|
package/dist/chunk-QY5GZ7HR.js
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
resolveRetryOptions,
|
|
3
|
-
runWithRetries
|
|
4
|
-
} from "./chunk-A3UBYTJT.js";
|
|
5
|
-
|
|
6
|
-
// src/transcription/transcribe.ts
|
|
7
|
-
function transcribe(audio, options) {
|
|
8
|
-
const data = toUint8Array(audio);
|
|
9
|
-
if (data.byteLength === 0) {
|
|
10
|
-
throw new Error("Transcription audio cannot be empty.");
|
|
11
|
-
}
|
|
12
|
-
if (typeof options.filename !== "string" || options.filename.trim().length === 0) {
|
|
13
|
-
throw new TypeError("Transcription filename must be a non-empty string.");
|
|
14
|
-
}
|
|
15
|
-
const request = { data, filename: options.filename };
|
|
16
|
-
if (options.language !== void 0) request.language = options.language;
|
|
17
|
-
if (options.prompt !== void 0) request.prompt = options.prompt;
|
|
18
|
-
if (options.temperature !== void 0) request.temperature = options.temperature;
|
|
19
|
-
if (options.additionalParams !== void 0) request.additionalParams = options.additionalParams;
|
|
20
|
-
const retries = options.retries === void 0 ? void 0 : resolveRetryOptions(options.retries);
|
|
21
|
-
return runWithRetries(
|
|
22
|
-
() => options.model.transcription(request),
|
|
23
|
-
retries,
|
|
24
|
-
{ streaming: false }
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
function toUint8Array(bytes) {
|
|
28
|
-
if (bytes instanceof Uint8Array) {
|
|
29
|
-
return new Uint8Array(
|
|
30
|
-
bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
return new Uint8Array(bytes.slice(0));
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export {
|
|
37
|
-
transcribe
|
|
38
|
-
};
|
|
39
|
-
//# sourceMappingURL=chunk-QY5GZ7HR.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/transcription/transcribe.ts"],"sourcesContent":["import type { JsonValue } from \"../completion\";\nimport { type RetryOptions, resolveRetryOptions, runWithRetries } from \"../retry\";\nimport type { TranscriptionModel, TranscriptionRequest } from \"./types\";\n\nexport type TranscribeOptions<Model extends TranscriptionModel = TranscriptionModel> = {\n model: Model;\n filename: string;\n language?: string | undefined;\n prompt?: string | undefined;\n temperature?: number | undefined;\n additionalParams?: JsonValue | undefined;\n retries?: RetryOptions | undefined;\n};\n\nexport function transcribe<Model extends TranscriptionModel>(\n audio: Uint8Array | ArrayBuffer,\n options: TranscribeOptions<Model>,\n): Promise<Awaited<ReturnType<Model[\"transcription\"]>>> {\n const data = toUint8Array(audio);\n if (data.byteLength === 0) {\n throw new Error(\"Transcription audio cannot be empty.\");\n }\n if (typeof options.filename !== \"string\" || options.filename.trim().length === 0) {\n throw new TypeError(\"Transcription filename must be a non-empty string.\");\n }\n\n const request: TranscriptionRequest = { data, filename: options.filename };\n if (options.language !== undefined) request.language = options.language;\n if (options.prompt !== undefined) request.prompt = options.prompt;\n if (options.temperature !== undefined) request.temperature = options.temperature;\n if (options.additionalParams !== undefined) request.additionalParams = options.additionalParams;\n\n const retries = options.retries === undefined ? undefined : resolveRetryOptions(options.retries);\n return runWithRetries<Awaited<ReturnType<Model[\"transcription\"]>>>(\n () =>\n options.model.transcription(request) as Promise<Awaited<ReturnType<Model[\"transcription\"]>>>,\n retries,\n { streaming: false },\n );\n}\n\nfunction toUint8Array(bytes: Uint8Array | ArrayBuffer): Uint8Array {\n if (bytes instanceof Uint8Array) {\n return new Uint8Array(\n bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength),\n );\n }\n return new Uint8Array(bytes.slice(0));\n}\n"],"mappings":";;;;;;AAcO,SAAS,WACd,OACA,SACsD;AACtD,QAAM,OAAO,aAAa,KAAK;AAC/B,MAAI,KAAK,eAAe,GAAG;AACzB,UAAM,IAAI,MAAM,sCAAsC;AAAA,EACxD;AACA,MAAI,OAAO,QAAQ,aAAa,YAAY,QAAQ,SAAS,KAAK,EAAE,WAAW,GAAG;AAChF,UAAM,IAAI,UAAU,oDAAoD;AAAA,EAC1E;AAEA,QAAM,UAAgC,EAAE,MAAM,UAAU,QAAQ,SAAS;AACzE,MAAI,QAAQ,aAAa,OAAW,SAAQ,WAAW,QAAQ;AAC/D,MAAI,QAAQ,WAAW,OAAW,SAAQ,SAAS,QAAQ;AAC3D,MAAI,QAAQ,gBAAgB,OAAW,SAAQ,cAAc,QAAQ;AACrE,MAAI,QAAQ,qBAAqB,OAAW,SAAQ,mBAAmB,QAAQ;AAE/E,QAAM,UAAU,QAAQ,YAAY,SAAY,SAAY,oBAAoB,QAAQ,OAAO;AAC/F,SAAO;AAAA,IACL,MACE,QAAQ,MAAM,cAAc,OAAO;AAAA,IACrC;AAAA,IACA,EAAE,WAAW,MAAM;AAAA,EACrB;AACF;AAEA,SAAS,aAAa,OAA6C;AACjE,MAAI,iBAAiB,YAAY;AAC/B,WAAO,IAAI;AAAA,MACT,MAAM,OAAO,MAAM,MAAM,YAAY,MAAM,aAAa,MAAM,UAAU;AAAA,IAC1E;AAAA,EACF;AACA,SAAO,IAAI,WAAW,MAAM,MAAM,CAAC,CAAC;AACtC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vector-store/index.ts","../src/internal/agent-runtime/approval-requirement.ts","../src/tool/errors.ts","../src/tool/tool.ts","../src/internal/agent-runtime/prepared-tool-call.ts","../src/tool/create-tool.ts","../src/vector-store/filter.ts","../src/vector-store/lsh.ts"],"sourcesContent":["import { z } from \"zod\";\nimport {\n cosineSimilarity,\n type EmbeddedDocument,\n type Embedding,\n type EmbeddingModel,\n embedText,\n type VectorMetadata,\n} from \"../embeddings\";\nimport { createTool } from \"../tool/create-tool\";\nimport type { Tool } from \"../tool/tool\";\nimport { matchesVectorFilter } from \"./filter\";\nimport { LshIndex } from \"./lsh\";\nimport type {\n IndexStrategy,\n VectorInspectItem,\n VectorInspectPage,\n VectorInspectRequest,\n VectorSearchIndex,\n VectorSearchRequest,\n VectorSearchResult,\n VectorSearchToolOptions,\n} from \"./types\";\n\nexport { vectorFilter } from \"./filter\";\nexport type * from \"./types\";\n\ntype StoredDocument<T, Metadata extends VectorMetadata> = EmbeddedDocument<T, Metadata>;\n\nexport class InMemoryVectorStore<T, Metadata extends VectorMetadata = VectorMetadata> {\n private readonly documents = new Map<string, StoredDocument<T, Metadata>>();\n private indexStrategy: IndexStrategy;\n private lshIndex: LshIndex | undefined;\n private embeddingDimension: number | undefined;\n\n constructor(options: { index?: IndexStrategy } = {}) {\n this.indexStrategy = options.index ?? { type: \"bruteForce\" };\n }\n\n static fromDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n documents: Array<EmbeddedDocument<T, Metadata>>,\n options: { index?: IndexStrategy } = {},\n ): InMemoryVectorStore<T, Metadata> {\n const store = new InMemoryVectorStore<T, Metadata>(options);\n store.addDocuments(documents);\n return store;\n }\n\n addDocuments(documents: Array<EmbeddedDocument<T, Metadata>>): this {\n this.validateDocumentDimensions(documents);\n for (const document of documents) {\n this.documents.set(document.id, document);\n }\n this.rebuildLshIndex();\n return this;\n }\n\n get(id: string): StoredDocument<T, Metadata> | undefined {\n return this.documents.get(id);\n }\n\n values(): Array<StoredDocument<T, Metadata>> {\n return [...this.documents.values()];\n }\n\n len(): number {\n return this.documents.size;\n }\n\n isEmpty(): boolean {\n return this.documents.size === 0;\n }\n\n index(model: EmbeddingModel): InMemoryVectorIndex<T, Metadata> {\n return new InMemoryVectorIndex(model, this);\n }\n\n candidates(queryEmbedding: Embedding): Array<StoredDocument<T, Metadata>> {\n this.validateQueryDimension(queryEmbedding);\n if (this.indexStrategy.type !== \"lsh\" || this.lshIndex === undefined) {\n return this.values();\n }\n\n const candidateIds = this.lshIndex.query(queryEmbedding.vector);\n if (candidateIds.size === 0) {\n return this.values();\n }\n\n return [...candidateIds].flatMap((id) => {\n const document = this.documents.get(id);\n return document === undefined ? [] : [document];\n });\n }\n\n private rebuildLshIndex(): void {\n if (this.indexStrategy.type !== \"lsh\") {\n this.lshIndex = undefined;\n return;\n }\n\n const firstEmbedding = this.values().flatMap((document) => document.embeddings)[0];\n if (firstEmbedding === undefined) {\n this.lshIndex = undefined;\n return;\n }\n\n const index = new LshIndex(firstEmbedding.vector.length, this.indexStrategy);\n for (const document of this.documents.values()) {\n for (const embedding of document.embeddings) {\n index.insert(document.id, embedding.vector);\n }\n }\n this.lshIndex = index;\n }\n\n private validateDocumentDimensions(documents: Array<EmbeddedDocument<T, Metadata>>): void {\n let dimension = this.embeddingDimension;\n for (const document of documents) {\n for (const embedding of document.embeddings) {\n dimension = validateEmbeddingDimension(dimension, embedding, document.id);\n }\n }\n this.embeddingDimension = dimension;\n }\n\n private validateQueryDimension(queryEmbedding: Embedding): void {\n if (this.embeddingDimension === undefined) {\n return;\n }\n validateEmbeddingDimension(this.embeddingDimension, queryEmbedding, \"query\");\n }\n}\n\nexport class InMemoryVectorIndex<T, Metadata extends VectorMetadata = VectorMetadata>\n implements VectorSearchIndex<T, Metadata>\n{\n constructor(\n private readonly model: EmbeddingModel,\n private readonly store: InMemoryVectorStore<T, Metadata>,\n ) {}\n\n async search(request: VectorSearchRequest): Promise<Array<VectorSearchResult<T, Metadata>>> {\n const queryEmbedding = await embedText(this.model, request.query);\n return this.store\n .candidates(queryEmbedding)\n .filter((document) => matchesVectorFilter(document.metadata, request.filter))\n .flatMap((document) => {\n const score = bestScore(queryEmbedding, document.embeddings);\n if (score === undefined) {\n return [];\n }\n if (request.threshold !== undefined && score < request.threshold) {\n return [];\n }\n const result: VectorSearchResult<T, Metadata> = {\n score,\n id: document.id,\n document: document.document,\n };\n if (document.metadata !== undefined) {\n result.metadata = document.metadata;\n }\n return [result];\n })\n .sort((left, right) => right.score - left.score)\n .slice(0, Math.max(0, Math.trunc(request.topK)));\n }\n\n async searchIds(request: VectorSearchRequest): Promise<Array<{ score: number; id: string }>> {\n return (await this.search(request)).map(({ score, id }) => ({ score, id }));\n }\n\n async inspect(request: VectorInspectRequest): Promise<VectorInspectPage<T, Metadata>> {\n const limit = Math.max(0, Math.trunc(request.limit));\n const start = Math.max(0, Math.trunc(Number(request.cursor ?? \"0\")));\n const documents = this.store\n .values()\n .filter((document) => matchesVectorFilter(document.metadata, request.filter));\n const page = documents.slice(start, start + limit);\n const nextOffset = start + page.length;\n const result: VectorInspectPage<T, Metadata> = {\n items: page.map((document) => {\n const item: VectorInspectItem<T, Metadata> = {\n id: document.id,\n document: document.document,\n };\n if (document.metadata !== undefined) {\n item.metadata = document.metadata;\n }\n return item;\n }),\n };\n if (nextOffset < documents.length) {\n result.nextCursor = String(nextOffset);\n }\n result.totalCount = documents.length;\n return result;\n }\n\n asTool(options: VectorSearchToolOptions): Tool<{ query: string; topK?: number }, unknown> {\n return createVectorSearchTool(this, options);\n }\n}\n\nexport function createVectorSearchTool<T, Metadata extends VectorMetadata>(\n index: VectorSearchIndex<T, Metadata>,\n options: VectorSearchToolOptions,\n): Tool<{ query: string; topK?: number }, Array<VectorSearchResult<T, Metadata>>> {\n return createTool({\n name: options.name,\n description:\n options.description ?? \"Search a vector store for documents relevant to the provided query.\",\n inputSchema: z.object({\n query: z.string().describe(\"The query string to search for relevant documents.\"),\n topK: z.number().int().positive().optional().describe(\"The maximum number of results.\"),\n }),\n outputSchema: z.array(\n z.object({\n score: z.number(),\n id: z.string(),\n document: z.any(),\n metadata: z\n .record(z.string(), z.union([z.string(), z.number(), z.boolean(), z.null()]))\n .optional(),\n }),\n ),\n execute: ({ query, topK }) =>\n index.search({\n query,\n topK: topK ?? options.topK ?? 5,\n threshold: options.threshold,\n filter: options.filter,\n }),\n }) as Tool<{ query: string; topK?: number }, Array<VectorSearchResult<T, Metadata>>>;\n}\n\nfunction bestScore(queryEmbedding: Embedding, embeddings: Embedding[]): number | undefined {\n let best: number | undefined;\n for (const embedding of embeddings) {\n const score = cosineSimilarity(queryEmbedding.vector, embedding.vector);\n best = best === undefined ? score : Math.max(best, score);\n }\n return best;\n}\n\nfunction validateEmbeddingDimension(\n expectedDimension: number | undefined,\n embedding: Embedding,\n id: string,\n): number {\n if (expectedDimension === undefined) {\n return embedding.vector.length;\n }\n if (embedding.vector.length !== expectedDimension) {\n throw new Error(\n `Vector dimension mismatch: expected ${expectedDimension} dimensions but received ${embedding.vector.length} for ${id}`,\n );\n }\n return expectedDimension;\n}\n","import type { ToolApprovalRequirement } from \"../../tool/tool\";\n\nexport function toolMayRequireApproval(requirement: unknown): boolean {\n return requirement !== undefined && requirement !== false;\n}\n\nexport function assertToolApprovalRequirement(\n requirement: unknown,\n options: { allowFunction: boolean },\n): asserts requirement is boolean | ToolApprovalRequirement | ((...args: never[]) => unknown) {\n if (typeof requirement === \"boolean\") {\n return;\n }\n if (options.allowFunction && typeof requirement === \"function\") {\n return;\n }\n if (typeof requirement !== \"object\" || requirement === null || Array.isArray(requirement)) {\n throw new TypeError(\n 'Tool \"requiresApproval\" must be a boolean, a function, or an object with an optional string reason.',\n );\n }\n const reason = (requirement as { reason?: unknown }).reason;\n if (reason !== undefined && typeof reason !== \"string\") {\n throw new TypeError('Tool \"requiresApproval.reason\" must be a string.');\n }\n}\n","export class ToolCallError extends Error {\n constructor(\n message: string,\n readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"ToolCallError\";\n }\n}\n\nexport class ToolNotFoundError extends Error {\n constructor(readonly toolName: string) {\n super(`Tool not found: ${toolName}`);\n this.name = \"ToolNotFoundError\";\n }\n}\n\nexport class ToolJsonError extends Error {\n constructor(\n message: string,\n readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"ToolJsonError\";\n }\n}\n","import type { JsonObject, JsonValue, ToolDefinition, ToolResultContent } from \"../completion/types\";\nimport {\n isToolResultContentArray,\n serializeToolResultOutput as serializeToolOutput,\n} from \"../completion/types\";\n\nexport type ToolApprovalRunContext = {\n agentId: string;\n runId: string;\n sessionId?: string;\n metadata?: JsonObject;\n};\n\nexport type ToolApprovalContext<Args = unknown> = {\n toolName: string;\n args: Args;\n rawArgs: string;\n toolCallId?: string;\n internalCallId: string;\n run: ToolApprovalRunContext;\n};\n\nexport type ToolApprovalRequirement = {\n reason?: string | undefined;\n};\n\nexport type ToolRequiresApproval<Args = unknown> =\n | boolean\n | ToolApprovalRequirement\n | ((\n args: Args,\n context: ToolApprovalContext<Args>,\n ) => boolean | ToolApprovalRequirement | Promise<boolean | ToolApprovalRequirement>);\n\nexport type ToolCallStreamEvent = {\n agentId: string;\n agentName?: string | undefined;\n event: unknown;\n};\n\nexport type ToolCallContext = {\n emitStreamEvent?(event: ToolCallStreamEvent): void | Promise<void>;\n includeToolCallDeltas?: boolean;\n};\n\nexport interface Tool<Args = unknown, Output = unknown> {\n readonly name: string;\n readonly requiresApproval?: ToolRequiresApproval<Args>;\n definition(prompt: string): ToolDefinition | Promise<ToolDefinition>;\n call(args: Args, context?: ToolCallContext): Output | Promise<Output>;\n parseInput?(args: JsonValue): Args;\n}\n\nexport type AnyTool = Omit<Tool<unknown, unknown>, \"requiresApproval\"> & {\n readonly requiresApproval?: unknown;\n};\n\nexport type NormalizedToolOutput = string | ToolResultContent[];\n\nexport const ToolOutput = {\n content(content: ToolResultContent[]): ToolResultContent[] {\n return content;\n },\n};\n\nexport { isToolResultContentArray, serializeToolOutput };\n\nexport function normalizeToolResultOutput(output: unknown): NormalizedToolOutput {\n return isToolResultContentArray(output) ? output : serializeToolOutput(output);\n}\n\nexport function toolResultContentToText(content: ToolResultContent[]): string {\n return content\n .map((item) => (item.type === \"text\" ? item.text : `[image:${item.mediaType ?? \"image/png\"}]`))\n .join(\"\\n\");\n}\n\nexport function parseToolArgs(args: string): JsonValue {\n if (args.trim() === \"\") {\n return {};\n }\n\n return JSON.parse(args) as JsonValue;\n}\n","import { ToolCallError, ToolJsonError } from \"../../tool/errors\";\nimport {\n type AnyTool,\n type NormalizedToolOutput,\n normalizeToolResultOutput,\n parseToolArgs,\n type ToolCallContext,\n} from \"../../tool/tool\";\n\nconst preparedToolInputSymbol = Symbol(\"preparedToolInput\");\nconst preparedToolOwnerSymbol = Symbol(\"preparedToolOwner\");\n\nexport type PreparedToolCall = {\n input: unknown;\n call(context: ToolCallContext): Promise<NormalizedToolOutput>;\n};\n\ntype PreparedToolCallContext = ToolCallContext & {\n [preparedToolInputSymbol]?: { owner: object; input: unknown };\n};\n\ntype ToolWithPreparedOwner = AnyTool & {\n [preparedToolOwnerSymbol]?: object;\n};\n\nexport function attachPreparedToolOwner<T extends AnyTool>(tool: T, owner: object): T {\n Object.defineProperty(tool, preparedToolOwnerSymbol, {\n configurable: false,\n enumerable: true,\n value: owner,\n writable: false,\n });\n return tool;\n}\n\nexport function preparedToolInput(\n context: ToolCallContext | undefined,\n owner: object,\n): { input: unknown } | undefined {\n if (context === undefined || !(preparedToolInputSymbol in context)) {\n return undefined;\n }\n const prepared = (context as PreparedToolCallContext)[preparedToolInputSymbol];\n return prepared?.owner === owner ? { input: prepared.input } : undefined;\n}\n\nexport function withoutPreparedToolInput(context: ToolCallContext): ToolCallContext {\n if (!(preparedToolInputSymbol in context)) {\n return context;\n }\n const { [preparedToolInputSymbol]: _prepared, ...publicContext } =\n context as PreparedToolCallContext;\n return publicContext;\n}\n\nexport function prepareToolCall(tool: AnyTool, args: string): PreparedToolCall {\n let rawInput: ReturnType<typeof parseToolArgs>;\n try {\n rawInput = parseToolArgs(args);\n } catch (error) {\n throw new ToolJsonError(`Invalid JSON arguments for tool ${tool.name}`, error);\n }\n\n let input: unknown;\n try {\n input = tool.parseInput === undefined ? rawInput : tool.parseInput(rawInput);\n } catch (error) {\n throw asToolCallError(tool.name, error);\n }\n\n return {\n input,\n async call(context) {\n try {\n const owner = (tool as ToolWithPreparedOwner)[preparedToolOwnerSymbol];\n return normalizeToolResultOutput(\n await tool.call(\n input,\n owner === undefined ? context : withPreparedToolInput(context, owner, input),\n ),\n );\n } catch (error) {\n throw asToolCallError(tool.name, error);\n }\n },\n };\n}\n\nfunction withPreparedToolInput(\n context: ToolCallContext,\n owner: object,\n input: unknown,\n): ToolCallContext {\n const preparedContext: PreparedToolCallContext = { ...context };\n Object.defineProperty(preparedContext, preparedToolInputSymbol, {\n configurable: false,\n enumerable: true,\n value: { owner, input },\n writable: false,\n });\n return preparedContext;\n}\n\nfunction asToolCallError(toolName: string, error: unknown): ToolCallError {\n if (error instanceof ToolCallError) {\n return error;\n }\n return error instanceof Error\n ? new ToolCallError(error.message, error)\n : new ToolCallError(`Tool ${toolName} failed`, error);\n}\n","import type { z } from \"zod\";\nimport { assertToolApprovalRequirement } from \"../internal/agent-runtime/approval-requirement\";\nimport {\n attachPreparedToolOwner,\n preparedToolInput,\n withoutPreparedToolInput,\n} from \"../internal/agent-runtime/prepared-tool-call\";\nimport { toProviderJsonSchema, type ZodSchema } from \"../schema/zod-schema\";\nimport type { Tool, ToolCallContext, ToolRequiresApproval } from \"./tool\";\n\nexport type CreateToolOptions<\n InputSchema extends ZodSchema,\n OutputSchema extends ZodSchema | undefined = undefined,\n Output = unknown,\n> = {\n name: string;\n description: string;\n inputSchema: InputSchema;\n outputSchema?: OutputSchema;\n requiresApproval?: ToolRequiresApproval<z.output<InputSchema>>;\n execute(\n args: z.output<InputSchema>,\n context: ToolCallContext,\n ): OutputSchema extends ZodSchema\n ? z.input<OutputSchema> | Promise<z.input<OutputSchema>>\n : Output | Promise<Output>;\n};\n\ntype CreateToolOutput<\n OutputSchema extends ZodSchema | undefined,\n Output,\n> = OutputSchema extends ZodSchema ? z.output<OutputSchema> : Output;\n\nexport function createTool<InputSchema extends ZodSchema, Output = unknown>(\n options: CreateToolOptions<InputSchema, undefined, Output> & { outputSchema?: undefined },\n): Tool<z.output<InputSchema>, Output>;\n\nexport function createTool<InputSchema extends ZodSchema, OutputSchema extends ZodSchema>(\n options: CreateToolOptions<InputSchema, OutputSchema>,\n): Tool<z.output<InputSchema>, z.output<OutputSchema>>;\n\nexport function createTool<\n InputSchema extends ZodSchema,\n OutputSchema extends ZodSchema | undefined = undefined,\n Output = unknown,\n>(\n options: CreateToolOptions<InputSchema, OutputSchema, Output>,\n): Tool<z.output<InputSchema>, CreateToolOutput<OutputSchema, Output>> {\n const { name, description, inputSchema, outputSchema, execute } = options;\n const requiresApproval = snapshotApprovalRequirement(options.requiresApproval);\n if (requiresApproval !== undefined) {\n assertToolApprovalRequirement(requiresApproval, { allowFunction: true });\n }\n const parameters = toProviderJsonSchema(inputSchema);\n const preparedInputOwner = {};\n const definition = () => ({\n name,\n description,\n parameters: globalThis.structuredClone(parameters),\n });\n const call = async (\n args: z.output<InputSchema>,\n context: ToolCallContext = {},\n ): Promise<CreateToolOutput<OutputSchema, Output>> => {\n const prepared = preparedToolInput(context, preparedInputOwner);\n const parsedArgs =\n prepared === undefined ? inputSchema.parse(args) : (prepared.input as z.output<InputSchema>);\n const executionContext = prepared === undefined ? context : withoutPreparedToolInput(context);\n const result = await execute(parsedArgs, executionContext);\n return (outputSchema === undefined ? result : outputSchema.parse(result)) as CreateToolOutput<\n OutputSchema,\n Output\n >;\n };\n const parseInput = (args: unknown): z.output<InputSchema> => inputSchema.parse(args);\n\n const tool: Tool<z.output<InputSchema>, CreateToolOutput<OutputSchema, Output>> = {\n name,\n definition,\n call,\n parseInput,\n };\n if (requiresApproval !== undefined) {\n Object.defineProperty(tool, \"requiresApproval\", {\n configurable: false,\n enumerable: true,\n value: requiresApproval,\n writable: false,\n });\n }\n return attachPreparedToolOwner(tool, preparedInputOwner);\n}\n\nfunction snapshotApprovalRequirement<Args>(\n requirement: ToolRequiresApproval<Args> | undefined,\n): ToolRequiresApproval<Args> | undefined {\n return typeof requirement === \"object\" && requirement !== null\n ? Object.freeze({ ...requirement })\n : requirement;\n}\n","import type { VectorMetadata, VectorMetadataValue } from \"../embeddings\";\nimport type { VectorFilter } from \"./types\";\n\nexport type { VectorFilter } from \"./types\";\n\nexport const vectorFilter = {\n eq(key: string, value: VectorMetadataValue): VectorFilter {\n return { type: \"eq\", key, value };\n },\n gt(key: string, value: VectorMetadataValue): VectorFilter {\n return { type: \"gt\", key, value };\n },\n lt(key: string, value: VectorMetadataValue): VectorFilter {\n return { type: \"lt\", key, value };\n },\n and(left: VectorFilter, right: VectorFilter): VectorFilter {\n return { type: \"and\", filters: [left, right] };\n },\n or(left: VectorFilter, right: VectorFilter): VectorFilter {\n return { type: \"or\", filters: [left, right] };\n },\n};\n\nexport function matchesVectorFilter(\n metadata: VectorMetadata | undefined,\n filter: VectorFilter | undefined,\n): boolean {\n if (filter === undefined) {\n return true;\n }\n if (metadata === undefined) {\n return false;\n }\n\n switch (filter.type) {\n case \"eq\":\n return metadata[filter.key] === filter.value;\n case \"gt\":\n return compare(metadata[filter.key], filter.value) > 0;\n case \"lt\":\n return compare(metadata[filter.key], filter.value) < 0;\n case \"and\":\n return (\n matchesVectorFilter(metadata, filter.filters[0]) &&\n matchesVectorFilter(metadata, filter.filters[1])\n );\n case \"or\":\n return (\n matchesVectorFilter(metadata, filter.filters[0]) ||\n matchesVectorFilter(metadata, filter.filters[1])\n );\n }\n}\n\nfunction compare(left: VectorMetadataValue | undefined, right: VectorMetadataValue): number {\n if (typeof left === \"number\" && typeof right === \"number\") {\n return left - right;\n }\n if (typeof left === \"string\" && typeof right === \"string\") {\n return left.localeCompare(right);\n }\n if (typeof left === \"boolean\" && typeof right === \"boolean\") {\n return Number(left) - Number(right);\n }\n return 0;\n}\n","import type { LshOptions } from \"./types\";\n\nexport type { LshOptions } from \"./types\";\n\nexport class LshIndex {\n private readonly hyperplanes: number[][];\n private readonly tables: Array<Map<string, Set<string>>>;\n\n constructor(\n dimensions: number,\n private readonly options: LshOptions,\n ) {\n const rng = seededRandom(options.seed ?? 42);\n this.hyperplanes = [];\n for (let index = 0; index < options.numTables * options.numHyperplanes; index += 1) {\n const plane = Array.from({ length: dimensions }, () => rng() * 2 - 1);\n const norm = Math.sqrt(plane.reduce((sum, value) => sum + value ** 2, 0));\n this.hyperplanes.push(norm === 0 ? plane : plane.map((value) => value / norm));\n }\n this.tables = Array.from({ length: options.numTables }, () => new Map());\n }\n\n insert(id: string, vector: number[]): void {\n for (let table = 0; table < this.options.numTables; table += 1) {\n const hash = this.hash(vector, table);\n const bucket = this.tables[table]?.get(hash) ?? new Set<string>();\n bucket.add(id);\n this.tables[table]?.set(hash, bucket);\n }\n }\n\n query(vector: number[]): Set<string> {\n const candidates = new Set<string>();\n for (let table = 0; table < this.options.numTables; table += 1) {\n const hash = this.hash(vector, table);\n for (const id of this.tables[table]?.get(hash) ?? []) {\n candidates.add(id);\n }\n }\n return candidates;\n }\n\n private hash(vector: number[], table: number): string {\n let hash = \"\";\n const start = table * this.options.numHyperplanes;\n for (let offset = 0; offset < this.options.numHyperplanes; offset += 1) {\n const plane = this.hyperplanes[start + offset] as number[];\n const dot = vector.reduce((sum, value, index) => sum + value * (plane[index] ?? 0), 0);\n hash += dot >= 0 ? \"1\" : \"0\";\n }\n return hash;\n }\n}\n\nfunction seededRandom(seed: number): () => number {\n let state = seed >>> 0;\n return () => {\n state = (state * 1664525 + 1013904223) >>> 0;\n return state / 0x100000000;\n };\n}\n"],"mappings":"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","names":[]}
|
package/dist/chunk-RFDVKCIE.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// src/schema/zod-schema.ts
|
|
2
|
-
import { z } from "zod";
|
|
3
|
-
function toProviderJsonSchema(schema, options = {}) {
|
|
4
|
-
const jsonSchema = z.toJSONSchema(schema, options);
|
|
5
|
-
const { $schema: _schema, ...providerSchema } = jsonSchema;
|
|
6
|
-
return providerSchema;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export {
|
|
10
|
-
toProviderJsonSchema
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=chunk-RFDVKCIE.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/schema/zod-schema.ts"],"sourcesContent":["import { z } from \"zod\";\nimport type { JsonObject } from \"../completion/index\";\n\nexport type ZodSchema<T = unknown> = z.ZodType<T>;\n\nexport function toProviderJsonSchema(\n schema: z.ZodType,\n options: { io?: \"input\" | \"output\" } = {},\n): JsonObject {\n const jsonSchema = z.toJSONSchema(schema, options) as JsonObject;\n const { $schema: _schema, ...providerSchema } = jsonSchema;\n return providerSchema;\n}\n"],"mappings":";AAAA,SAAS,SAAS;AAKX,SAAS,qBACd,QACA,UAAuC,CAAC,GAC5B;AACZ,QAAM,aAAa,EAAE,aAAa,QAAQ,OAAO;AACjD,QAAM,EAAE,SAAS,SAAS,GAAG,eAAe,IAAI;AAChD,SAAO;AACT;","names":[]}
|
package/dist/chunk-RMUBRRSK.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
resolveRetryOptions,
|
|
3
|
-
runWithRetries
|
|
4
|
-
} from "./chunk-A3UBYTJT.js";
|
|
5
|
-
|
|
6
|
-
// src/audio-generation/generate-speech.ts
|
|
7
|
-
function generateSpeech(text, options) {
|
|
8
|
-
assertNonEmptyString(text, "Speech text");
|
|
9
|
-
assertNonEmptyString(options.voice, "Speech voice");
|
|
10
|
-
const speed = options.speed ?? 1;
|
|
11
|
-
if (!Number.isFinite(speed) || speed <= 0) {
|
|
12
|
-
throw new RangeError("Speech speed must be a positive finite number.");
|
|
13
|
-
}
|
|
14
|
-
const request = { text, voice: options.voice, speed };
|
|
15
|
-
if (options.additionalParams !== void 0) {
|
|
16
|
-
request.additionalParams = options.additionalParams;
|
|
17
|
-
}
|
|
18
|
-
const retries = options.retries === void 0 ? void 0 : resolveRetryOptions(options.retries);
|
|
19
|
-
return runWithRetries(
|
|
20
|
-
() => options.model.audioGeneration(request),
|
|
21
|
-
retries,
|
|
22
|
-
{ streaming: false }
|
|
23
|
-
);
|
|
24
|
-
}
|
|
25
|
-
function assertNonEmptyString(value, name) {
|
|
26
|
-
if (typeof value !== "string" || value.trim().length === 0) {
|
|
27
|
-
throw new TypeError(`${name} must be a non-empty string.`);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export {
|
|
32
|
-
generateSpeech
|
|
33
|
-
};
|
|
34
|
-
//# sourceMappingURL=chunk-RMUBRRSK.js.map
|