@anvia/core 0.1.5 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/index.d.ts +7 -7
- package/dist/agent/index.js +4 -2
- package/dist/{agent-wBc0uM9_.d.ts → agent-ufaeGoaz.d.ts} +15 -5
- package/dist/audio-generation/index.d.ts +1 -1
- package/dist/{chunk-MQVFDXPC.js → chunk-4F7RVGFR.js} +17 -1
- package/dist/chunk-4F7RVGFR.js.map +1 -0
- package/dist/{chunk-CP47FBJV.js → chunk-6GJDBBDC.js} +1 -1
- package/dist/chunk-6GJDBBDC.js.map +1 -0
- package/dist/{chunk-5OVEPVTH.js → chunk-DO4XW2ZB.js} +77 -7
- package/dist/chunk-DO4XW2ZB.js.map +1 -0
- package/dist/{chunk-BT3I6O56.js → chunk-OD6TY44B.js} +1 -1
- package/dist/chunk-OD6TY44B.js.map +1 -0
- package/dist/{chunk-Q234327P.js → chunk-QAPEP4ON.js} +2 -2
- package/dist/{chunk-FHSSO753.js → chunk-QSIIO4YN.js} +3 -3
- package/dist/{chunk-WZTPK5HV.js → chunk-RLA7SST2.js} +12 -4
- package/dist/chunk-RLA7SST2.js.map +1 -0
- package/dist/chunk-RTOGIJH2.js +345 -0
- package/dist/chunk-RTOGIJH2.js.map +1 -0
- package/dist/{chunk-X2LR54ZO.js → chunk-V5EETE3U.js} +6 -2
- package/dist/chunk-V5EETE3U.js.map +1 -0
- package/dist/completion/index.d.ts +2 -2
- package/dist/completion/index.js +1 -1
- package/dist/evals/index.d.ts +4 -4
- package/dist/evals/index.js +6 -6
- package/dist/extractor/index.d.ts +4 -4
- package/dist/extractor/index.js +5 -5
- package/dist/image-generation/index.d.ts +1 -1
- package/dist/index.d.ts +8 -8
- package/dist/index.js +24 -22
- package/dist/loaders/index.d.ts +1 -1
- package/dist/mcp/index.d.ts +4 -4
- package/dist/mcp/index.js +1 -1
- package/dist/memory/index.d.ts +1 -1
- package/dist/{middleware-2iCGCsB6.d.ts → middleware-CKsY_zZE.d.ts} +2 -2
- package/dist/observability/index.d.ts +10 -2
- package/dist/observability/index.js +1 -1
- package/dist/pipeline/index.d.ts +88 -13
- package/dist/pipeline/index.js +1 -1
- package/dist/skills/index.d.ts +4 -4
- package/dist/skills/index.js +2 -2
- package/dist/tool/index.d.ts +5 -5
- package/dist/tool/index.js +2 -2
- package/dist/{tool-DiWtAf_Q.d.ts → tool-FEHplpd9.d.ts} +1 -1
- package/dist/transcription/index.d.ts +1 -1
- package/dist/{types-BrxLd7ay.d.ts → types-BM8-Y8Hy.d.ts} +3 -0
- package/dist/{types-21n32ltl.d.ts → types-CW3K1MJm.d.ts} +1 -1
- package/dist/{types-ChJoZ0OH.d.ts → types-DNHlpDG_.d.ts} +2 -2
- package/dist/vector-store/index.d.ts +20 -3
- package/dist/vector-store/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-5OVEPVTH.js.map +0 -1
- package/dist/chunk-BT3I6O56.js.map +0 -1
- package/dist/chunk-CP47FBJV.js.map +0 -1
- package/dist/chunk-FI2BTRT5.js +0 -86
- package/dist/chunk-FI2BTRT5.js.map +0 -1
- package/dist/chunk-MQVFDXPC.js.map +0 -1
- package/dist/chunk-WZTPK5HV.js.map +0 -1
- package/dist/chunk-X2LR54ZO.js.map +0 -1
- /package/dist/{chunk-Q234327P.js.map → chunk-QAPEP4ON.js.map} +0 -0
- /package/dist/{chunk-FHSSO753.js.map → chunk-QSIIO4YN.js.map} +0 -0
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
|
|
5
|
-
import { b as CompletionModel, j as JsonValue, o as ToolChoice, M as Message } from '../types-
|
|
6
|
-
import { c as McpServer } from '../types-
|
|
3
|
+
import { m as DynamicContextOptions, o as DynamicToolOptions, P as PromptHook, d as AgentEventStore, f as AgentEventStoreOptions, A as Agent } from '../agent-ufaeGoaz.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-ufaeGoaz.js';
|
|
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-DNHlpDG_.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-CKsY_zZE.js';
|
|
9
|
+
import { b as SkillSet } from '../types-CW3K1MJm.js';
|
|
10
|
+
import { A as AnyTool } from '../tool-FEHplpd9.js';
|
|
11
11
|
import { VectorSearchIndex } from '../vector-store/index.js';
|
|
12
12
|
import '@modelcontextprotocol/sdk/client/stdio.js';
|
|
13
13
|
import '@modelcontextprotocol/sdk/client/streamableHttp.js';
|
package/dist/agent/index.js
CHANGED
|
@@ -8,10 +8,11 @@ import {
|
|
|
8
8
|
PromptRequest,
|
|
9
9
|
cancelPrompt,
|
|
10
10
|
createHook,
|
|
11
|
+
requestToolApproval,
|
|
11
12
|
runControl,
|
|
12
13
|
skipTool,
|
|
13
14
|
toolCallControl
|
|
14
|
-
} from "../chunk-
|
|
15
|
+
} from "../chunk-DO4XW2ZB.js";
|
|
15
16
|
import {
|
|
16
17
|
resolveMemoryOptions
|
|
17
18
|
} from "../chunk-XXT2UCAR.js";
|
|
@@ -19,7 +20,7 @@ import "../chunk-YK4WAAS4.js";
|
|
|
19
20
|
import "../chunk-3H7FVGHU.js";
|
|
20
21
|
import "../chunk-445TT5Q5.js";
|
|
21
22
|
import "../chunk-XUUY2L2D.js";
|
|
22
|
-
import "../chunk-
|
|
23
|
+
import "../chunk-6GJDBBDC.js";
|
|
23
24
|
export {
|
|
24
25
|
Agent,
|
|
25
26
|
AgentBuilder,
|
|
@@ -30,6 +31,7 @@ export {
|
|
|
30
31
|
PromptRequest,
|
|
31
32
|
cancelPrompt,
|
|
32
33
|
createHook,
|
|
34
|
+
requestToolApproval,
|
|
33
35
|
resolveMemoryOptions,
|
|
34
36
|
runControl,
|
|
35
37
|
skipTool,
|
|
@@ -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-
|
|
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';
|
|
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-CKsY_zZE.js';
|
|
5
|
+
import { T as Tool, A as AnyTool, d as ToolCallContext } from './tool-FEHplpd9.js';
|
|
6
6
|
import { VectorSearchIndex, VectorFilter, VectorSearchResult } from './vector-store/index.js';
|
|
7
7
|
|
|
8
8
|
type HookAction = {
|
|
@@ -11,6 +11,10 @@ type HookAction = {
|
|
|
11
11
|
type: "terminate";
|
|
12
12
|
reason: string;
|
|
13
13
|
};
|
|
14
|
+
type ToolApprovalRequestOptions = {
|
|
15
|
+
reason?: string;
|
|
16
|
+
rejectMessage?: string;
|
|
17
|
+
};
|
|
14
18
|
type ToolCallHookAction = {
|
|
15
19
|
type: "continue";
|
|
16
20
|
} | {
|
|
@@ -19,7 +23,9 @@ type ToolCallHookAction = {
|
|
|
19
23
|
} | {
|
|
20
24
|
type: "terminate";
|
|
21
25
|
reason: string;
|
|
22
|
-
}
|
|
26
|
+
} | ({
|
|
27
|
+
type: "approval_request";
|
|
28
|
+
} & ToolApprovalRequestOptions);
|
|
23
29
|
type RunControl = {
|
|
24
30
|
continue(): HookAction;
|
|
25
31
|
cancel(reason: string): HookAction;
|
|
@@ -28,6 +34,7 @@ type ToolCallControl = {
|
|
|
28
34
|
run(): ToolCallHookAction;
|
|
29
35
|
skip(reason: string): ToolCallHookAction;
|
|
30
36
|
cancel(reason: string): ToolCallHookAction;
|
|
37
|
+
requestApproval(options?: ToolApprovalRequestOptions): ToolCallHookAction;
|
|
31
38
|
};
|
|
32
39
|
type HookResult = HookAction | undefined;
|
|
33
40
|
type ToolCallHookResult = ToolCallHookAction | undefined;
|
|
@@ -59,6 +66,7 @@ type ToolResultHookArgs = ToolHookArgs & {
|
|
|
59
66
|
declare function createHook<RawResponse = unknown>(hook: PromptHook<RawResponse>): PromptHook<RawResponse>;
|
|
60
67
|
declare function cancelPrompt(reason: string): HookAction;
|
|
61
68
|
declare function skipTool(reason: string): ToolCallHookAction;
|
|
69
|
+
declare function requestToolApproval(options?: ToolApprovalRequestOptions): ToolCallHookAction;
|
|
62
70
|
declare const runControl: RunControl;
|
|
63
71
|
declare const toolCallControl: ToolCallControl;
|
|
64
72
|
interface PromptHook<RawResponse = unknown> {
|
|
@@ -152,6 +160,8 @@ declare class PromptRequest<M extends CompletionModel = CompletionModel> {
|
|
|
152
160
|
stream(): AsyncIterable<AgentStreamEvent>;
|
|
153
161
|
readableStream(): ReadableStream<Uint8Array>;
|
|
154
162
|
private runCompletion;
|
|
163
|
+
private providerTraceRequest;
|
|
164
|
+
private toolTraceMetadata;
|
|
155
165
|
private executeToolCalls;
|
|
156
166
|
private runToolResultMiddlewares;
|
|
157
167
|
private startRunObservers;
|
|
@@ -289,4 +299,4 @@ declare class AgentSession<M extends CompletionModel = CompletionModel> {
|
|
|
289
299
|
clear(): Promise<void>;
|
|
290
300
|
}
|
|
291
301
|
|
|
292
|
-
export { Agent as A,
|
|
302
|
+
export { Agent as A, createHook as B, type CompletionCallHookArgs as C, DEFAULT_MAX_TURNS as D, requestToolApproval as E, runControl as F, skipTool as G, type HookAction as H, toolCallControl as I, type PromptHook as P, type RunControl as R, type ToolApprovalRequestOptions as T, type AgentChildStreamEvent as a, type AgentEventAppendInput as b, type AgentEventRecord as c, type AgentEventStore as d, type AgentEventStoreInclude as e, type AgentEventStoreOptions as f, type AgentEventStoreRegistration as g, type AgentOptions as h, AgentSession as i, type AgentStreamEvent as j, type AgentToolOptions as k, type CompletionResponseHookArgs as l, type DynamicContextOptions as m, type DynamicContextRegistration as n, type DynamicToolOptions as o, type DynamicToolRegistration as p, type HookResult as q, PromptRequest as r, type PromptResponse as s, type ToolCallControl as t, type ToolCallHookAction as u, type ToolCallHookArgs as v, type ToolCallHookResult as w, type ToolHookArgs as x, type ToolResultHookArgs as y, cancelPrompt as z };
|
|
@@ -210,6 +210,22 @@ var InMemoryVectorIndex = class {
|
|
|
210
210
|
async searchIds(request) {
|
|
211
211
|
return (await this.search(request)).map(({ score, id }) => ({ score, id }));
|
|
212
212
|
}
|
|
213
|
+
async inspect(request) {
|
|
214
|
+
const limit = Math.max(0, Math.trunc(request.limit));
|
|
215
|
+
const start = Math.max(0, Math.trunc(Number(request.cursor ?? "0")));
|
|
216
|
+
const documents = this.store.values().filter((document) => matchesVectorFilter(document.metadata, request.filter));
|
|
217
|
+
const page = documents.slice(start, start + limit);
|
|
218
|
+
const nextOffset = start + page.length;
|
|
219
|
+
return {
|
|
220
|
+
items: page.map((document) => ({
|
|
221
|
+
id: document.id,
|
|
222
|
+
document: document.document,
|
|
223
|
+
...document.metadata === void 0 ? {} : { metadata: document.metadata }
|
|
224
|
+
})),
|
|
225
|
+
...nextOffset < documents.length ? { nextCursor: String(nextOffset) } : {},
|
|
226
|
+
totalCount: documents.length
|
|
227
|
+
};
|
|
228
|
+
}
|
|
213
229
|
asTool(options) {
|
|
214
230
|
return createVectorSearchTool(this, options);
|
|
215
231
|
}
|
|
@@ -253,4 +269,4 @@ export {
|
|
|
253
269
|
InMemoryVectorIndex,
|
|
254
270
|
createVectorSearchTool
|
|
255
271
|
};
|
|
256
|
-
//# sourceMappingURL=chunk-
|
|
272
|
+
//# sourceMappingURL=chunk-4F7RVGFR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/vector-store/index.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 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":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/completion/types.ts","../src/completion/documents.ts","../src/completion/request.ts"],"sourcesContent":["export type JsonPrimitive = string | number | boolean | null;\nexport type JsonValue = JsonPrimitive | JsonObject | JsonValue[];\nexport type JsonObject = { [key: string]: JsonValue | undefined };\n\nexport type Document = {\n id: string;\n text: string;\n additionalProps?: Record<string, string>;\n};\n\nexport type Text = {\n type: \"text\";\n text: string;\n signature?: string;\n};\n\nexport type ImageDetail = \"auto\" | \"low\" | \"high\";\n\nexport type ImageContent = {\n type: \"image\";\n source:\n | {\n type: \"url\";\n url: string;\n }\n | {\n type: \"base64\";\n data: string;\n mediaType: string;\n };\n detail?: ImageDetail;\n};\n\nexport type DocumentContent = {\n type: \"document\";\n source:\n | {\n type: \"url\";\n url: string;\n mediaType: string;\n filename?: string;\n }\n | {\n type: \"base64\";\n data: string;\n mediaType: string;\n filename?: string;\n }\n | {\n type: \"text\";\n text: string;\n mediaType?: string;\n filename?: string;\n };\n};\n\nexport type Reasoning = {\n type: \"reasoning\";\n text: string;\n id?: string;\n content?: ReasoningContent[];\n};\n\nexport type ReasoningContent =\n | {\n type: \"text\";\n text: string;\n signature?: string;\n }\n | {\n type: \"summary\";\n text: string;\n }\n | {\n type: \"encrypted\";\n data: string;\n }\n | {\n type: \"redacted\";\n data: string;\n };\n\nexport type ReasoningContentType = ReasoningContent[\"type\"];\n\nexport type ToolFunction = {\n name: string;\n arguments: JsonValue;\n};\n\nexport type ToolCall = {\n type: \"tool_call\";\n id: string;\n callId?: string;\n function: ToolFunction;\n signature?: string;\n additionalParams?: JsonValue;\n};\n\nexport type ToolResultContent =\n | { type: \"text\"; text: string }\n | { type: \"image\"; data: string; mediaType?: string };\n\nexport type ToolResult = {\n type: \"tool_result\";\n id: string;\n callId?: string;\n content: ToolResultContent[];\n};\n\nexport type UserContent = Text | ImageContent | DocumentContent;\nexport type AssistantContent = Text | ToolCall | Reasoning | ImageContent;\nexport type ToolContent = ToolResult;\n\nexport type SystemMessage = {\n role: \"system\";\n content: string;\n};\n\nexport type UserMessage = {\n role: \"user\";\n content: UserContent[];\n};\n\nexport type AssistantMessage = {\n role: \"assistant\";\n id?: string;\n content: AssistantContent[];\n};\n\nexport type ToolMessage = {\n role: \"tool\";\n content: ToolContent[];\n};\n\nexport type Message = SystemMessage | UserMessage | AssistantMessage | ToolMessage;\n\nexport const UserContent = {\n text(text: string): Text {\n return { type: \"text\", text };\n },\n imageUrl(url: string, options: { detail?: ImageDetail } = {}): ImageContent {\n const image: ImageContent = { type: \"image\", source: { type: \"url\", url } };\n if (options.detail !== undefined) {\n image.detail = options.detail;\n }\n return image;\n },\n imageBase64(\n data: string,\n mediaType: string,\n options: { detail?: ImageDetail } = {},\n ): ImageContent {\n const image: ImageContent = {\n type: \"image\",\n source: { type: \"base64\", data, mediaType },\n };\n if (options.detail !== undefined) {\n image.detail = options.detail;\n }\n return image;\n },\n documentUrl(\n url: string,\n mediaType: string,\n options: { filename?: string | undefined } = {},\n ): DocumentContent {\n return {\n type: \"document\",\n source:\n options.filename === undefined\n ? { type: \"url\", url, mediaType }\n : { type: \"url\", url, mediaType, filename: options.filename },\n };\n },\n documentBase64(\n data: string,\n mediaType: string,\n options: { filename?: string | undefined } = {},\n ): DocumentContent {\n return {\n type: \"document\",\n source:\n options.filename === undefined\n ? { type: \"base64\", data, mediaType }\n : { type: \"base64\", data, mediaType, filename: options.filename },\n };\n },\n documentText(text: string): Text {\n return { type: \"text\", text };\n },\n};\n\nexport const ToolContent = {\n toolResult(id: string, content: string | ToolResultContent[], callId?: string): ToolResult {\n const normalized =\n typeof content === \"string\" ? [{ type: \"text\" as const, text: content }] : content;\n return callId === undefined\n ? { type: \"tool_result\", id, content: normalized }\n : { type: \"tool_result\", id, callId, content: normalized };\n },\n};\n\nexport const AssistantContent = {\n text(text: string): Text {\n return { type: \"text\", text };\n },\n imageUrl(url: string, options: { detail?: ImageDetail } = {}): ImageContent {\n const image: ImageContent = { type: \"image\", source: { type: \"url\", url } };\n if (options.detail !== undefined) {\n image.detail = options.detail;\n }\n return image;\n },\n imageBase64(\n data: string,\n mediaType: string,\n options: { detail?: ImageDetail } = {},\n ): ImageContent {\n const image: ImageContent = {\n type: \"image\",\n source: { type: \"base64\", data, mediaType },\n };\n if (options.detail !== undefined) {\n image.detail = options.detail;\n }\n return image;\n },\n reasoning(text: string, id?: string): Reasoning {\n return id === undefined ? { type: \"reasoning\", text } : { type: \"reasoning\", text, id };\n },\n reasoningFromContent(content: ReasoningContent[], id?: string): Reasoning {\n const text = reasoningDisplayText(content);\n const reasoning: Reasoning = { type: \"reasoning\", text, content };\n return id === undefined ? reasoning : { ...reasoning, id };\n },\n reasoningSummary(text: string, id?: string): Reasoning {\n return AssistantContent.reasoningFromContent([{ type: \"summary\", text }], id);\n },\n reasoningEncrypted(data: string, id?: string): Reasoning {\n return AssistantContent.reasoningFromContent([{ type: \"encrypted\", data }], id);\n },\n reasoningRedacted(data: string, id?: string): Reasoning {\n return AssistantContent.reasoningFromContent([{ type: \"redacted\", data }], id);\n },\n toolCall(id: string, name: string, args: JsonValue, callId?: string): ToolCall {\n const base: ToolCall = {\n type: \"tool_call\",\n id,\n function: {\n name,\n arguments: args,\n },\n };\n return callId === undefined ? base : { ...base, callId };\n },\n};\n\nexport function reasoningDisplayText(reasoning: Reasoning | ReasoningContent[]): string {\n const content = Array.isArray(reasoning) ? reasoning : reasoning.content;\n if (content === undefined) {\n return Array.isArray(reasoning) ? \"\" : reasoning.text;\n }\n return content\n .flatMap((item) => {\n if (item.type === \"text\" || item.type === \"summary\") {\n return [item.text];\n }\n return [];\n })\n .join(\"\");\n}\n\nexport const Message = {\n system(content: string): Message {\n return { role: \"system\", content };\n },\n user(content: string | UserContent[]): Message {\n return {\n role: \"user\",\n content: typeof content === \"string\" ? [UserContent.text(content)] : content,\n };\n },\n assistant(content: string | AssistantContent[], id?: string): Message {\n const normalized = typeof content === \"string\" ? [AssistantContent.text(content)] : content;\n return id === undefined\n ? { role: \"assistant\", content: normalized }\n : { role: \"assistant\", id, content: normalized };\n },\n tool(content: ToolContent | ToolContent[]): Message {\n return {\n role: \"tool\",\n content: Array.isArray(content) ? content : [content],\n };\n },\n};\n\nexport type ToolChoice =\n | \"auto\"\n | \"required\"\n | \"none\"\n | {\n type: \"function\";\n name: string;\n };\n\nexport type ToolDefinition = {\n name: string;\n description: string;\n parameters: JsonObject;\n};\n\nexport type Usage = {\n inputTokens: number;\n outputTokens: number;\n totalTokens: number;\n cachedInputTokens: number;\n cacheCreationInputTokens: number;\n};\n\nexport const Usage = {\n empty(): Usage {\n return {\n inputTokens: 0,\n outputTokens: 0,\n totalTokens: 0,\n cachedInputTokens: 0,\n cacheCreationInputTokens: 0,\n };\n },\n add(left: Usage, right: Usage): Usage {\n return {\n inputTokens: left.inputTokens + right.inputTokens,\n outputTokens: left.outputTokens + right.outputTokens,\n totalTokens: left.totalTokens + right.totalTokens,\n cachedInputTokens: left.cachedInputTokens + right.cachedInputTokens,\n cacheCreationInputTokens: left.cacheCreationInputTokens + right.cacheCreationInputTokens,\n };\n },\n};\n\nexport type CompletionRequest = {\n model?: string;\n instructions?: string;\n chatHistory: Message[];\n documents: Document[];\n tools: ToolDefinition[];\n temperature?: number;\n maxTokens?: number;\n toolChoice?: ToolChoice;\n additionalParams?: JsonValue;\n outputSchema?: JsonObject;\n};\n\nexport type CompletionResponse<RawResponse = unknown> = {\n choice: AssistantContent[];\n usage: Usage;\n rawResponse: RawResponse;\n messageId?: string;\n};\n\nexport type CompletionModelCapabilities = {\n streaming: boolean;\n tools: boolean;\n toolChoice: boolean;\n imageInput: boolean;\n documentInput: boolean;\n outputSchema: boolean;\n reasoning: boolean;\n};\n\nexport interface CompletionModel<RawResponse = unknown> {\n readonly provider: string;\n readonly defaultModel: string;\n readonly capabilities: CompletionModelCapabilities;\n traceRequest?(\n request: CompletionRequest,\n options?: { stream?: boolean | undefined },\n ): JsonObject | undefined;\n completion(request: CompletionRequest): Promise<CompletionResponse<RawResponse>>;\n}\n\nexport type CompletionStreamEvent<RawResponse = unknown> =\n | {\n type: \"text_delta\";\n delta: string;\n }\n | {\n type: \"reasoning_delta\";\n delta: string;\n id?: string;\n contentType?: ReasoningContentType;\n signature?: string;\n }\n | {\n type: \"tool_call_delta\";\n id: string;\n callId?: string;\n name?: string;\n argumentsDelta?: string;\n signature?: string;\n }\n | {\n type: \"tool_call\";\n toolCall: ToolCall;\n }\n | {\n type: \"message_id\";\n id: string;\n }\n | {\n type: \"final\";\n response: CompletionResponse<RawResponse>;\n }\n | {\n type: \"error\";\n error: unknown;\n };\n\nexport interface StreamingCompletionModel<RawResponse = unknown>\n extends CompletionModel<RawResponse> {\n streamCompletion(request: CompletionRequest): AsyncIterable<CompletionStreamEvent<RawResponse>>;\n}\n\nexport class CompletionCapabilityError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"CompletionCapabilityError\";\n }\n}\n\nexport function assertCompletionRequestSupported(\n model: CompletionModel,\n request: CompletionRequest,\n options: { streaming?: boolean | undefined } = {},\n): void {\n const modelLabel = `${model.provider}:${request.model ?? model.defaultModel}`;\n const capabilities = model.capabilities;\n\n if (options.streaming === true && !capabilities.streaming) {\n throw new CompletionCapabilityError(`${modelLabel} does not support streaming completions.`);\n }\n\n if (request.tools.length > 0 && !capabilities.tools) {\n throw new CompletionCapabilityError(`${modelLabel} does not support tool definitions.`);\n }\n\n if (request.toolChoice !== undefined && !capabilities.toolChoice) {\n throw new CompletionCapabilityError(`${modelLabel} does not support tool choice.`);\n }\n\n if (request.outputSchema !== undefined && !capabilities.outputSchema) {\n throw new CompletionCapabilityError(`${modelLabel} does not support output schemas.`);\n }\n\n if (!capabilities.imageInput && requestHasImageInput(request)) {\n throw new CompletionCapabilityError(`${modelLabel} does not support image input.`);\n }\n\n if (!capabilities.documentInput && requestHasFileDocumentInput(request)) {\n throw new CompletionCapabilityError(`${modelLabel} does not support document file input.`);\n }\n}\n\nexport function textFromAssistantContent(content: AssistantContent[]): string {\n return content.flatMap((item) => (item.type === \"text\" ? [item.text] : [])).join(\"\\n\");\n}\n\nfunction requestHasImageInput(request: CompletionRequest): boolean {\n return request.chatHistory.some((message) =>\n message.role === \"system\" ? false : message.content.some((content) => content.type === \"image\"),\n );\n}\n\nfunction requestHasFileDocumentInput(request: CompletionRequest): boolean {\n return request.chatHistory.some((message) =>\n message.role === \"user\"\n ? message.content.some(\n (content) => content.type === \"document\" && content.source.type !== \"text\",\n )\n : false,\n );\n}\n","import { type Document, Message, type Message as MessageType } from \"./types\";\n\nexport function normalizeDocuments(documents: Document[]): MessageType | undefined {\n if (documents.length === 0) {\n return undefined;\n }\n\n return Message.user(documents.map(formatDocument).join(\"\\n\"));\n}\n\nexport function formatDocument(document: Document): string {\n return `<file id: ${document.id}>\\n${formatDocumentBody(document)}\\n</file>\\n`;\n}\n\nfunction formatDocumentBody(document: Document): string {\n const metadata = formatMetadata(document.additionalProps);\n return metadata === undefined ? document.text : `${metadata}\\n${document.text}`;\n}\n\nfunction formatMetadata(additionalProps: Record<string, string> | undefined): string | undefined {\n if (additionalProps === undefined) {\n return undefined;\n }\n\n const entries = Object.entries(additionalProps).sort(([left], [right]) =>\n left.localeCompare(right),\n );\n if (entries.length === 0) {\n return undefined;\n }\n\n const metadata = entries.map(([key, value]) => `${key}: ${JSON.stringify(value)}`).join(\" \");\n return `<metadata ${metadata} />`;\n}\n","import type {\n CompletionModel,\n CompletionRequest,\n CompletionResponse,\n Document,\n JsonObject,\n JsonValue,\n Message as MessageType,\n ToolChoice,\n ToolDefinition,\n} from \"./types\";\nimport { assertCompletionRequestSupported } from \"./types\";\n\nexport class CompletionRequestBuilder<M extends CompletionModel = CompletionModel> {\n private requestModel: string | undefined;\n private instructionBlocks: string[] = [];\n private history: MessageType[] = [];\n private docs: Document[] = [];\n private toolDefs: ToolDefinition[] = [];\n private temp: number | undefined;\n private maxTokenCount: number | undefined;\n private choice: ToolChoice | undefined;\n private params: JsonValue | undefined;\n private schema: JsonObject | undefined;\n\n constructor(\n private readonly model: M,\n private readonly promptMessage: MessageType,\n ) {}\n\n modelOverride(model: string | undefined): this {\n this.requestModel = model;\n return this;\n }\n\n instructions(instructions: string | undefined): this {\n if (instructions !== undefined && instructions.length > 0) {\n this.instructionBlocks.push(instructions);\n }\n return this;\n }\n\n messages(messages: MessageType[]): this {\n this.history.push(...messages);\n return this;\n }\n\n documents(documents: Document[]): this {\n this.docs.push(...documents);\n return this;\n }\n\n tools(tools: ToolDefinition[]): this {\n this.toolDefs.push(...tools);\n return this;\n }\n\n temperature(temperature: number | undefined): this {\n this.temp = temperature;\n return this;\n }\n\n maxTokens(maxTokens: number | undefined): this {\n this.maxTokenCount = maxTokens;\n return this;\n }\n\n toolChoice(toolChoice: ToolChoice | undefined): this {\n this.choice = toolChoice;\n return this;\n }\n\n additionalParams(additionalParams: JsonValue | undefined): this {\n this.params = additionalParams;\n return this;\n }\n\n outputSchema(outputSchema: JsonObject | undefined): this {\n this.schema = outputSchema;\n return this;\n }\n\n build(): CompletionRequest {\n const instructions = this.buildInstructions();\n const request: CompletionRequest = {\n chatHistory: [...this.history, this.promptMessage],\n documents: [...this.docs],\n tools: [...this.toolDefs],\n };\n\n if (this.requestModel !== undefined) request.model = this.requestModel;\n if (instructions !== undefined) request.instructions = instructions;\n if (this.temp !== undefined) request.temperature = this.temp;\n if (this.maxTokenCount !== undefined) request.maxTokens = this.maxTokenCount;\n if (this.choice !== undefined) request.toolChoice = this.choice;\n if (this.params !== undefined) request.additionalParams = this.params;\n if (this.schema !== undefined) request.outputSchema = this.schema;\n\n return request;\n }\n\n async send(): Promise<CompletionResponse> {\n const request = this.build();\n assertCompletionRequestSupported(this.model, request);\n return this.model.completion(request);\n }\n\n private buildInstructions(): string | undefined {\n return this.instructionBlocks.length === 0 ? undefined : this.instructionBlocks.join(\"\\n\\n\");\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
Usage,
|
|
22
22
|
assertCompletionRequestSupported,
|
|
23
23
|
textFromAssistantContent
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-6GJDBBDC.js";
|
|
25
25
|
|
|
26
26
|
// src/agent/agent.ts
|
|
27
27
|
import { z } from "zod";
|
|
@@ -228,6 +228,13 @@ function cancelPrompt(reason) {
|
|
|
228
228
|
function skipTool(reason) {
|
|
229
229
|
return { type: "skip", reason };
|
|
230
230
|
}
|
|
231
|
+
function requestToolApproval(options = {}) {
|
|
232
|
+
return {
|
|
233
|
+
type: "approval_request",
|
|
234
|
+
...options.reason === void 0 ? {} : { reason: options.reason },
|
|
235
|
+
...options.rejectMessage === void 0 ? {} : { rejectMessage: options.rejectMessage }
|
|
236
|
+
};
|
|
237
|
+
}
|
|
231
238
|
var runControl = {
|
|
232
239
|
continue() {
|
|
233
240
|
return { type: "continue" };
|
|
@@ -245,6 +252,9 @@ var toolCallControl = {
|
|
|
245
252
|
},
|
|
246
253
|
cancel(reason) {
|
|
247
254
|
return { type: "terminate", reason };
|
|
255
|
+
},
|
|
256
|
+
requestApproval(options) {
|
|
257
|
+
return requestToolApproval(options);
|
|
248
258
|
}
|
|
249
259
|
};
|
|
250
260
|
|
|
@@ -470,6 +480,7 @@ function reasoningDeltaEvent(event) {
|
|
|
470
480
|
}
|
|
471
481
|
|
|
472
482
|
// src/agent/request.ts
|
|
483
|
+
var MCP_TOOL_METADATA_KEY = /* @__PURE__ */ Symbol.for("anvia.mcp.tool.metadata");
|
|
473
484
|
var PromptRequest = class _PromptRequest {
|
|
474
485
|
constructor(agent, promptMessage, initialHistory = [], memoryContext = void 0) {
|
|
475
486
|
this.agent = agent;
|
|
@@ -578,7 +589,8 @@ var PromptRequest = class _PromptRequest {
|
|
|
578
589
|
void 0,
|
|
579
590
|
{
|
|
580
591
|
turn: currentTurns,
|
|
581
|
-
runObservers
|
|
592
|
+
runObservers,
|
|
593
|
+
toolDefinitions: request.tools
|
|
582
594
|
}
|
|
583
595
|
);
|
|
584
596
|
const toolMessage = Message.tool(toolResults);
|
|
@@ -630,9 +642,16 @@ var PromptRequest = class _PromptRequest {
|
|
|
630
642
|
const toolDefs = await this.fetchToolDefinitions(ragText);
|
|
631
643
|
const request = new CompletionRequestBuilder(this.agent.model, prompt).instructions(this.agent.instructions).messages(historyForRequest).documents([...this.agent.staticContext, ...dynamicContext]).tools(toolDefs).temperature(this.agent.temperature).maxTokens(this.agent.maxTokens).additionalParams(this.agent.additionalParams).toolChoice(this.agent.toolChoice).outputSchema(this.agent.outputSchema).build();
|
|
632
644
|
assertCompletionRequestSupported(this.agent.model, request, { streaming: true });
|
|
645
|
+
const providerRequest = this.providerTraceRequest(request, { stream: true });
|
|
633
646
|
const generationObservers = await runObservers.startGeneration({
|
|
634
647
|
turn: currentTurns,
|
|
635
|
-
request
|
|
648
|
+
request,
|
|
649
|
+
...providerRequest === void 0 ? {} : { providerRequest },
|
|
650
|
+
modelInfo: {
|
|
651
|
+
provider: this.agent.model.provider,
|
|
652
|
+
defaultModel: this.agent.model.defaultModel,
|
|
653
|
+
capabilities: this.agent.model.capabilities
|
|
654
|
+
}
|
|
636
655
|
});
|
|
637
656
|
const accumulator = new CompletionStreamAccumulator();
|
|
638
657
|
const generationStartedAt = Date.now();
|
|
@@ -708,7 +727,8 @@ var PromptRequest = class _PromptRequest {
|
|
|
708
727
|
},
|
|
709
728
|
{
|
|
710
729
|
turn: currentTurns,
|
|
711
|
-
runObservers
|
|
730
|
+
runObservers,
|
|
731
|
+
toolDefinitions: request.tools
|
|
712
732
|
}
|
|
713
733
|
);
|
|
714
734
|
toolResultsPromise.then(
|
|
@@ -737,7 +757,17 @@ var PromptRequest = class _PromptRequest {
|
|
|
737
757
|
}
|
|
738
758
|
async runCompletion(request, turn, runObservers) {
|
|
739
759
|
assertCompletionRequestSupported(this.agent.model, request);
|
|
740
|
-
const
|
|
760
|
+
const providerRequest = this.providerTraceRequest(request);
|
|
761
|
+
const generationObservers = await runObservers.startGeneration({
|
|
762
|
+
turn,
|
|
763
|
+
request,
|
|
764
|
+
...providerRequest === void 0 ? {} : { providerRequest },
|
|
765
|
+
modelInfo: {
|
|
766
|
+
provider: this.agent.model.provider,
|
|
767
|
+
defaultModel: this.agent.model.defaultModel,
|
|
768
|
+
capabilities: this.agent.model.capabilities
|
|
769
|
+
}
|
|
770
|
+
});
|
|
741
771
|
try {
|
|
742
772
|
const response = await this.agent.model.completion(request);
|
|
743
773
|
await generationObservers.end({ turn, response });
|
|
@@ -747,6 +777,26 @@ var PromptRequest = class _PromptRequest {
|
|
|
747
777
|
throw error;
|
|
748
778
|
}
|
|
749
779
|
}
|
|
780
|
+
providerTraceRequest(request, options = {}) {
|
|
781
|
+
try {
|
|
782
|
+
return this.agent.model.traceRequest?.(request, options);
|
|
783
|
+
} catch (error) {
|
|
784
|
+
return {
|
|
785
|
+
error: error instanceof Error ? error.message : String(error)
|
|
786
|
+
};
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
toolTraceMetadata(tool) {
|
|
790
|
+
if (tool === void 0) {
|
|
791
|
+
return void 0;
|
|
792
|
+
}
|
|
793
|
+
const metadata = tool[MCP_TOOL_METADATA_KEY];
|
|
794
|
+
const mcpMetadata = typeof metadata === "object" && metadata !== null ? metadata : void 0;
|
|
795
|
+
return {
|
|
796
|
+
approvalRequired: tool.approval !== void 0,
|
|
797
|
+
...typeof mcpMetadata?.serverName === "string" && mcpMetadata.serverName.length > 0 ? { mcpServerName: mcpMetadata.serverName } : {}
|
|
798
|
+
};
|
|
799
|
+
}
|
|
750
800
|
async executeToolCalls(toolCalls, newMessages, onResult, onStreamEvent, observation) {
|
|
751
801
|
return mapWithConcurrency(toolCalls, this.concurrency, async (toolCall) => {
|
|
752
802
|
const args = JSON.stringify(toolCall.function.arguments ?? {});
|
|
@@ -759,13 +809,20 @@ var PromptRequest = class _PromptRequest {
|
|
|
759
809
|
if (toolCall.callId !== void 0) {
|
|
760
810
|
hookArgs.toolCallId = toolCall.callId;
|
|
761
811
|
}
|
|
812
|
+
const tool = this.agent.getTool(toolCall.function.name);
|
|
813
|
+
const toolDefinition = observation?.toolDefinitions?.find(
|
|
814
|
+
(definition) => definition.name === toolCall.function.name
|
|
815
|
+
);
|
|
816
|
+
const toolMetadata = this.toolTraceMetadata(tool);
|
|
762
817
|
const toolObservers = await observation?.runObservers.startTool({
|
|
763
818
|
turn: observation.turn,
|
|
764
819
|
toolCall,
|
|
765
820
|
toolName: toolCall.function.name,
|
|
766
821
|
internalCallId,
|
|
767
822
|
args,
|
|
768
|
-
toolCallId: toolCall.callId
|
|
823
|
+
toolCallId: toolCall.callId,
|
|
824
|
+
...toolDefinition === void 0 ? {} : { toolDefinition },
|
|
825
|
+
...toolMetadata === void 0 ? {} : { toolMetadata }
|
|
769
826
|
});
|
|
770
827
|
const callAction = await this.activeHook?.onToolCall?.({
|
|
771
828
|
...hookArgs,
|
|
@@ -782,6 +839,18 @@ var PromptRequest = class _PromptRequest {
|
|
|
782
839
|
);
|
|
783
840
|
throw this.cancelled(newMessages, callAction.reason);
|
|
784
841
|
}
|
|
842
|
+
if (callAction?.type === "approval_request") {
|
|
843
|
+
const reason = `Tool approval was requested for ${toolCall.function.name}, but no approval handler is installed.`;
|
|
844
|
+
await this.recordToolError(
|
|
845
|
+
toolObservers,
|
|
846
|
+
observation?.turn,
|
|
847
|
+
toolCall,
|
|
848
|
+
internalCallId,
|
|
849
|
+
args,
|
|
850
|
+
reason
|
|
851
|
+
);
|
|
852
|
+
throw this.cancelled(newMessages, reason);
|
|
853
|
+
}
|
|
785
854
|
let output;
|
|
786
855
|
let skipped = false;
|
|
787
856
|
if (callAction?.type === "skip") {
|
|
@@ -1540,6 +1609,7 @@ export {
|
|
|
1540
1609
|
createHook,
|
|
1541
1610
|
cancelPrompt,
|
|
1542
1611
|
skipTool,
|
|
1612
|
+
requestToolApproval,
|
|
1543
1613
|
runControl,
|
|
1544
1614
|
toolCallControl,
|
|
1545
1615
|
PromptRequest,
|
|
@@ -1548,4 +1618,4 @@ export {
|
|
|
1548
1618
|
AgentSession,
|
|
1549
1619
|
AgentBuilder
|
|
1550
1620
|
};
|
|
1551
|
-
//# sourceMappingURL=chunk-
|
|
1621
|
+
//# sourceMappingURL=chunk-DO4XW2ZB.js.map
|