@anvia/core 0.2.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/agent/index.d.ts +6 -6
- package/dist/agent/index.js +5 -4
- package/dist/{agent-ufaeGoaz.d.ts → agent-D_jXqPAZ.d.ts} +6 -4
- package/dist/{chunk-4F7RVGFR.js → chunk-65QV627O.js} +44 -13
- package/dist/chunk-65QV627O.js.map +1 -0
- package/dist/{chunk-BKDDAOQH.js → chunk-6JCCM2K4.js} +2 -2
- package/dist/{chunk-T6GLJU5W.js → chunk-GSFQZYS7.js} +86 -17
- package/dist/chunk-GSFQZYS7.js.map +1 -0
- package/dist/chunk-I2HOMD3R.js +240 -0
- package/dist/chunk-I2HOMD3R.js.map +1 -0
- package/dist/{chunk-QKYU4L4V.js → chunk-QRZ2HPUX.js} +3 -3
- package/dist/{chunk-2VCWYCPV.js → chunk-TILE6Z2N.js} +2 -2
- package/dist/{chunk-OD6TY44B.js → chunk-ZSYIQYTV.js} +1 -1
- package/dist/chunk-ZSYIQYTV.js.map +1 -0
- package/dist/evals/index.d.ts +3 -3
- package/dist/evals/index.js +6 -8
- package/dist/extractor/index.d.ts +3 -3
- package/dist/extractor/index.js +5 -7
- package/dist/index.d.ts +5 -5
- package/dist/index.js +35 -31
- package/dist/mcp/index.d.ts +3 -3
- package/dist/{middleware-CKsY_zZE.d.ts → middleware-2FR89muX.d.ts} +5 -3
- package/dist/observability/index.d.ts +3 -2
- package/dist/observability/index.js +1 -1
- package/dist/pipeline/index.d.ts +3 -3
- package/dist/skills/index.d.ts +3 -3
- package/dist/skills/index.js +3 -5
- package/dist/tool/index.d.ts +10 -8
- package/dist/tool/index.js +17 -12
- package/dist/{tool-FEHplpd9.d.ts → tool-ClZYES-Z.d.ts} +9 -2
- package/dist/{types-CW3K1MJm.d.ts → types-B0iXLkqi.d.ts} +1 -1
- package/dist/{types-DpFoVF_g.d.ts → types-fLi8uM5R.d.ts} +1 -1
- package/dist/vector-store/index.d.ts +1 -1
- package/dist/vector-store/index.js +1 -2
- package/package.json +15 -7
- package/dist/chunk-3H7FVGHU.js +0 -113
- package/dist/chunk-3H7FVGHU.js.map +0 -1
- package/dist/chunk-445TT5Q5.js +0 -37
- package/dist/chunk-445TT5Q5.js.map +0 -1
- package/dist/chunk-4F7RVGFR.js.map +0 -1
- package/dist/chunk-OD6TY44B.js.map +0 -1
- package/dist/chunk-T6GLJU5W.js.map +0 -1
- package/dist/chunk-V5EETE3U.js +0 -106
- package/dist/chunk-V5EETE3U.js.map +0 -1
- /package/dist/{chunk-BKDDAOQH.js.map → chunk-6JCCM2K4.js.map} +0 -0
- /package/dist/{chunk-QKYU4L4V.js.map → chunk-QRZ2HPUX.js.map} +0 -0
- /package/dist/{chunk-2VCWYCPV.js.map → chunk-TILE6Z2N.js.map} +0 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Indra Zulfi
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/agent/index.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { MemoryStore, MemoryOptions } from '../memory/index.js';
|
|
2
2
|
export { MemoryAppendInput, MemoryContext, MemoryErrorInput, MemoryRegistration, MemorySavePolicy, ResolvedMemoryOptions, SessionOptions, resolveMemoryOptions } from '../memory/index.js';
|
|
3
|
-
import { m as DynamicContextOptions, o as DynamicToolOptions, P as PromptHook, d as AgentEventStore, f as AgentEventStoreOptions, A as Agent } from '../agent-
|
|
4
|
-
export { a as AgentChildStreamEvent, b as AgentEventAppendInput, c as AgentEventRecord, e as AgentEventStoreInclude, g as AgentEventStoreRegistration, h as AgentOptions, i as AgentSession, j as AgentStreamEvent, k as AgentToolOptions, C as CompletionCallHookArgs, l as CompletionResponseHookArgs, D as DEFAULT_MAX_TURNS, n as DynamicContextRegistration, p as DynamicToolRegistration, H as HookAction, q as HookResult, r as PromptRequest, s as PromptResponse, R as RunControl, T as ToolApprovalRequestOptions, t as ToolCallControl, u as ToolCallHookAction, v as ToolCallHookArgs, w as ToolCallHookResult, x as ToolHookArgs, y as ToolResultHookArgs, z as cancelPrompt, B as createHook, E as requestToolApproval, F as runControl, G as skipTool, I as toolCallControl } from '../agent-
|
|
3
|
+
import { m as DynamicContextOptions, o as DynamicToolOptions, P as PromptHook, d as AgentEventStore, f as AgentEventStoreOptions, A as Agent } from '../agent-D_jXqPAZ.js';
|
|
4
|
+
export { a as AgentChildStreamEvent, b as AgentEventAppendInput, c as AgentEventRecord, e as AgentEventStoreInclude, g as AgentEventStoreRegistration, h as AgentOptions, i as AgentSession, j as AgentStreamEvent, k as AgentToolOptions, C as CompletionCallHookArgs, l as CompletionResponseHookArgs, D as DEFAULT_MAX_TURNS, n as DynamicContextRegistration, p as DynamicToolRegistration, H as HookAction, q as HookResult, r as PromptRequest, s as PromptResponse, R as RunControl, T as ToolApprovalRequestOptions, t as ToolCallControl, u as ToolCallHookAction, v as ToolCallHookArgs, w as ToolCallHookResult, x as ToolHookArgs, y as ToolResultHookArgs, z as cancelPrompt, B as createHook, E as requestToolApproval, F as runControl, G as skipTool, I as toolCallControl } from '../agent-D_jXqPAZ.js';
|
|
5
5
|
import { b as CompletionModel, j as JsonValue, o as ToolChoice, M as Message } from '../types-BM8-Y8Hy.js';
|
|
6
|
-
import { c as McpServer } from '../types-
|
|
6
|
+
import { c as McpServer } from '../types-fLi8uM5R.js';
|
|
7
7
|
import { AgentObserver, ObserveOptions } from '../observability/index.js';
|
|
8
|
-
import { b as ToolSearchDocument, c as ToolSet, T as ToolMiddleware, Z as ZodSchema } from '../middleware-
|
|
9
|
-
import { b as SkillSet } from '../types-
|
|
10
|
-
import { A as AnyTool } from '../tool-
|
|
8
|
+
import { b as ToolSearchDocument, c as ToolSet, T as ToolMiddleware, Z as ZodSchema } from '../middleware-2FR89muX.js';
|
|
9
|
+
import { b as SkillSet } from '../types-B0iXLkqi.js';
|
|
10
|
+
import { A as AnyTool } from '../tool-ClZYES-Z.js';
|
|
11
11
|
import { VectorSearchIndex } from '../vector-store/index.js';
|
|
12
12
|
import '@modelcontextprotocol/sdk/client/sse.js';
|
|
13
13
|
import '@modelcontextprotocol/sdk/client/stdio.js';
|
package/dist/agent/index.js
CHANGED
|
@@ -12,15 +12,16 @@ import {
|
|
|
12
12
|
runControl,
|
|
13
13
|
skipTool,
|
|
14
14
|
toolCallControl
|
|
15
|
-
} from "../chunk-
|
|
16
|
-
import "../chunk-YK4WAAS4.js";
|
|
17
|
-
import "../chunk-3H7FVGHU.js";
|
|
18
|
-
import "../chunk-445TT5Q5.js";
|
|
15
|
+
} from "../chunk-GSFQZYS7.js";
|
|
19
16
|
import {
|
|
20
17
|
resolveMemoryOptions
|
|
21
18
|
} from "../chunk-XXT2UCAR.js";
|
|
19
|
+
import "../chunk-YK4WAAS4.js";
|
|
20
|
+
import "../chunk-I2HOMD3R.js";
|
|
21
|
+
import "../chunk-65QV627O.js";
|
|
22
22
|
import "../chunk-XUUY2L2D.js";
|
|
23
23
|
import "../chunk-6GJDBBDC.js";
|
|
24
|
+
import "../chunk-A7VDIZQN.js";
|
|
24
25
|
export {
|
|
25
26
|
Agent,
|
|
26
27
|
AgentBuilder,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { M as Message, e as CompletionResponse, b as CompletionModel, U as Usage, l as ReasoningContentType, n as ToolCall, D as Document, j as JsonValue, o as ToolChoice, J as JsonObject } from './types-BM8-Y8Hy.js';
|
|
1
|
+
import { M as Message, e as CompletionResponse, u as ToolResultContent, b as CompletionModel, U as Usage, l as ReasoningContentType, n as ToolCall, D as Document, j as JsonValue, o as ToolChoice, J as JsonObject } from './types-BM8-Y8Hy.js';
|
|
2
2
|
import { MemoryContext, MemoryRegistration, SessionOptions } from './memory/index.js';
|
|
3
3
|
import { AgentTraceOptions, AgentTraceInfo, AgentObserverRegistration } from './observability/index.js';
|
|
4
|
-
import { T as ToolMiddleware, c as ToolSet, b as ToolSearchDocument } from './middleware-
|
|
5
|
-
import { T as Tool, A as AnyTool, d as ToolCallContext } from './tool-
|
|
4
|
+
import { T as ToolMiddleware, c as ToolSet, b as ToolSearchDocument } from './middleware-2FR89muX.js';
|
|
5
|
+
import { T as Tool, A as AnyTool, d as ToolCallContext, N as NormalizedToolOutput } from './tool-ClZYES-Z.js';
|
|
6
6
|
import { VectorSearchIndex, VectorFilter, VectorSearchResult } from './vector-store/index.js';
|
|
7
7
|
|
|
8
8
|
type HookAction = {
|
|
@@ -61,6 +61,7 @@ type ToolCallHookArgs = ToolHookArgs & {
|
|
|
61
61
|
};
|
|
62
62
|
type ToolResultHookArgs = ToolHookArgs & {
|
|
63
63
|
result: string;
|
|
64
|
+
structuredResult?: ToolResultContent[] | undefined;
|
|
64
65
|
run: RunControl;
|
|
65
66
|
};
|
|
66
67
|
declare function createHook<RawResponse = unknown>(hook: PromptHook<RawResponse>): PromptHook<RawResponse>;
|
|
@@ -110,6 +111,7 @@ type AgentChildStreamEvent<RawResponse = unknown> = {
|
|
|
110
111
|
internalCallId: string;
|
|
111
112
|
args: string;
|
|
112
113
|
result: string;
|
|
114
|
+
structuredResult?: ToolResultContent[] | undefined;
|
|
113
115
|
} | {
|
|
114
116
|
type: "turn_end";
|
|
115
117
|
turn: number;
|
|
@@ -283,7 +285,7 @@ declare class Agent<M extends CompletionModel = CompletionModel> {
|
|
|
283
285
|
prompt: string;
|
|
284
286
|
}, string>;
|
|
285
287
|
getTool(toolName: string): AnyTool | undefined;
|
|
286
|
-
callTool(toolName: string, args: string, context?: ToolCallContext): Promise<
|
|
288
|
+
callTool(toolName: string, args: string, context?: ToolCallContext): Promise<NormalizedToolOutput>;
|
|
287
289
|
shouldApplyToolMiddleware(toolName: string): boolean;
|
|
288
290
|
}
|
|
289
291
|
declare class AgentSession<M extends CompletionModel = CompletionModel> {
|
|
@@ -1,13 +1,42 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createTool
|
|
3
|
-
} from "./chunk-445TT5Q5.js";
|
|
4
1
|
import {
|
|
5
2
|
cosineSimilarity,
|
|
6
3
|
embedText
|
|
7
4
|
} from "./chunk-A7VDIZQN.js";
|
|
8
5
|
|
|
9
6
|
// src/vector-store/index.ts
|
|
7
|
+
import { z as z2 } from "zod";
|
|
8
|
+
|
|
9
|
+
// src/schema/zod-schema.ts
|
|
10
10
|
import { z } from "zod";
|
|
11
|
+
function toProviderJsonSchema(schema) {
|
|
12
|
+
const jsonSchema = z.toJSONSchema(schema);
|
|
13
|
+
const { $schema: _schema, ...providerSchema } = jsonSchema;
|
|
14
|
+
return providerSchema;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// src/tool/create-tool.ts
|
|
18
|
+
function createTool(options) {
|
|
19
|
+
const parameters = toProviderJsonSchema(options.input);
|
|
20
|
+
return {
|
|
21
|
+
name: options.name,
|
|
22
|
+
...options.approval === void 0 ? {} : { approval: options.approval },
|
|
23
|
+
definition() {
|
|
24
|
+
return {
|
|
25
|
+
name: options.name,
|
|
26
|
+
description: options.description,
|
|
27
|
+
parameters
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
async call(args, context = {}) {
|
|
31
|
+
const parsedArgs = options.input.parse(args);
|
|
32
|
+
const result = await options.execute(parsedArgs, context);
|
|
33
|
+
return options.output === void 0 ? result : options.output.parse(result);
|
|
34
|
+
},
|
|
35
|
+
parseApprovalArgs(args) {
|
|
36
|
+
return options.input.parse(args);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
11
40
|
|
|
12
41
|
// src/vector-store/filter.ts
|
|
13
42
|
var vectorFilter = {
|
|
@@ -234,16 +263,16 @@ function createVectorSearchTool(index, options) {
|
|
|
234
263
|
return createTool({
|
|
235
264
|
name: options.name,
|
|
236
265
|
description: options.description ?? "Search a vector store for documents relevant to the provided query.",
|
|
237
|
-
input:
|
|
238
|
-
query:
|
|
239
|
-
topK:
|
|
266
|
+
input: z2.object({
|
|
267
|
+
query: z2.string().describe("The query string to search for relevant documents."),
|
|
268
|
+
topK: z2.number().int().positive().optional().describe("The maximum number of results.")
|
|
240
269
|
}),
|
|
241
|
-
output:
|
|
242
|
-
|
|
243
|
-
score:
|
|
244
|
-
id:
|
|
245
|
-
document:
|
|
246
|
-
metadata:
|
|
270
|
+
output: z2.array(
|
|
271
|
+
z2.object({
|
|
272
|
+
score: z2.number(),
|
|
273
|
+
id: z2.string(),
|
|
274
|
+
document: z2.any(),
|
|
275
|
+
metadata: z2.record(z2.string(), z2.union([z2.string(), z2.number(), z2.boolean(), z2.null()])).optional()
|
|
247
276
|
})
|
|
248
277
|
),
|
|
249
278
|
execute: ({ query, topK }) => index.search({
|
|
@@ -264,9 +293,11 @@ function bestScore(queryEmbedding, embeddings) {
|
|
|
264
293
|
}
|
|
265
294
|
|
|
266
295
|
export {
|
|
296
|
+
toProviderJsonSchema,
|
|
297
|
+
createTool,
|
|
267
298
|
vectorFilter,
|
|
268
299
|
InMemoryVectorStore,
|
|
269
300
|
InMemoryVectorIndex,
|
|
270
301
|
createVectorSearchTool
|
|
271
302
|
};
|
|
272
|
-
//# sourceMappingURL=chunk-
|
|
303
|
+
//# sourceMappingURL=chunk-65QV627O.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\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"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ExtractorBuilder
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-QRZ2HPUX.js";
|
|
4
4
|
import {
|
|
5
5
|
cosineSimilarity,
|
|
6
6
|
embedText
|
|
@@ -301,4 +301,4 @@ export {
|
|
|
301
301
|
llmScore,
|
|
302
302
|
agentEvalTarget
|
|
303
303
|
};
|
|
304
|
-
//# sourceMappingURL=chunk-
|
|
304
|
+
//# sourceMappingURL=chunk-6JCCM2K4.js.map
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
resolveMemoryOptions
|
|
3
|
+
} from "./chunk-XXT2UCAR.js";
|
|
1
4
|
import {
|
|
2
5
|
isSkillTool
|
|
3
6
|
} from "./chunk-YK4WAAS4.js";
|
|
4
7
|
import {
|
|
5
|
-
ToolSet
|
|
6
|
-
|
|
8
|
+
ToolSet,
|
|
9
|
+
toolResultContentToText
|
|
10
|
+
} from "./chunk-I2HOMD3R.js";
|
|
7
11
|
import {
|
|
8
12
|
createTool,
|
|
9
13
|
toProviderJsonSchema
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import {
|
|
12
|
-
resolveMemoryOptions
|
|
13
|
-
} from "./chunk-XXT2UCAR.js";
|
|
14
|
+
} from "./chunk-65QV627O.js";
|
|
14
15
|
import {
|
|
15
16
|
toReadableStream
|
|
16
17
|
} from "./chunk-XUUY2L2D.js";
|
|
@@ -359,10 +360,11 @@ var CompletionStreamAccumulator = class _CompletionStreamAccumulator {
|
|
|
359
360
|
return void 0;
|
|
360
361
|
}
|
|
361
362
|
response() {
|
|
363
|
+
const accumulatedResponse = this.buildAccumulatedResponse();
|
|
362
364
|
if (this.finalResponse !== void 0) {
|
|
363
365
|
if (this.finalResponse.choice.length === 0) {
|
|
364
366
|
const response = {
|
|
365
|
-
...
|
|
367
|
+
...accumulatedResponse,
|
|
366
368
|
usage: this.finalResponse.usage,
|
|
367
369
|
rawResponse: this.finalResponse.rawResponse
|
|
368
370
|
};
|
|
@@ -371,9 +373,9 @@ var CompletionStreamAccumulator = class _CompletionStreamAccumulator {
|
|
|
371
373
|
}
|
|
372
374
|
return response;
|
|
373
375
|
}
|
|
374
|
-
return this.finalResponse;
|
|
376
|
+
return this.mergeFinalResponse(accumulatedResponse, this.finalResponse);
|
|
375
377
|
}
|
|
376
|
-
return
|
|
378
|
+
return accumulatedResponse;
|
|
377
379
|
}
|
|
378
380
|
buildAccumulatedResponse() {
|
|
379
381
|
const choice = [];
|
|
@@ -433,6 +435,38 @@ var CompletionStreamAccumulator = class _CompletionStreamAccumulator {
|
|
|
433
435
|
}
|
|
434
436
|
this.toolCalls.set(toolCall.id, partial);
|
|
435
437
|
}
|
|
438
|
+
mergeFinalResponse(accumulatedResponse, finalResponse) {
|
|
439
|
+
const accumulatedById = /* @__PURE__ */ new Map();
|
|
440
|
+
const accumulatedByCallId = /* @__PURE__ */ new Map();
|
|
441
|
+
for (const content of accumulatedResponse.choice) {
|
|
442
|
+
if (content.type !== "tool_call") {
|
|
443
|
+
continue;
|
|
444
|
+
}
|
|
445
|
+
accumulatedById.set(content.id, content);
|
|
446
|
+
if (content.callId !== void 0) {
|
|
447
|
+
accumulatedByCallId.set(content.callId, content);
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
return {
|
|
451
|
+
...finalResponse,
|
|
452
|
+
choice: finalResponse.choice.map((content) => {
|
|
453
|
+
if (content.type !== "tool_call" || !isEmptyToolArguments(content.function.arguments)) {
|
|
454
|
+
return content;
|
|
455
|
+
}
|
|
456
|
+
const accumulated = accumulatedById.get(content.id) ?? (content.callId === void 0 ? void 0 : accumulatedByCallId.get(content.callId));
|
|
457
|
+
if (accumulated === void 0 || isEmptyToolArguments(accumulated.function.arguments)) {
|
|
458
|
+
return content;
|
|
459
|
+
}
|
|
460
|
+
return {
|
|
461
|
+
...content,
|
|
462
|
+
function: {
|
|
463
|
+
...content.function,
|
|
464
|
+
arguments: accumulated.function.arguments
|
|
465
|
+
}
|
|
466
|
+
};
|
|
467
|
+
})
|
|
468
|
+
};
|
|
469
|
+
}
|
|
436
470
|
appendReasoning(reasoning, event) {
|
|
437
471
|
const contentType = event.contentType ?? "text";
|
|
438
472
|
if (contentType === "text" || contentType === "summary") {
|
|
@@ -478,6 +512,21 @@ function reasoningDeltaEvent(event) {
|
|
|
478
512
|
if (event.signature !== void 0) mapped.signature = event.signature;
|
|
479
513
|
return mapped;
|
|
480
514
|
}
|
|
515
|
+
function isEmptyToolArguments(value) {
|
|
516
|
+
if (value === void 0 || value === null) {
|
|
517
|
+
return true;
|
|
518
|
+
}
|
|
519
|
+
if (typeof value === "string") {
|
|
520
|
+
return value.trim().length === 0;
|
|
521
|
+
}
|
|
522
|
+
if (Array.isArray(value)) {
|
|
523
|
+
return value.length === 0;
|
|
524
|
+
}
|
|
525
|
+
if (typeof value === "object") {
|
|
526
|
+
return Object.values(value).every((item) => item === void 0);
|
|
527
|
+
}
|
|
528
|
+
return false;
|
|
529
|
+
}
|
|
481
530
|
|
|
482
531
|
// src/agent/request.ts
|
|
483
532
|
var MCP_TOOL_METADATA_KEY = /* @__PURE__ */ Symbol.for("anvia.mcp.tool.metadata");
|
|
@@ -879,17 +928,27 @@ var PromptRequest = class _PromptRequest {
|
|
|
879
928
|
output = error instanceof Error ? error.toString() : String(error);
|
|
880
929
|
}
|
|
881
930
|
}
|
|
931
|
+
let result = toolOutputToText(output);
|
|
932
|
+
let structuredResult = toolOutputToStructuredResult(output);
|
|
882
933
|
if (this.agent.shouldApplyToolMiddleware(toolCall.function.name)) {
|
|
883
|
-
|
|
934
|
+
const middlewareReplacement = await this.runToolResultMiddlewares({
|
|
884
935
|
...hookArgs,
|
|
885
|
-
result
|
|
886
|
-
originalResult:
|
|
936
|
+
result,
|
|
937
|
+
originalResult: result,
|
|
938
|
+
structuredResult,
|
|
939
|
+
originalStructuredResult: structuredResult,
|
|
887
940
|
turn: observation?.turn ?? 0
|
|
888
941
|
});
|
|
942
|
+
if (middlewareReplacement !== void 0) {
|
|
943
|
+
output = middlewareReplacement;
|
|
944
|
+
result = middlewareReplacement;
|
|
945
|
+
structuredResult = void 0;
|
|
946
|
+
}
|
|
889
947
|
}
|
|
890
948
|
const resultAction = await this.activeHook?.onToolResult?.({
|
|
891
949
|
...hookArgs,
|
|
892
|
-
result
|
|
950
|
+
result,
|
|
951
|
+
structuredResult,
|
|
893
952
|
run: runControl
|
|
894
953
|
});
|
|
895
954
|
await toolObservers?.end({
|
|
@@ -898,7 +957,8 @@ var PromptRequest = class _PromptRequest {
|
|
|
898
957
|
toolName: toolCall.function.name,
|
|
899
958
|
internalCallId,
|
|
900
959
|
args,
|
|
901
|
-
result
|
|
960
|
+
result,
|
|
961
|
+
structuredResult,
|
|
902
962
|
skipped,
|
|
903
963
|
toolCallId: toolCall.callId
|
|
904
964
|
});
|
|
@@ -910,7 +970,8 @@ var PromptRequest = class _PromptRequest {
|
|
|
910
970
|
toolName: toolCall.function.name,
|
|
911
971
|
internalCallId,
|
|
912
972
|
args,
|
|
913
|
-
result
|
|
973
|
+
result,
|
|
974
|
+
structuredResult
|
|
914
975
|
};
|
|
915
976
|
if (toolCall.callId !== void 0) {
|
|
916
977
|
resultPayload.toolCallId = toolCall.callId;
|
|
@@ -921,6 +982,7 @@ var PromptRequest = class _PromptRequest {
|
|
|
921
982
|
}
|
|
922
983
|
async runToolResultMiddlewares(args) {
|
|
923
984
|
let result = args.result;
|
|
985
|
+
let replaced = false;
|
|
924
986
|
for (const middleware of [...this.agent.toolMiddlewares, ...this.requestToolMiddlewares]) {
|
|
925
987
|
const replacement = await middleware.onResult?.({
|
|
926
988
|
...args,
|
|
@@ -928,9 +990,10 @@ var PromptRequest = class _PromptRequest {
|
|
|
928
990
|
});
|
|
929
991
|
if (replacement !== void 0) {
|
|
930
992
|
result = replacement;
|
|
993
|
+
replaced = true;
|
|
931
994
|
}
|
|
932
995
|
}
|
|
933
|
-
return result;
|
|
996
|
+
return replaced ? result : void 0;
|
|
934
997
|
}
|
|
935
998
|
async startRunObservers() {
|
|
936
999
|
const failOnObserverError = this.traceOptions?.failOnObserverError === true || this.agent.observers.some((registration) => registration.failOnObserverError === true);
|
|
@@ -1155,6 +1218,12 @@ function normalizePromptInput(prompt) {
|
|
|
1155
1218
|
history: prompt.slice(0, -1)
|
|
1156
1219
|
};
|
|
1157
1220
|
}
|
|
1221
|
+
function toolOutputToText(output) {
|
|
1222
|
+
return typeof output === "string" ? output : toolResultContentToText(output);
|
|
1223
|
+
}
|
|
1224
|
+
function toolOutputToStructuredResult(output) {
|
|
1225
|
+
return typeof output === "string" ? void 0 : output;
|
|
1226
|
+
}
|
|
1158
1227
|
function agentToolEventPayload(toolCall, internalCallId, event) {
|
|
1159
1228
|
if (typeof event.agentId !== "string" || event.agentId.length === 0) {
|
|
1160
1229
|
return void 0;
|
|
@@ -1618,4 +1687,4 @@ export {
|
|
|
1618
1687
|
AgentSession,
|
|
1619
1688
|
AgentBuilder
|
|
1620
1689
|
};
|
|
1621
|
-
//# sourceMappingURL=chunk-
|
|
1690
|
+
//# sourceMappingURL=chunk-GSFQZYS7.js.map
|