@anvia/core 0.4.1 → 0.5.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/dist/agent/index.d.ts +14 -5
- package/dist/agent/index.js +9 -4
- package/dist/{agent-B-ls5y_g.d.ts → agent-CWGuTdMJ.d.ts} +80 -6
- package/dist/{chunk-BD66WU2B.js → chunk-365W6FJD.js} +19 -7
- package/dist/chunk-365W6FJD.js.map +1 -0
- package/dist/{chunk-L6JCKFAX.js → chunk-DUP7FMAF.js} +2 -2
- package/dist/{chunk-TVIADATY.js → chunk-ORLEOXD7.js} +246 -37
- package/dist/chunk-ORLEOXD7.js.map +1 -0
- package/dist/{chunk-OIA4CN5V.js → chunk-P425B6GR.js} +30 -1
- package/dist/chunk-P425B6GR.js.map +1 -0
- package/dist/{chunk-CY7SB5FG.js → chunk-S7EOE6EC.js} +6 -2
- package/dist/{chunk-CY7SB5FG.js.map → chunk-S7EOE6EC.js.map} +1 -1
- package/dist/{chunk-4PHDOEKY.js → chunk-Z7HY4WU7.js} +3 -3
- package/dist/evals/index.d.ts +2 -2
- package/dist/evals/index.js +5 -5
- package/dist/extractor/index.d.ts +2 -2
- package/dist/extractor/index.js +5 -5
- package/dist/index.d.ts +3 -3
- package/dist/index.js +10 -6
- package/dist/internal/agent.d.ts +2 -2
- 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/middleware-qfm1EFKK.d.ts +102 -0
- package/dist/pipeline/index.d.ts +2 -2
- package/dist/skills/index.js +3 -3
- package/dist/tool/index.d.ts +1 -1
- package/dist/tool/index.js +4 -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-BD66WU2B.js.map +0 -1
- package/dist/chunk-OIA4CN5V.js.map +0 -1
- package/dist/chunk-TVIADATY.js.map +0 -1
- package/dist/middleware-CGiEIaBx.d.ts +0 -53
- /package/dist/{chunk-L6JCKFAX.js.map → chunk-DUP7FMAF.js.map} +0 -0
- /package/dist/{chunk-4PHDOEKY.js.map → chunk-Z7HY4WU7.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/agent/errors.ts","../src/agent/hooks.ts","../src/agent/agent.ts","../src/agent/ids.ts","../src/internal/async-queue.ts","../src/observability/group.ts","../src/agent/request-memory.ts","../src/agent/retrieval.ts","../src/agent/utils.ts","../src/agent/stream-accumulator.ts","../src/agent/tool-execution.ts","../src/agent/request.ts"],"sourcesContent":["import type { Message } from \"../completion/index\";\n\nexport class MaxTurnsError extends Error {\n constructor(\n readonly maxTurns: number,\n readonly chatHistory: Message[],\n readonly prompt: Message,\n ) {\n super(`Reached max turn limit: ${maxTurns}`);\n this.name = \"MaxTurnsError\";\n }\n}\n\nexport class PromptCancelledError extends Error {\n constructor(\n readonly chatHistory: Message[],\n readonly reason: string,\n ) {\n super(`Prompt cancelled: ${reason}`);\n this.name = \"PromptCancelledError\";\n }\n}\n","import type { CompletionResponse, Message, ToolResultContent, Usage } from \"../completion/index\";\n\nexport type HookAction = { type: \"continue\" } | { type: \"terminate\"; reason: string };\nexport type ToolApprovalRequestOptions = {\n reason?: string;\n rejectMessage?: string;\n};\n\nexport type ToolCallHookAction =\n | { type: \"continue\" }\n | { type: \"skip\"; reason: string }\n | { type: \"terminate\"; reason: string }\n | ({ type: \"approval_request\" } & ToolApprovalRequestOptions);\n\nexport type RunControl = {\n continue(): HookAction;\n cancel(reason: string): HookAction;\n};\n\nexport type ToolCallControl = {\n run(): ToolCallHookAction;\n skip(reason: string): ToolCallHookAction;\n cancel(reason: string): ToolCallHookAction;\n requestApproval(options?: ToolApprovalRequestOptions): ToolCallHookAction;\n};\n\nexport type HookResult = HookAction | undefined;\nexport type ToolCallHookResult = ToolCallHookAction | undefined;\n\ntype HookCallback<Args> = (\n args: Args,\n) => HookAction | Promise<HookAction | undefined> | Promise<void> | void;\ntype ToolCallHookCallback<Args> = (\n args: Args,\n) => ToolCallHookAction | Promise<ToolCallHookAction | undefined> | Promise<void> | void;\n\nexport type CompletionCallHookArgs = {\n prompt: Message;\n history: Message[];\n run: RunControl;\n};\n\nexport type RunStartHookArgs = {\n prompt: Message;\n history: Message[];\n maxTurns: number;\n run: RunControl;\n};\n\nexport type RunEndHookArgs = {\n output: string;\n usage: Usage;\n messages: Message[];\n run: RunControl;\n};\n\nexport type RunErrorHookArgs = {\n error: unknown;\n usage: Usage;\n messages: Message[];\n run: RunControl;\n};\n\nexport type TurnStartHookArgs = {\n turn: number;\n prompt: Message;\n history: Message[];\n run: RunControl;\n};\n\nexport type TurnEndHookArgs<RawResponse = unknown> = {\n turn: number;\n response: CompletionResponse<RawResponse>;\n run: RunControl;\n};\n\nexport type CompletionResponseHookArgs<RawResponse = unknown> = {\n prompt: Message;\n response: CompletionResponse<RawResponse>;\n run: RunControl;\n};\n\nexport type CompletionErrorHookArgs = {\n prompt: Message;\n error: unknown;\n run: RunControl;\n};\n\nexport type ToolHookArgs = {\n toolName: string;\n toolCallId?: string;\n internalCallId: string;\n args: string;\n};\n\nexport type ToolCallHookArgs = ToolHookArgs & {\n tool: ToolCallControl;\n};\n\nexport type ToolResultHookArgs = ToolHookArgs & {\n result: string;\n structuredResult?: ToolResultContent[] | undefined;\n run: RunControl;\n};\n\nexport type ToolErrorHookArgs = ToolHookArgs & {\n error: unknown;\n run: RunControl;\n};\n\nexport function createHook<RawResponse = unknown>(\n hook: PromptHook<RawResponse>,\n): PromptHook<RawResponse> {\n return hook;\n}\n\nexport function cancelPrompt(reason: string): HookAction {\n return { type: \"terminate\", reason };\n}\n\nexport function skipTool(reason: string): ToolCallHookAction {\n return { type: \"skip\", reason };\n}\n\nexport function requestToolApproval(options: ToolApprovalRequestOptions = {}): ToolCallHookAction {\n return {\n type: \"approval_request\",\n ...(options.reason === undefined ? {} : { reason: options.reason }),\n ...(options.rejectMessage === undefined ? {} : { rejectMessage: options.rejectMessage }),\n };\n}\n\nexport const runControl: RunControl = {\n continue() {\n return { type: \"continue\" };\n },\n cancel(reason: string) {\n return cancelPrompt(reason);\n },\n};\n\nexport const toolCallControl: ToolCallControl = {\n run() {\n return { type: \"continue\" };\n },\n skip(reason: string) {\n return skipTool(reason);\n },\n cancel(reason: string) {\n return { type: \"terminate\", reason };\n },\n requestApproval(options) {\n return requestToolApproval(options);\n },\n};\n\nexport interface PromptHook<RawResponse = unknown> {\n onRunStart?: HookCallback<RunStartHookArgs>;\n onRunEnd?: HookCallback<RunEndHookArgs>;\n onRunError?: HookCallback<RunErrorHookArgs>;\n onTurnStart?: HookCallback<TurnStartHookArgs>;\n onTurnEnd?: HookCallback<TurnEndHookArgs<RawResponse>>;\n onCompletionCall?: HookCallback<CompletionCallHookArgs>;\n onCompletionResponse?: HookCallback<CompletionResponseHookArgs<RawResponse>>;\n onCompletionError?: HookCallback<CompletionErrorHookArgs>;\n onToolCall?: ToolCallHookCallback<ToolCallHookArgs>;\n onToolResult?: HookCallback<ToolResultHookArgs>;\n onToolError?: HookCallback<ToolErrorHookArgs>;\n}\n","import { z } from \"zod\";\nimport type {\n CompletionModel,\n Document,\n JsonObject,\n JsonValue,\n Message as MessageType,\n ToolChoice,\n} from \"../completion/index\";\nimport type { MemoryRegistration, SessionOptions } from \"../memory\";\nimport type { AgentObserverRegistration } from \"../observability\";\nimport { createTool } from \"../tool/create-tool\";\nimport type { ToolSearchDocument } from \"../tool/dynamic-tools\";\nimport type { AgentMiddleware } from \"../tool/middleware\";\nimport { isSkillTool } from \"../tool/skill-tool-marker\";\nimport type { AnyTool, NormalizedToolOutput, Tool, ToolCallContext } from \"../tool/tool\";\nimport { ToolSet } from \"../tool/tool-set\";\nimport type { VectorFilter, VectorSearchIndex, VectorSearchResult } from \"../vector-store\";\nimport type { PromptHook } from \"./hooks\";\nimport { normalizeAgentId } from \"./ids\";\nimport { PromptRequest } from \"./request\";\nimport { isStreamingCompletionModel } from \"./utils\";\n\nexport type AgentOptions<M extends CompletionModel = CompletionModel> = {\n id: string;\n name?: string | undefined;\n description?: string | undefined;\n model: M;\n instructions?: string | undefined;\n staticContext?: Document[];\n temperature?: number | undefined;\n maxTokens?: number | undefined;\n additionalParams?: JsonValue | undefined;\n toolSet?: ToolSet | undefined;\n toolChoice?: ToolChoice | undefined;\n defaultMaxTurns?: number | undefined;\n hook?: PromptHook | undefined;\n outputSchema?: JsonObject | undefined;\n observers?: AgentObserverRegistration[] | undefined;\n dynamicContexts?: DynamicContextRegistration[] | undefined;\n dynamicTools?: DynamicToolRegistration[] | undefined;\n middlewares?: AgentMiddleware[] | undefined;\n /**\n * @deprecated Use `middlewares` instead.\n */\n toolMiddlewares?: AgentMiddleware[] | undefined;\n memory?: MemoryRegistration | undefined;\n eventStore?: AgentEventStoreRegistration | undefined;\n};\n\nexport const DEFAULT_MAX_TURNS = 20;\n\nexport type AgentToolOptions = {\n name: string;\n description?: string | undefined;\n maxTurns?: number | undefined;\n stream?: boolean | undefined;\n};\n\nexport type AgentEventStoreInclude = \"all\" | \"agent_tool_events\";\n\nexport type AgentEventStoreOptions = {\n include?: AgentEventStoreInclude | undefined;\n};\n\nexport type AgentEventAppendInput = {\n runId: string;\n agentId: string;\n agentName?: string | undefined;\n turn?: number | undefined;\n toolName?: string | undefined;\n toolCallId?: string | undefined;\n internalCallId?: string | undefined;\n event: unknown;\n};\n\nexport type AgentEventRecord = AgentEventAppendInput & {\n createdAt?: Date | undefined;\n};\n\nexport interface AgentEventStore {\n append(input: AgentEventAppendInput): Promise<void>;\n load(runId: string): Promise<AgentEventRecord[]>;\n clear?(runId: string): Promise<void>;\n}\n\nexport type AgentEventStoreRegistration = {\n store: AgentEventStore;\n options: Required<AgentEventStoreOptions>;\n};\n\nexport type DynamicContextOptions<T = unknown> = {\n topK: number;\n threshold?: number | undefined;\n filter?: VectorFilter | undefined;\n format?: ((result: VectorSearchResult<T>) => Document) | undefined;\n};\n\nexport type DynamicContextRegistration<T = unknown> = {\n index: VectorSearchIndex<T>;\n options: DynamicContextOptions<T>;\n};\n\nexport type DynamicToolOptions = {\n topK: number;\n threshold?: number | undefined;\n filter?: VectorFilter | undefined;\n};\n\nexport type DynamicToolRegistration = {\n index: VectorSearchIndex<ToolSearchDocument>;\n options: DynamicToolOptions;\n};\n\nexport class Agent<M extends CompletionModel = CompletionModel> {\n readonly id: string;\n readonly name: string | undefined;\n readonly description: string | undefined;\n readonly model: M;\n readonly instructions: string | undefined;\n readonly staticContext: Document[];\n readonly temperature: number | undefined;\n readonly maxTokens: number | undefined;\n readonly additionalParams: JsonValue | undefined;\n readonly toolSet: ToolSet;\n readonly toolChoice: ToolChoice | undefined;\n readonly defaultMaxTurns: number | undefined;\n readonly hook: PromptHook | undefined;\n readonly outputSchema: JsonObject | undefined;\n readonly observers: AgentObserverRegistration[];\n readonly dynamicContexts: DynamicContextRegistration[];\n readonly dynamicTools: DynamicToolRegistration[];\n readonly middlewares: AgentMiddleware[];\n /**\n * @deprecated Use `middlewares` instead.\n */\n readonly toolMiddlewares: AgentMiddleware[];\n readonly memory: MemoryRegistration | undefined;\n readonly eventStore: AgentEventStoreRegistration | undefined;\n\n constructor(options: AgentOptions<M>) {\n this.id = normalizeAgentId(options.id);\n this.name = options.name;\n this.description = options.description;\n this.model = options.model;\n this.instructions = options.instructions;\n this.staticContext = options.staticContext ?? [];\n this.temperature = options.temperature;\n this.maxTokens = options.maxTokens;\n this.additionalParams = options.additionalParams;\n this.toolSet = options.toolSet ?? new ToolSet();\n this.toolChoice = options.toolChoice;\n this.defaultMaxTurns = options.defaultMaxTurns ?? DEFAULT_MAX_TURNS;\n this.hook = options.hook;\n this.outputSchema = options.outputSchema;\n this.observers = options.observers ?? [];\n this.dynamicContexts = options.dynamicContexts ?? [];\n this.dynamicTools = options.dynamicTools ?? [];\n this.middlewares = options.middlewares ?? options.toolMiddlewares ?? [];\n this.toolMiddlewares = this.middlewares;\n this.memory = options.memory;\n this.eventStore = options.eventStore;\n }\n\n prompt(prompt: string | MessageType | MessageType[]): PromptRequest<M> {\n return PromptRequest.fromAgent(this, prompt);\n }\n\n session(sessionId: string, options: SessionOptions = {}): AgentSession<M> {\n if (this.memory === undefined) {\n throw new Error(`Agent \"${this.id}\" has no memory store configured.`);\n }\n const normalized = sessionId.trim();\n if (normalized.length === 0) {\n throw new TypeError(\"Session id must be a non-empty string.\");\n }\n return new AgentSession(this, {\n sessionId: normalized,\n ...(options.userId === undefined ? {} : { userId: options.userId }),\n ...(options.metadata === undefined ? {} : { metadata: options.metadata }),\n });\n }\n\n asTool(options: AgentToolOptions): Tool<{ prompt: string }, string> {\n const description =\n options.description ?? this.description ?? `Prompt the ${options.name} agent.`;\n\n return createTool({\n name: options.name,\n description,\n input: z.object({\n prompt: z.string().describe(\"The prompt to send to the agent.\"),\n }),\n output: z.string(),\n execute: async ({ prompt }, context: ToolCallContext) => {\n const request = this.prompt(prompt);\n const childRequest =\n options.maxTurns === undefined ? request : request.maxTurns(options.maxTurns);\n if (\n options.stream === true &&\n context.emitStreamEvent !== undefined &&\n this.model.capabilities.streaming &&\n isStreamingCompletionModel(this.model)\n ) {\n let output = \"\";\n for await (const event of childRequest.stream()) {\n await context.emitStreamEvent({\n agentId: this.id,\n ...(this.name === undefined ? {} : { agentName: this.name }),\n event,\n });\n if (event.type === \"final\") {\n output = event.output;\n }\n }\n return output;\n }\n const response = await childRequest.send();\n return response.output;\n },\n });\n }\n\n getTool(toolName: string): AnyTool | undefined {\n const staticTool = this.toolSet.get(toolName);\n if (staticTool !== undefined) {\n return staticTool;\n }\n\n for (const registration of this.dynamicTools) {\n const dynamicTool = dynamicToolSetFromIndex(registration.index)?.get(toolName);\n if (dynamicTool !== undefined) {\n return dynamicTool;\n }\n }\n\n return undefined;\n }\n\n async callTool(\n toolName: string,\n args: string,\n context?: ToolCallContext,\n ): Promise<NormalizedToolOutput> {\n if (this.toolSet.contains(toolName)) {\n return this.toolSet.call(toolName, args, context);\n }\n\n for (const registration of this.dynamicTools) {\n const toolSet = dynamicToolSetFromIndex(registration.index);\n if (toolSet?.contains(toolName)) {\n return toolSet.call(toolName, args, context);\n }\n }\n\n return this.toolSet.call(toolName, args, context);\n }\n\n shouldApplyToolMiddleware(toolName: string): boolean {\n return !isSkillTool(this.getTool(toolName));\n }\n}\n\nexport class AgentSession<M extends CompletionModel = CompletionModel> {\n constructor(\n private readonly agent: Agent<M>,\n private readonly context: {\n sessionId: string;\n userId?: string | undefined;\n metadata?: JsonObject | undefined;\n },\n ) {}\n\n prompt(prompt: string | MessageType): PromptRequest<M> {\n if (Array.isArray(prompt)) {\n throw new TypeError(\"AgentSession.prompt does not accept Message[] transcripts.\");\n }\n return PromptRequest.fromAgent(this.agent, prompt, { memoryContext: this.context });\n }\n\n async messages(): Promise<MessageType[]> {\n const memory = this.agent.memory;\n if (memory === undefined) {\n throw new Error(`Agent \"${this.agent.id}\" has no memory store configured.`);\n }\n return memory.store.load(this.context);\n }\n\n async clear(): Promise<void> {\n const memory = this.agent.memory;\n if (memory === undefined) {\n throw new Error(`Agent \"${this.agent.id}\" has no memory store configured.`);\n }\n await memory.store.clear(this.context);\n }\n}\n\nfunction dynamicToolSetFromIndex(\n index: VectorSearchIndex<ToolSearchDocument>,\n): ToolSet | undefined {\n const maybeIndex = index as { toolSet?: unknown };\n return maybeIndex.toolSet instanceof ToolSet ? maybeIndex.toolSet : undefined;\n}\n","export function normalizeAgentId(id: string): string {\n if (typeof id !== \"string\") {\n throw new TypeError(\"Agent id must be a string.\");\n }\n\n const normalized = id.trim();\n if (normalized.length === 0) {\n throw new TypeError(\"Agent id must be a non-empty string.\");\n }\n\n return normalized;\n}\n","type AsyncQueueWaiter<T> = {\n resolve: (result: IteratorResult<T>) => void;\n reject: (error: unknown) => void;\n};\n\nexport type AsyncQueue<T> = AsyncIterable<T> & {\n enqueue(value: T): void;\n close(): void;\n throw(error: unknown): void;\n};\n\nexport function createAsyncQueue<T>(): AsyncQueue<T> {\n const values: T[] = [];\n const waiters: AsyncQueueWaiter<T>[] = [];\n let closed = false;\n let error: unknown;\n\n function flush(): void {\n while (waiters.length > 0 && values.length > 0) {\n const waiter = waiters.shift();\n const value = values.shift() as T;\n if (waiter !== undefined) {\n waiter.resolve({ value, done: false });\n }\n }\n\n if (values.length > 0 || waiters.length === 0 || !closed) {\n return;\n }\n\n while (waiters.length > 0) {\n const waiter = waiters.shift();\n if (waiter === undefined) {\n continue;\n }\n if (error !== undefined) {\n waiter.reject(error);\n } else {\n waiter.resolve({ value: undefined, done: true });\n }\n }\n }\n\n return {\n enqueue(value: T): void {\n if (closed) {\n return;\n }\n values.push(value);\n flush();\n },\n close(): void {\n closed = true;\n flush();\n },\n throw(thrown: unknown): void {\n closed = true;\n error = thrown;\n flush();\n },\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return {\n next(): Promise<IteratorResult<T>> {\n if (values.length > 0) {\n const value = values.shift() as T;\n return Promise.resolve({ value, done: false });\n }\n if (error !== undefined) {\n return Promise.reject(error);\n }\n if (closed) {\n return Promise.resolve({ value: undefined, done: true });\n }\n return new Promise((resolve, reject) => {\n waiters.push({ resolve, reject });\n });\n },\n };\n },\n };\n}\n","import type {\n AgentGenerationEndArgs,\n AgentGenerationErrorArgs,\n AgentGenerationObserver,\n AgentGenerationStartArgs,\n AgentObserverRegistration,\n AgentRunEndArgs,\n AgentRunErrorArgs,\n AgentRunObserver,\n AgentRunStartArgs,\n AgentToolEndArgs,\n AgentToolErrorArgs,\n AgentToolObserver,\n AgentToolStartArgs,\n AgentToolStreamEventArgs,\n AgentTraceInfo,\n} from \"./types\";\n\nexport async function startAgentRunObservers(\n registrations: AgentObserverRegistration[],\n args: AgentRunStartArgs,\n failOnObserverError: boolean,\n): Promise<ActiveAgentRunObservers> {\n const runObservers: AgentRunObserver[] = [];\n for (const registration of registrations) {\n try {\n const runObserver = await registration.observer.startRun(args);\n if (runObserver !== undefined) {\n runObservers.push(runObserver);\n }\n } catch (error) {\n if (failOnObserverError || registration.failOnObserverError === true) {\n throw error;\n }\n }\n }\n\n return new ActiveAgentRunObservers(runObservers, failOnObserverError);\n}\n\nexport class ActiveAgentRunObservers {\n readonly trace: AgentTraceInfo | undefined;\n\n constructor(\n private readonly runObservers: AgentRunObserver[],\n private readonly failOnObserverError: boolean,\n ) {\n this.trace = runObservers.find((observer) => observer.trace !== undefined)?.trace;\n }\n\n async startGeneration(args: AgentGenerationStartArgs): Promise<ActiveGenerationObservers> {\n const generationObservers: AgentGenerationObserver[] = [];\n for (const runObserver of this.runObservers) {\n if (runObserver.startGeneration === undefined) {\n continue;\n }\n try {\n const generationObserver = await runObserver.startGeneration(args);\n if (generationObserver !== undefined) {\n generationObservers.push(generationObserver);\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n return new ActiveGenerationObservers(generationObservers, this.failOnObserverError);\n }\n\n async startTool(args: AgentToolStartArgs): Promise<ActiveToolObservers> {\n const toolObservers: AgentToolObserver[] = [];\n for (const runObserver of this.runObservers) {\n if (runObserver.startTool === undefined) {\n continue;\n }\n try {\n const toolObserver = await runObserver.startTool(args);\n if (toolObserver !== undefined) {\n toolObservers.push(toolObserver);\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n return new ActiveToolObservers(toolObservers, this.failOnObserverError);\n }\n\n async end(args: AgentRunEndArgs): Promise<void> {\n for (const runObserver of this.runObservers) {\n try {\n await runObserver.end(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async error(args: AgentRunErrorArgs): Promise<void> {\n for (const runObserver of this.runObservers) {\n if (runObserver.error === undefined) {\n continue;\n }\n try {\n await runObserver.error(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n private handleError(error: unknown): void {\n if (this.failOnObserverError) {\n throw error;\n }\n }\n}\n\nexport class ActiveGenerationObservers {\n constructor(\n private readonly generationObservers: AgentGenerationObserver[],\n private readonly failOnObserverError: boolean,\n ) {}\n\n async end(args: AgentGenerationEndArgs): Promise<void> {\n for (const observer of this.generationObservers) {\n try {\n await observer.end(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async error(args: AgentGenerationErrorArgs): Promise<void> {\n for (const observer of this.generationObservers) {\n if (observer.error === undefined) {\n continue;\n }\n try {\n await observer.error(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n private handleError(error: unknown): void {\n if (this.failOnObserverError) {\n throw error;\n }\n }\n}\n\nexport class ActiveToolObservers {\n constructor(\n private readonly toolObservers: AgentToolObserver[],\n private readonly failOnObserverError: boolean,\n ) {}\n\n async streamEvent(args: AgentToolStreamEventArgs): Promise<void> {\n for (const observer of this.toolObservers) {\n if (observer.streamEvent === undefined) {\n continue;\n }\n try {\n await observer.streamEvent(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async end(args: AgentToolEndArgs): Promise<void> {\n for (const observer of this.toolObservers) {\n try {\n await observer.end(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n async error(args: AgentToolErrorArgs): Promise<void> {\n for (const observer of this.toolObservers) {\n if (observer.error === undefined) {\n continue;\n }\n try {\n await observer.error(args);\n } catch (error) {\n this.handleError(error);\n }\n }\n }\n\n private handleError(error: unknown): void {\n if (this.failOnObserverError) {\n throw error;\n }\n }\n}\n","import type { Message as MessageType } from \"../completion/index\";\nimport type { MemoryContext, MemoryRegistration, MemorySavePolicy } from \"../memory\";\nimport type { Agent } from \"./agent\";\n\nexport class PromptRequestMemory {\n constructor(\n private readonly agent: Agent,\n private readonly memoryContext: MemoryContext | undefined,\n private readonly initialHistory: MessageType[],\n ) {}\n\n memoryPolicy(): MemorySavePolicy | undefined {\n return this.memory()?.options.savePolicy;\n }\n\n pendingTurnMessages(newMessages: MessageType[]): MessageType[] {\n return this.memoryPolicy() === \"turn\" ? [...newMessages] : [];\n }\n\n async prepareRun(runId: string, newMessages: MessageType[]): Promise<MessageType[]> {\n const memory = this.memory();\n if (memory === undefined || this.memoryContext === undefined) {\n return this.initialHistory;\n }\n\n const memoryHistory = await memory.store.load(this.memoryContext);\n const chatHistory = [...memoryHistory, ...this.initialHistory];\n if (memory.options.savePolicy === \"message\") {\n await memory.store.append({\n context: this.memoryContext,\n runId,\n turn: 1,\n messages: newMessages,\n });\n }\n return chatHistory;\n }\n\n async commitMessages(\n runId: string,\n turn: number,\n messages: MessageType[],\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n const memory = this.memory();\n if (memory === undefined || this.memoryContext === undefined || messages.length === 0) {\n return;\n }\n if (memory.options.savePolicy === \"message\") {\n await memory.store.append({\n context: this.memoryContext,\n runId,\n turn,\n messages,\n });\n } else if (memory.options.savePolicy === \"turn\") {\n pendingTurnMessages.push(...messages);\n }\n }\n\n async commitCompletedTurn(\n runId: string,\n turn: number,\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n const memory = this.memory();\n if (\n memory === undefined ||\n this.memoryContext === undefined ||\n memory.options.savePolicy !== \"turn\" ||\n pendingTurnMessages.length === 0\n ) {\n return;\n }\n await memory.store.append({\n context: this.memoryContext,\n runId,\n turn,\n messages: [...pendingTurnMessages],\n });\n pendingTurnMessages.length = 0;\n }\n\n async commitCompletedRun(\n runId: string,\n turn: number,\n newMessages: MessageType[],\n pendingTurnMessages: MessageType[],\n ): Promise<void> {\n await this.commitCompletedTurn(runId, turn, pendingTurnMessages);\n const memory = this.memory();\n if (\n memory === undefined ||\n this.memoryContext === undefined ||\n memory.options.savePolicy !== \"run\"\n ) {\n return;\n }\n await memory.store.append({\n context: this.memoryContext,\n runId,\n turn,\n messages: [...newMessages],\n });\n }\n\n async recordError(runId: string, error: unknown, newMessages: MessageType[]): Promise<void> {\n const memory = this.memory();\n if (memory === undefined || this.memoryContext === undefined) {\n return;\n }\n await memory.store.recordError?.({\n context: this.memoryContext,\n runId,\n error,\n messages: [...newMessages],\n });\n }\n\n private memory(): MemoryRegistration | undefined {\n return this.memoryContext === undefined ? undefined : this.agent.memory;\n }\n}\n","import type { Document, ToolDefinition } from \"../completion/index\";\nimport type { Agent } from \"./agent\";\n\nexport async function fetchDynamicContext(\n agent: Agent,\n ragText: string | undefined,\n): Promise<Document[]> {\n if (ragText === undefined || ragText.length === 0 || agent.dynamicContexts.length === 0) {\n return [];\n }\n\n const documents: Document[] = [];\n for (const registration of agent.dynamicContexts) {\n const results = await registration.index.search({\n query: ragText,\n topK: registration.options.topK,\n threshold: registration.options.threshold,\n filter: registration.options.filter,\n });\n for (const result of results) {\n const formatted = registration.options.format?.(result);\n if (formatted !== undefined) {\n documents.push(formatted);\n } else {\n const metadata = formatMetadata(result.metadata);\n documents.push({\n id: result.id,\n text:\n typeof result.document === \"string\"\n ? result.document\n : JSON.stringify(result.document, null, 2),\n ...(metadata === undefined ? {} : { additionalProps: metadata }),\n });\n }\n }\n }\n return documents;\n}\n\nexport async function fetchToolDefinitions(\n agent: Agent,\n ragText: string | undefined,\n): Promise<ToolDefinition[]> {\n const staticDefinitions = await agent.toolSet.getToolDefinitions(ragText);\n if (ragText === undefined || ragText.length === 0 || agent.dynamicTools.length === 0) {\n return staticDefinitions;\n }\n\n const definitions = [...staticDefinitions];\n const names = new Set(staticDefinitions.map((definition) => definition.name));\n for (const registration of agent.dynamicTools) {\n const results = await registration.index.search({\n query: ragText,\n topK: registration.options.topK,\n threshold: registration.options.threshold,\n filter: registration.options.filter,\n });\n for (const result of results) {\n if (names.has(result.document.toolName)) {\n continue;\n }\n names.add(result.document.toolName);\n definitions.push(result.document.definition);\n }\n }\n return definitions;\n}\n\nfunction formatMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, string> | undefined {\n if (metadata === undefined) {\n return undefined;\n }\n\n return Object.fromEntries(Object.entries(metadata).map(([key, value]) => [key, String(value)]));\n}\n","import type {\n CompletionModel,\n JsonValue,\n Message as MessageType,\n StreamingCompletionModel,\n} from \"../completion/index\";\n\nexport function isStreamingCompletionModel(\n model: CompletionModel,\n): model is StreamingCompletionModel {\n return \"streamCompletion\" in model && typeof model.streamCompletion === \"function\";\n}\n\nexport function extractRagText(message: MessageType): string | undefined {\n if (message.role === \"user\") {\n return message.content.flatMap((item) => (item.type === \"text\" ? [item.text] : [])).join(\"\\n\");\n }\n\n if (message.role === \"tool\") {\n return message.content\n .flatMap((item) => item.content.flatMap((part) => (part.type === \"text\" ? [part.text] : [])))\n .join(\"\\n\");\n }\n\n return undefined;\n}\n\nexport function parseJsonValue(text: string): JsonValue {\n if (text.trim().length === 0) {\n return {};\n }\n try {\n return JSON.parse(text) as JsonValue;\n } catch {\n return text;\n }\n}\n","import type {\n AssistantContent as AssistantContentType,\n CompletionResponse,\n CompletionStreamEvent,\n ReasoningContent,\n ReasoningContentType,\n ToolCall,\n} from \"../completion/index\";\nimport { Usage } from \"../completion/index\";\nimport { parseJsonValue } from \"./utils\";\n\nexport type AgentDeltaEvent =\n | { type: \"text_delta\"; delta: string }\n | {\n type: \"reasoning_delta\";\n delta: string;\n id?: string;\n contentType?: ReasoningContentType;\n signature?: string;\n }\n | { type: \"tool_call\"; toolCall: ToolCall };\n\ntype ReasoningState = {\n text: string;\n content?: ReasoningContent[];\n};\n\ntype PartialToolCall = {\n id: string;\n callId?: string;\n name: string;\n argumentsText: string;\n signature?: string;\n};\n\nexport class CompletionStreamAccumulator<RawResponse = unknown> {\n private static readonly defaultReasoningKey = \"reasoning\";\n private text = \"\";\n private reasoningById = new Map<string, ReasoningState>();\n private reasoningOrder: string[] = [];\n private toolCalls = new Map<string, PartialToolCall>();\n private toolCallOrder: string[] = [];\n private finalResponse: CompletionResponse<RawResponse> | undefined;\n private messageId: string | undefined;\n\n accept(event: CompletionStreamEvent<RawResponse>): AgentDeltaEvent | undefined {\n if (event.type === \"text_delta\") {\n this.text += event.delta;\n return { type: \"text_delta\", delta: event.delta };\n }\n\n if (event.type === \"reasoning_delta\") {\n const key = event.id ?? CompletionStreamAccumulator.defaultReasoningKey;\n const existing = this.reasoningById.get(key);\n const reasoning = existing ?? { text: \"\" };\n if (!existing) {\n this.reasoningOrder.push(key);\n }\n this.appendReasoning(reasoning, event);\n this.reasoningById.set(key, reasoning);\n return reasoningDeltaEvent(event);\n }\n\n if (event.type === \"tool_call_delta\") {\n const existing = this.toolCalls.get(event.id);\n const toolCall = existing ?? {\n id: event.id,\n name: \"\",\n argumentsText: \"\",\n };\n if (!existing) {\n this.toolCallOrder.push(event.id);\n }\n if (event.callId !== undefined) toolCall.callId = event.callId;\n if (event.name !== undefined) toolCall.name = event.name;\n if (event.signature !== undefined) toolCall.signature = event.signature;\n if (event.argumentsDelta !== undefined) {\n toolCall.argumentsText += event.argumentsDelta;\n }\n this.toolCalls.set(event.id, toolCall);\n return undefined;\n }\n\n if (event.type === \"tool_call\") {\n this.upsertToolCall(event.toolCall);\n return undefined;\n }\n\n if (event.type === \"message_id\") {\n this.messageId = event.id;\n return undefined;\n }\n\n if (event.type === \"final\") {\n this.finalResponse = event.response;\n return undefined;\n }\n\n return undefined;\n }\n\n response(): CompletionResponse<RawResponse> {\n const accumulatedResponse = this.buildAccumulatedResponse();\n if (this.finalResponse !== undefined) {\n if (this.finalResponse.choice.length === 0) {\n const response = {\n ...accumulatedResponse,\n usage: this.finalResponse.usage,\n rawResponse: this.finalResponse.rawResponse,\n };\n if (this.finalResponse.messageId !== undefined) {\n response.messageId = this.finalResponse.messageId;\n }\n return response;\n }\n return this.mergeFinalResponse(accumulatedResponse, this.finalResponse);\n }\n\n return accumulatedResponse;\n }\n\n private buildAccumulatedResponse(): CompletionResponse<RawResponse> {\n const choice: AssistantContentType[] = [];\n if (this.text.length > 0) {\n choice.push({ type: \"text\", text: this.text });\n }\n for (const key of this.reasoningOrder) {\n const reasoning = this.reasoningById.get(key) ?? { text: \"\" };\n const id = key === CompletionStreamAccumulator.defaultReasoningKey ? undefined : key;\n const content =\n reasoning.content === undefined\n ? { type: \"reasoning\" as const, text: reasoning.text }\n : { type: \"reasoning\" as const, text: reasoning.text, content: reasoning.content };\n choice.push(id === undefined ? content : { ...content, id });\n }\n for (const id of this.toolCallOrder) {\n const toolCall = this.toolCalls.get(id);\n if (toolCall !== undefined) {\n const content: ToolCall = {\n type: \"tool_call\",\n id: toolCall.id,\n function: {\n name: toolCall.name,\n arguments: parseJsonValue(toolCall.argumentsText),\n },\n };\n if (toolCall.callId !== undefined) {\n content.callId = toolCall.callId;\n }\n if (toolCall.signature !== undefined) {\n content.signature = toolCall.signature;\n }\n choice.push(content);\n }\n }\n\n const response: CompletionResponse<RawResponse> = {\n choice,\n usage: Usage.empty(),\n rawResponse: undefined as RawResponse,\n };\n if (this.messageId !== undefined) {\n response.messageId = this.messageId;\n }\n return response;\n }\n\n private upsertToolCall(toolCall: ToolCall): void {\n if (!this.toolCalls.has(toolCall.id)) {\n this.toolCallOrder.push(toolCall.id);\n }\n const partial: PartialToolCall = {\n id: toolCall.id,\n name: toolCall.function.name,\n argumentsText: JSON.stringify(toolCall.function.arguments ?? {}),\n };\n if (toolCall.callId !== undefined) {\n partial.callId = toolCall.callId;\n }\n if (toolCall.signature !== undefined) {\n partial.signature = toolCall.signature;\n }\n this.toolCalls.set(toolCall.id, partial);\n }\n\n private mergeFinalResponse(\n accumulatedResponse: CompletionResponse<RawResponse>,\n finalResponse: CompletionResponse<RawResponse>,\n ): CompletionResponse<RawResponse> {\n const accumulatedById = new Map<string, ToolCall>();\n const accumulatedByCallId = new Map<string, ToolCall>();\n for (const content of accumulatedResponse.choice) {\n if (content.type !== \"tool_call\") {\n continue;\n }\n accumulatedById.set(content.id, content);\n if (content.callId !== undefined) {\n accumulatedByCallId.set(content.callId, content);\n }\n }\n\n return {\n ...finalResponse,\n choice: finalResponse.choice.map((content) => {\n if (content.type !== \"tool_call\" || !isEmptyToolArguments(content.function.arguments)) {\n return content;\n }\n\n const accumulated =\n accumulatedById.get(content.id) ??\n (content.callId === undefined ? undefined : accumulatedByCallId.get(content.callId));\n if (accumulated === undefined || isEmptyToolArguments(accumulated.function.arguments)) {\n return content;\n }\n\n return {\n ...content,\n function: {\n ...content.function,\n arguments: accumulated.function.arguments,\n },\n };\n }),\n };\n }\n\n private appendReasoning(\n reasoning: ReasoningState,\n event: Extract<CompletionStreamEvent<RawResponse>, { type: \"reasoning_delta\" }>,\n ): void {\n const contentType = event.contentType ?? \"text\";\n if (contentType === \"text\" || contentType === \"summary\") {\n reasoning.text += event.delta;\n }\n\n if (event.contentType === undefined && event.signature === undefined) {\n return;\n }\n\n reasoning.content ??= [];\n const last = reasoning.content.at(-1);\n if (contentType === \"text\") {\n if (last?.type === \"text\") {\n last.text += event.delta;\n if (event.signature !== undefined) {\n last.signature = event.signature;\n }\n } else {\n reasoning.content.push(\n event.signature === undefined\n ? { type: \"text\", text: event.delta }\n : { type: \"text\", text: event.delta, signature: event.signature },\n );\n }\n return;\n }\n\n if (contentType === \"summary\") {\n if (last?.type === \"summary\") {\n last.text += event.delta;\n } else {\n reasoning.content.push({ type: \"summary\", text: event.delta });\n }\n return;\n }\n\n if (contentType === \"encrypted\") {\n reasoning.content.push({ type: \"encrypted\", data: event.delta });\n return;\n }\n\n reasoning.content.push({ type: \"redacted\", data: event.delta });\n }\n}\n\nfunction reasoningDeltaEvent(\n event: Extract<CompletionStreamEvent, { type: \"reasoning_delta\" }>,\n): AgentDeltaEvent {\n const mapped: AgentDeltaEvent = { type: \"reasoning_delta\", delta: event.delta };\n if (event.id !== undefined) mapped.id = event.id;\n if (event.contentType !== undefined) mapped.contentType = event.contentType;\n if (event.signature !== undefined) mapped.signature = event.signature;\n return mapped;\n}\n\nfunction isEmptyToolArguments(value: unknown): boolean {\n if (value === undefined || value === null) {\n return true;\n }\n if (typeof value === \"string\") {\n return value.trim().length === 0;\n }\n if (Array.isArray(value)) {\n return value.length === 0;\n }\n if (typeof value === \"object\") {\n return Object.values(value).every((item) => item === undefined);\n }\n return false;\n}\n","import type {\n JsonObject,\n ToolCall,\n ToolDefinition,\n ToolResult,\n ToolResultContent,\n} from \"../completion\";\nimport { ToolContent } from \"../completion\";\nimport { mapWithConcurrency } from \"../internal/concurrency\";\nimport type { ActiveAgentRunObservers, ActiveToolObservers } from \"../observability/group\";\nimport type { AnyTool, NormalizedToolOutput, ToolCallStreamEvent } from \"../tool\";\nimport { toolResultContentToText } from \"../tool\";\nimport type {\n AgentMiddleware,\n ToolOutputMiddlewareArgs,\n ToolOutputMiddlewareResult,\n} from \"../tool/middleware\";\nimport type { Agent } from \"./agent\";\nimport type { PromptHook, ToolHookArgs } from \"./hooks\";\nimport { runControl, toolCallControl } from \"./hooks\";\nimport type { AgentChildStreamEvent } from \"./request\";\n\nconst MCP_TOOL_METADATA_KEY = Symbol.for(\"anvia.mcp.tool.metadata\");\n\nexport type ToolResultEventPayload = {\n type: \"tool_result\";\n toolName: string;\n toolCallId?: string;\n internalCallId: string;\n args: string;\n result: string;\n structuredResult?: ToolResultContent[] | undefined;\n};\n\nexport type AgentToolEventPayload = {\n type: \"agent_tool_event\";\n toolName: string;\n toolCallId?: string;\n internalCallId: string;\n agentId: string;\n agentName?: string;\n event: AgentChildStreamEvent;\n};\n\nexport type ToolExecutionEventPayload = ToolResultEventPayload | AgentToolEventPayload;\n\nexport type ToolExecutionObservation = {\n turn: number;\n runObservers: ActiveAgentRunObservers;\n toolDefinitions?: ToolDefinition[];\n};\n\nexport class ToolCallExecutor {\n constructor(\n private readonly agent: Agent,\n private readonly activeHook: PromptHook | undefined,\n private readonly concurrency: number,\n private readonly requestMiddlewares: AgentMiddleware[],\n private readonly cancel: (reason: string) => Error,\n ) {}\n\n async execute(\n toolCalls: ToolCall[],\n onResult?: (result: ToolResultEventPayload) => void,\n onStreamEvent?: (event: AgentToolEventPayload) => void,\n observation?: ToolExecutionObservation,\n ): Promise<ToolResult[]> {\n return mapWithConcurrency(toolCalls, this.concurrency, async (toolCall) => {\n const args = JSON.stringify(toolCall.function.arguments ?? {});\n const internalCallId = globalThis.crypto.randomUUID();\n const hookArgs: ToolHookArgs = {\n toolName: toolCall.function.name,\n internalCallId,\n args,\n };\n if (toolCall.callId !== undefined) {\n hookArgs.toolCallId = toolCall.callId;\n }\n const tool = this.agent.getTool(toolCall.function.name);\n const toolDefinition = observation?.toolDefinitions?.find(\n (definition) => definition.name === toolCall.function.name,\n );\n const toolMetadata = toolTraceMetadata(tool);\n\n const toolObservers = await observation?.runObservers.startTool({\n turn: observation.turn,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args,\n toolCallId: toolCall.callId,\n ...(toolDefinition === undefined ? {} : { toolDefinition }),\n ...(toolMetadata === undefined ? {} : { toolMetadata }),\n });\n\n const callAction = await this.activeHook?.onToolCall?.({\n ...hookArgs,\n tool: toolCallControl,\n });\n if (callAction?.type === \"terminate\") {\n await recordToolError(\n toolObservers,\n observation?.turn,\n toolCall,\n internalCallId,\n args,\n callAction.reason,\n );\n throw this.cancel(callAction.reason);\n }\n if (callAction?.type === \"approval_request\") {\n const reason = `Tool approval was requested for ${toolCall.function.name}, but no approval handler is installed.`;\n await recordToolError(\n toolObservers,\n observation?.turn,\n toolCall,\n internalCallId,\n args,\n reason,\n );\n throw this.cancel(reason);\n }\n\n let output: NormalizedToolOutput;\n let skipped = false;\n let effectiveArgs = args;\n if (callAction?.type === \"skip\") {\n output = callAction.reason;\n skipped = true;\n } else {\n effectiveArgs = await this.runToolInputMiddlewares({\n ...hookArgs,\n turn: observation?.turn ?? 0,\n originalArgs: args,\n });\n try {\n output = await this.agent.callTool(toolCall.function.name, effectiveArgs, {\n emitStreamEvent: async (event) => {\n await toolObservers?.streamEvent({\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args: effectiveArgs,\n ...(toolCall.callId === undefined ? {} : { toolCallId: toolCall.callId }),\n event,\n });\n const payload = agentToolEventPayload(toolCall, internalCallId, event);\n if (payload !== undefined) {\n onStreamEvent?.(payload);\n }\n },\n });\n } catch (error) {\n const errorAction = await this.activeHook?.onToolError?.({\n ...hookArgs,\n args: effectiveArgs,\n error,\n run: runControl,\n });\n await toolObservers?.error({\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args: effectiveArgs,\n ...(toolCall.callId === undefined ? {} : { toolCallId: toolCall.callId }),\n error,\n });\n if (errorAction?.type === \"terminate\") {\n throw this.cancel(errorAction.reason);\n }\n output = error instanceof Error ? error.toString() : String(error);\n }\n }\n\n let result = toolOutputToText(output);\n let structuredResult = toolOutputToStructuredResult(output);\n if (this.agent.shouldApplyToolMiddleware(toolCall.function.name)) {\n const middlewareReplacement = await this.runToolResultMiddlewares({\n ...hookArgs,\n args: effectiveArgs,\n result,\n originalResult: result,\n structuredResult,\n originalStructuredResult: structuredResult,\n turn: observation?.turn ?? 0,\n });\n if (middlewareReplacement !== undefined) {\n output = middlewareReplacement;\n result = toolOutputToText(middlewareReplacement);\n structuredResult = toolOutputToStructuredResult(middlewareReplacement);\n }\n }\n\n const resultAction = await this.activeHook?.onToolResult?.({\n ...hookArgs,\n args: effectiveArgs,\n result,\n structuredResult,\n run: runControl,\n });\n await toolObservers?.end({\n turn: observation?.turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args: effectiveArgs,\n result,\n structuredResult,\n skipped,\n toolCallId: toolCall.callId,\n });\n if (resultAction?.type === \"terminate\") {\n throw this.cancel(resultAction.reason);\n }\n\n const resultPayload: ToolResultEventPayload = {\n type: \"tool_result\",\n toolName: toolCall.function.name,\n internalCallId,\n args: effectiveArgs,\n result,\n structuredResult,\n };\n if (toolCall.callId !== undefined) {\n resultPayload.toolCallId = toolCall.callId;\n }\n onResult?.(resultPayload);\n return ToolContent.toolResult(toolCall.id, output, toolCall.callId);\n });\n }\n\n private async runToolResultMiddlewares(\n args: ToolOutputMiddlewareArgs,\n ): Promise<NormalizedToolOutput | undefined> {\n let result = args.result;\n let structuredResult = args.structuredResult;\n let replaced = false;\n for (const middleware of this.activeMiddlewares()) {\n const outputReplacement = await middleware.onToolOutput?.({\n ...args,\n result,\n structuredResult,\n });\n if (outputReplacement !== undefined) {\n const normalized = normalizeToolOutputMiddlewareResult(outputReplacement);\n if (normalized.result !== undefined) {\n result = normalized.result;\n structuredResult = undefined;\n }\n if (normalized.structuredResult !== undefined) {\n structuredResult = normalized.structuredResult;\n result = toolResultContentToText(normalized.structuredResult);\n }\n replaced = true;\n }\n const legacyReplacement = await middleware.onResult?.({\n ...args,\n result,\n structuredResult,\n });\n if (legacyReplacement !== undefined) {\n result = legacyReplacement;\n structuredResult = undefined;\n replaced = true;\n }\n }\n return replaced ? (structuredResult ?? result) : undefined;\n }\n\n private async runToolInputMiddlewares(\n args: ToolHookArgs & { turn: number; originalArgs: string },\n ): Promise<string> {\n let current = args.args;\n for (const middleware of this.activeMiddlewares()) {\n const replacement = await middleware.onToolInput?.({\n ...args,\n args: current,\n });\n if (replacement?.args !== undefined) {\n current =\n typeof replacement.args === \"string\"\n ? replacement.args\n : JSON.stringify(replacement.args);\n }\n }\n return current;\n }\n\n private activeMiddlewares(): AgentMiddleware[] {\n return [...this.agent.middlewares, ...this.requestMiddlewares];\n }\n}\n\nfunction normalizeToolOutputMiddlewareResult(result: ToolOutputMiddlewareResult): {\n result?: string | undefined;\n structuredResult?: ToolResultContent[] | undefined;\n} {\n if (typeof result === \"string\") {\n return { result };\n }\n return result ?? {};\n}\n\nfunction toolTraceMetadata(tool: AnyTool | undefined): JsonObject | undefined {\n if (tool === undefined) {\n return undefined;\n }\n const metadata = (tool as { [MCP_TOOL_METADATA_KEY]?: unknown })[MCP_TOOL_METADATA_KEY];\n const mcpMetadata =\n typeof metadata === \"object\" && metadata !== null\n ? (metadata as { serverName?: unknown })\n : undefined;\n return {\n approvalRequired: tool.approval !== undefined,\n ...(typeof mcpMetadata?.serverName === \"string\" && mcpMetadata.serverName.length > 0\n ? { mcpServerName: mcpMetadata.serverName }\n : {}),\n };\n}\n\nasync function recordToolError(\n toolObservers: ActiveToolObservers | undefined,\n turn: number | undefined,\n toolCall: ToolCall,\n internalCallId: string,\n args: string,\n error: unknown,\n): Promise<void> {\n await toolObservers?.error({\n turn: turn ?? 0,\n toolCall,\n toolName: toolCall.function.name,\n internalCallId,\n args,\n error,\n toolCallId: toolCall.callId,\n });\n}\n\nfunction toolOutputToText(output: NormalizedToolOutput): string {\n return typeof output === \"string\" ? output : toolResultContentToText(output);\n}\n\nfunction toolOutputToStructuredResult(\n output: NormalizedToolOutput,\n): ToolResultContent[] | undefined {\n return typeof output === \"string\" ? undefined : output;\n}\n\nfunction agentToolEventPayload(\n toolCall: ToolCall,\n internalCallId: string,\n event: ToolCallStreamEvent,\n): AgentToolEventPayload | undefined {\n if (typeof event.agentId !== \"string\" || event.agentId.length === 0) {\n return undefined;\n }\n return {\n type: \"agent_tool_event\",\n toolName: toolCall.function.name,\n ...(toolCall.callId === undefined ? {} : { toolCallId: toolCall.callId }),\n internalCallId,\n agentId: event.agentId,\n ...(event.agentName === undefined ? {} : { agentName: event.agentName }),\n event: event.event as AgentChildStreamEvent,\n };\n}\n","import {\n assertCompletionRequestSupported,\n type CompletionModel,\n CompletionRequestBuilder,\n type CompletionResponse,\n type JsonObject,\n Message,\n type Message as MessageType,\n type ReasoningContentType,\n type ToolCall,\n type ToolDefinition,\n type ToolResult,\n type ToolResultContent,\n textFromAssistantContent,\n Usage,\n} from \"../completion/index\";\nimport { createAsyncQueue } from \"../internal/async-queue\";\nimport type { MemoryContext } from \"../memory\";\nimport { type ActiveAgentRunObservers, startAgentRunObservers } from \"../observability/group\";\nimport type { AgentTraceInfo, AgentTraceOptions } from \"../observability/types\";\nimport { toReadableStream } from \"../streaming\";\nimport type { AgentMiddleware, ToolMiddleware } from \"../tool/middleware\";\nimport type { Agent } from \"./agent\";\nimport { MaxTurnsError, PromptCancelledError } from \"./errors\";\nimport type { PromptHook } from \"./hooks\";\nimport { runControl } from \"./hooks\";\nimport { PromptRequestMemory } from \"./request-memory\";\nimport { fetchDynamicContext, fetchToolDefinitions } from \"./retrieval\";\nimport { type AgentDeltaEvent, CompletionStreamAccumulator } from \"./stream-accumulator\";\nimport {\n type AgentToolEventPayload,\n ToolCallExecutor,\n type ToolExecutionEventPayload,\n type ToolResultEventPayload,\n} from \"./tool-execution\";\nimport { extractRagText, isStreamingCompletionModel } from \"./utils\";\n\nexport type PromptResponse = {\n output: string;\n usage: Usage;\n messages: MessageType[];\n trace?: AgentTraceInfo | undefined;\n};\n\nexport type AgentChildStreamEvent<RawResponse = unknown> =\n | {\n type: \"turn_start\";\n turn: number;\n prompt: MessageType;\n history: MessageType[];\n }\n | {\n type: \"text_delta\";\n turn: number;\n delta: string;\n }\n | {\n type: \"reasoning_delta\";\n turn: number;\n delta: string;\n id?: string;\n contentType?: ReasoningContentType;\n signature?: string;\n }\n | {\n type: \"tool_call\";\n turn: number;\n toolCall: ToolCall;\n }\n | {\n type: \"tool_result\";\n turn: number;\n toolName: string;\n toolCallId?: string;\n internalCallId: string;\n args: string;\n result: string;\n structuredResult?: ToolResultContent[] | undefined;\n }\n | {\n type: \"turn_end\";\n turn: number;\n response: CompletionResponse<RawResponse>;\n }\n | {\n type: \"final\";\n runId: string;\n output: string;\n usage: Usage;\n messages: MessageType[];\n trace?: AgentTraceInfo | undefined;\n }\n | {\n type: \"error\";\n error: unknown;\n };\n\nexport type AgentStreamEvent<RawResponse = unknown> =\n | AgentChildStreamEvent<RawResponse>\n | {\n type: \"agent_tool_event\";\n turn: number;\n toolName: string;\n toolCallId?: string;\n internalCallId: string;\n agentId: string;\n agentName?: string;\n event: AgentChildStreamEvent<RawResponse>;\n };\n\nexport class PromptRequest<M extends CompletionModel = CompletionModel> {\n private chatHistory: MessageType[];\n private maxTurnCount: number;\n private activeHook: PromptHook | undefined;\n private concurrency = 1;\n private traceOptions: AgentTraceOptions | undefined;\n private requestMiddlewares: AgentMiddleware[] = [];\n private readonly memoryRecorder: PromptRequestMemory;\n\n private constructor(\n private readonly agent: Agent<M>,\n private readonly promptMessage: MessageType,\n initialHistory: MessageType[] = [],\n memoryContext: MemoryContext | undefined = undefined,\n ) {\n this.chatHistory = initialHistory;\n this.maxTurnCount = agent.defaultMaxTurns ?? 0;\n this.activeHook = agent.hook;\n this.memoryRecorder = new PromptRequestMemory(agent, memoryContext, initialHistory);\n }\n\n static fromAgent<M extends CompletionModel>(\n agent: Agent<M>,\n prompt: string | MessageType | MessageType[],\n options: { memoryContext?: MemoryContext | undefined } = {},\n ): PromptRequest<M> {\n const normalized = normalizePromptInput(prompt);\n return new PromptRequest(agent, normalized.prompt, normalized.history, options.memoryContext);\n }\n\n maxTurns(maxTurns: number): this {\n this.maxTurnCount = maxTurns;\n return this;\n }\n\n withHook(hook: PromptHook): this {\n this.activeHook = hook;\n return this;\n }\n\n /**\n * @deprecated Use `withHook` instead.\n */\n requestHook(hook: PromptHook): this {\n return this.withHook(hook);\n }\n\n withToolConcurrency(concurrency: number): this {\n this.concurrency = Math.max(1, concurrency);\n return this;\n }\n\n withMiddleware(middleware: AgentMiddleware): this {\n this.requestMiddlewares.push(middleware);\n return this;\n }\n\n withMiddlewares(middlewares: AgentMiddleware[]): this {\n this.requestMiddlewares.push(...middlewares);\n return this;\n }\n\n /**\n * @deprecated Use `withMiddleware` instead.\n */\n withToolMiddleware(middleware: ToolMiddleware): this {\n return this.withMiddleware(middleware);\n }\n\n /**\n * @deprecated Use `withMiddlewares` instead.\n */\n withToolMiddlewares(middlewares: ToolMiddleware[]): this {\n return this.withMiddlewares(middlewares);\n }\n\n withTrace(trace: AgentTraceOptions): this {\n this.traceOptions = trace;\n return this;\n }\n\n async send(): Promise<PromptResponse> {\n const runId = globalThis.crypto.randomUUID();\n const newMessages: MessageType[] = [this.promptMessage];\n this.chatHistory = await this.memoryRecorder.prepareRun(runId, newMessages);\n const pendingTurnMessages = this.memoryRecorder.pendingTurnMessages(newMessages);\n let usage = Usage.empty();\n let currentTurns = 0;\n let lastPrompt = this.promptMessage;\n const runObservers = await this.startRunObservers();\n\n try {\n await this.runRunStartHook(newMessages);\n while (currentTurns <= this.maxTurnCount + 1) {\n const prompt = newMessages.at(-1);\n if (prompt === undefined) {\n throw new Error(\"PromptRequest requires at least one message\");\n }\n\n lastPrompt = prompt;\n currentTurns += 1;\n\n const historyForRequest = [...this.chatHistory, ...newMessages.slice(0, -1)];\n await this.runTurnStartHook(currentTurns, prompt, historyForRequest, newMessages);\n await this.runCompletionCallHook(prompt, historyForRequest, newMessages);\n\n const ragText = extractRagText(prompt);\n const dynamicContext = await fetchDynamicContext(this.agent, ragText);\n const toolDefs = await fetchToolDefinitions(this.agent, ragText);\n let request = new CompletionRequestBuilder(this.agent.model, prompt)\n .instructions(this.agent.instructions)\n .messages(historyForRequest)\n .documents([...this.agent.staticContext, ...dynamicContext])\n .tools(toolDefs)\n .temperature(this.agent.temperature)\n .maxTokens(this.agent.maxTokens)\n .additionalParams(this.agent.additionalParams)\n .toolChoice(this.agent.toolChoice)\n .outputSchema(this.agent.outputSchema)\n .build();\n request = await this.runCompletionRequestMiddlewares(request, currentTurns);\n\n let response: CompletionResponse;\n try {\n response = await this.runCompletion(request, currentTurns, runObservers);\n } catch (error) {\n await this.runCompletionErrorHook(prompt, error, newMessages);\n throw error;\n }\n response = await this.runCompletionResponseMiddlewares(request, response, currentTurns);\n usage = Usage.add(usage, response.usage);\n await this.runCompletionResponseHook(prompt, response, newMessages);\n await this.runTurnEndHook(currentTurns, response, newMessages);\n\n const assistantMessage = Message.assistant(response.choice, response.messageId);\n newMessages.push(assistantMessage);\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [assistantMessage],\n pendingTurnMessages,\n );\n const toolCalls = response.choice.filter(\n (item): item is ToolCall => item.type === \"tool_call\",\n );\n if (toolCalls.length === 0) {\n await this.memoryRecorder.commitCompletedRun(\n runId,\n currentTurns,\n newMessages,\n pendingTurnMessages,\n );\n const result: PromptResponse = {\n output: textFromAssistantContent(response.choice),\n usage,\n messages: [...newMessages],\n trace: runObservers.trace,\n };\n await this.runRunEndHook(result, newMessages);\n await runObservers.end(result);\n return result;\n }\n\n const toolResults = await this.executeToolCalls(\n toolCalls,\n newMessages,\n undefined,\n undefined,\n {\n turn: currentTurns,\n runObservers,\n toolDefinitions: request.tools,\n },\n );\n const toolMessage = Message.tool(toolResults);\n newMessages.push(toolMessage);\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [toolMessage],\n pendingTurnMessages,\n );\n await this.memoryRecorder.commitCompletedTurn(runId, currentTurns, pendingTurnMessages);\n }\n\n throw new MaxTurnsError(this.maxTurnCount, [...this.chatHistory, ...newMessages], lastPrompt);\n } catch (error) {\n const finalError = await this.runRunErrorHook(error, usage, newMessages);\n await runObservers.error({ error: finalError, usage, messages: [...newMessages] });\n await this.memoryRecorder.recordError(runId, finalError, newMessages);\n throw finalError;\n }\n }\n\n async *stream(): AsyncIterable<AgentStreamEvent> {\n if (!this.agent.model.capabilities.streaming || !isStreamingCompletionModel(this.agent.model)) {\n throw new Error(\"This completion model does not support streaming\");\n }\n\n const runId = globalThis.crypto.randomUUID();\n const newMessages: MessageType[] = [this.promptMessage];\n this.chatHistory = await this.memoryRecorder.prepareRun(runId, newMessages);\n const pendingTurnMessages = this.memoryRecorder.pendingTurnMessages(newMessages);\n let usage = Usage.empty();\n let currentTurns = 0;\n let lastPrompt = this.promptMessage;\n const runObservers = await this.startRunObservers();\n const emit = async (event: AgentStreamEvent): Promise<AgentStreamEvent> => {\n await this.recordAgentEvent(runId, event);\n return event;\n };\n\n try {\n await this.runRunStartHook(newMessages);\n while (currentTurns <= this.maxTurnCount + 1) {\n const prompt = newMessages.at(-1);\n if (prompt === undefined) {\n throw new Error(\"PromptRequest requires at least one message\");\n }\n\n lastPrompt = prompt;\n currentTurns += 1;\n\n const historyForRequest = [...this.chatHistory, ...newMessages.slice(0, -1)];\n yield await emit({\n type: \"turn_start\",\n turn: currentTurns,\n prompt,\n history: historyForRequest,\n });\n await this.runTurnStartHook(currentTurns, prompt, historyForRequest, newMessages);\n await this.runCompletionCallHook(prompt, historyForRequest, newMessages);\n\n const ragText = extractRagText(prompt);\n const dynamicContext = await fetchDynamicContext(this.agent, ragText);\n const toolDefs = await fetchToolDefinitions(this.agent, ragText);\n let request = new CompletionRequestBuilder(this.agent.model, prompt)\n .instructions(this.agent.instructions)\n .messages(historyForRequest)\n .documents([...this.agent.staticContext, ...dynamicContext])\n .tools(toolDefs)\n .temperature(this.agent.temperature)\n .maxTokens(this.agent.maxTokens)\n .additionalParams(this.agent.additionalParams)\n .toolChoice(this.agent.toolChoice)\n .outputSchema(this.agent.outputSchema)\n .build();\n request = await this.runCompletionRequestMiddlewares(request, currentTurns);\n\n assertCompletionRequestSupported(this.agent.model, request, { streaming: true });\n const providerRequest = this.providerTraceRequest(request, { stream: true });\n const generationObservers = await runObservers.startGeneration({\n turn: currentTurns,\n request,\n ...(providerRequest === undefined ? {} : { providerRequest }),\n modelInfo: {\n provider: this.agent.model.provider,\n defaultModel: this.agent.model.defaultModel,\n capabilities: this.agent.model.capabilities,\n },\n });\n const accumulator = new CompletionStreamAccumulator();\n const generationStartedAt = Date.now();\n let firstDeltaMs: number | undefined;\n try {\n for await (const event of this.agent.model.streamCompletion(request)) {\n if (firstDeltaMs === undefined && isGenerationDeltaEvent(event.type)) {\n firstDeltaMs = Date.now() - generationStartedAt;\n }\n const mapped = accumulator.accept(event);\n if (event.type === \"error\") {\n throw event.error;\n }\n if (mapped !== undefined) {\n yield await emit(addTurn(currentTurns, mapped));\n }\n }\n } catch (error) {\n await generationObservers.error({ turn: currentTurns, error });\n await this.runCompletionErrorHook(prompt, error, newMessages);\n throw error;\n }\n\n let response = accumulator.response();\n await generationObservers.end({\n turn: currentTurns,\n response,\n ...(firstDeltaMs === undefined ? {} : { firstDeltaMs }),\n });\n response = await this.runCompletionResponseMiddlewares(request, response, currentTurns);\n usage = Usage.add(usage, response.usage);\n await this.runCompletionResponseHook(prompt, response, newMessages);\n await this.runTurnEndHook(currentTurns, response, newMessages);\n\n const assistantMessage = Message.assistant(response.choice, response.messageId);\n newMessages.push(assistantMessage);\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [assistantMessage],\n pendingTurnMessages,\n );\n const toolCalls = response.choice.filter(\n (item): item is ToolCall => item.type === \"tool_call\",\n );\n for (const toolCall of toolCalls) {\n yield await emit({ type: \"tool_call\", turn: currentTurns, toolCall });\n }\n yield await emit({ type: \"turn_end\", turn: currentTurns, response });\n\n if (toolCalls.length === 0) {\n const output = textFromAssistantContent(response.choice);\n await this.memoryRecorder.commitCompletedRun(\n runId,\n currentTurns,\n newMessages,\n pendingTurnMessages,\n );\n yield await emit({\n type: \"final\",\n runId,\n output,\n usage,\n messages: [...newMessages],\n trace: runObservers.trace,\n });\n await this.runRunEndHook({ output, usage, messages: [...newMessages] }, newMessages);\n await runObservers.end({ output, usage, messages: [...newMessages] });\n return;\n }\n\n const toolResultEvents = createAsyncQueue<ToolExecutionEventPayload>();\n const toolResultsPromise = this.executeToolCalls(\n toolCalls,\n newMessages,\n (result) => {\n toolResultEvents.enqueue(result);\n },\n (event) => {\n toolResultEvents.enqueue(event);\n },\n {\n turn: currentTurns,\n runObservers,\n toolDefinitions: request.tools,\n },\n );\n toolResultsPromise.then(\n () => toolResultEvents.close(),\n (error: unknown) => toolResultEvents.throw(error),\n );\n for await (const result of toolResultEvents) {\n yield await emit({ turn: currentTurns, ...result });\n }\n const toolResults = await toolResultsPromise;\n const toolMessage = Message.tool(toolResults);\n newMessages.push(toolMessage);\n await this.memoryRecorder.commitMessages(\n runId,\n currentTurns,\n [toolMessage],\n pendingTurnMessages,\n );\n await this.memoryRecorder.commitCompletedTurn(runId, currentTurns, pendingTurnMessages);\n }\n\n throw new MaxTurnsError(this.maxTurnCount, [...this.chatHistory, ...newMessages], lastPrompt);\n } catch (error) {\n const finalError = await this.runRunErrorHook(error, usage, newMessages);\n await runObservers.error({ error: finalError, usage, messages: [...newMessages] });\n await this.memoryRecorder.recordError(runId, finalError, newMessages);\n yield await emit({ type: \"error\", error: finalError });\n throw finalError;\n }\n }\n\n readableStream(): ReadableStream<Uint8Array> {\n return toReadableStream(this.stream());\n }\n\n private async runCompletion(\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n turn: number,\n runObservers: ActiveAgentRunObservers,\n ): Promise<CompletionResponse> {\n assertCompletionRequestSupported(this.agent.model, request);\n const providerRequest = this.providerTraceRequest(request);\n const generationObservers = await runObservers.startGeneration({\n turn,\n request,\n ...(providerRequest === undefined ? {} : { providerRequest }),\n modelInfo: {\n provider: this.agent.model.provider,\n defaultModel: this.agent.model.defaultModel,\n capabilities: this.agent.model.capabilities,\n },\n });\n try {\n const response = await this.agent.model.completion(request);\n await generationObservers.end({ turn, response });\n return response;\n } catch (error) {\n await generationObservers.error({ turn, error });\n throw error;\n }\n }\n\n private providerTraceRequest(\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n options: { stream?: boolean | undefined } = {},\n ): JsonObject | undefined {\n try {\n return this.agent.model.traceRequest?.(request, options);\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n }\n\n private async executeToolCalls(\n toolCalls: ToolCall[],\n newMessages: MessageType[],\n onResult?: (result: ToolResultEventPayload) => void,\n onStreamEvent?: (event: AgentToolEventPayload) => void,\n observation?: {\n turn: number;\n runObservers: ActiveAgentRunObservers;\n toolDefinitions?: ToolDefinition[];\n },\n ): Promise<ToolResult[]> {\n const executor = new ToolCallExecutor(\n this.agent,\n this.activeHook,\n this.concurrency,\n this.requestMiddlewares,\n (reason) => this.cancelled(newMessages, reason),\n );\n return executor.execute(toolCalls, onResult, onStreamEvent, observation);\n }\n\n private async startRunObservers(): Promise<ActiveAgentRunObservers> {\n const failOnObserverError =\n this.traceOptions?.failOnObserverError === true ||\n this.agent.observers.some((registration) => registration.failOnObserverError === true);\n return startAgentRunObservers(\n this.agent.observers,\n {\n agentName: this.agent.name,\n agentDescription: this.agent.description,\n instructions: this.agent.instructions,\n trace: this.traceOptions,\n prompt: this.promptMessage,\n history: this.chatHistory,\n maxTurns: this.maxTurnCount,\n },\n failOnObserverError,\n );\n }\n\n private async recordAgentEvent(runId: string, event: AgentStreamEvent): Promise<void> {\n const registration = this.agent.eventStore;\n if (registration === undefined) {\n return;\n }\n if (registration.options.include === \"agent_tool_events\" && event.type !== \"agent_tool_event\") {\n return;\n }\n\n const turn = \"turn\" in event ? event.turn : undefined;\n const agentId = event.type === \"agent_tool_event\" ? event.agentId : this.agent.id;\n const agentName = event.type === \"agent_tool_event\" ? event.agentName : this.agent.name;\n await registration.store.append({\n runId,\n agentId,\n ...(agentName === undefined ? {} : { agentName }),\n ...(turn === undefined ? {} : { turn }),\n ...(event.type === \"agent_tool_event\"\n ? {\n toolName: event.toolName,\n ...(event.toolCallId === undefined ? {} : { toolCallId: event.toolCallId }),\n internalCallId: event.internalCallId,\n }\n : {}),\n event,\n });\n }\n\n private async runCompletionCallHook(\n prompt: MessageType,\n history: MessageType[],\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onCompletionCall?.({\n prompt,\n history,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runRunStartHook(newMessages: MessageType[]): Promise<void> {\n const action = await this.activeHook?.onRunStart?.({\n prompt: this.promptMessage,\n history: this.chatHistory,\n maxTurns: this.maxTurnCount,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runRunEndHook(result: PromptResponse, newMessages: MessageType[]): Promise<void> {\n const action = await this.activeHook?.onRunEnd?.({\n output: result.output,\n usage: result.usage,\n messages: result.messages,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runRunErrorHook(\n error: unknown,\n usage: Usage,\n newMessages: MessageType[],\n ): Promise<unknown> {\n const action = await this.activeHook?.onRunError?.({\n error,\n usage,\n messages: [...this.chatHistory, ...newMessages],\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n return this.cancelled(newMessages, action.reason);\n }\n return error;\n }\n\n private async runTurnStartHook(\n turn: number,\n prompt: MessageType,\n history: MessageType[],\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onTurnStart?.({\n turn,\n prompt,\n history,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runTurnEndHook(\n turn: number,\n response: CompletionResponse,\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onTurnEnd?.({\n turn,\n response,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runCompletionRequestMiddlewares(\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n turn: number,\n ): Promise<ReturnType<CompletionRequestBuilder[\"build\"]>> {\n let current = request;\n for (const middleware of this.activeMiddlewares()) {\n const replacement = await middleware.onCompletionRequest?.({\n turn,\n request: current,\n originalRequest: request,\n });\n if (replacement?.request !== undefined) {\n current = replacement.request;\n }\n }\n return current;\n }\n\n private async runCompletionResponseMiddlewares(\n request: ReturnType<CompletionRequestBuilder[\"build\"]>,\n response: CompletionResponse,\n turn: number,\n ): Promise<CompletionResponse> {\n let current = response;\n for (const middleware of this.activeMiddlewares()) {\n const replacement = await middleware.onCompletionResponse?.({\n turn,\n request,\n response: current,\n originalResponse: response,\n });\n if (replacement?.response !== undefined) {\n current = replacement.response;\n }\n }\n return current;\n }\n\n private async runCompletionResponseHook(\n prompt: MessageType,\n response:\n | Awaited<ReturnType<M[\"completion\"]>>\n | Awaited<ReturnType<CompletionModel[\"completion\"]>>,\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onCompletionResponse?.({\n prompt,\n response,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private async runCompletionErrorHook(\n prompt: MessageType,\n error: unknown,\n newMessages: MessageType[],\n ): Promise<void> {\n const action = await this.activeHook?.onCompletionError?.({\n prompt,\n error,\n run: runControl,\n });\n if (action?.type === \"terminate\") {\n throw this.cancelled(newMessages, action.reason);\n }\n }\n\n private activeMiddlewares(): AgentMiddleware[] {\n return [...this.agent.middlewares, ...this.requestMiddlewares];\n }\n\n private cancelled(newMessages: MessageType[], reason: string): PromptCancelledError {\n return new PromptCancelledError([...this.chatHistory, ...newMessages], reason);\n }\n}\n\nfunction normalizePromptInput(prompt: string | MessageType | MessageType[]): {\n prompt: MessageType;\n history: MessageType[];\n} {\n if (typeof prompt === \"string\") {\n return { prompt: Message.user(prompt), history: [] };\n }\n if (!Array.isArray(prompt)) {\n return { prompt, history: [] };\n }\n if (prompt.length === 0) {\n throw new TypeError(\"Prompt transcript must contain at least one message.\");\n }\n const activePrompt = prompt.at(-1);\n if (activePrompt === undefined) {\n throw new TypeError(\"Prompt transcript must contain at least one message.\");\n }\n return {\n prompt: activePrompt,\n history: prompt.slice(0, -1),\n };\n}\n\nfunction addTurn(turn: number, event: AgentDeltaEvent): AgentStreamEvent {\n if (event.type === \"text_delta\") {\n return { type: \"text_delta\", turn, delta: event.delta };\n }\n if (event.type === \"reasoning_delta\") {\n const mapped: AgentStreamEvent = { type: \"reasoning_delta\", turn, delta: event.delta };\n if (event.id !== undefined) mapped.id = event.id;\n if (event.contentType !== undefined) mapped.contentType = event.contentType;\n if (event.signature !== undefined) mapped.signature = event.signature;\n return mapped;\n }\n return { type: \"tool_call\", turn, toolCall: event.toolCall };\n}\n\nfunction isGenerationDeltaEvent(type: string): boolean {\n return (\n type === \"text_delta\" ||\n type === \"reasoning_delta\" ||\n type === \"tool_call_delta\" ||\n type === \"tool_call\"\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -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"]}
|
|
@@ -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";
|
|
@@ -200,6 +200,9 @@ function defaultToolEmbeddingText(definition) {
|
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
// src/tool/middleware.ts
|
|
203
|
+
function createMiddleware(middleware) {
|
|
204
|
+
return middleware;
|
|
205
|
+
}
|
|
203
206
|
function createToolMiddleware(middleware) {
|
|
204
207
|
return middleware;
|
|
205
208
|
}
|
|
@@ -234,7 +237,8 @@ export {
|
|
|
234
237
|
embedTools,
|
|
235
238
|
createToolIndex,
|
|
236
239
|
isDynamicToolIndex,
|
|
240
|
+
createMiddleware,
|
|
237
241
|
createToolMiddleware,
|
|
238
242
|
createThinkTool
|
|
239
243
|
};
|
|
240
|
-
//# sourceMappingURL=chunk-
|
|
244
|
+
//# sourceMappingURL=chunk-S7EOE6EC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/tool/errors.ts","../src/tool/tool.ts","../src/tool/tool-set.ts","../src/tool/dynamic-tools.ts","../src/tool/middleware.ts","../src/tool/think-tool.ts"],"sourcesContent":["export class ToolCallError extends Error {\n constructor(\n message: string,\n readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"ToolCallError\";\n }\n}\n\nexport class ToolNotFoundError extends Error {\n constructor(readonly toolName: string) {\n super(`Tool not found: ${toolName}`);\n this.name = \"ToolNotFoundError\";\n }\n}\n\nexport class ToolJsonError extends Error {\n constructor(\n message: string,\n readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"ToolJsonError\";\n }\n}\n","import type { JsonObject, JsonValue, ToolDefinition, ToolResultContent } from \"../completion/types\";\n\nexport type ToolApprovalRunContext = {\n agentId: string;\n runId: string;\n sessionId?: string;\n metadata?: JsonObject;\n};\n\nexport type ToolApprovalContext<Args = unknown> = {\n toolName: string;\n args: Args;\n rawArgs: string;\n toolCallId?: string;\n internalCallId: string;\n run: ToolApprovalRunContext;\n};\n\nexport type ToolApprovalPolicy<Args = unknown> = {\n when(ctx: ToolApprovalContext<Args>): boolean | Promise<boolean>;\n reason?: string | ((ctx: ToolApprovalContext<Args>) => string | Promise<string>);\n rejectMessage?: string | ((ctx: ToolApprovalContext<Args>) => string | Promise<string>);\n};\n\nexport type ToolCallStreamEvent = {\n agentId: string;\n agentName?: string | undefined;\n event: unknown;\n};\n\nexport type ToolCallContext = {\n emitStreamEvent?(event: ToolCallStreamEvent): void | Promise<void>;\n};\n\nexport interface Tool<Args = unknown, Output = unknown> {\n readonly name: string;\n readonly approval?: ToolApprovalPolicy<Args>;\n definition(prompt: string): ToolDefinition | Promise<ToolDefinition>;\n call(args: Args, context?: ToolCallContext): Output | Promise<Output>;\n parseApprovalArgs?(args: unknown): Args;\n}\n\nexport type AnyTool = Omit<Tool<unknown, unknown>, \"approval\"> & {\n readonly approval?: unknown;\n};\n\nexport type NormalizedToolOutput = string | ToolResultContent[];\n\nexport const ToolOutput = {\n content(content: ToolResultContent[]): ToolResultContent[] {\n return content;\n },\n};\n\nexport function serializeToolOutput(output: unknown): string {\n if (typeof output === \"string\") {\n return output;\n }\n\n const serialized = JSON.stringify(output);\n return serialized === undefined ? String(output) : serialized;\n}\n\nexport function isToolResultContentArray(value: unknown): value is ToolResultContent[] {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n value.every((item) => {\n if (typeof item !== \"object\" || item === null || !(\"type\" in item)) {\n return false;\n }\n if (item.type === \"text\") {\n return \"text\" in item && typeof item.text === \"string\";\n }\n if (item.type === \"image\") {\n return (\n \"data\" in item &&\n typeof item.data === \"string\" &&\n (!(\"mediaType\" in item) ||\n item.mediaType === undefined ||\n typeof item.mediaType === \"string\")\n );\n }\n return false;\n })\n );\n}\n\nexport function normalizeToolResultOutput(output: unknown): NormalizedToolOutput {\n return isToolResultContentArray(output) ? output : serializeToolOutput(output);\n}\n\nexport function toolResultContentToText(content: ToolResultContent[]): string {\n return content\n .map((item) => (item.type === \"text\" ? item.text : `[image:${item.mediaType ?? \"image/png\"}]`))\n .join(\"\\n\");\n}\n\nexport function parseToolArgs(args: string): JsonValue {\n if (args.trim() === \"\") {\n return {};\n }\n\n return JSON.parse(args) as JsonValue;\n}\n","import type { ToolDefinition } from \"../completion/types\";\nimport { ToolCallError, ToolJsonError, ToolNotFoundError } from \"./errors\";\nimport {\n type AnyTool,\n type NormalizedToolOutput,\n normalizeToolResultOutput,\n parseToolArgs,\n type ToolCallContext,\n} from \"./tool\";\n\nexport class ToolSet {\n private readonly tools = new Map<string, AnyTool>();\n\n static fromTools(tools: AnyTool[]): ToolSet {\n const toolSet = new ToolSet();\n for (const tool of tools) {\n toolSet.addTool(tool);\n }\n return toolSet;\n }\n\n addTool(tool: AnyTool): this {\n this.tools.set(tool.name, tool);\n return this;\n }\n\n addTools(tools: AnyTool[] | ToolSet): this {\n const values = Array.isArray(tools) ? tools : tools.values();\n for (const tool of values) {\n this.addTool(tool);\n }\n return this;\n }\n\n deleteTool(toolName: string): boolean {\n return this.tools.delete(toolName);\n }\n\n contains(toolName: string): boolean {\n return this.tools.has(toolName);\n }\n\n get(toolName: string): AnyTool | undefined {\n return this.tools.get(toolName);\n }\n\n values(): AnyTool[] {\n return [...this.tools.values()];\n }\n\n async getToolDefinitions(prompt = \"\"): Promise<ToolDefinition[]> {\n const defs: ToolDefinition[] = [];\n for (const tool of this.tools.values()) {\n defs.push(await tool.definition(prompt));\n }\n return defs;\n }\n\n async call(\n toolName: string,\n args: string,\n context?: ToolCallContext,\n ): Promise<NormalizedToolOutput> {\n const tool = this.tools.get(toolName);\n if (tool === undefined) {\n throw new ToolNotFoundError(toolName);\n }\n\n let parsedArgs: unknown;\n try {\n parsedArgs = parseToolArgs(args);\n } catch (error) {\n throw new ToolJsonError(`Invalid JSON arguments for tool ${toolName}`, error);\n }\n\n try {\n const output = await tool.call(parsedArgs, context);\n return normalizeToolResultOutput(output);\n } catch (error) {\n if (error instanceof Error) {\n throw new ToolCallError(error.message, error);\n }\n throw new ToolCallError(`Tool ${toolName} failed`, error);\n }\n }\n}\n","import type { ToolDefinition } from \"../completion\";\nimport type { EmbeddedDocument, EmbeddingModel, VectorMetadata } from \"../embeddings\";\nimport { embedDocuments } from \"../embeddings\";\nimport type {\n VectorInspectPage,\n VectorInspectRequest,\n VectorSearchResult,\n VectorSearchToolOptions,\n} from \"../vector-store\";\nimport {\n InMemoryVectorStore,\n type VectorSearchIndex,\n type VectorSearchRequest,\n} from \"../vector-store\";\nimport type { AnyTool, Tool } from \"./tool\";\nimport { ToolSet } from \"./tool-set\";\n\nexport type ToolSearchDocument<Metadata extends VectorMetadata = VectorMetadata> = {\n toolName: string;\n definition: ToolDefinition;\n text: string;\n metadata?: Metadata | undefined;\n};\n\nexport type EmbedToolsOptions<Metadata extends VectorMetadata = VectorMetadata> = {\n content?: ((tool: AnyTool, definition: ToolDefinition) => string | string[]) | undefined;\n metadata?: ((tool: AnyTool, definition: ToolDefinition) => Metadata | undefined) | undefined;\n concurrency?: number | undefined;\n};\n\nexport interface DynamicToolIndex<Metadata extends VectorMetadata = VectorMetadata>\n extends VectorSearchIndex<ToolSearchDocument<Metadata>, Metadata> {\n readonly toolSet: ToolSet;\n}\n\nexport async function embedTools<Metadata extends VectorMetadata = VectorMetadata>(\n model: EmbeddingModel,\n tools: AnyTool[] | ToolSet,\n options: EmbedToolsOptions<Metadata> = {},\n): Promise<Array<EmbeddedDocument<ToolSearchDocument<Metadata>, Metadata>>> {\n const toolList = Array.isArray(tools) ? tools : tools.values();\n const definitions = await Promise.all(\n toolList.map(async (tool) => ({ tool, definition: await tool.definition(\"\") })),\n );\n const documents = definitions.map(({ tool, definition }) => {\n const content = options.content?.(tool, definition) ?? defaultToolEmbeddingText(definition);\n const texts = Array.isArray(content) ? content : [content];\n const metadata = options.metadata?.(tool, definition);\n const document: ToolSearchDocument<Metadata> = {\n toolName: tool.name,\n definition,\n text: texts.join(\"\\n\"),\n ...(metadata === undefined ? {} : { metadata }),\n };\n return { tool, document, texts, metadata };\n });\n\n return embedDocuments(model, documents, {\n id: (item) => item.tool.name,\n content: (item) => item.texts,\n metadata: (item) => item.metadata,\n concurrency: options.concurrency,\n }).then((embedded) =>\n embedded.map((item) => ({\n ...item,\n document: item.document.document,\n })),\n );\n}\n\nexport async function createToolIndex<Metadata extends VectorMetadata = VectorMetadata>(\n model: EmbeddingModel,\n tools: AnyTool[] | ToolSet,\n options: EmbedToolsOptions<Metadata> = {},\n): Promise<DynamicToolIndex<Metadata>> {\n const toolSet = Array.isArray(tools) ? ToolSet.fromTools(tools) : tools;\n const embedded = await embedTools(model, toolSet, options);\n const index = InMemoryVectorStore.fromDocuments(embedded).index(model);\n return new DynamicToolSearchIndex(index, toolSet);\n}\n\nexport function isDynamicToolIndex(value: unknown): value is DynamicToolIndex {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"toolSet\" in value &&\n (value as { toolSet?: unknown }).toolSet instanceof ToolSet\n );\n}\n\nclass DynamicToolSearchIndex<Metadata extends VectorMetadata>\n implements DynamicToolIndex<Metadata>\n{\n readonly inspect?: (\n request: VectorInspectRequest,\n ) => Promise<VectorInspectPage<ToolSearchDocument<Metadata>, Metadata>>;\n\n constructor(\n private readonly index: VectorSearchIndex<ToolSearchDocument<Metadata>, Metadata>,\n readonly toolSet: ToolSet,\n ) {\n if (index.inspect !== undefined) {\n this.inspect = (request) =>\n index.inspect?.(request) as Promise<\n VectorInspectPage<ToolSearchDocument<Metadata>, Metadata>\n >;\n }\n }\n\n search(\n request: VectorSearchRequest,\n ): Promise<Array<VectorSearchResult<ToolSearchDocument<Metadata>, Metadata>>> {\n return this.index.search(request);\n }\n\n searchIds(request: VectorSearchRequest): Promise<Array<{ score: number; id: string }>> {\n return this.index.searchIds(request);\n }\n\n asTool(options: VectorSearchToolOptions): Tool<{ query: string; topK?: number }, unknown> {\n return this.index.asTool(options);\n }\n}\n\nfunction defaultToolEmbeddingText(definition: ToolDefinition): string[] {\n return [definition.name, definition.description, JSON.stringify(definition.parameters)];\n}\n","import type { ToolResultContent } from \"../completion\";\n\nexport type ToolResultMiddlewareArgs = {\n toolName: string;\n args: string;\n result: string;\n originalResult: string;\n structuredResult?: ToolResultContent[] | undefined;\n originalStructuredResult?: ToolResultContent[] | undefined;\n turn: number;\n toolCallId?: string | undefined;\n internalCallId: string;\n};\n\nexport interface ToolMiddleware {\n onResult?(args: ToolResultMiddlewareArgs): string | undefined | Promise<string | undefined>;\n}\n\nexport function createToolMiddleware(middleware: ToolMiddleware): ToolMiddleware {\n return middleware;\n}\n","import { z } from \"zod\";\nimport { createTool } from \"./create-tool\";\n\nconst defaultThinkToolDescription =\n \"Use this tool to record a thought while reasoning through a complex task. It does not retrieve information, store memory, or change external state.\";\n\nconst thinkToolInput = z.object({\n thought: z.string().describe(\"A thought to record while reasoning through a task.\"),\n});\n\nexport type CreateThinkToolOptions = {\n name?: string;\n description?: string;\n};\n\nexport function createThinkTool(options: CreateThinkToolOptions = {}) {\n return createTool({\n name: options.name ?? \"think\",\n description: options.description ?? defaultThinkToolDescription,\n input: thinkToolInput,\n output: z.string(),\n execute: (args) => args.thought,\n });\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/tool/errors.ts","../src/tool/tool.ts","../src/tool/tool-set.ts","../src/tool/dynamic-tools.ts","../src/tool/middleware.ts","../src/tool/think-tool.ts"],"sourcesContent":["export class ToolCallError extends Error {\n constructor(\n message: string,\n readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"ToolCallError\";\n }\n}\n\nexport class ToolNotFoundError extends Error {\n constructor(readonly toolName: string) {\n super(`Tool not found: ${toolName}`);\n this.name = \"ToolNotFoundError\";\n }\n}\n\nexport class ToolJsonError extends Error {\n constructor(\n message: string,\n readonly cause?: unknown,\n ) {\n super(message);\n this.name = \"ToolJsonError\";\n }\n}\n","import type { JsonObject, JsonValue, ToolDefinition, ToolResultContent } from \"../completion/types\";\n\nexport type ToolApprovalRunContext = {\n agentId: string;\n runId: string;\n sessionId?: string;\n metadata?: JsonObject;\n};\n\nexport type ToolApprovalContext<Args = unknown> = {\n toolName: string;\n args: Args;\n rawArgs: string;\n toolCallId?: string;\n internalCallId: string;\n run: ToolApprovalRunContext;\n};\n\nexport type ToolApprovalPolicy<Args = unknown> = {\n when(ctx: ToolApprovalContext<Args>): boolean | Promise<boolean>;\n reason?: string | ((ctx: ToolApprovalContext<Args>) => string | Promise<string>);\n rejectMessage?: string | ((ctx: ToolApprovalContext<Args>) => string | Promise<string>);\n};\n\nexport type ToolCallStreamEvent = {\n agentId: string;\n agentName?: string | undefined;\n event: unknown;\n};\n\nexport type ToolCallContext = {\n emitStreamEvent?(event: ToolCallStreamEvent): void | Promise<void>;\n};\n\nexport interface Tool<Args = unknown, Output = unknown> {\n readonly name: string;\n readonly approval?: ToolApprovalPolicy<Args>;\n definition(prompt: string): ToolDefinition | Promise<ToolDefinition>;\n call(args: Args, context?: ToolCallContext): Output | Promise<Output>;\n parseApprovalArgs?(args: unknown): Args;\n}\n\nexport type AnyTool = Omit<Tool<unknown, unknown>, \"approval\"> & {\n readonly approval?: unknown;\n};\n\nexport type NormalizedToolOutput = string | ToolResultContent[];\n\nexport const ToolOutput = {\n content(content: ToolResultContent[]): ToolResultContent[] {\n return content;\n },\n};\n\nexport function serializeToolOutput(output: unknown): string {\n if (typeof output === \"string\") {\n return output;\n }\n\n const serialized = JSON.stringify(output);\n return serialized === undefined ? String(output) : serialized;\n}\n\nexport function isToolResultContentArray(value: unknown): value is ToolResultContent[] {\n return (\n Array.isArray(value) &&\n value.length > 0 &&\n value.every((item) => {\n if (typeof item !== \"object\" || item === null || !(\"type\" in item)) {\n return false;\n }\n if (item.type === \"text\") {\n return \"text\" in item && typeof item.text === \"string\";\n }\n if (item.type === \"image\") {\n return (\n \"data\" in item &&\n typeof item.data === \"string\" &&\n (!(\"mediaType\" in item) ||\n item.mediaType === undefined ||\n typeof item.mediaType === \"string\")\n );\n }\n return false;\n })\n );\n}\n\nexport function normalizeToolResultOutput(output: unknown): NormalizedToolOutput {\n return isToolResultContentArray(output) ? output : serializeToolOutput(output);\n}\n\nexport function toolResultContentToText(content: ToolResultContent[]): string {\n return content\n .map((item) => (item.type === \"text\" ? item.text : `[image:${item.mediaType ?? \"image/png\"}]`))\n .join(\"\\n\");\n}\n\nexport function parseToolArgs(args: string): JsonValue {\n if (args.trim() === \"\") {\n return {};\n }\n\n return JSON.parse(args) as JsonValue;\n}\n","import type { ToolDefinition } from \"../completion/types\";\nimport { ToolCallError, ToolJsonError, ToolNotFoundError } from \"./errors\";\nimport {\n type AnyTool,\n type NormalizedToolOutput,\n normalizeToolResultOutput,\n parseToolArgs,\n type ToolCallContext,\n} from \"./tool\";\n\nexport class ToolSet {\n private readonly tools = new Map<string, AnyTool>();\n\n static fromTools(tools: AnyTool[]): ToolSet {\n const toolSet = new ToolSet();\n for (const tool of tools) {\n toolSet.addTool(tool);\n }\n return toolSet;\n }\n\n addTool(tool: AnyTool): this {\n this.tools.set(tool.name, tool);\n return this;\n }\n\n addTools(tools: AnyTool[] | ToolSet): this {\n const values = Array.isArray(tools) ? tools : tools.values();\n for (const tool of values) {\n this.addTool(tool);\n }\n return this;\n }\n\n deleteTool(toolName: string): boolean {\n return this.tools.delete(toolName);\n }\n\n contains(toolName: string): boolean {\n return this.tools.has(toolName);\n }\n\n get(toolName: string): AnyTool | undefined {\n return this.tools.get(toolName);\n }\n\n values(): AnyTool[] {\n return [...this.tools.values()];\n }\n\n async getToolDefinitions(prompt = \"\"): Promise<ToolDefinition[]> {\n const defs: ToolDefinition[] = [];\n for (const tool of this.tools.values()) {\n defs.push(await tool.definition(prompt));\n }\n return defs;\n }\n\n async call(\n toolName: string,\n args: string,\n context?: ToolCallContext,\n ): Promise<NormalizedToolOutput> {\n const tool = this.tools.get(toolName);\n if (tool === undefined) {\n throw new ToolNotFoundError(toolName);\n }\n\n let parsedArgs: unknown;\n try {\n parsedArgs = parseToolArgs(args);\n } catch (error) {\n throw new ToolJsonError(`Invalid JSON arguments for tool ${toolName}`, error);\n }\n\n try {\n const output = await tool.call(parsedArgs, context);\n return normalizeToolResultOutput(output);\n } catch (error) {\n if (error instanceof Error) {\n throw new ToolCallError(error.message, error);\n }\n throw new ToolCallError(`Tool ${toolName} failed`, error);\n }\n }\n}\n","import type { ToolDefinition } from \"../completion\";\nimport type { EmbeddedDocument, EmbeddingModel, VectorMetadata } from \"../embeddings\";\nimport { embedDocuments } from \"../embeddings\";\nimport type {\n VectorInspectPage,\n VectorInspectRequest,\n VectorSearchResult,\n VectorSearchToolOptions,\n} from \"../vector-store\";\nimport {\n InMemoryVectorStore,\n type VectorSearchIndex,\n type VectorSearchRequest,\n} from \"../vector-store\";\nimport type { AnyTool, Tool } from \"./tool\";\nimport { ToolSet } from \"./tool-set\";\n\nexport type ToolSearchDocument<Metadata extends VectorMetadata = VectorMetadata> = {\n toolName: string;\n definition: ToolDefinition;\n text: string;\n metadata?: Metadata | undefined;\n};\n\nexport type EmbedToolsOptions<Metadata extends VectorMetadata = VectorMetadata> = {\n content?: ((tool: AnyTool, definition: ToolDefinition) => string | string[]) | undefined;\n metadata?: ((tool: AnyTool, definition: ToolDefinition) => Metadata | undefined) | undefined;\n concurrency?: number | undefined;\n};\n\nexport interface DynamicToolIndex<Metadata extends VectorMetadata = VectorMetadata>\n extends VectorSearchIndex<ToolSearchDocument<Metadata>, Metadata> {\n readonly toolSet: ToolSet;\n}\n\nexport async function embedTools<Metadata extends VectorMetadata = VectorMetadata>(\n model: EmbeddingModel,\n tools: AnyTool[] | ToolSet,\n options: EmbedToolsOptions<Metadata> = {},\n): Promise<Array<EmbeddedDocument<ToolSearchDocument<Metadata>, Metadata>>> {\n const toolList = Array.isArray(tools) ? tools : tools.values();\n const definitions = await Promise.all(\n toolList.map(async (tool) => ({ tool, definition: await tool.definition(\"\") })),\n );\n const documents = definitions.map(({ tool, definition }) => {\n const content = options.content?.(tool, definition) ?? defaultToolEmbeddingText(definition);\n const texts = Array.isArray(content) ? content : [content];\n const metadata = options.metadata?.(tool, definition);\n const document: ToolSearchDocument<Metadata> = {\n toolName: tool.name,\n definition,\n text: texts.join(\"\\n\"),\n ...(metadata === undefined ? {} : { metadata }),\n };\n return { tool, document, texts, metadata };\n });\n\n return embedDocuments(model, documents, {\n id: (item) => item.tool.name,\n content: (item) => item.texts,\n metadata: (item) => item.metadata,\n concurrency: options.concurrency,\n }).then((embedded) =>\n embedded.map((item) => ({\n ...item,\n document: item.document.document,\n })),\n );\n}\n\nexport async function createToolIndex<Metadata extends VectorMetadata = VectorMetadata>(\n model: EmbeddingModel,\n tools: AnyTool[] | ToolSet,\n options: EmbedToolsOptions<Metadata> = {},\n): Promise<DynamicToolIndex<Metadata>> {\n const toolSet = Array.isArray(tools) ? ToolSet.fromTools(tools) : tools;\n const embedded = await embedTools(model, toolSet, options);\n const index = InMemoryVectorStore.fromDocuments(embedded).index(model);\n return new DynamicToolSearchIndex(index, toolSet);\n}\n\nexport function isDynamicToolIndex(value: unknown): value is DynamicToolIndex {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"toolSet\" in value &&\n (value as { toolSet?: unknown }).toolSet instanceof ToolSet\n );\n}\n\nclass DynamicToolSearchIndex<Metadata extends VectorMetadata>\n implements DynamicToolIndex<Metadata>\n{\n readonly inspect?: (\n request: VectorInspectRequest,\n ) => Promise<VectorInspectPage<ToolSearchDocument<Metadata>, Metadata>>;\n\n constructor(\n private readonly index: VectorSearchIndex<ToolSearchDocument<Metadata>, Metadata>,\n readonly toolSet: ToolSet,\n ) {\n if (index.inspect !== undefined) {\n this.inspect = (request) =>\n index.inspect?.(request) as Promise<\n VectorInspectPage<ToolSearchDocument<Metadata>, Metadata>\n >;\n }\n }\n\n search(\n request: VectorSearchRequest,\n ): Promise<Array<VectorSearchResult<ToolSearchDocument<Metadata>, Metadata>>> {\n return this.index.search(request);\n }\n\n searchIds(request: VectorSearchRequest): Promise<Array<{ score: number; id: string }>> {\n return this.index.searchIds(request);\n }\n\n asTool(options: VectorSearchToolOptions): Tool<{ query: string; topK?: number }, unknown> {\n return this.index.asTool(options);\n }\n}\n\nfunction defaultToolEmbeddingText(definition: ToolDefinition): string[] {\n return [definition.name, definition.description, JSON.stringify(definition.parameters)];\n}\n","import type {\n CompletionRequest,\n CompletionResponse,\n JsonValue,\n ToolResultContent,\n} from \"../completion\";\n\ntype MaybePromise<T> = T | Promise<T>;\n\nexport type CompletionRequestMiddlewareArgs = {\n turn: number;\n request: CompletionRequest;\n originalRequest: CompletionRequest;\n};\n\nexport type CompletionRequestMiddlewareResult =\n | {\n request: CompletionRequest;\n }\n | undefined;\n\nexport type CompletionResponseMiddlewareArgs<RawResponse = unknown> = {\n turn: number;\n request: CompletionRequest;\n response: CompletionResponse<RawResponse>;\n originalResponse: CompletionResponse<RawResponse>;\n};\n\nexport type CompletionResponseMiddlewareResult<RawResponse = unknown> =\n | {\n response: CompletionResponse<RawResponse>;\n }\n | undefined;\n\nexport type ToolInputMiddlewareArgs = {\n toolName: string;\n args: string;\n originalArgs: string;\n turn: number;\n toolCallId?: string | undefined;\n internalCallId: string;\n};\n\nexport type ToolInputMiddlewareResult =\n | {\n args: JsonValue | string;\n }\n | undefined;\n\nexport type ToolResultMiddlewareArgs = {\n toolName: string;\n args: string;\n result: string;\n originalResult: string;\n structuredResult?: ToolResultContent[] | undefined;\n originalStructuredResult?: ToolResultContent[] | undefined;\n turn: number;\n toolCallId?: string | undefined;\n internalCallId: string;\n};\n\nexport type ToolOutputMiddlewareArgs = ToolResultMiddlewareArgs;\n\nexport type ToolOutputMiddlewareResult =\n | string\n | {\n result?: string | undefined;\n structuredResult?: ToolResultContent[] | undefined;\n }\n | undefined;\n\nexport interface AgentMiddleware<RawResponse = unknown> {\n onCompletionRequest?(\n args: CompletionRequestMiddlewareArgs,\n ): MaybePromise<CompletionRequestMiddlewareResult>;\n onCompletionResponse?(\n args: CompletionResponseMiddlewareArgs<RawResponse>,\n ): MaybePromise<CompletionResponseMiddlewareResult<RawResponse>>;\n onToolInput?(args: ToolInputMiddlewareArgs): MaybePromise<ToolInputMiddlewareResult>;\n onToolOutput?(args: ToolOutputMiddlewareArgs): MaybePromise<ToolOutputMiddlewareResult>;\n /**\n * @deprecated Use `onToolOutput` instead.\n */\n onResult?(args: ToolResultMiddlewareArgs): string | undefined | Promise<string | undefined>;\n}\n\n/**\n * @deprecated Use `AgentMiddleware` instead.\n */\nexport type ToolMiddleware<RawResponse = unknown> = AgentMiddleware<RawResponse>;\n\nexport function createMiddleware<RawResponse = unknown>(\n middleware: AgentMiddleware<RawResponse>,\n): AgentMiddleware<RawResponse> {\n return middleware;\n}\n\n/**\n * @deprecated Use `createMiddleware` instead.\n */\nexport function createToolMiddleware<RawResponse = unknown>(\n middleware: ToolMiddleware<RawResponse>,\n): ToolMiddleware<RawResponse> {\n return middleware;\n}\n","import { z } from \"zod\";\nimport { createTool } from \"./create-tool\";\n\nconst defaultThinkToolDescription =\n \"Use this tool to record a thought while reasoning through a complex task. It does not retrieve information, store memory, or change external state.\";\n\nconst thinkToolInput = z.object({\n thought: z.string().describe(\"A thought to record while reasoning through a task.\"),\n});\n\nexport type CreateThinkToolOptions = {\n name?: string;\n description?: string;\n};\n\nexport function createThinkTool(options: CreateThinkToolOptions = {}) {\n return createTool({\n name: options.name ?? \"think\",\n description: options.description ?? defaultThinkToolDescription,\n input: thinkToolInput,\n output: z.string(),\n execute: (args) => args.thought,\n });\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AgentBuilder
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-365W6FJD.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-Z7HY4WU7.js.map
|
package/dist/evals/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { P as PromptResponse, e as Agent } from '../agent-
|
|
1
|
+
import { P as PromptResponse, e as Agent } from '../agent-CWGuTdMJ.js';
|
|
2
2
|
import { e as JsonValue, M as Message, C as CompletionModel } from '../types-C54aNoCd.js';
|
|
3
3
|
import { E as EmbeddingModel } from '../types-IB2e9u5M.js';
|
|
4
4
|
import { Z as ZodSchema } from '../zod-schema-C7F4clpm.js';
|
|
5
5
|
import '../memory/index.js';
|
|
6
6
|
import '../observability/index.js';
|
|
7
7
|
import '../tool-C3ciF-VG.js';
|
|
8
|
-
import '../middleware-
|
|
8
|
+
import '../middleware-qfm1EFKK.js';
|
|
9
9
|
import '../vector-store/index.js';
|
|
10
10
|
import 'zod';
|
|
11
11
|
|
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-Z7HY4WU7.js";
|
|
4
|
+
import "../chunk-365W6FJD.js";
|
|
5
|
+
import "../chunk-ORLEOXD7.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-S7EOE6EC.js";
|
|
10
|
+
import "../chunk-P425B6GR.js";
|
|
11
11
|
import "../chunk-6GJDBBDC.js";
|
|
12
12
|
import {
|
|
13
13
|
cosineSimilarity,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { e as Agent } from '../agent-
|
|
1
|
+
import { e as Agent } from '../agent-CWGuTdMJ.js';
|
|
2
2
|
import { U as Usage, M as Message, C as CompletionModel, e as JsonValue, m as ToolChoice } from '../types-C54aNoCd.js';
|
|
3
3
|
import { Z as ZodSchema } from '../zod-schema-C7F4clpm.js';
|
|
4
4
|
import '../memory/index.js';
|
|
5
5
|
import '../observability/index.js';
|
|
6
6
|
import '../tool-C3ciF-VG.js';
|
|
7
|
-
import '../middleware-
|
|
7
|
+
import '../middleware-qfm1EFKK.js';
|
|
8
8
|
import '../types-IB2e9u5M.js';
|
|
9
9
|
import '../vector-store/index.js';
|
|
10
10
|
import 'zod';
|