@anvia/core 0.13.0 → 0.13.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/dist/agent/index.d.ts +2 -2
- package/dist/agent/index.js +9 -10
- package/dist/{agent-CXvjoW0J.d.ts → agent-3qSfIKIj.d.ts} +1 -0
- package/dist/{chunk-NPZDYOE6.js → chunk-2ODTMRHP.js} +11 -10
- package/dist/chunk-2ODTMRHP.js.map +1 -0
- package/dist/{chunk-HF4KHHNM.js → chunk-77D7XBWL.js} +5 -5
- package/dist/chunk-77D7XBWL.js.map +1 -0
- package/dist/{chunk-7BV5JBJW.js → chunk-BCGCTBDN.js} +23 -20
- package/dist/chunk-BCGCTBDN.js.map +1 -0
- package/dist/{chunk-JT4U4FGG.js → chunk-BHQ5UPSK.js} +3 -3
- package/dist/{chunk-7H3TQN3I.js → chunk-CNTGKNZ3.js} +7 -7
- package/dist/chunk-CNTGKNZ3.js.map +1 -0
- package/dist/chunk-CQNNSZPG.js +9 -0
- package/dist/chunk-CQNNSZPG.js.map +1 -0
- package/dist/{chunk-IZM6FNCT.js → chunk-F3C5653H.js} +46 -40
- package/dist/chunk-F3C5653H.js.map +1 -0
- package/dist/{chunk-46IR5ZTN.js → chunk-JIUZWN45.js} +10 -11
- package/dist/chunk-JIUZWN45.js.map +1 -0
- package/dist/{chunk-MU3UPROJ.js → chunk-NS7W4G26.js} +21 -12
- package/dist/chunk-NS7W4G26.js.map +1 -0
- package/dist/{chunk-OCYL4AB6.js → chunk-VSGL6LBZ.js} +6 -6
- package/dist/{chunk-JS5MGVNM.js → chunk-YBBD4HZ3.js} +8 -7
- package/dist/{chunk-JS5MGVNM.js.map → chunk-YBBD4HZ3.js.map} +1 -1
- package/dist/{chunk-HLISYYCB.js → chunk-YOXG2K7N.js} +214 -131
- package/dist/chunk-YOXG2K7N.js.map +1 -0
- package/dist/{chunk-W53PLBOL.js → chunk-YTF65GYU.js} +2 -2
- package/dist/completion/index.js +2 -2
- package/dist/embeddings/index.js +1 -1
- package/dist/evals/index.d.ts +1 -1
- package/dist/evals/index.js +58 -35
- package/dist/evals/index.js.map +1 -1
- package/dist/extractor/index.d.ts +1 -1
- package/dist/extractor/index.js +10 -11
- package/dist/hooks/index.js +1 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +12 -12
- package/dist/internal/agent.d.ts +1 -1
- package/dist/internal/agent.js +8 -9
- package/dist/mcp/index.js +1 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/pipeline/index.d.ts +1 -1
- package/dist/pipeline/index.js +34 -19
- package/dist/pipeline/index.js.map +1 -1
- package/dist/request/index.d.ts +1 -1
- package/dist/request/index.js +7 -8
- package/dist/skills/index.js +6 -6
- package/dist/tool/index.js +4 -5
- package/dist/ui/index.js +2 -2
- package/dist/vector-store/index.js +2 -3
- package/package.json +1 -1
- package/dist/chunk-46IR5ZTN.js.map +0 -1
- package/dist/chunk-7BV5JBJW.js.map +0 -1
- package/dist/chunk-7H3TQN3I.js.map +0 -1
- package/dist/chunk-HF4KHHNM.js.map +0 -1
- package/dist/chunk-HLISYYCB.js.map +0 -1
- package/dist/chunk-IZM6FNCT.js.map +0 -1
- package/dist/chunk-MMHG7WAM.js +0 -19
- package/dist/chunk-MMHG7WAM.js.map +0 -1
- package/dist/chunk-MU3UPROJ.js.map +0 -1
- package/dist/chunk-NPZDYOE6.js.map +0 -1
- /package/dist/{chunk-JT4U4FGG.js.map → chunk-BHQ5UPSK.js.map} +0 -0
- /package/dist/{chunk-OCYL4AB6.js.map → chunk-VSGL6LBZ.js.map} +0 -0
- /package/dist/{chunk-W53PLBOL.js.map → chunk-YTF65GYU.js.map} +0 -0
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import {
|
|
2
2
|
InMemoryVectorStore,
|
|
3
3
|
createTool
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import {
|
|
6
|
-
compact
|
|
7
|
-
} from "./chunk-MMHG7WAM.js";
|
|
4
|
+
} from "./chunk-F3C5653H.js";
|
|
8
5
|
import {
|
|
9
6
|
embedDocuments
|
|
10
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-YBBD4HZ3.js";
|
|
11
8
|
import {
|
|
12
9
|
isToolResultContentArray,
|
|
13
10
|
serializeToolResultOutput
|
|
14
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-CNTGKNZ3.js";
|
|
15
12
|
|
|
16
13
|
// src/tool/errors.ts
|
|
17
14
|
var ToolCallError = class extends Error {
|
|
@@ -131,12 +128,14 @@ async function embedTools(model, tools, options = {}) {
|
|
|
131
128
|
const content = options.content?.(tool, definition) ?? defaultToolEmbeddingText(definition);
|
|
132
129
|
const texts = Array.isArray(content) ? content : [content];
|
|
133
130
|
const metadata = options.metadata?.(tool, definition);
|
|
134
|
-
const document =
|
|
131
|
+
const document = {
|
|
135
132
|
toolName: tool.name,
|
|
136
133
|
definition,
|
|
137
|
-
text: texts.join("\n")
|
|
138
|
-
|
|
139
|
-
|
|
134
|
+
text: texts.join("\n")
|
|
135
|
+
};
|
|
136
|
+
if (metadata !== void 0) {
|
|
137
|
+
document.metadata = metadata;
|
|
138
|
+
}
|
|
140
139
|
return { tool, document, texts, metadata };
|
|
141
140
|
});
|
|
142
141
|
return embedDocuments(model, documents, {
|
|
@@ -225,4 +224,4 @@ export {
|
|
|
225
224
|
createToolMiddleware,
|
|
226
225
|
createThinkTool
|
|
227
226
|
};
|
|
228
|
-
//# sourceMappingURL=chunk-
|
|
227
|
+
//# sourceMappingURL=chunk-JIUZWN45.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tool/errors.ts","../src/tool/tool.ts","../src/tool/tool-set.ts","../src/tool/dynamic-tools.ts","../src/tool/middleware.ts","../src/tool/think-tool.ts"],"sourcesContent":["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 ToolApprovalPolicy<Args = unknown> = {\n when(ctx: ToolApprovalContext<Args>): boolean | Promise<boolean>;\n reason?: string | ((ctx: ToolApprovalContext<Args>) => string | Promise<string>);\n rejectMessage?: string | ((ctx: ToolApprovalContext<Args>) => string | Promise<string>);\n};\n\nexport type ToolApprovalRequest<Args = unknown> = ToolApprovalContext<Args> & {\n reason?: string;\n rejectMessage?: string;\n};\n\nexport type ToolApprovalDecision =\n | boolean\n | { approved: true; reason?: string }\n | { approved: false; reason?: string; rejectMessage?: string };\n\nexport type ToolApprovalsOptions = {\n handler(request: ToolApprovalRequest): ToolApprovalDecision | Promise<ToolApprovalDecision>;\n};\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};\n\nexport interface Tool<Args = unknown, Output = unknown> {\n readonly name: string;\n readonly approval?: ToolApprovalPolicy<Args>;\n definition(prompt: string): ToolDefinition | Promise<ToolDefinition>;\n call(args: Args, context?: ToolCallContext): Output | Promise<Output>;\n parseApprovalArgs?(args: unknown): Args;\n}\n\nexport type AnyTool = Omit<Tool<unknown, unknown>, \"approval\"> & {\n readonly approval?: 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 type { ToolDefinition } from \"../completion/types\";\nimport { ToolCallError, ToolJsonError, ToolNotFoundError } from \"./errors\";\nimport {\n type AnyTool,\n type NormalizedToolOutput,\n normalizeToolResultOutput,\n parseToolArgs,\n type ToolCallContext,\n} from \"./tool\";\n\nexport class ToolSet {\n private readonly tools = new Map<string, AnyTool>();\n\n static fromTools(tools: AnyTool[]): ToolSet {\n const toolSet = new ToolSet();\n for (const tool of tools) {\n toolSet.addTool(tool);\n }\n return toolSet;\n }\n\n addTool(tool: AnyTool): this {\n this.tools.set(tool.name, tool);\n return this;\n }\n\n addTools(tools: AnyTool[] | ToolSet): this {\n const values = Array.isArray(tools) ? tools : tools.values();\n for (const tool of values) {\n this.addTool(tool);\n }\n return this;\n }\n\n deleteTool(toolName: string): boolean {\n return this.tools.delete(toolName);\n }\n\n contains(toolName: string): boolean {\n return this.tools.has(toolName);\n }\n\n get(toolName: string): AnyTool | undefined {\n return this.tools.get(toolName);\n }\n\n values(): AnyTool[] {\n return [...this.tools.values()];\n }\n\n async getToolDefinitions(prompt = \"\"): Promise<ToolDefinition[]> {\n const defs: ToolDefinition[] = [];\n for (const tool of this.tools.values()) {\n defs.push(await tool.definition(prompt));\n }\n return defs;\n }\n\n async call(\n toolName: string,\n args: string,\n context?: ToolCallContext,\n ): Promise<NormalizedToolOutput> {\n const tool = this.tools.get(toolName);\n if (tool === undefined) {\n throw new ToolNotFoundError(toolName);\n }\n\n let parsedArgs: unknown;\n try {\n parsedArgs = parseToolArgs(args);\n } catch (error) {\n throw new ToolJsonError(`Invalid JSON arguments for tool ${toolName}`, error);\n }\n\n try {\n const output = await tool.call(parsedArgs, context);\n return normalizeToolResultOutput(output);\n } catch (error) {\n if (error instanceof Error) {\n throw new ToolCallError(error.message, error);\n }\n throw new ToolCallError(`Tool ${toolName} failed`, error);\n }\n }\n}\n","import type { ToolDefinition } from \"../completion\";\nimport type { EmbeddedDocument, EmbeddingModel, VectorMetadata } from \"../embeddings\";\nimport { embedDocuments } from \"../embeddings\";\nimport type {\n VectorInspectPage,\n VectorInspectRequest,\n VectorSearchResult,\n VectorSearchToolOptions,\n} from \"../vector-store\";\nimport {\n InMemoryVectorStore,\n type VectorSearchIndex,\n type VectorSearchRequest,\n} from \"../vector-store\";\nimport type { AnyTool, Tool } from \"./tool\";\nimport { ToolSet } from \"./tool-set\";\n\nexport type ToolSearchDocument<Metadata extends VectorMetadata = VectorMetadata> = {\n toolName: string;\n definition: ToolDefinition;\n text: string;\n metadata?: Metadata | undefined;\n};\n\nexport type EmbedToolsOptions<Metadata extends VectorMetadata = VectorMetadata> = {\n content?: ((tool: AnyTool, definition: ToolDefinition) => string | string[]) | undefined;\n metadata?: ((tool: AnyTool, definition: ToolDefinition) => Metadata | undefined) | undefined;\n concurrency?: number | undefined;\n};\n\nexport interface DynamicToolIndex<Metadata extends VectorMetadata = VectorMetadata>\n extends VectorSearchIndex<ToolSearchDocument<Metadata>, Metadata> {\n readonly toolSet: ToolSet;\n}\n\nexport async function embedTools<Metadata extends VectorMetadata = VectorMetadata>(\n model: EmbeddingModel,\n tools: AnyTool[] | ToolSet,\n options: EmbedToolsOptions<Metadata> = {},\n): Promise<Array<EmbeddedDocument<ToolSearchDocument<Metadata>, Metadata>>> {\n const toolList = Array.isArray(tools) ? tools : tools.values();\n const definitions = await Promise.all(\n toolList.map(async (tool) => ({ tool, definition: await tool.definition(\"\") })),\n );\n const documents = definitions.map(({ tool, definition }) => {\n const content = options.content?.(tool, definition) ?? defaultToolEmbeddingText(definition);\n const texts = Array.isArray(content) ? content : [content];\n const metadata = options.metadata?.(tool, definition);\n const document: ToolSearchDocument<Metadata> = {\n toolName: tool.name,\n definition,\n text: texts.join(\"\\n\"),\n };\n if (metadata !== undefined) {\n document.metadata = metadata;\n }\n return { tool, document, texts, metadata };\n });\n\n return embedDocuments(model, documents, {\n id: (item) => item.tool.name,\n content: (item) => item.texts,\n metadata: (item) => item.metadata,\n concurrency: options.concurrency,\n }).then((embedded) =>\n embedded.map((item) => ({\n ...item,\n document: item.document.document,\n })),\n );\n}\n\nexport async function createToolIndex<Metadata extends VectorMetadata = VectorMetadata>(\n model: EmbeddingModel,\n tools: AnyTool[] | ToolSet,\n options: EmbedToolsOptions<Metadata> = {},\n): Promise<DynamicToolIndex<Metadata>> {\n const toolSet = Array.isArray(tools) ? ToolSet.fromTools(tools) : tools;\n const embedded = await embedTools(model, toolSet, options);\n const index = InMemoryVectorStore.fromDocuments(embedded).index(model);\n return new DynamicToolSearchIndex(index, toolSet);\n}\n\nexport function isDynamicToolIndex(value: unknown): value is DynamicToolIndex {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"toolSet\" in value &&\n (value as { toolSet?: unknown }).toolSet instanceof ToolSet\n );\n}\n\nclass DynamicToolSearchIndex<Metadata extends VectorMetadata>\n implements DynamicToolIndex<Metadata>\n{\n readonly inspect?: (\n request: VectorInspectRequest,\n ) => Promise<VectorInspectPage<ToolSearchDocument<Metadata>, Metadata>>;\n\n constructor(\n private readonly index: VectorSearchIndex<ToolSearchDocument<Metadata>, Metadata>,\n readonly toolSet: ToolSet,\n ) {\n if (index.inspect !== undefined) {\n this.inspect = (request) =>\n index.inspect?.(request) as Promise<\n VectorInspectPage<ToolSearchDocument<Metadata>, Metadata>\n >;\n }\n }\n\n search(\n request: VectorSearchRequest,\n ): Promise<Array<VectorSearchResult<ToolSearchDocument<Metadata>, Metadata>>> {\n return this.index.search(request);\n }\n\n searchIds(request: VectorSearchRequest): Promise<Array<{ score: number; id: string }>> {\n return this.index.searchIds(request);\n }\n\n asTool(options: VectorSearchToolOptions): Tool<{ query: string; topK?: number }, unknown> {\n return this.index.asTool(options);\n }\n}\n\nfunction defaultToolEmbeddingText(definition: ToolDefinition): string[] {\n return [definition.name, definition.description, JSON.stringify(definition.parameters)];\n}\n","import type {\n CompletionRequest,\n CompletionResponse,\n JsonValue,\n ToolResultContent,\n} from \"../completion\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type CompletionRequestMiddlewareArgs = {\n turn: number;\n request: CompletionRequest;\n originalRequest: CompletionRequest;\n};\n\nexport type CompletionRequestMiddlewareResult =\n | {\n request: CompletionRequest;\n }\n | undefined;\n\nexport type CompletionResponseMiddlewareArgs<RawResponse = unknown> = {\n turn: number;\n request: CompletionRequest;\n response: CompletionResponse<RawResponse>;\n originalResponse: CompletionResponse<RawResponse>;\n};\n\nexport type CompletionResponseMiddlewareResult<RawResponse = unknown> =\n | {\n response: CompletionResponse<RawResponse>;\n }\n | undefined;\n\nexport type ToolInputMiddlewareArgs = {\n toolName: string;\n args: string;\n originalArgs: string;\n turn: number;\n toolCallId?: string | undefined;\n internalCallId: string;\n};\n\nexport type ToolInputMiddlewareResult =\n | {\n args: JsonValue | string;\n }\n | undefined;\n\nexport type ToolResultMiddlewareArgs = {\n toolName: string;\n args: string;\n result: string;\n originalResult: string;\n structuredResult?: ToolResultContent[] | undefined;\n originalStructuredResult?: ToolResultContent[] | undefined;\n turn: number;\n toolCallId?: string | undefined;\n internalCallId: string;\n};\n\nexport type ToolOutputMiddlewareArgs = ToolResultMiddlewareArgs;\n\nexport type ToolOutputMiddlewareResult =\n | string\n | {\n result?: string | undefined;\n structuredResult?: ToolResultContent[] | undefined;\n }\n | undefined;\n\nexport interface AgentMiddleware<RawResponse = unknown> {\n onCompletionRequest?(\n args: CompletionRequestMiddlewareArgs,\n ): MaybePromise<CompletionRequestMiddlewareResult>;\n onCompletionResponse?(\n args: CompletionResponseMiddlewareArgs<RawResponse>,\n ): MaybePromise<CompletionResponseMiddlewareResult<RawResponse>>;\n onToolInput?(args: ToolInputMiddlewareArgs): MaybePromise<ToolInputMiddlewareResult>;\n onToolOutput?(args: ToolOutputMiddlewareArgs): MaybePromise<ToolOutputMiddlewareResult>;\n /**\n * @deprecated Use `onToolOutput` instead.\n */\n onResult?(args: ToolResultMiddlewareArgs): string | undefined | Promise<string | undefined>;\n}\n\n/**\n * @deprecated Use `AgentMiddleware` instead.\n */\nexport type ToolMiddleware<RawResponse = unknown> = AgentMiddleware<RawResponse>;\n\nexport function createMiddleware<RawResponse = unknown>(\n middleware: AgentMiddleware<RawResponse>,\n): AgentMiddleware<RawResponse> {\n return middleware;\n}\n\n/**\n * @deprecated Use `createMiddleware` instead.\n */\nexport function createToolMiddleware<RawResponse = unknown>(\n middleware: ToolMiddleware<RawResponse>,\n): ToolMiddleware<RawResponse> {\n return middleware;\n}\n","import { z } from \"zod\";\nimport { createTool } from \"./create-tool\";\n\nconst defaultThinkToolDescription =\n \"Use this tool to record a thought while reasoning through a complex task. It does not retrieve information, store memory, or change external state.\";\n\nconst thinkToolInput = z.object({\n thought: z.string().describe(\"A thought to record while reasoning through a task.\"),\n});\n\nexport type CreateThinkToolOptions = {\n name?: string;\n description?: string;\n};\n\nexport function createThinkTool(options: CreateThinkToolOptions = {}) {\n return createTool({\n name: options.name ?? \"think\",\n description: options.description ?? defaultThinkToolDescription,\n input: thinkToolInput,\n output: z.string(),\n execute: (args) => args.thought,\n });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
isJsonValue,
|
|
7
7
|
reasoningDisplayText,
|
|
8
8
|
serializeToolResultOutput
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-CNTGKNZ3.js";
|
|
10
10
|
|
|
11
11
|
// src/ui/messages.ts
|
|
12
12
|
function uiMessagesToCoreMessages(messages) {
|
|
@@ -272,9 +272,11 @@ function mergeToolResultPart(uiMessages, toolPartLocations, resultPart) {
|
|
|
272
272
|
const mergedPart = {
|
|
273
273
|
...currentPart,
|
|
274
274
|
toolName: resultPart.toolName === "tool" ? currentPart.toolName : resultPart.toolName,
|
|
275
|
-
state: "output-available"
|
|
276
|
-
...resultPart.output === void 0 ? {} : { output: resultPart.output }
|
|
275
|
+
state: "output-available"
|
|
277
276
|
};
|
|
277
|
+
if (resultPart.output !== void 0) {
|
|
278
|
+
mergedPart.output = resultPart.output;
|
|
279
|
+
}
|
|
278
280
|
if (currentPart.callId === void 0 && resultPart.callId !== void 0) {
|
|
279
281
|
mergedPart.callId = resultPart.callId;
|
|
280
282
|
toolPartLocations.byCallId.set(resultPart.callId, location);
|
|
@@ -316,14 +318,19 @@ function attachmentToUserContent(attachment) {
|
|
|
316
318
|
throw new TypeError("Image attachments require a url or base64 data with mediaType.");
|
|
317
319
|
}
|
|
318
320
|
if (attachment.text !== void 0) {
|
|
321
|
+
const source = {
|
|
322
|
+
type: "text",
|
|
323
|
+
text: attachment.text
|
|
324
|
+
};
|
|
325
|
+
if (attachment.mediaType !== void 0) {
|
|
326
|
+
source.mediaType = attachment.mediaType;
|
|
327
|
+
}
|
|
328
|
+
if (attachment.name !== void 0) {
|
|
329
|
+
source.filename = attachment.name;
|
|
330
|
+
}
|
|
319
331
|
return {
|
|
320
332
|
type: "document",
|
|
321
|
-
source
|
|
322
|
-
type: "text",
|
|
323
|
-
text: attachment.text,
|
|
324
|
-
...attachment.mediaType === void 0 ? {} : { mediaType: attachment.mediaType },
|
|
325
|
-
...attachment.name === void 0 ? {} : { filename: attachment.name }
|
|
326
|
-
}
|
|
333
|
+
source
|
|
327
334
|
};
|
|
328
335
|
}
|
|
329
336
|
const mediaType = attachment.mediaType ?? "application/octet-stream";
|
|
@@ -339,9 +346,11 @@ function userContentToAttachment(content) {
|
|
|
339
346
|
if (content.type === "image") {
|
|
340
347
|
const attachment2 = {
|
|
341
348
|
id: createId("attachment"),
|
|
342
|
-
type: "image"
|
|
343
|
-
...content.detail === void 0 ? {} : { detail: content.detail }
|
|
349
|
+
type: "image"
|
|
344
350
|
};
|
|
351
|
+
if (content.detail !== void 0) {
|
|
352
|
+
attachment2.detail = content.detail;
|
|
353
|
+
}
|
|
345
354
|
if (content.source.type === "url") {
|
|
346
355
|
attachment2.url = content.source.url;
|
|
347
356
|
} else {
|
|
@@ -454,4 +463,4 @@ export {
|
|
|
454
463
|
uiMessagesToCoreMessages,
|
|
455
464
|
coreMessagesToUIMessages
|
|
456
465
|
};
|
|
457
|
-
//# sourceMappingURL=chunk-
|
|
466
|
+
//# sourceMappingURL=chunk-NS7W4G26.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ui/messages.ts"],"sourcesContent":["import { isJsonValue } from \"../completion/json\";\nimport {\n AssistantContent,\n type AssistantContent as AssistantContentType,\n type Message as CoreMessage,\n type DocumentContent,\n type ImageContent,\n type ImageDetail,\n type JsonValue,\n Message,\n reasoningDisplayText,\n serializeToolResultOutput,\n ToolContent,\n type ToolContent as ToolContentType,\n type ToolResultContent,\n UserContent,\n type UserContent as UserContentType,\n} from \"../completion/types\";\nimport type { UIAttachment, UIMessage, UIMessagePart } from \"./types\";\n\ntype UIToolPartLocation = {\n messageIndex: number;\n partIndex: number;\n};\n\ntype UIToolPartLocations = {\n byToolCallId: Map<string, UIToolPartLocation>;\n byCallId: Map<string, UIToolPartLocation>;\n};\n\ntype UIToolMessagePart = Extract<UIMessagePart, { type: \"tool\" }>;\n\nexport function uiMessagesToCoreMessages(messages: UIMessage[]): CoreMessage[] {\n const coreMessages: CoreMessage[] = [];\n\n for (const message of messages) {\n const text = textFromUIParts(message.parts);\n\n if (message.role === \"system\") {\n if (text.length > 0) {\n coreMessages.push(Message.system(text, metadataOptions(message.metadata)));\n }\n continue;\n }\n\n if (message.role === \"user\") {\n const content: UserContentType[] = [];\n for (const part of message.parts) {\n if (part.type === \"text\") {\n content.push(UserContent.text(part.text));\n continue;\n }\n if (part.type === \"attachment\") {\n content.push(attachmentToUserContent(part.attachment));\n continue;\n }\n if (part.type === \"data\" && isUserContent(part.data)) {\n content.push(part.data);\n continue;\n }\n throw new TypeError(\n \"User UI messages can only be converted from text, attachment, or image/document data parts.\",\n );\n }\n if (content.length > 0) {\n coreMessages.push(Message.user(content, metadataOptions(message.metadata)));\n }\n continue;\n }\n\n if (message.role === \"assistant\") {\n const content: AssistantContentType[] = [];\n const toolResults: ToolContentType[] = [];\n for (const part of message.parts) {\n if (part.type === \"text\" && part.text.length > 0) {\n content.push(AssistantContent.text(part.text));\n continue;\n }\n if (part.type === \"reasoning\" && part.text.length > 0) {\n content.push(AssistantContent.reasoning(part.text, part.reasoningId));\n continue;\n }\n if (\n part.type === \"tool\" &&\n (part.state === \"input-streaming\" ||\n part.state === \"input-available\" ||\n part.state === \"output-available\")\n ) {\n content.push(\n AssistantContent.toolCall(\n part.toolCallId,\n part.toolName,\n part.input ?? {},\n part.callId,\n ),\n );\n if (part.state === \"output-available\") {\n toolResults.push(\n ToolContent.toolResult(part.toolCallId, outputToToolResultContent(part.output), {\n callId: part.callId,\n toolName: part.toolName,\n }),\n );\n }\n }\n }\n if (content.length > 0) {\n coreMessages.push(\n Message.assistant(content, {\n id: message.id,\n ...metadataOptions(message.metadata),\n }),\n );\n }\n if (toolResults.length > 0) {\n coreMessages.push(Message.tool(toolResults));\n }\n continue;\n }\n\n const toolResults: ToolContentType[] = [];\n for (const part of message.parts) {\n if (part.type !== \"tool\" || part.state !== \"output-available\") {\n continue;\n }\n toolResults.push(\n ToolContent.toolResult(part.toolCallId, outputToToolResultContent(part.output), {\n callId: part.callId,\n toolName: part.toolName,\n }),\n );\n }\n if (toolResults.length > 0) {\n coreMessages.push(Message.tool(toolResults, metadataOptions(message.metadata)));\n }\n }\n\n return coreMessages;\n}\n\nexport function coreMessagesToUIMessages(messages: CoreMessage[]): UIMessage[] {\n const uiMessages: UIMessage[] = [];\n const toolPartLocations: UIToolPartLocations = {\n byToolCallId: new Map(),\n byCallId: new Map(),\n };\n\n for (const message of messages) {\n if (message.role === \"system\") {\n uiMessages.push({\n id: createId(\"msg\"),\n role: \"system\",\n parts: [{ id: createId(\"part\"), type: \"text\", text: message.content }],\n ...uiMetadata(message.metadata),\n });\n continue;\n }\n\n if (message.role === \"user\") {\n const parts: UIMessagePart[] = [];\n for (const content of message.content) {\n if (content.type === \"text\") {\n parts.push({ id: createId(\"part\"), type: \"text\", text: content.text });\n } else {\n parts.push({\n id: createId(\"part\"),\n type: \"attachment\",\n attachment: userContentToAttachment(content),\n });\n }\n }\n uiMessages.push({\n id: createId(\"msg\"),\n role: \"user\",\n parts,\n ...uiMetadata(message.metadata),\n });\n continue;\n }\n\n if (message.role === \"assistant\") {\n const parts: UIMessagePart[] = [];\n for (const content of message.content) {\n if (content.type === \"text\") {\n parts.push({ id: createId(\"part\"), type: \"text\", text: content.text });\n continue;\n }\n if (content.type === \"reasoning\") {\n const part: UIMessagePart = {\n id: createId(\"part\"),\n type: \"reasoning\",\n text: reasoningDisplayText(content),\n };\n if (content.id !== undefined) {\n part.reasoningId = content.id;\n }\n parts.push(part);\n continue;\n }\n if (content.type === \"tool_call\") {\n const part: UIMessagePart = {\n id: toolPartId(content.id),\n type: \"tool\",\n toolName: content.function.name,\n toolCallId: content.id,\n state: \"input-available\",\n input: content.function.arguments,\n };\n if (content.callId !== undefined) {\n part.callId = content.callId;\n }\n parts.push(part);\n continue;\n }\n parts.push({\n id: createId(\"part\"),\n type: \"data\",\n name: content.type,\n data: content as JsonValue,\n });\n }\n const messageIndex = uiMessages.length;\n uiMessages.push({\n id: message.id ?? createId(\"msg\"),\n role: \"assistant\",\n parts,\n ...uiMetadata(message.metadata),\n });\n registerToolPartLocations(parts, messageIndex, toolPartLocations);\n continue;\n }\n\n const parts: UIMessagePart[] = [];\n for (const content of message.content) {\n const part: UIToolMessagePart = {\n id: toolPartId(content.id),\n type: \"tool\",\n toolName: toolNameForResult(content, uiMessages, toolPartLocations),\n toolCallId: content.id,\n state: \"output-available\",\n output: toolResultContentToJson(content.content),\n };\n if (content.callId !== undefined) {\n part.callId = content.callId;\n }\n if (\n message.metadata === undefined &&\n mergeToolResultPart(uiMessages, toolPartLocations, part)\n ) {\n continue;\n }\n parts.push(part);\n }\n if (parts.length > 0) {\n uiMessages.push({\n id: createId(\"msg\"),\n role: \"tool\",\n parts,\n ...uiMetadata(message.metadata),\n });\n }\n }\n\n return uiMessages;\n}\n\nfunction metadataOptions(metadata: UIMessage[\"metadata\"]): { metadata?: JsonValue } {\n if (metadata === undefined) {\n return {};\n }\n if (!isJsonValue(metadata)) {\n throw new TypeError(\"UI message metadata must be a strict JSON value.\");\n }\n return { metadata };\n}\n\nfunction uiMetadata(metadata: JsonValue | undefined): { metadata?: JsonValue } {\n if (metadata === undefined) {\n return {};\n }\n if (!isJsonValue(metadata)) {\n throw new TypeError(\"Core message metadata must be a strict JSON value.\");\n }\n return { metadata };\n}\n\nfunction registerToolPartLocations(\n parts: UIMessagePart[],\n messageIndex: number,\n toolPartLocations: UIToolPartLocations,\n): void {\n for (const [partIndex, part] of parts.entries()) {\n if (part.type !== \"tool\") {\n continue;\n }\n const location = { messageIndex, partIndex };\n toolPartLocations.byToolCallId.set(part.toolCallId, location);\n if (part.callId !== undefined) {\n toolPartLocations.byCallId.set(part.callId, location);\n }\n }\n}\n\nfunction mergeToolResultPart(\n uiMessages: UIMessage[],\n toolPartLocations: UIToolPartLocations,\n resultPart: UIMessagePart,\n): boolean {\n if (resultPart.type !== \"tool\") {\n return false;\n }\n\n const location = findToolPartLocation(\n resultPart.toolCallId,\n resultPart.callId,\n toolPartLocations,\n );\n if (location === undefined) {\n return false;\n }\n\n const message = uiMessages[location.messageIndex];\n const currentPart = message?.parts[location.partIndex];\n if (message === undefined || currentPart?.type !== \"tool\") {\n return false;\n }\n\n const mergedPart: UIToolMessagePart = {\n ...currentPart,\n toolName: resultPart.toolName === \"tool\" ? currentPart.toolName : resultPart.toolName,\n state: \"output-available\",\n };\n if (resultPart.output !== undefined) {\n mergedPart.output = resultPart.output;\n }\n if (currentPart.callId === undefined && resultPart.callId !== undefined) {\n mergedPart.callId = resultPart.callId;\n toolPartLocations.byCallId.set(resultPart.callId, location);\n }\n\n const nextParts = [...message.parts];\n nextParts[location.partIndex] = mergedPart;\n uiMessages[location.messageIndex] = { ...message, parts: nextParts };\n return true;\n}\n\nfunction findToolPartLocation(\n toolCallId: string,\n callId: string | undefined,\n toolPartLocations: UIToolPartLocations,\n): UIToolPartLocation | undefined {\n return (\n (callId === undefined ? undefined : toolPartLocations.byCallId.get(callId)) ??\n toolPartLocations.byToolCallId.get(toolCallId)\n );\n}\n\nfunction toolNameForResult(\n content: ToolContentType,\n uiMessages: UIMessage[],\n toolPartLocations: UIToolPartLocations,\n): string {\n if (content.toolName !== undefined) {\n return content.toolName;\n }\n\n const location = findToolPartLocation(content.id, content.callId, toolPartLocations);\n const part =\n location === undefined\n ? undefined\n : uiMessages[location.messageIndex]?.parts[location.partIndex];\n return part?.type === \"tool\" ? part.toolName : \"tool\";\n}\n\nexport function isUIMessage(value: unknown): value is UIMessage {\n return (\n isRecord(value) &&\n typeof value.id === \"string\" &&\n isUIMessageRole(value.role) &&\n Array.isArray(value.parts)\n );\n}\n\nexport function isUIMessageArray(value: unknown): value is UIMessage[] {\n return Array.isArray(value) && value.every(isUIMessage);\n}\n\nfunction textFromUIParts(parts: UIMessagePart[]): string {\n return parts.flatMap((part) => (part.type === \"text\" ? [part.text] : [])).join(\"\");\n}\n\nfunction outputToToolResultContent(output: JsonValue | undefined): ToolResultContent[] {\n return [{ type: \"text\", text: serializeToolResultOutput(output ?? null) }];\n}\n\nfunction attachmentToUserContent(attachment: UIAttachment): UserContentType {\n if (attachment.type === \"image\" || isImageFileAttachment(attachment)) {\n if (attachment.url !== undefined) {\n return UserContent.imageUrl(attachment.url, imageOptions(attachment));\n }\n if (attachment.data !== undefined && attachment.mediaType !== undefined) {\n return UserContent.imageBase64(\n attachment.data,\n attachment.mediaType,\n imageOptions(attachment),\n );\n }\n throw new TypeError(\"Image attachments require a url or base64 data with mediaType.\");\n }\n\n if (attachment.text !== undefined) {\n const source: Extract<DocumentContent[\"source\"], { type: \"text\" }> = {\n type: \"text\",\n text: attachment.text,\n };\n if (attachment.mediaType !== undefined) {\n source.mediaType = attachment.mediaType;\n }\n if (attachment.name !== undefined) {\n source.filename = attachment.name;\n }\n return {\n type: \"document\",\n source,\n };\n }\n\n const mediaType = attachment.mediaType ?? \"application/octet-stream\";\n if (attachment.url !== undefined) {\n return UserContent.documentUrl(attachment.url, mediaType, documentOptions(attachment));\n }\n if (attachment.data !== undefined) {\n return UserContent.documentBase64(attachment.data, mediaType, documentOptions(attachment));\n }\n\n throw new TypeError(\"Document attachments require a url, base64 data, or text.\");\n}\n\nfunction userContentToAttachment(content: ImageContent | DocumentContent): UIAttachment {\n if (content.type === \"image\") {\n const attachment: UIAttachment = {\n id: createId(\"attachment\"),\n type: \"image\",\n };\n if (content.detail !== undefined) {\n attachment.detail = content.detail;\n }\n if (content.source.type === \"url\") {\n attachment.url = content.source.url;\n } else {\n attachment.data = content.source.data;\n attachment.mediaType = content.source.mediaType;\n }\n return attachment;\n }\n\n const attachment: UIAttachment = {\n id: createId(\"attachment\"),\n type: \"document\",\n };\n if (content.source.type === \"url\") {\n attachment.url = content.source.url;\n attachment.mediaType = content.source.mediaType;\n if (content.source.filename !== undefined) {\n attachment.name = content.source.filename;\n }\n } else if (content.source.type === \"base64\") {\n attachment.data = content.source.data;\n attachment.mediaType = content.source.mediaType;\n if (content.source.filename !== undefined) {\n attachment.name = content.source.filename;\n }\n } else {\n attachment.text = content.source.text;\n if (content.source.mediaType !== undefined) {\n attachment.mediaType = content.source.mediaType;\n }\n if (content.source.filename !== undefined) {\n attachment.name = content.source.filename;\n }\n }\n return attachment;\n}\n\nfunction isImageFileAttachment(attachment: UIAttachment): boolean {\n return attachment.type === \"file\" && attachment.mediaType?.startsWith(\"image/\") === true;\n}\n\nfunction imageOptions(attachment: UIAttachment): { detail?: ImageDetail } {\n return attachment.detail === undefined ? {} : { detail: attachment.detail };\n}\n\nfunction documentOptions(attachment: UIAttachment): { filename?: string } {\n return attachment.name === undefined ? {} : { filename: attachment.name };\n}\n\nfunction toolResultContentToJson(content: ToolResultContent[]): JsonValue {\n if (content.length === 1 && content[0]?.type === \"text\") {\n return content[0].text;\n }\n return content as JsonValue;\n}\n\nfunction isUserContent(value: unknown): value is UserContentType {\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 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 toolPartId(toolCallId: string): string {\n return `tool_${toolCallId}`;\n}\n\nlet nextId = 0;\n\nfunction createId(prefix: string): string {\n const random = globalThis.crypto?.randomUUID?.();\n if (random !== undefined) {\n return `${prefix}_${random}`;\n }\n nextId += 1;\n return `${prefix}_${nextId.toString(36)}`;\n}\n\nfunction isUIMessageRole(value: unknown): value is UIMessage[\"role\"] {\n return value === \"system\" || value === \"user\" || value === \"assistant\" || value === \"tool\";\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n"],"mappings":"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","names":["toolResults","parts","attachment"]}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AgentBuilder
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BHQ5UPSK.js";
|
|
4
4
|
import {
|
|
5
5
|
extractRagText
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-YOXG2K7N.js";
|
|
7
7
|
import {
|
|
8
8
|
createTool
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-F3C5653H.js";
|
|
10
10
|
import {
|
|
11
11
|
CompletionRequestBuilder
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-YTF65GYU.js";
|
|
13
13
|
import {
|
|
14
14
|
CompletionCapabilityError,
|
|
15
15
|
Message,
|
|
16
16
|
Usage
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-CNTGKNZ3.js";
|
|
18
18
|
|
|
19
19
|
// src/extractor/extractor.ts
|
|
20
20
|
var SUBMIT_TOOL_NAME = "submit";
|
|
@@ -138,4 +138,4 @@ export {
|
|
|
138
138
|
Extractor,
|
|
139
139
|
ExtractorBuilder
|
|
140
140
|
};
|
|
141
|
-
//# sourceMappingURL=chunk-
|
|
141
|
+
//# sourceMappingURL=chunk-VSGL6LBZ.js.map
|
|
@@ -109,12 +109,13 @@ async function embedDocuments(model, documents, options) {
|
|
|
109
109
|
list.push(item.embedding);
|
|
110
110
|
byDocument.set(item.documentIndex, list);
|
|
111
111
|
}
|
|
112
|
-
return prepared.map((item, index) =>
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
112
|
+
return prepared.map((item, index) => {
|
|
113
|
+
const embeddings2 = byDocument.get(index) ?? [];
|
|
114
|
+
if (item.metadata === void 0) {
|
|
115
|
+
return { id: item.id, document: item.document, embeddings: embeddings2 };
|
|
116
|
+
}
|
|
117
|
+
return { id: item.id, document: item.document, metadata: item.metadata, embeddings: embeddings2 };
|
|
118
|
+
});
|
|
118
119
|
}
|
|
119
120
|
function chunk(items, size) {
|
|
120
121
|
const chunks = [];
|
|
@@ -135,4 +136,4 @@ export {
|
|
|
135
136
|
embedTexts,
|
|
136
137
|
embedDocuments
|
|
137
138
|
};
|
|
138
|
-
//# sourceMappingURL=chunk-
|
|
139
|
+
//# sourceMappingURL=chunk-YBBD4HZ3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/embeddings/distance.ts","../src/embeddings/embed.ts"],"sourcesContent":["export function dotProduct(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce((sum, value, index) => sum + value * (right[index] as number), 0);\n}\n\nexport function cosineSimilarity(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n const leftMagnitude = magnitude(left);\n const rightMagnitude = magnitude(right);\n if (leftMagnitude === 0 || rightMagnitude === 0) {\n return 0;\n }\n return dotProduct(left, right) / (leftMagnitude * rightMagnitude);\n}\n\nexport function angularDistance(left: number[], right: number[]): number {\n const similarity = Math.max(-1, Math.min(1, cosineSimilarity(left, right)));\n return Math.acos(similarity) / Math.PI;\n}\n\nexport function euclideanDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return Math.sqrt(\n left.reduce((sum, value, index) => sum + (value - (right[index] as number)) ** 2, 0),\n );\n}\n\nexport function manhattanDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce((sum, value, index) => sum + Math.abs(value - (right[index] as number)), 0);\n}\n\nexport function chebyshevDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce(\n (max, value, index) => Math.max(max, Math.abs(value - (right[index] as number))),\n 0,\n );\n}\n\nfunction magnitude(vector: number[]): number {\n return Math.sqrt(vector.reduce((sum, value) => sum + value ** 2, 0));\n}\n\nfunction assertSameDimensions(left: number[], right: number[]): void {\n if (left.length !== right.length) {\n throw new Error(`Vector dimension mismatch: ${left.length} !== ${right.length}`);\n }\n}\n","import { mapWithConcurrency } from \"../internal/concurrency\";\nimport type {\n EmbedDocumentsOptions,\n EmbeddedDocument,\n Embedding,\n EmbeddingModel,\n VectorMetadata,\n} from \"./types\";\n\nexport async function embedText(model: EmbeddingModel, text: string): Promise<Embedding> {\n const embeddings = await embedTexts(model, [text]);\n const embedding = embeddings[0];\n if (embedding === undefined) {\n throw new Error(\"Embedding model returned no embeddings\");\n }\n return embedding;\n}\n\nexport async function embedTexts(model: EmbeddingModel, texts: string[]): Promise<Embedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const maxBatchSize = Math.max(1, Math.trunc(model.maxBatchSize ?? texts.length));\n const batches: string[][] = [];\n for (let index = 0; index < texts.length; index += maxBatchSize) {\n batches.push(texts.slice(index, index + maxBatchSize));\n }\n\n const results = await mapWithConcurrency(batches, 1, (batch) => model.embedTexts(batch));\n const embeddings = results.flat();\n if (embeddings.length !== texts.length) {\n throw new Error(\n `Embedding model returned ${embeddings.length} embeddings for ${texts.length} texts`,\n );\n }\n return embeddings;\n}\n\nexport async function embedDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n model: EmbeddingModel,\n documents: T[],\n options: EmbedDocumentsOptions<T, Metadata>,\n): Promise<Array<EmbeddedDocument<T, Metadata>>> {\n const prepared = documents.map((document, index) => {\n const content = options.content(document, index);\n const texts = Array.isArray(content) ? content : [content];\n return {\n id: options.id?.(document, index) ?? `doc${index}`,\n document,\n metadata: options.metadata?.(document, index),\n texts,\n };\n });\n\n const flatTexts = prepared.flatMap((item, documentIndex) =>\n item.texts.map((text) => ({ documentIndex, text })),\n );\n const embeddings = await mapWithConcurrency(\n chunk(flatTexts, Math.max(1, Math.trunc(model.maxBatchSize ?? (flatTexts.length || 1)))),\n Math.max(1, Math.trunc(options.concurrency ?? 1)),\n async (batch) => {\n const batchEmbeddings = await model.embedTexts(batch.map((item) => item.text));\n if (batchEmbeddings.length !== batch.length) {\n throw new Error(\n `Embedding model returned ${batchEmbeddings.length} embeddings for ${batch.length} texts`,\n );\n }\n return batch.map((item, index) => ({\n documentIndex: item.documentIndex,\n embedding: batchEmbeddings[index] as Embedding,\n }));\n },\n );\n\n const byDocument = new Map<number, Embedding[]>();\n for (const item of embeddings.flat()) {\n const list = byDocument.get(item.documentIndex) ?? [];\n list.push(item.embedding);\n byDocument.set(item.documentIndex, list);\n }\n\n return prepared.map((item, index) =>
|
|
1
|
+
{"version":3,"sources":["../src/embeddings/distance.ts","../src/embeddings/embed.ts"],"sourcesContent":["export function dotProduct(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce((sum, value, index) => sum + value * (right[index] as number), 0);\n}\n\nexport function cosineSimilarity(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n const leftMagnitude = magnitude(left);\n const rightMagnitude = magnitude(right);\n if (leftMagnitude === 0 || rightMagnitude === 0) {\n return 0;\n }\n return dotProduct(left, right) / (leftMagnitude * rightMagnitude);\n}\n\nexport function angularDistance(left: number[], right: number[]): number {\n const similarity = Math.max(-1, Math.min(1, cosineSimilarity(left, right)));\n return Math.acos(similarity) / Math.PI;\n}\n\nexport function euclideanDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return Math.sqrt(\n left.reduce((sum, value, index) => sum + (value - (right[index] as number)) ** 2, 0),\n );\n}\n\nexport function manhattanDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce((sum, value, index) => sum + Math.abs(value - (right[index] as number)), 0);\n}\n\nexport function chebyshevDistance(left: number[], right: number[]): number {\n assertSameDimensions(left, right);\n return left.reduce(\n (max, value, index) => Math.max(max, Math.abs(value - (right[index] as number))),\n 0,\n );\n}\n\nfunction magnitude(vector: number[]): number {\n return Math.sqrt(vector.reduce((sum, value) => sum + value ** 2, 0));\n}\n\nfunction assertSameDimensions(left: number[], right: number[]): void {\n if (left.length !== right.length) {\n throw new Error(`Vector dimension mismatch: ${left.length} !== ${right.length}`);\n }\n}\n","import { mapWithConcurrency } from \"../internal/concurrency\";\nimport type {\n EmbedDocumentsOptions,\n EmbeddedDocument,\n Embedding,\n EmbeddingModel,\n VectorMetadata,\n} from \"./types\";\n\nexport async function embedText(model: EmbeddingModel, text: string): Promise<Embedding> {\n const embeddings = await embedTexts(model, [text]);\n const embedding = embeddings[0];\n if (embedding === undefined) {\n throw new Error(\"Embedding model returned no embeddings\");\n }\n return embedding;\n}\n\nexport async function embedTexts(model: EmbeddingModel, texts: string[]): Promise<Embedding[]> {\n if (texts.length === 0) {\n return [];\n }\n\n const maxBatchSize = Math.max(1, Math.trunc(model.maxBatchSize ?? texts.length));\n const batches: string[][] = [];\n for (let index = 0; index < texts.length; index += maxBatchSize) {\n batches.push(texts.slice(index, index + maxBatchSize));\n }\n\n const results = await mapWithConcurrency(batches, 1, (batch) => model.embedTexts(batch));\n const embeddings = results.flat();\n if (embeddings.length !== texts.length) {\n throw new Error(\n `Embedding model returned ${embeddings.length} embeddings for ${texts.length} texts`,\n );\n }\n return embeddings;\n}\n\nexport async function embedDocuments<T, Metadata extends VectorMetadata = VectorMetadata>(\n model: EmbeddingModel,\n documents: T[],\n options: EmbedDocumentsOptions<T, Metadata>,\n): Promise<Array<EmbeddedDocument<T, Metadata>>> {\n const prepared = documents.map((document, index) => {\n const content = options.content(document, index);\n const texts = Array.isArray(content) ? content : [content];\n return {\n id: options.id?.(document, index) ?? `doc${index}`,\n document,\n metadata: options.metadata?.(document, index),\n texts,\n };\n });\n\n const flatTexts = prepared.flatMap((item, documentIndex) =>\n item.texts.map((text) => ({ documentIndex, text })),\n );\n const embeddings = await mapWithConcurrency(\n chunk(flatTexts, Math.max(1, Math.trunc(model.maxBatchSize ?? (flatTexts.length || 1)))),\n Math.max(1, Math.trunc(options.concurrency ?? 1)),\n async (batch) => {\n const batchEmbeddings = await model.embedTexts(batch.map((item) => item.text));\n if (batchEmbeddings.length !== batch.length) {\n throw new Error(\n `Embedding model returned ${batchEmbeddings.length} embeddings for ${batch.length} texts`,\n );\n }\n return batch.map((item, index) => ({\n documentIndex: item.documentIndex,\n embedding: batchEmbeddings[index] as Embedding,\n }));\n },\n );\n\n const byDocument = new Map<number, Embedding[]>();\n for (const item of embeddings.flat()) {\n const list = byDocument.get(item.documentIndex) ?? [];\n list.push(item.embedding);\n byDocument.set(item.documentIndex, list);\n }\n\n return prepared.map((item, index) => {\n const embeddings = byDocument.get(index) ?? [];\n if (item.metadata === undefined) {\n return { id: item.id, document: item.document, embeddings };\n }\n return { id: item.id, document: item.document, metadata: item.metadata, embeddings };\n });\n}\n\nfunction chunk<T>(items: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let index = 0; index < items.length; index += size) {\n chunks.push(items.slice(index, index + size));\n }\n return chunks;\n}\n"],"mappings":"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","names":["embeddings"]}
|