@anvia/core 0.4.1 → 0.4.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.js +4 -4
- package/dist/{chunk-CY7SB5FG.js → chunk-35GF7P43.js} +2 -2
- package/dist/{chunk-L6JCKFAX.js → chunk-DUP7FMAF.js} +2 -2
- package/dist/{chunk-4PHDOEKY.js → chunk-LGETU3RG.js} +3 -3
- package/dist/{chunk-BD66WU2B.js → chunk-MOICCK3J.js} +4 -4
- package/dist/{chunk-TVIADATY.js → chunk-N7NMSGZI.js} +3 -3
- package/dist/{chunk-OIA4CN5V.js → chunk-P425B6GR.js} +30 -1
- package/dist/chunk-P425B6GR.js.map +1 -0
- package/dist/evals/index.js +5 -5
- package/dist/extractor/index.js +5 -5
- package/dist/index.js +5 -5
- package/dist/internal/agent.js +3 -3
- package/dist/loaders/index.d.ts +20 -12
- package/dist/loaders/index.js +107 -96
- package/dist/loaders/index.js.map +1 -1
- package/dist/mcp/index.js +10 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/skills/index.js +3 -3
- package/dist/tool/index.js +2 -2
- package/dist/vector-store/index.d.ts +3 -0
- package/dist/vector-store/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-OIA4CN5V.js.map +0 -1
- /package/dist/{chunk-CY7SB5FG.js.map → chunk-35GF7P43.js.map} +0 -0
- /package/dist/{chunk-L6JCKFAX.js.map → chunk-DUP7FMAF.js.map} +0 -0
- /package/dist/{chunk-4PHDOEKY.js.map → chunk-LGETU3RG.js.map} +0 -0
- /package/dist/{chunk-BD66WU2B.js.map → chunk-MOICCK3J.js.map} +0 -0
- /package/dist/{chunk-TVIADATY.js.map → chunk-N7NMSGZI.js.map} +0 -0
package/dist/agent/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AgentBuilder
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-MOICCK3J.js";
|
|
4
4
|
import {
|
|
5
5
|
MaxTurnsError,
|
|
6
6
|
PromptCancelledError,
|
|
@@ -10,12 +10,12 @@ import {
|
|
|
10
10
|
runControl,
|
|
11
11
|
skipTool,
|
|
12
12
|
toolCallControl
|
|
13
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-N7NMSGZI.js";
|
|
14
14
|
import "../chunk-XUUY2L2D.js";
|
|
15
15
|
import "../chunk-XXT2UCAR.js";
|
|
16
16
|
import "../chunk-YK4WAAS4.js";
|
|
17
|
-
import "../chunk-
|
|
18
|
-
import "../chunk-
|
|
17
|
+
import "../chunk-35GF7P43.js";
|
|
18
|
+
import "../chunk-P425B6GR.js";
|
|
19
19
|
import "../chunk-6GJDBBDC.js";
|
|
20
20
|
import "../chunk-EFGX3EX5.js";
|
|
21
21
|
import "../chunk-OIMLU4SF.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
InMemoryVectorStore,
|
|
3
3
|
createTool
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-P425B6GR.js";
|
|
5
5
|
import {
|
|
6
6
|
embedDocuments
|
|
7
7
|
} from "./chunk-EFGX3EX5.js";
|
|
@@ -237,4 +237,4 @@ export {
|
|
|
237
237
|
createToolMiddleware,
|
|
238
238
|
createThinkTool
|
|
239
239
|
};
|
|
240
|
-
//# sourceMappingURL=chunk-
|
|
240
|
+
//# sourceMappingURL=chunk-35GF7P43.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-YK4WAAS4.js";
|
|
4
4
|
import {
|
|
5
5
|
createTool
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-P425B6GR.js";
|
|
7
7
|
|
|
8
8
|
// src/skills/instructions.ts
|
|
9
9
|
function skillInstructions(skills) {
|
|
@@ -395,4 +395,4 @@ export {
|
|
|
395
395
|
SkillValidationError,
|
|
396
396
|
skill
|
|
397
397
|
};
|
|
398
|
-
//# sourceMappingURL=chunk-
|
|
398
|
+
//# sourceMappingURL=chunk-DUP7FMAF.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AgentBuilder
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-MOICCK3J.js";
|
|
4
4
|
import {
|
|
5
5
|
createTool
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-P425B6GR.js";
|
|
7
7
|
import {
|
|
8
8
|
CompletionCapabilityError,
|
|
9
9
|
CompletionRequestBuilder,
|
|
@@ -139,4 +139,4 @@ export {
|
|
|
139
139
|
Extractor,
|
|
140
140
|
ExtractorBuilder
|
|
141
141
|
};
|
|
142
|
-
//# sourceMappingURL=chunk-
|
|
142
|
+
//# sourceMappingURL=chunk-LGETU3RG.js.map
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Agent,
|
|
3
3
|
normalizeAgentId
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-N7NMSGZI.js";
|
|
5
5
|
import {
|
|
6
6
|
resolveMemoryOptions
|
|
7
7
|
} from "./chunk-XXT2UCAR.js";
|
|
8
8
|
import {
|
|
9
9
|
ToolSet
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-35GF7P43.js";
|
|
11
11
|
import {
|
|
12
12
|
toProviderJsonSchema
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-P425B6GR.js";
|
|
14
14
|
|
|
15
15
|
// src/agent/builder.ts
|
|
16
16
|
var AgentBuilder = class {
|
|
@@ -185,4 +185,4 @@ var AgentBuilder = class {
|
|
|
185
185
|
export {
|
|
186
186
|
AgentBuilder
|
|
187
187
|
};
|
|
188
|
-
//# sourceMappingURL=chunk-
|
|
188
|
+
//# sourceMappingURL=chunk-MOICCK3J.js.map
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
import {
|
|
8
8
|
ToolSet,
|
|
9
9
|
toolResultContentToText
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-35GF7P43.js";
|
|
11
11
|
import {
|
|
12
12
|
createTool
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-P425B6GR.js";
|
|
14
14
|
import {
|
|
15
15
|
CompletionRequestBuilder,
|
|
16
16
|
Message,
|
|
@@ -1543,4 +1543,4 @@ export {
|
|
|
1543
1543
|
Agent,
|
|
1544
1544
|
AgentSession
|
|
1545
1545
|
};
|
|
1546
|
-
//# sourceMappingURL=chunk-
|
|
1546
|
+
//# sourceMappingURL=chunk-N7NMSGZI.js.map
|
|
@@ -147,6 +147,7 @@ var InMemoryVectorStore = class _InMemoryVectorStore {
|
|
|
147
147
|
documents = /* @__PURE__ */ new Map();
|
|
148
148
|
indexStrategy;
|
|
149
149
|
lshIndex;
|
|
150
|
+
embeddingDimension;
|
|
150
151
|
constructor(options = {}) {
|
|
151
152
|
this.indexStrategy = options.index ?? { type: "bruteForce" };
|
|
152
153
|
}
|
|
@@ -156,6 +157,7 @@ var InMemoryVectorStore = class _InMemoryVectorStore {
|
|
|
156
157
|
return store;
|
|
157
158
|
}
|
|
158
159
|
addDocuments(documents) {
|
|
160
|
+
this.validateDocumentDimensions(documents);
|
|
159
161
|
for (const document of documents) {
|
|
160
162
|
this.documents.set(document.id, document);
|
|
161
163
|
}
|
|
@@ -178,6 +180,7 @@ var InMemoryVectorStore = class _InMemoryVectorStore {
|
|
|
178
180
|
return new InMemoryVectorIndex(model, this);
|
|
179
181
|
}
|
|
180
182
|
candidates(queryEmbedding) {
|
|
183
|
+
this.validateQueryDimension(queryEmbedding);
|
|
181
184
|
if (this.indexStrategy.type !== "lsh" || this.lshIndex === void 0) {
|
|
182
185
|
return this.values();
|
|
183
186
|
}
|
|
@@ -208,6 +211,21 @@ var InMemoryVectorStore = class _InMemoryVectorStore {
|
|
|
208
211
|
}
|
|
209
212
|
this.lshIndex = index;
|
|
210
213
|
}
|
|
214
|
+
validateDocumentDimensions(documents) {
|
|
215
|
+
let dimension = this.embeddingDimension;
|
|
216
|
+
for (const document of documents) {
|
|
217
|
+
for (const embedding of document.embeddings) {
|
|
218
|
+
dimension = validateEmbeddingDimension(dimension, embedding, document.id);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
this.embeddingDimension = dimension;
|
|
222
|
+
}
|
|
223
|
+
validateQueryDimension(queryEmbedding) {
|
|
224
|
+
if (this.embeddingDimension === void 0) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
validateEmbeddingDimension(this.embeddingDimension, queryEmbedding, "query");
|
|
228
|
+
}
|
|
211
229
|
};
|
|
212
230
|
var InMemoryVectorIndex = class {
|
|
213
231
|
constructor(model, store) {
|
|
@@ -291,6 +309,17 @@ function bestScore(queryEmbedding, embeddings) {
|
|
|
291
309
|
}
|
|
292
310
|
return best;
|
|
293
311
|
}
|
|
312
|
+
function validateEmbeddingDimension(expectedDimension, embedding, id) {
|
|
313
|
+
if (expectedDimension === void 0) {
|
|
314
|
+
return embedding.vector.length;
|
|
315
|
+
}
|
|
316
|
+
if (embedding.vector.length !== expectedDimension) {
|
|
317
|
+
throw new Error(
|
|
318
|
+
`Vector dimension mismatch: expected ${expectedDimension} dimensions but received ${embedding.vector.length} for ${id}`
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
return expectedDimension;
|
|
322
|
+
}
|
|
294
323
|
|
|
295
324
|
export {
|
|
296
325
|
toProviderJsonSchema,
|
|
@@ -300,4 +329,4 @@ export {
|
|
|
300
329
|
InMemoryVectorIndex,
|
|
301
330
|
createVectorSearchTool
|
|
302
331
|
};
|
|
303
|
-
//# sourceMappingURL=chunk-
|
|
332
|
+
//# sourceMappingURL=chunk-P425B6GR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/vector-store/index.ts","../src/schema/zod-schema.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, type VectorFilter } from \"./filter\";\nimport { LshIndex, type LshOptions } from \"./lsh\";\n\nexport { type VectorFilter, vectorFilter } from \"./filter\";\n\nexport type IndexStrategy = { type: \"bruteForce\" } | LshOptions;\n\nexport type VectorSearchRequest = {\n query: string;\n topK: number;\n threshold?: number | undefined;\n filter?: VectorFilter | undefined;\n};\n\nexport type VectorSearchResult<T = unknown, Metadata extends VectorMetadata = VectorMetadata> = {\n score: number;\n id: string;\n document: T;\n metadata?: Metadata | undefined;\n};\n\nexport type VectorInspectRequest = {\n limit: number;\n cursor?: string | undefined;\n filter?: VectorFilter | undefined;\n};\n\nexport type VectorInspectItem<T = unknown, Metadata extends VectorMetadata = VectorMetadata> = {\n id: string;\n document: T;\n metadata?: Metadata | undefined;\n};\n\nexport type VectorInspectPage<T = unknown, Metadata extends VectorMetadata = VectorMetadata> = {\n items: Array<VectorInspectItem<T, Metadata>>;\n nextCursor?: string | undefined;\n totalCount?: number | undefined;\n};\n\nexport interface VectorSearchIndex<T = unknown, Metadata extends VectorMetadata = VectorMetadata> {\n search(request: VectorSearchRequest): Promise<Array<VectorSearchResult<T, Metadata>>>;\n searchIds(request: VectorSearchRequest): Promise<Array<{ score: number; id: string }>>;\n asTool(options: VectorSearchToolOptions): Tool<{ query: string; topK?: number }, unknown>;\n inspect?(request: VectorInspectRequest): Promise<VectorInspectPage<T, Metadata>>;\n}\n\nexport type VectorSearchToolOptions = {\n name: string;\n description?: string | undefined;\n topK?: number | undefined;\n threshold?: number | undefined;\n filter?: VectorFilter | undefined;\n};\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 return [\n {\n score,\n id: document.id,\n document: document.document,\n ...(document.metadata === undefined ? {} : { metadata: document.metadata }),\n },\n ];\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 return {\n items: page.map((document) => ({\n id: document.id,\n document: document.document,\n ...(document.metadata === undefined ? {} : { metadata: document.metadata }),\n })),\n ...(nextOffset < documents.length ? { nextCursor: String(nextOffset) } : {}),\n totalCount: documents.length,\n };\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 input: 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 output: 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 { z } from \"zod\";\nimport type { JsonObject } from \"../completion/index\";\n\nexport type ZodSchema<T = unknown> = z.ZodType<T>;\n\nexport function toProviderJsonSchema(schema: z.ZodType): JsonObject {\n const jsonSchema = z.toJSONSchema(schema) as JsonObject;\n const { $schema: _schema, ...providerSchema } = jsonSchema;\n return providerSchema;\n}\n","import type { z } from \"zod\";\nimport { toProviderJsonSchema, type ZodSchema } from \"../schema/zod-schema\";\nimport type { Tool, ToolApprovalPolicy, ToolCallContext } 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 input: InputSchema;\n output?: OutputSchema;\n approval?: ToolApprovalPolicy<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> & { output?: 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 parameters = toProviderJsonSchema(options.input);\n\n return {\n name: options.name,\n ...(options.approval === undefined ? {} : { approval: options.approval }),\n definition() {\n return {\n name: options.name,\n description: options.description,\n parameters,\n };\n },\n async call(args, context = {}): Promise<CreateToolOutput<OutputSchema, Output>> {\n const parsedArgs = options.input.parse(args);\n const result = await options.execute(parsedArgs, context);\n return (\n options.output === undefined ? result : options.output.parse(result)\n ) as CreateToolOutput<OutputSchema, Output>;\n },\n parseApprovalArgs(args): z.output<InputSchema> {\n return options.input.parse(args);\n },\n };\n}\n","import type { VectorMetadata, VectorMetadataValue } from \"../embeddings\";\n\nexport type VectorFilter =\n | { type: \"eq\"; key: string; value: VectorMetadataValue }\n | { type: \"gt\"; key: string; value: VectorMetadataValue }\n | { type: \"lt\"; key: string; value: VectorMetadataValue }\n | { type: \"and\"; filters: [VectorFilter, VectorFilter] }\n | { type: \"or\"; filters: [VectorFilter, VectorFilter] };\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","export type LshOptions = {\n type: \"lsh\";\n numTables: number;\n numHyperplanes: number;\n seed?: number | undefined;\n};\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":["z","z"]}
|
package/dist/evals/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ExtractorBuilder
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
5
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-LGETU3RG.js";
|
|
4
|
+
import "../chunk-MOICCK3J.js";
|
|
5
|
+
import "../chunk-N7NMSGZI.js";
|
|
6
6
|
import "../chunk-XUUY2L2D.js";
|
|
7
7
|
import "../chunk-XXT2UCAR.js";
|
|
8
8
|
import "../chunk-YK4WAAS4.js";
|
|
9
|
-
import "../chunk-
|
|
10
|
-
import "../chunk-
|
|
9
|
+
import "../chunk-35GF7P43.js";
|
|
10
|
+
import "../chunk-P425B6GR.js";
|
|
11
11
|
import "../chunk-6GJDBBDC.js";
|
|
12
12
|
import {
|
|
13
13
|
cosineSimilarity,
|
package/dist/extractor/index.js
CHANGED
|
@@ -2,14 +2,14 @@ import {
|
|
|
2
2
|
ExtractionError,
|
|
3
3
|
Extractor,
|
|
4
4
|
ExtractorBuilder
|
|
5
|
-
} from "../chunk-
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import "../chunk-
|
|
5
|
+
} from "../chunk-LGETU3RG.js";
|
|
6
|
+
import "../chunk-MOICCK3J.js";
|
|
7
|
+
import "../chunk-N7NMSGZI.js";
|
|
8
8
|
import "../chunk-XUUY2L2D.js";
|
|
9
9
|
import "../chunk-XXT2UCAR.js";
|
|
10
10
|
import "../chunk-YK4WAAS4.js";
|
|
11
|
-
import "../chunk-
|
|
12
|
-
import "../chunk-
|
|
11
|
+
import "../chunk-35GF7P43.js";
|
|
12
|
+
import "../chunk-P425B6GR.js";
|
|
13
13
|
import "../chunk-6GJDBBDC.js";
|
|
14
14
|
import "../chunk-EFGX3EX5.js";
|
|
15
15
|
import "../chunk-OIMLU4SF.js";
|
package/dist/index.js
CHANGED
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
SkillValidationError,
|
|
3
3
|
loadSkills,
|
|
4
4
|
skill
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-DUP7FMAF.js";
|
|
6
6
|
import {
|
|
7
7
|
AgentBuilder
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-MOICCK3J.js";
|
|
9
9
|
import {
|
|
10
10
|
MaxTurnsError,
|
|
11
11
|
PromptCancelledError,
|
|
@@ -15,16 +15,16 @@ import {
|
|
|
15
15
|
runControl,
|
|
16
16
|
skipTool,
|
|
17
17
|
toolCallControl
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-N7NMSGZI.js";
|
|
19
19
|
import "./chunk-XUUY2L2D.js";
|
|
20
20
|
import "./chunk-XXT2UCAR.js";
|
|
21
21
|
import "./chunk-YK4WAAS4.js";
|
|
22
22
|
import {
|
|
23
23
|
createThinkTool
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-35GF7P43.js";
|
|
25
25
|
import {
|
|
26
26
|
createTool
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-P425B6GR.js";
|
|
28
28
|
import {
|
|
29
29
|
AssistantContent,
|
|
30
30
|
Message,
|
package/dist/internal/agent.js
CHANGED
|
@@ -2,11 +2,11 @@ import {
|
|
|
2
2
|
Agent,
|
|
3
3
|
AgentSession,
|
|
4
4
|
DEFAULT_MAX_TURNS
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-N7NMSGZI.js";
|
|
6
6
|
import "../chunk-XUUY2L2D.js";
|
|
7
7
|
import "../chunk-YK4WAAS4.js";
|
|
8
|
-
import "../chunk-
|
|
9
|
-
import "../chunk-
|
|
8
|
+
import "../chunk-35GF7P43.js";
|
|
9
|
+
import "../chunk-P425B6GR.js";
|
|
10
10
|
import "../chunk-6GJDBBDC.js";
|
|
11
11
|
import "../chunk-EFGX3EX5.js";
|
|
12
12
|
import "../chunk-OIMLU4SF.js";
|
package/dist/loaders/index.d.ts
CHANGED
|
@@ -36,6 +36,19 @@ type PdfPageWithPath = {
|
|
|
36
36
|
pageNumber: number;
|
|
37
37
|
text: string;
|
|
38
38
|
};
|
|
39
|
+
|
|
40
|
+
declare function fileToDocument(file: FileReadWithPath): Document;
|
|
41
|
+
declare function fileLoaderToDocuments(loader: AsyncIterable<FileReadWithPath>): Promise<Document[]>;
|
|
42
|
+
declare function pdfToDocument(pdf: PdfReadWithPath): Document;
|
|
43
|
+
declare function pdfLoaderToDocuments(loader: AsyncIterable<PdfReadWithPath>): Promise<Document[]>;
|
|
44
|
+
declare function pdfPageToDocument(page: PdfPageWithPath): Document;
|
|
45
|
+
declare function pdfPageLoaderToDocuments(loader: AsyncIterable<PdfPageWithPath>): Promise<Document[]>;
|
|
46
|
+
|
|
47
|
+
type LoaderValue$1<T> = T extends {
|
|
48
|
+
ok: true;
|
|
49
|
+
value: infer Value;
|
|
50
|
+
} ? Value : never;
|
|
51
|
+
type UnwrapLoaderResult$1<T> = [LoaderValue$1<T>] extends [never] ? T : LoaderValue$1<T>;
|
|
39
52
|
declare class FileLoader<T = LoaderResult<FileSource>> implements AsyncIterable<T> {
|
|
40
53
|
private readonly source;
|
|
41
54
|
private readonly mode;
|
|
@@ -47,9 +60,15 @@ declare class FileLoader<T = LoaderResult<FileSource>> implements AsyncIterable<
|
|
|
47
60
|
static fromBytesMany(bytes: Array<Uint8Array | ArrayBuffer>): FileLoader<LoaderResult<FileSource>>;
|
|
48
61
|
read(): FileLoader<LoaderResult<string>>;
|
|
49
62
|
readWithPath(): FileLoader<LoaderResult<FileReadWithPath>>;
|
|
50
|
-
ignoreErrors(): FileLoader<UnwrapLoaderResult<T>>;
|
|
63
|
+
ignoreErrors(): FileLoader<UnwrapLoaderResult$1<T>>;
|
|
51
64
|
[Symbol.asyncIterator](): AsyncIterator<T>;
|
|
52
65
|
}
|
|
66
|
+
|
|
67
|
+
type LoaderValue<T> = T extends {
|
|
68
|
+
ok: true;
|
|
69
|
+
value: infer Value;
|
|
70
|
+
} ? Value : never;
|
|
71
|
+
type UnwrapLoaderResult<T> = [LoaderValue<T>] extends [never] ? T : LoaderValue<T>;
|
|
53
72
|
declare class PdfFileLoader<T = LoaderResult<PdfSource>> implements AsyncIterable<T> {
|
|
54
73
|
private readonly source;
|
|
55
74
|
private readonly mode;
|
|
@@ -67,16 +86,5 @@ declare class PdfFileLoader<T = LoaderResult<PdfSource>> implements AsyncIterabl
|
|
|
67
86
|
ignoreErrors(): PdfFileLoader<UnwrapLoaderResult<T>>;
|
|
68
87
|
[Symbol.asyncIterator](): AsyncIterator<T>;
|
|
69
88
|
}
|
|
70
|
-
declare function fileToDocument(file: FileReadWithPath): Document;
|
|
71
|
-
declare function fileLoaderToDocuments(loader: AsyncIterable<FileReadWithPath>): Promise<Document[]>;
|
|
72
|
-
declare function pdfToDocument(pdf: PdfReadWithPath): Document;
|
|
73
|
-
declare function pdfLoaderToDocuments(loader: AsyncIterable<PdfReadWithPath>): Promise<Document[]>;
|
|
74
|
-
declare function pdfPageToDocument(page: PdfPageWithPath): Document;
|
|
75
|
-
declare function pdfPageLoaderToDocuments(loader: AsyncIterable<PdfPageWithPath>): Promise<Document[]>;
|
|
76
|
-
type LoaderValue<T> = T extends {
|
|
77
|
-
ok: true;
|
|
78
|
-
value: infer Value;
|
|
79
|
-
} ? Value : never;
|
|
80
|
-
type UnwrapLoaderResult<T> = [LoaderValue<T>] extends [never] ? T : LoaderValue<T>;
|
|
81
89
|
|
|
82
90
|
export { FileLoader, type FileReadWithPath, type FileSource, type LoaderResult, PdfFileLoader, type PdfPage, type PdfPageWithPath, type PdfReadWithPath, type PdfSource, fileLoaderToDocuments, fileToDocument, pdfLoaderToDocuments, pdfPageLoaderToDocuments, pdfPageToDocument, pdfToDocument };
|
package/dist/loaders/index.js
CHANGED
|
@@ -1,7 +1,85 @@
|
|
|
1
|
-
// src/loaders/
|
|
1
|
+
// src/loaders/documents.ts
|
|
2
|
+
function fileToDocument(file) {
|
|
3
|
+
return {
|
|
4
|
+
id: file.path,
|
|
5
|
+
text: file.text,
|
|
6
|
+
additionalProps: {
|
|
7
|
+
source: file.path,
|
|
8
|
+
mediaType: "text/plain"
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
async function fileLoaderToDocuments(loader) {
|
|
13
|
+
const documents = [];
|
|
14
|
+
for await (const file of loader) {
|
|
15
|
+
documents.push(fileToDocument(file));
|
|
16
|
+
}
|
|
17
|
+
return documents;
|
|
18
|
+
}
|
|
19
|
+
function pdfToDocument(pdf) {
|
|
20
|
+
return {
|
|
21
|
+
id: pdf.path,
|
|
22
|
+
text: pdf.text,
|
|
23
|
+
additionalProps: {
|
|
24
|
+
source: pdf.path,
|
|
25
|
+
mediaType: "application/pdf"
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
async function pdfLoaderToDocuments(loader) {
|
|
30
|
+
const documents = [];
|
|
31
|
+
for await (const pdf of loader) {
|
|
32
|
+
documents.push(pdfToDocument(pdf));
|
|
33
|
+
}
|
|
34
|
+
return documents;
|
|
35
|
+
}
|
|
36
|
+
function pdfPageToDocument(page) {
|
|
37
|
+
return {
|
|
38
|
+
id: `${page.path}#page=${page.pageNumber}`,
|
|
39
|
+
text: page.text,
|
|
40
|
+
additionalProps: {
|
|
41
|
+
source: page.path,
|
|
42
|
+
mediaType: "application/pdf",
|
|
43
|
+
pageNumber: String(page.pageNumber)
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
async function pdfPageLoaderToDocuments(loader) {
|
|
48
|
+
const documents = [];
|
|
49
|
+
for await (const page of loader) {
|
|
50
|
+
documents.push(pdfPageToDocument(page));
|
|
51
|
+
}
|
|
52
|
+
return documents;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// src/loaders/file.ts
|
|
2
56
|
import { readdir, readFile } from "fs/promises";
|
|
3
|
-
import {
|
|
57
|
+
import { join } from "path";
|
|
58
|
+
|
|
59
|
+
// src/loaders/shared.ts
|
|
60
|
+
import { isAbsolute } from "path";
|
|
4
61
|
import { glob } from "tinyglobby";
|
|
62
|
+
function ok(value) {
|
|
63
|
+
return { ok: true, value };
|
|
64
|
+
}
|
|
65
|
+
function err(error) {
|
|
66
|
+
return { ok: false, error };
|
|
67
|
+
}
|
|
68
|
+
async function sortedGlob(pattern) {
|
|
69
|
+
return (await glob(pattern, { absolute: isAbsolute(pattern), onlyFiles: true })).sort(
|
|
70
|
+
(left, right) => left.localeCompare(right)
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
function toUint8Array(bytes) {
|
|
74
|
+
if (bytes instanceof Uint8Array) {
|
|
75
|
+
return new Uint8Array(
|
|
76
|
+
bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
return new Uint8Array(bytes);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// src/loaders/file.ts
|
|
5
83
|
var FileLoader = class _FileLoader {
|
|
6
84
|
constructor(source, mode, skipErrors) {
|
|
7
85
|
this.source = source;
|
|
@@ -68,6 +146,30 @@ var FileLoader = class _FileLoader {
|
|
|
68
146
|
}
|
|
69
147
|
}
|
|
70
148
|
};
|
|
149
|
+
async function mapFileResult(item, mode) {
|
|
150
|
+
if (!item.ok) {
|
|
151
|
+
return item;
|
|
152
|
+
}
|
|
153
|
+
if (mode === "source") {
|
|
154
|
+
return item;
|
|
155
|
+
}
|
|
156
|
+
try {
|
|
157
|
+
const text = await readFileSource(item.value);
|
|
158
|
+
return mode === "read" ? ok(text) : ok({ path: item.value.path, text });
|
|
159
|
+
} catch (error) {
|
|
160
|
+
return err(error);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
async function readFileSource(source) {
|
|
164
|
+
if ("bytes" in source) {
|
|
165
|
+
return new TextDecoder().decode(source.bytes);
|
|
166
|
+
}
|
|
167
|
+
return readFile(source.path, "utf8");
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// src/loaders/pdf.ts
|
|
171
|
+
import { readdir as readdir2, readFile as readFile2 } from "fs/promises";
|
|
172
|
+
import { join as join2 } from "path";
|
|
71
173
|
var PdfFileLoader = class _PdfFileLoader {
|
|
72
174
|
constructor(source, mode, skipErrors) {
|
|
73
175
|
this.source = source;
|
|
@@ -91,8 +193,8 @@ var PdfFileLoader = class _PdfFileLoader {
|
|
|
91
193
|
static withDir(directory) {
|
|
92
194
|
return new _PdfFileLoader(
|
|
93
195
|
async function* () {
|
|
94
|
-
const entries = await
|
|
95
|
-
const files = entries.filter((entry) => entry.isFile()).map((entry) =>
|
|
196
|
+
const entries = await readdir2(directory, { withFileTypes: true });
|
|
197
|
+
const files = entries.filter((entry) => entry.isFile()).map((entry) => join2(directory, entry.name)).sort((left, right) => left.localeCompare(right));
|
|
96
198
|
for (const path of files) {
|
|
97
199
|
yield ok({ path });
|
|
98
200
|
}
|
|
@@ -140,83 +242,6 @@ var PdfFileLoader = class _PdfFileLoader {
|
|
|
140
242
|
}
|
|
141
243
|
}
|
|
142
244
|
};
|
|
143
|
-
function fileToDocument(file) {
|
|
144
|
-
return {
|
|
145
|
-
id: file.path,
|
|
146
|
-
text: file.text,
|
|
147
|
-
additionalProps: {
|
|
148
|
-
source: file.path,
|
|
149
|
-
mediaType: "text/plain"
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
async function fileLoaderToDocuments(loader) {
|
|
154
|
-
const documents = [];
|
|
155
|
-
for await (const file of loader) {
|
|
156
|
-
documents.push(fileToDocument(file));
|
|
157
|
-
}
|
|
158
|
-
return documents;
|
|
159
|
-
}
|
|
160
|
-
function pdfToDocument(pdf) {
|
|
161
|
-
return {
|
|
162
|
-
id: pdf.path,
|
|
163
|
-
text: pdf.text,
|
|
164
|
-
additionalProps: {
|
|
165
|
-
source: pdf.path,
|
|
166
|
-
mediaType: "application/pdf"
|
|
167
|
-
}
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
async function pdfLoaderToDocuments(loader) {
|
|
171
|
-
const documents = [];
|
|
172
|
-
for await (const pdf of loader) {
|
|
173
|
-
documents.push(pdfToDocument(pdf));
|
|
174
|
-
}
|
|
175
|
-
return documents;
|
|
176
|
-
}
|
|
177
|
-
function pdfPageToDocument(page) {
|
|
178
|
-
return {
|
|
179
|
-
id: `${page.path}#page=${page.pageNumber}`,
|
|
180
|
-
text: page.text,
|
|
181
|
-
additionalProps: {
|
|
182
|
-
source: page.path,
|
|
183
|
-
mediaType: "application/pdf",
|
|
184
|
-
pageNumber: String(page.pageNumber)
|
|
185
|
-
}
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
async function pdfPageLoaderToDocuments(loader) {
|
|
189
|
-
const documents = [];
|
|
190
|
-
for await (const page of loader) {
|
|
191
|
-
documents.push(pdfPageToDocument(page));
|
|
192
|
-
}
|
|
193
|
-
return documents;
|
|
194
|
-
}
|
|
195
|
-
function ok(value) {
|
|
196
|
-
return { ok: true, value };
|
|
197
|
-
}
|
|
198
|
-
function err(error) {
|
|
199
|
-
return { ok: false, error };
|
|
200
|
-
}
|
|
201
|
-
async function sortedGlob(pattern) {
|
|
202
|
-
return (await glob(pattern, { absolute: isAbsolute(pattern), onlyFiles: true })).sort(
|
|
203
|
-
(left, right) => left.localeCompare(right)
|
|
204
|
-
);
|
|
205
|
-
}
|
|
206
|
-
async function mapFileResult(item, mode) {
|
|
207
|
-
if (!item.ok) {
|
|
208
|
-
return item;
|
|
209
|
-
}
|
|
210
|
-
if (mode === "source") {
|
|
211
|
-
return item;
|
|
212
|
-
}
|
|
213
|
-
try {
|
|
214
|
-
const text = await readFileSource(item.value);
|
|
215
|
-
return mode === "read" ? ok(text) : ok({ path: item.value.path, text });
|
|
216
|
-
} catch (error) {
|
|
217
|
-
return err(error);
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
245
|
async function mapPdfResult(item, mode) {
|
|
221
246
|
if (!item.ok) {
|
|
222
247
|
return [item];
|
|
@@ -240,15 +265,9 @@ async function mapPdfResult(item, mode) {
|
|
|
240
265
|
return [err(error)];
|
|
241
266
|
}
|
|
242
267
|
}
|
|
243
|
-
async function readFileSource(source) {
|
|
244
|
-
if ("bytes" in source) {
|
|
245
|
-
return new TextDecoder().decode(source.bytes);
|
|
246
|
-
}
|
|
247
|
-
return readFile(source.path, "utf8");
|
|
248
|
-
}
|
|
249
268
|
async function readPdfPages(source) {
|
|
250
269
|
const pdfjs = await import("pdfjs-dist/legacy/build/pdf.mjs");
|
|
251
|
-
const bytes = "bytes" in source ? source.bytes : toUint8Array(await
|
|
270
|
+
const bytes = "bytes" in source ? source.bytes : toUint8Array(await readFile2(source.path));
|
|
252
271
|
const loadingTask = pdfjs.getDocument({ data: bytes });
|
|
253
272
|
const document = await loadingTask.promise;
|
|
254
273
|
const pages = [];
|
|
@@ -267,14 +286,6 @@ async function readPdfPages(source) {
|
|
|
267
286
|
}
|
|
268
287
|
return pages;
|
|
269
288
|
}
|
|
270
|
-
function toUint8Array(bytes) {
|
|
271
|
-
if (bytes instanceof Uint8Array) {
|
|
272
|
-
return new Uint8Array(
|
|
273
|
-
bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)
|
|
274
|
-
);
|
|
275
|
-
}
|
|
276
|
-
return new Uint8Array(bytes);
|
|
277
|
-
}
|
|
278
289
|
export {
|
|
279
290
|
FileLoader,
|
|
280
291
|
PdfFileLoader,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/loaders/index.ts"],"sourcesContent":["import { readdir, readFile } from \"node:fs/promises\";\nimport { isAbsolute, join } from \"node:path\";\nimport { glob } from \"tinyglobby\";\nimport type { Document } from \"../completion\";\n\nexport type LoaderResult<T> = { ok: true; value: T } | { ok: false; error: unknown };\n\nexport type FileSource = { path: string } | { path: \"<memory>\"; bytes: Uint8Array };\nexport type FileReadWithPath = { path: string; text: string };\n\nexport type PdfSource = { path: string } | { path: \"<memory>\"; bytes: Uint8Array };\nexport type PdfReadWithPath = { path: string; text: string };\nexport type PdfPage = { pageNumber: number; text: string };\nexport type PdfPageWithPath = { path: string; pageNumber: number; text: string };\n\ntype FileMode = \"source\" | \"read\" | \"readWithPath\";\ntype PdfMode = \"source\" | \"read\" | \"readWithPath\" | \"byPage\" | \"byPageWithPath\";\n\nexport class FileLoader<T = LoaderResult<FileSource>> implements AsyncIterable<T> {\n private constructor(\n private readonly source: () => AsyncIterable<LoaderResult<FileSource>>,\n private readonly mode: FileMode,\n private readonly skipErrors: boolean,\n ) {}\n\n static withGlob(pattern: string): FileLoader<LoaderResult<FileSource>> {\n return new FileLoader(\n async function* () {\n for (const path of await sortedGlob(pattern)) {\n yield ok({ path });\n }\n },\n \"source\",\n false,\n );\n }\n\n static withDir(directory: string): FileLoader<LoaderResult<FileSource>> {\n return new FileLoader(\n async function* () {\n const entries = await readdir(directory, { withFileTypes: true });\n const files = entries\n .filter((entry) => entry.isFile())\n .map((entry) => join(directory, entry.name))\n .sort((left, right) => left.localeCompare(right));\n for (const path of files) {\n yield ok({ path });\n }\n },\n \"source\",\n false,\n );\n }\n\n static fromBytes(bytes: Uint8Array | ArrayBuffer): FileLoader<LoaderResult<FileSource>> {\n return FileLoader.fromBytesMany([bytes]);\n }\n\n static fromBytesMany(\n bytes: Array<Uint8Array | ArrayBuffer>,\n ): FileLoader<LoaderResult<FileSource>> {\n return new FileLoader(\n async function* () {\n for (const value of bytes) {\n yield ok({ path: \"<memory>\", bytes: toUint8Array(value) });\n }\n },\n \"source\",\n false,\n );\n }\n\n read(): FileLoader<LoaderResult<string>> {\n return new FileLoader(this.source, \"read\", this.skipErrors);\n }\n\n readWithPath(): FileLoader<LoaderResult<FileReadWithPath>> {\n return new FileLoader(this.source, \"readWithPath\", this.skipErrors);\n }\n\n ignoreErrors(): FileLoader<UnwrapLoaderResult<T>> {\n return new FileLoader(this.source, this.mode, true) as FileLoader<UnwrapLoaderResult<T>>;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n for await (const item of this.source()) {\n const result = await mapFileResult(item, this.mode);\n if (!result.ok && this.skipErrors) {\n continue;\n }\n yield (this.skipErrors && result.ok ? result.value : result) as T;\n }\n }\n}\n\nexport class PdfFileLoader<T = LoaderResult<PdfSource>> implements AsyncIterable<T> {\n private constructor(\n private readonly source: () => AsyncIterable<LoaderResult<PdfSource>>,\n private readonly mode: PdfMode,\n private readonly skipErrors: boolean,\n ) {}\n\n static withGlob(pattern: string): PdfFileLoader<LoaderResult<PdfSource>> {\n return new PdfFileLoader(\n async function* () {\n for (const path of await sortedGlob(pattern)) {\n yield ok({ path });\n }\n },\n \"source\",\n false,\n );\n }\n\n static withDir(directory: string): PdfFileLoader<LoaderResult<PdfSource>> {\n return new PdfFileLoader(\n async function* () {\n const entries = await readdir(directory, { withFileTypes: true });\n const files = entries\n .filter((entry) => entry.isFile())\n .map((entry) => join(directory, entry.name))\n .sort((left, right) => left.localeCompare(right));\n for (const path of files) {\n yield ok({ path });\n }\n },\n \"source\",\n false,\n );\n }\n\n static fromBytes(bytes: Uint8Array | ArrayBuffer): PdfFileLoader<LoaderResult<PdfSource>> {\n return PdfFileLoader.fromBytesMany([bytes]);\n }\n\n static fromBytesMany(\n bytes: Array<Uint8Array | ArrayBuffer>,\n ): PdfFileLoader<LoaderResult<PdfSource>> {\n return new PdfFileLoader(\n async function* () {\n for (const value of bytes) {\n yield ok({ path: \"<memory>\", bytes: toUint8Array(value) });\n }\n },\n \"source\",\n false,\n );\n }\n\n read(): PdfFileLoader<LoaderResult<string>> {\n return new PdfFileLoader(this.source, \"read\", this.skipErrors);\n }\n\n readWithPath(): PdfFileLoader<LoaderResult<PdfReadWithPath>> {\n return new PdfFileLoader(this.source, \"readWithPath\", this.skipErrors);\n }\n\n byPage(\n this: PdfFileLoader<LoaderResult<PdfReadWithPath>>,\n ): PdfFileLoader<LoaderResult<PdfPageWithPath>>;\n byPage(this: PdfFileLoader<PdfReadWithPath>): PdfFileLoader<PdfPageWithPath>;\n byPage(): PdfFileLoader<LoaderResult<PdfPage>>;\n byPage(): PdfFileLoader<LoaderResult<PdfPage> | LoaderResult<PdfPageWithPath> | PdfPageWithPath> {\n const mode = this.mode === \"readWithPath\" ? \"byPageWithPath\" : \"byPage\";\n return new PdfFileLoader(this.source, mode, this.skipErrors);\n }\n\n ignoreErrors(): PdfFileLoader<UnwrapLoaderResult<T>> {\n return new PdfFileLoader(this.source, this.mode, true) as PdfFileLoader<UnwrapLoaderResult<T>>;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n for await (const item of this.source()) {\n const results = await mapPdfResult(item, this.mode);\n for (const result of results) {\n if (!result.ok && this.skipErrors) {\n continue;\n }\n yield (this.skipErrors && result.ok ? result.value : result) as T;\n }\n }\n }\n}\n\nexport function fileToDocument(file: FileReadWithPath): Document {\n return {\n id: file.path,\n text: file.text,\n additionalProps: {\n source: file.path,\n mediaType: \"text/plain\",\n },\n };\n}\n\nexport async function fileLoaderToDocuments(\n loader: AsyncIterable<FileReadWithPath>,\n): Promise<Document[]> {\n const documents: Document[] = [];\n for await (const file of loader) {\n documents.push(fileToDocument(file));\n }\n return documents;\n}\n\nexport function pdfToDocument(pdf: PdfReadWithPath): Document {\n return {\n id: pdf.path,\n text: pdf.text,\n additionalProps: {\n source: pdf.path,\n mediaType: \"application/pdf\",\n },\n };\n}\n\nexport async function pdfLoaderToDocuments(\n loader: AsyncIterable<PdfReadWithPath>,\n): Promise<Document[]> {\n const documents: Document[] = [];\n for await (const pdf of loader) {\n documents.push(pdfToDocument(pdf));\n }\n return documents;\n}\n\nexport function pdfPageToDocument(page: PdfPageWithPath): Document {\n return {\n id: `${page.path}#page=${page.pageNumber}`,\n text: page.text,\n additionalProps: {\n source: page.path,\n mediaType: \"application/pdf\",\n pageNumber: String(page.pageNumber),\n },\n };\n}\n\nexport async function pdfPageLoaderToDocuments(\n loader: AsyncIterable<PdfPageWithPath>,\n): Promise<Document[]> {\n const documents: Document[] = [];\n for await (const page of loader) {\n documents.push(pdfPageToDocument(page));\n }\n return documents;\n}\n\ntype LoaderValue<T> = T extends { ok: true; value: infer Value } ? Value : never;\ntype UnwrapLoaderResult<T> = [LoaderValue<T>] extends [never] ? T : LoaderValue<T>;\n\nfunction ok<T>(value: T): LoaderResult<T> {\n return { ok: true, value };\n}\n\nfunction err(error: unknown): LoaderResult<never> {\n return { ok: false, error };\n}\n\nasync function sortedGlob(pattern: string): Promise<string[]> {\n return (await glob(pattern, { absolute: isAbsolute(pattern), onlyFiles: true })).sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\nasync function mapFileResult(\n item: LoaderResult<FileSource>,\n mode: FileMode,\n): Promise<LoaderResult<FileSource | string | FileReadWithPath>> {\n if (!item.ok) {\n return item;\n }\n if (mode === \"source\") {\n return item;\n }\n try {\n const text = await readFileSource(item.value);\n return mode === \"read\" ? ok(text) : ok({ path: item.value.path, text });\n } catch (error) {\n return err(error);\n }\n}\n\nasync function mapPdfResult(\n item: LoaderResult<PdfSource>,\n mode: PdfMode,\n): Promise<Array<LoaderResult<PdfSource | string | PdfReadWithPath | PdfPage | PdfPageWithPath>>> {\n if (!item.ok) {\n return [item];\n }\n if (mode === \"source\") {\n return [item];\n }\n try {\n const pages = await readPdfPages(item.value);\n if (mode === \"read\") {\n return [ok(pages.map((page) => page.text).join(\"\"))];\n }\n if (mode === \"readWithPath\") {\n return [ok({ path: item.value.path, text: pages.map((page) => page.text).join(\"\") })];\n }\n if (mode === \"byPageWithPath\") {\n return pages.map((page) => ok({ path: item.value.path, ...page }));\n }\n return pages.map(ok);\n } catch (error) {\n return [err(error)];\n }\n}\n\nasync function readFileSource(source: FileSource): Promise<string> {\n if (\"bytes\" in source) {\n return new TextDecoder().decode(source.bytes);\n }\n return readFile(source.path, \"utf8\");\n}\n\nasync function readPdfPages(source: PdfSource): Promise<PdfPage[]> {\n const pdfjs = await import(\"pdfjs-dist/legacy/build/pdf.mjs\");\n const bytes = \"bytes\" in source ? source.bytes : toUint8Array(await readFile(source.path));\n const loadingTask = pdfjs.getDocument({ data: bytes });\n const document = await loadingTask.promise;\n const pages: PdfPage[] = [];\n try {\n for (let index = 1; index <= document.numPages; index += 1) {\n const page = await document.getPage(index);\n const content = await page.getTextContent();\n const text = content.items\n .flatMap((item) =>\n typeof item === \"object\" && item !== null && \"str\" in item ? [String(item.str)] : [],\n )\n .join(\"\\n\");\n pages.push({ pageNumber: index - 1, text: text.length > 0 ? `${text}\\n` : \"\" });\n }\n } finally {\n await loadingTask.destroy();\n }\n return pages;\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);\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/loaders/documents.ts","../../src/loaders/file.ts","../../src/loaders/shared.ts","../../src/loaders/pdf.ts"],"sourcesContent":["import type { Document } from \"../completion\";\nimport type { FileReadWithPath, PdfPageWithPath, PdfReadWithPath } from \"./types\";\n\nexport function fileToDocument(file: FileReadWithPath): Document {\n return {\n id: file.path,\n text: file.text,\n additionalProps: {\n source: file.path,\n mediaType: \"text/plain\",\n },\n };\n}\n\nexport async function fileLoaderToDocuments(\n loader: AsyncIterable<FileReadWithPath>,\n): Promise<Document[]> {\n const documents: Document[] = [];\n for await (const file of loader) {\n documents.push(fileToDocument(file));\n }\n return documents;\n}\n\nexport function pdfToDocument(pdf: PdfReadWithPath): Document {\n return {\n id: pdf.path,\n text: pdf.text,\n additionalProps: {\n source: pdf.path,\n mediaType: \"application/pdf\",\n },\n };\n}\n\nexport async function pdfLoaderToDocuments(\n loader: AsyncIterable<PdfReadWithPath>,\n): Promise<Document[]> {\n const documents: Document[] = [];\n for await (const pdf of loader) {\n documents.push(pdfToDocument(pdf));\n }\n return documents;\n}\n\nexport function pdfPageToDocument(page: PdfPageWithPath): Document {\n return {\n id: `${page.path}#page=${page.pageNumber}`,\n text: page.text,\n additionalProps: {\n source: page.path,\n mediaType: \"application/pdf\",\n pageNumber: String(page.pageNumber),\n },\n };\n}\n\nexport async function pdfPageLoaderToDocuments(\n loader: AsyncIterable<PdfPageWithPath>,\n): Promise<Document[]> {\n const documents: Document[] = [];\n for await (const page of loader) {\n documents.push(pdfPageToDocument(page));\n }\n return documents;\n}\n","import { readdir, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { err, ok, sortedGlob, toUint8Array } from \"./shared\";\nimport type { FileReadWithPath, FileSource, LoaderResult } from \"./types\";\n\ntype FileMode = \"source\" | \"read\" | \"readWithPath\";\ntype LoaderValue<T> = T extends { ok: true; value: infer Value } ? Value : never;\ntype UnwrapLoaderResult<T> = [LoaderValue<T>] extends [never] ? T : LoaderValue<T>;\n\nexport class FileLoader<T = LoaderResult<FileSource>> implements AsyncIterable<T> {\n private constructor(\n private readonly source: () => AsyncIterable<LoaderResult<FileSource>>,\n private readonly mode: FileMode,\n private readonly skipErrors: boolean,\n ) {}\n\n static withGlob(pattern: string): FileLoader<LoaderResult<FileSource>> {\n return new FileLoader(\n async function* () {\n for (const path of await sortedGlob(pattern)) {\n yield ok({ path });\n }\n },\n \"source\",\n false,\n );\n }\n\n static withDir(directory: string): FileLoader<LoaderResult<FileSource>> {\n return new FileLoader(\n async function* () {\n const entries = await readdir(directory, { withFileTypes: true });\n const files = entries\n .filter((entry) => entry.isFile())\n .map((entry) => join(directory, entry.name))\n .sort((left, right) => left.localeCompare(right));\n for (const path of files) {\n yield ok({ path });\n }\n },\n \"source\",\n false,\n );\n }\n\n static fromBytes(bytes: Uint8Array | ArrayBuffer): FileLoader<LoaderResult<FileSource>> {\n return FileLoader.fromBytesMany([bytes]);\n }\n\n static fromBytesMany(\n bytes: Array<Uint8Array | ArrayBuffer>,\n ): FileLoader<LoaderResult<FileSource>> {\n return new FileLoader(\n async function* () {\n for (const value of bytes) {\n yield ok({ path: \"<memory>\", bytes: toUint8Array(value) });\n }\n },\n \"source\",\n false,\n );\n }\n\n read(): FileLoader<LoaderResult<string>> {\n return new FileLoader(this.source, \"read\", this.skipErrors);\n }\n\n readWithPath(): FileLoader<LoaderResult<FileReadWithPath>> {\n return new FileLoader(this.source, \"readWithPath\", this.skipErrors);\n }\n\n ignoreErrors(): FileLoader<UnwrapLoaderResult<T>> {\n return new FileLoader(this.source, this.mode, true) as FileLoader<UnwrapLoaderResult<T>>;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n for await (const item of this.source()) {\n const result = await mapFileResult(item, this.mode);\n if (!result.ok && this.skipErrors) {\n continue;\n }\n yield (this.skipErrors && result.ok ? result.value : result) as T;\n }\n }\n}\n\nasync function mapFileResult(\n item: LoaderResult<FileSource>,\n mode: FileMode,\n): Promise<LoaderResult<FileSource | string | FileReadWithPath>> {\n if (!item.ok) {\n return item;\n }\n if (mode === \"source\") {\n return item;\n }\n try {\n const text = await readFileSource(item.value);\n return mode === \"read\" ? ok(text) : ok({ path: item.value.path, text });\n } catch (error) {\n return err(error);\n }\n}\n\nasync function readFileSource(source: FileSource): Promise<string> {\n if (\"bytes\" in source) {\n return new TextDecoder().decode(source.bytes);\n }\n return readFile(source.path, \"utf8\");\n}\n","import { isAbsolute } from \"node:path\";\nimport { glob } from \"tinyglobby\";\nimport type { LoaderResult } from \"./types\";\n\nexport function ok<T>(value: T): LoaderResult<T> {\n return { ok: true, value };\n}\n\nexport function err(error: unknown): LoaderResult<never> {\n return { ok: false, error };\n}\n\nexport async function sortedGlob(pattern: string): Promise<string[]> {\n return (await glob(pattern, { absolute: isAbsolute(pattern), onlyFiles: true })).sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\nexport function 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);\n}\n","import { readdir, readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { err, ok, sortedGlob, toUint8Array } from \"./shared\";\nimport type { LoaderResult, PdfPage, PdfPageWithPath, PdfReadWithPath, PdfSource } from \"./types\";\n\ntype PdfMode = \"source\" | \"read\" | \"readWithPath\" | \"byPage\" | \"byPageWithPath\";\ntype LoaderValue<T> = T extends { ok: true; value: infer Value } ? Value : never;\ntype UnwrapLoaderResult<T> = [LoaderValue<T>] extends [never] ? T : LoaderValue<T>;\n\nexport class PdfFileLoader<T = LoaderResult<PdfSource>> implements AsyncIterable<T> {\n private constructor(\n private readonly source: () => AsyncIterable<LoaderResult<PdfSource>>,\n private readonly mode: PdfMode,\n private readonly skipErrors: boolean,\n ) {}\n\n static withGlob(pattern: string): PdfFileLoader<LoaderResult<PdfSource>> {\n return new PdfFileLoader(\n async function* () {\n for (const path of await sortedGlob(pattern)) {\n yield ok({ path });\n }\n },\n \"source\",\n false,\n );\n }\n\n static withDir(directory: string): PdfFileLoader<LoaderResult<PdfSource>> {\n return new PdfFileLoader(\n async function* () {\n const entries = await readdir(directory, { withFileTypes: true });\n const files = entries\n .filter((entry) => entry.isFile())\n .map((entry) => join(directory, entry.name))\n .sort((left, right) => left.localeCompare(right));\n for (const path of files) {\n yield ok({ path });\n }\n },\n \"source\",\n false,\n );\n }\n\n static fromBytes(bytes: Uint8Array | ArrayBuffer): PdfFileLoader<LoaderResult<PdfSource>> {\n return PdfFileLoader.fromBytesMany([bytes]);\n }\n\n static fromBytesMany(\n bytes: Array<Uint8Array | ArrayBuffer>,\n ): PdfFileLoader<LoaderResult<PdfSource>> {\n return new PdfFileLoader(\n async function* () {\n for (const value of bytes) {\n yield ok({ path: \"<memory>\", bytes: toUint8Array(value) });\n }\n },\n \"source\",\n false,\n );\n }\n\n read(): PdfFileLoader<LoaderResult<string>> {\n return new PdfFileLoader(this.source, \"read\", this.skipErrors);\n }\n\n readWithPath(): PdfFileLoader<LoaderResult<PdfReadWithPath>> {\n return new PdfFileLoader(this.source, \"readWithPath\", this.skipErrors);\n }\n\n byPage(\n this: PdfFileLoader<LoaderResult<PdfReadWithPath>>,\n ): PdfFileLoader<LoaderResult<PdfPageWithPath>>;\n byPage(this: PdfFileLoader<PdfReadWithPath>): PdfFileLoader<PdfPageWithPath>;\n byPage(): PdfFileLoader<LoaderResult<PdfPage>>;\n byPage(): PdfFileLoader<LoaderResult<PdfPage> | LoaderResult<PdfPageWithPath> | PdfPageWithPath> {\n const mode = this.mode === \"readWithPath\" ? \"byPageWithPath\" : \"byPage\";\n return new PdfFileLoader(this.source, mode, this.skipErrors);\n }\n\n ignoreErrors(): PdfFileLoader<UnwrapLoaderResult<T>> {\n return new PdfFileLoader(this.source, this.mode, true) as PdfFileLoader<UnwrapLoaderResult<T>>;\n }\n\n async *[Symbol.asyncIterator](): AsyncIterator<T> {\n for await (const item of this.source()) {\n const results = await mapPdfResult(item, this.mode);\n for (const result of results) {\n if (!result.ok && this.skipErrors) {\n continue;\n }\n yield (this.skipErrors && result.ok ? result.value : result) as T;\n }\n }\n }\n}\n\nasync function mapPdfResult(\n item: LoaderResult<PdfSource>,\n mode: PdfMode,\n): Promise<Array<LoaderResult<PdfSource | string | PdfReadWithPath | PdfPage | PdfPageWithPath>>> {\n if (!item.ok) {\n return [item];\n }\n if (mode === \"source\") {\n return [item];\n }\n try {\n const pages = await readPdfPages(item.value);\n if (mode === \"read\") {\n return [ok(pages.map((page) => page.text).join(\"\"))];\n }\n if (mode === \"readWithPath\") {\n return [ok({ path: item.value.path, text: pages.map((page) => page.text).join(\"\") })];\n }\n if (mode === \"byPageWithPath\") {\n return pages.map((page) => ok({ path: item.value.path, ...page }));\n }\n return pages.map(ok);\n } catch (error) {\n return [err(error)];\n }\n}\n\nasync function readPdfPages(source: PdfSource): Promise<PdfPage[]> {\n const pdfjs = await import(\"pdfjs-dist/legacy/build/pdf.mjs\");\n const bytes = \"bytes\" in source ? source.bytes : toUint8Array(await readFile(source.path));\n const loadingTask = pdfjs.getDocument({ data: bytes });\n const document = await loadingTask.promise;\n const pages: PdfPage[] = [];\n try {\n for (let index = 1; index <= document.numPages; index += 1) {\n const page = await document.getPage(index);\n const content = await page.getTextContent();\n const text = content.items\n .flatMap((item) =>\n typeof item === \"object\" && item !== null && \"str\" in item ? [String(item.str)] : [],\n )\n .join(\"\\n\");\n pages.push({ pageNumber: index - 1, text: text.length > 0 ? `${text}\\n` : \"\" });\n }\n } finally {\n await loadingTask.destroy();\n }\n return pages;\n}\n"],"mappings":"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","names":["readdir","readFile","join","readdir","join","readFile"]}
|
package/dist/mcp/index.js
CHANGED
|
@@ -77,7 +77,16 @@ function createMcpTool(definition, client, serverName) {
|
|
|
77
77
|
// src/mcp/connect.ts
|
|
78
78
|
async function connectMcp(connection) {
|
|
79
79
|
const client = await connection.connect();
|
|
80
|
-
|
|
80
|
+
let tools;
|
|
81
|
+
try {
|
|
82
|
+
({ tools } = await client.listTools());
|
|
83
|
+
} catch (error) {
|
|
84
|
+
try {
|
|
85
|
+
await client.close();
|
|
86
|
+
} catch {
|
|
87
|
+
}
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
81
90
|
return {
|
|
82
91
|
name: connection.name,
|
|
83
92
|
tools: tools.map((tool) => createMcpTool(tool, client, connection.name)),
|
package/dist/mcp/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mcp/result.ts","../../src/mcp/tool.ts","../../src/mcp/connect.ts","../../src/mcp/connections.ts"],"sourcesContent":["import type { JsonValue } from \"../completion/index\";\nimport type { McpToolCallContent, McpToolCallResult } from \"./types\";\n\nexport function createCallToolParams(\n name: string,\n args: unknown,\n): { name: string; arguments?: Record<string, unknown> } {\n if (args === null || args === undefined) {\n return { name };\n }\n\n if (!isPlainRecord(args)) {\n throw new Error(\"MCP tool arguments must be a JSON object\");\n }\n\n return { name, arguments: args };\n}\n\nexport function mapMcpToolResult(result: McpToolCallResult): string {\n if (\"toolResult\" in result) {\n return serializeMcpValue(result.toolResult);\n }\n\n if (result.isError === true) {\n throw new Error(mcpErrorMessage(result.content));\n }\n\n return result.content.map(mapMcpContent).join(\"\");\n}\n\nfunction mcpErrorMessage(content: McpToolCallContent[]): string {\n const text = content\n .map((item) => (item.type === \"text\" ? item.text : undefined))\n .filter((item): item is string => item !== undefined)\n .join(\"\\n\");\n\n return text === \"\" ? \"MCP tool returned an error\" : text;\n}\n\nfunction mapMcpContent(content: McpToolCallContent): string {\n if (content.type === \"text\") {\n return content.text;\n }\n\n if (content.type === \"image\") {\n return `data:${content.mimeType};base64,${content.data}`;\n }\n\n if (content.type === \"resource\") {\n const mimeType =\n content.resource.mimeType === undefined ? \"\" : `data:${content.resource.mimeType};`;\n if (\"text\" in content.resource) {\n return `${mimeType}${content.resource.uri}:${content.resource.text}`;\n }\n\n return `${mimeType}${content.resource.uri}:${content.resource.blob}`;\n }\n\n throw new Error(`Unsupported MCP tool result content: ${serializeMcpValue(content)}`);\n}\n\nfunction serializeMcpValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n const serialized = JSON.stringify(value);\n return serialized === undefined ? String(value) : serialized;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, JsonValue> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { ToolDefinition } from \"../completion/index\";\nimport type { Tool } from \"../tool/index\";\nimport { createCallToolParams, mapMcpToolResult } from \"./result\";\nimport type { McpClient, McpToolDefinition } from \"./types\";\n\nconst MCP_TOOL_METADATA_KEY = Symbol.for(\"anvia.mcp.tool.metadata\");\n\nexport function createMcpTool(\n definition: McpToolDefinition,\n client: McpClient,\n serverName?: string,\n): Tool {\n const tool: Tool = {\n name: definition.name,\n definition(): ToolDefinition {\n return {\n name: definition.name,\n description: definition.description ?? \"\",\n parameters: definition.inputSchema,\n };\n },\n async call(args): Promise<string> {\n const result = await client.callTool(createCallToolParams(definition.name, args));\n return mapMcpToolResult(result);\n },\n };\n if (serverName !== undefined) {\n Object.defineProperty(tool, MCP_TOOL_METADATA_KEY, {\n value: { serverName },\n enumerable: false,\n });\n }\n return tool;\n}\n","import { createMcpTool } from \"./tool\";\nimport type { McpConnection, McpServer } from \"./types\";\n\nexport async function connectMcp(connection: McpConnection): Promise<McpServer> {\n const client = await connection.connect();\n
|
|
1
|
+
{"version":3,"sources":["../../src/mcp/result.ts","../../src/mcp/tool.ts","../../src/mcp/connect.ts","../../src/mcp/connections.ts"],"sourcesContent":["import type { JsonValue } from \"../completion/index\";\nimport type { McpToolCallContent, McpToolCallResult } from \"./types\";\n\nexport function createCallToolParams(\n name: string,\n args: unknown,\n): { name: string; arguments?: Record<string, unknown> } {\n if (args === null || args === undefined) {\n return { name };\n }\n\n if (!isPlainRecord(args)) {\n throw new Error(\"MCP tool arguments must be a JSON object\");\n }\n\n return { name, arguments: args };\n}\n\nexport function mapMcpToolResult(result: McpToolCallResult): string {\n if (\"toolResult\" in result) {\n return serializeMcpValue(result.toolResult);\n }\n\n if (result.isError === true) {\n throw new Error(mcpErrorMessage(result.content));\n }\n\n return result.content.map(mapMcpContent).join(\"\");\n}\n\nfunction mcpErrorMessage(content: McpToolCallContent[]): string {\n const text = content\n .map((item) => (item.type === \"text\" ? item.text : undefined))\n .filter((item): item is string => item !== undefined)\n .join(\"\\n\");\n\n return text === \"\" ? \"MCP tool returned an error\" : text;\n}\n\nfunction mapMcpContent(content: McpToolCallContent): string {\n if (content.type === \"text\") {\n return content.text;\n }\n\n if (content.type === \"image\") {\n return `data:${content.mimeType};base64,${content.data}`;\n }\n\n if (content.type === \"resource\") {\n const mimeType =\n content.resource.mimeType === undefined ? \"\" : `data:${content.resource.mimeType};`;\n if (\"text\" in content.resource) {\n return `${mimeType}${content.resource.uri}:${content.resource.text}`;\n }\n\n return `${mimeType}${content.resource.uri}:${content.resource.blob}`;\n }\n\n throw new Error(`Unsupported MCP tool result content: ${serializeMcpValue(content)}`);\n}\n\nfunction serializeMcpValue(value: unknown): string {\n if (typeof value === \"string\") {\n return value;\n }\n\n const serialized = JSON.stringify(value);\n return serialized === undefined ? String(value) : serialized;\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, JsonValue> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","import type { ToolDefinition } from \"../completion/index\";\nimport type { Tool } from \"../tool/index\";\nimport { createCallToolParams, mapMcpToolResult } from \"./result\";\nimport type { McpClient, McpToolDefinition } from \"./types\";\n\nconst MCP_TOOL_METADATA_KEY = Symbol.for(\"anvia.mcp.tool.metadata\");\n\nexport function createMcpTool(\n definition: McpToolDefinition,\n client: McpClient,\n serverName?: string,\n): Tool {\n const tool: Tool = {\n name: definition.name,\n definition(): ToolDefinition {\n return {\n name: definition.name,\n description: definition.description ?? \"\",\n parameters: definition.inputSchema,\n };\n },\n async call(args): Promise<string> {\n const result = await client.callTool(createCallToolParams(definition.name, args));\n return mapMcpToolResult(result);\n },\n };\n if (serverName !== undefined) {\n Object.defineProperty(tool, MCP_TOOL_METADATA_KEY, {\n value: { serverName },\n enumerable: false,\n });\n }\n return tool;\n}\n","import { createMcpTool } from \"./tool\";\nimport type { McpConnection, McpServer } from \"./types\";\n\nexport async function connectMcp(connection: McpConnection): Promise<McpServer> {\n const client = await connection.connect();\n let tools: Awaited<ReturnType<typeof client.listTools>>[\"tools\"];\n try {\n ({ tools } = await client.listTools());\n } catch (error) {\n try {\n await client.close();\n } catch {\n // Preserve the initialization failure so callers see the actionable MCP error.\n }\n throw error;\n }\n\n return {\n name: connection.name,\n tools: tools.map((tool) => createMcpTool(tool, client, connection.name)),\n close: () => client.close(),\n };\n}\n","import { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { SSEClientTransport } from \"@modelcontextprotocol/sdk/client/sse.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\nimport type {\n McpClient,\n McpConnection,\n McpHttpOptions,\n McpSseOptions,\n McpStdioOptions,\n} from \"./types\";\n\nexport const mcp = {\n stdio(options: McpStdioOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n const { name: _name, ...server } = options;\n const client = createSdkClient();\n await client.connect(asSdkTransport(new StdioClientTransport(server)));\n return client as McpClient;\n },\n };\n },\n\n http(options: McpHttpOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n const client = createSdkClient();\n await client.connect(\n asSdkTransport(\n new StreamableHTTPClientTransport(new URL(options.url), options.transport),\n ),\n );\n return client as McpClient;\n },\n };\n },\n\n sse(options: McpSseOptions): McpConnection {\n return {\n name: options.name,\n async connect(): Promise<McpClient> {\n const client = createSdkClient();\n await client.connect(\n asSdkTransport(new SSEClientTransport(new URL(options.url), options.transport)),\n );\n return client as McpClient;\n },\n };\n },\n};\n\nfunction createSdkClient(): Client {\n return new Client({\n name: \"@anvia/core\",\n version: \"0.1.0\",\n });\n}\n\nfunction asSdkTransport(transport: unknown): Parameters<Client[\"connect\"]>[0] {\n return transport as Parameters<Client[\"connect\"]>[0];\n}\n"],"mappings":"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","names":[]}
|
package/dist/skills/index.js
CHANGED
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
SkillValidationError,
|
|
3
3
|
loadSkills,
|
|
4
4
|
skill
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-DUP7FMAF.js";
|
|
6
6
|
import "../chunk-YK4WAAS4.js";
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
7
|
+
import "../chunk-35GF7P43.js";
|
|
8
|
+
import "../chunk-P425B6GR.js";
|
|
9
9
|
import "../chunk-EFGX3EX5.js";
|
|
10
10
|
import "../chunk-OIMLU4SF.js";
|
|
11
11
|
export {
|
package/dist/tool/index.js
CHANGED
|
@@ -14,10 +14,10 @@ import {
|
|
|
14
14
|
parseToolArgs,
|
|
15
15
|
serializeToolOutput,
|
|
16
16
|
toolResultContentToText
|
|
17
|
-
} from "../chunk-
|
|
17
|
+
} from "../chunk-35GF7P43.js";
|
|
18
18
|
import {
|
|
19
19
|
createTool
|
|
20
|
-
} from "../chunk-
|
|
20
|
+
} from "../chunk-P425B6GR.js";
|
|
21
21
|
import "../chunk-EFGX3EX5.js";
|
|
22
22
|
import "../chunk-OIMLU4SF.js";
|
|
23
23
|
export {
|
|
@@ -90,6 +90,7 @@ declare class InMemoryVectorStore<T, Metadata extends VectorMetadata = VectorMet
|
|
|
90
90
|
private readonly documents;
|
|
91
91
|
private indexStrategy;
|
|
92
92
|
private lshIndex;
|
|
93
|
+
private embeddingDimension;
|
|
93
94
|
constructor(options?: {
|
|
94
95
|
index?: IndexStrategy;
|
|
95
96
|
});
|
|
@@ -104,6 +105,8 @@ declare class InMemoryVectorStore<T, Metadata extends VectorMetadata = VectorMet
|
|
|
104
105
|
index(model: EmbeddingModel): InMemoryVectorIndex<T, Metadata>;
|
|
105
106
|
candidates(queryEmbedding: Embedding): Array<StoredDocument<T, Metadata>>;
|
|
106
107
|
private rebuildLshIndex;
|
|
108
|
+
private validateDocumentDimensions;
|
|
109
|
+
private validateQueryDimension;
|
|
107
110
|
}
|
|
108
111
|
declare class InMemoryVectorIndex<T, Metadata extends VectorMetadata = VectorMetadata> implements VectorSearchIndex<T, Metadata> {
|
|
109
112
|
private readonly model;
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vector-store/index.ts","../src/schema/zod-schema.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, type VectorFilter } from \"./filter\";\nimport { LshIndex, type LshOptions } from \"./lsh\";\n\nexport { type VectorFilter, vectorFilter } from \"./filter\";\n\nexport type IndexStrategy = { type: \"bruteForce\" } | LshOptions;\n\nexport type VectorSearchRequest = {\n query: string;\n topK: number;\n threshold?: number | undefined;\n filter?: VectorFilter | undefined;\n};\n\nexport type VectorSearchResult<T = unknown, Metadata extends VectorMetadata = VectorMetadata> = {\n score: number;\n id: string;\n document: T;\n metadata?: Metadata | undefined;\n};\n\nexport type VectorInspectRequest = {\n limit: number;\n cursor?: string | undefined;\n filter?: VectorFilter | undefined;\n};\n\nexport type VectorInspectItem<T = unknown, Metadata extends VectorMetadata = VectorMetadata> = {\n id: string;\n document: T;\n metadata?: Metadata | undefined;\n};\n\nexport type VectorInspectPage<T = unknown, Metadata extends VectorMetadata = VectorMetadata> = {\n items: Array<VectorInspectItem<T, Metadata>>;\n nextCursor?: string | undefined;\n totalCount?: number | undefined;\n};\n\nexport interface VectorSearchIndex<T = unknown, Metadata extends VectorMetadata = VectorMetadata> {\n search(request: VectorSearchRequest): Promise<Array<VectorSearchResult<T, Metadata>>>;\n searchIds(request: VectorSearchRequest): Promise<Array<{ score: number; id: string }>>;\n asTool(options: VectorSearchToolOptions): Tool<{ query: string; topK?: number }, unknown>;\n inspect?(request: VectorInspectRequest): Promise<VectorInspectPage<T, Metadata>>;\n}\n\nexport type VectorSearchToolOptions = {\n name: string;\n description?: string | undefined;\n topK?: number | undefined;\n threshold?: number | undefined;\n filter?: VectorFilter | undefined;\n};\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\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 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 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\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 return [\n {\n score,\n id: document.id,\n document: document.document,\n ...(document.metadata === undefined ? {} : { metadata: document.metadata }),\n },\n ];\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 return {\n items: page.map((document) => ({\n id: document.id,\n document: document.document,\n ...(document.metadata === undefined ? {} : { metadata: document.metadata }),\n })),\n ...(nextOffset < documents.length ? { nextCursor: String(nextOffset) } : {}),\n totalCount: documents.length,\n };\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 input: 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 output: 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","import { z } from \"zod\";\nimport type { JsonObject } from \"../completion/index\";\n\nexport type ZodSchema<T = unknown> = z.ZodType<T>;\n\nexport function toProviderJsonSchema(schema: z.ZodType): JsonObject {\n const jsonSchema = z.toJSONSchema(schema) as JsonObject;\n const { $schema: _schema, ...providerSchema } = jsonSchema;\n return providerSchema;\n}\n","import type { z } from \"zod\";\nimport { toProviderJsonSchema, type ZodSchema } from \"../schema/zod-schema\";\nimport type { Tool, ToolApprovalPolicy, ToolCallContext } 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 input: InputSchema;\n output?: OutputSchema;\n approval?: ToolApprovalPolicy<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> & { output?: 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 parameters = toProviderJsonSchema(options.input);\n\n return {\n name: options.name,\n ...(options.approval === undefined ? {} : { approval: options.approval }),\n definition() {\n return {\n name: options.name,\n description: options.description,\n parameters,\n };\n },\n async call(args, context = {}): Promise<CreateToolOutput<OutputSchema, Output>> {\n const parsedArgs = options.input.parse(args);\n const result = await options.execute(parsedArgs, context);\n return (\n options.output === undefined ? result : options.output.parse(result)\n ) as CreateToolOutput<OutputSchema, Output>;\n },\n parseApprovalArgs(args): z.output<InputSchema> {\n return options.input.parse(args);\n },\n };\n}\n","import type { VectorMetadata, VectorMetadataValue } from \"../embeddings\";\n\nexport type VectorFilter =\n | { type: \"eq\"; key: string; value: VectorMetadataValue }\n | { type: \"gt\"; key: string; value: VectorMetadataValue }\n | { type: \"lt\"; key: string; value: VectorMetadataValue }\n | { type: \"and\"; filters: [VectorFilter, VectorFilter] }\n | { type: \"or\"; filters: [VectorFilter, VectorFilter] };\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","export type LshOptions = {\n type: \"lsh\";\n numTables: number;\n numHyperplanes: number;\n seed?: number | undefined;\n};\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":["z","z"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|