UNPKG

@openai/agents-core

Version:

The OpenAI Agents SDK is a lightweight yet powerful framework for building multi-agent workflows.

914 lines (913 loc) • 41 kB
import type { Agent } from './agent'; import type { MCPTool } from './mcpShared'; import type { Computer } from './computer'; import type { Shell, ShellAction } from './shell'; import type { Editor, ApplyPatchOperation } from './editor'; import { JsonObjectSchema, JsonObjectSchemaNonStrict, JsonObjectSchemaStrict, UnknownContext } from './types'; import { RunContext } from './runContext'; import type { RunConfig } from './run'; import type { RunResult } from './result'; import { ToolTimeoutError } from './errors'; import { type InvalidToolInputDisposition } from './toolInputError'; import { type InvalidToolOutputFailure } from './toolOutputError'; import { RunToolApprovalItem, RunToolCallOutputItem } from './items'; import * as ProviderData from './types/providerData'; import * as protocol from './types/protocol'; import type { ZodInfer, ZodObjectLike } from './utils/zodCompat'; import type { StandardSchemaOutput, StandardSchemaWithJSON } from './utils/standardSchema'; import { ToolInputGuardrailDefinition, ToolOutputGuardrailDefinition, ToolInputGuardrailFunction, ToolOutputGuardrailFunction } from './toolGuardrail'; import type { ToolOutputCustomDataExtractor } from './utils/customData'; import { type ToolAllowedCallers } from './utils/toolCallers'; export type { ToolAllowedCaller, ToolAllowedCallers, } from './utils/toolCallers'; export type { ToolOutputCustomData } from './utils/customData'; export type { ToolOutputText, ToolOutputImage, ToolOutputFileContent, ToolCallStructuredOutput, ToolCallOutputContent, } from './types/protocol'; /** * A function that determines if a tool call should be approved. * Conditional policies receive an isolated copy of schema-normalized plain data. * Outputs that cannot be copied as plain data are rejected before approval. * Copyable arrays and primitives require manual approval instead of calling the * policy. Validation can run application code before approval. * After state restoration, the policy is evaluated again on the current * normalized input before applying a manual decision for the same tool call. * Return a plain object for conditional approval that must survive restoration; * use `needsApproval: true` for durable manual approvals without a policy. * * @param runContext The current run context * @param input The input to the tool * @param callId The ID of the tool call * @returns True if the tool call should be approved, false otherwise */ export type ToolApprovalFunction<TParameters extends ToolInputParameters> = (runContext: RunContext, input: ToolExecuteArgument<TParameters>, callId?: string) => Promise<boolean>; export declare const FUNCTION_TOOL_PARSED_INPUT_CALLBACK: unique symbol; export declare const FUNCTION_TOOL_INVALID_OUTPUT_FAILURE_CALLBACK: unique symbol; export type FunctionToolPreparedInput = { consumed: boolean; input: string; token: object; validationMode: 'standard' | 'other'; disposition?: InvalidToolInputDisposition; result: { success: true; value: any; } | { success: false; error: unknown; }; }; /** Prepare input for SDK runners through the internal utilities entry point. */ export declare function prepareFunctionToolInput(tool: Pick<FunctionTool<any, any, any>, 'invoke' | 'needsApproval'>, input: string): FunctionToolPreparedInput | undefined; /** Attach prepared input for SDK runners through the internal utilities entry point. */ export declare function setFunctionToolPreparedInput(details: object, preparedInput: FunctionToolPreparedInput): void; export declare function hasDynamicFunctionToolApprovalPolicy(tool: Pick<FunctionTool<any, any, any>, 'needsApproval'>): boolean; export declare function hasInspectableFunctionToolArguments(value: unknown): value is Record<string, unknown>; export type ToolCallDetails = { toolCall?: protocol.FunctionCallItem; resumeState?: string; signal?: AbortSignal; [FUNCTION_TOOL_PARSED_INPUT_CALLBACK]?: (input: unknown) => void; [FUNCTION_TOOL_INVALID_OUTPUT_FAILURE_CALLBACK]?: (failure: InvalidToolOutputFailure) => void; /** * Internal: parent runner config for nested agent-tool runs (Agent.asTool). */ parentRunConfig?: Partial<RunConfig>; }; export type FunctionToolCustomDataContext<Context = UnknownContext, TParameters extends ToolInputParameters = ToolInputParameters, Result = unknown> = { runContext: RunContext<Context>; tool: FunctionTool<Context, TParameters, Result>; toolCall: protocol.FunctionCallItem; input: unknown; output: unknown; rawItem: protocol.FunctionCallResultItem; }; export type FunctionToolCustomDataExtractor<Context = UnknownContext, TParameters extends ToolInputParameters = ToolInputParameters, Result = unknown> = ToolOutputCustomDataExtractor<FunctionToolCustomDataContext<Context, TParameters, Result>>; export type ComputerToolCustomDataContext<Context = UnknownContext, TComputer extends Computer = Computer> = { runContext: RunContext<Context>; tool: ComputerTool<Context, TComputer>; toolCall: protocol.ComputerUseCallItem; output: string; rawItem: protocol.ComputerCallResultItem; }; export type ComputerToolCustomDataExtractor<Context = UnknownContext, TComputer extends Computer = Computer> = ToolOutputCustomDataExtractor<ComputerToolCustomDataContext<Context, TComputer>>; export type ApplyPatchToolCustomDataContext = { runContext: RunContext; tool: ApplyPatchTool; operation: ApplyPatchOperation; output: string; status: protocol.ApplyPatchCallResultItem['status']; rawItem: protocol.ApplyPatchCallResultItem; }; export type ApplyPatchToolCustomDataExtractor = ToolOutputCustomDataExtractor<ApplyPatchToolCustomDataContext>; export type FunctionToolTimeoutBehavior = 'error_as_result' | 'raise_exception'; export type ToolTimeoutErrorFunction<Context = UnknownContext, Result = string> = (context: RunContext<Context>, error: ToolTimeoutError, details?: ToolCallDetails) => Promise<Result> | Result; export type ShellApprovalFunction = (runContext: RunContext, action: ShellAction, callId?: string) => Promise<boolean>; export type ShellOnApprovalFunction = (runContext: RunContext, approvalItem: RunToolApprovalItem) => Promise<{ approve: boolean; reason?: string; }>; export type ShellToolLocalSkill = { description: string; name: string; path: string; }; export type ShellToolSkillReference = { type: 'skill_reference'; skillId: string; version?: string; }; export type ShellToolInlineSkillSource = { data: string; mediaType: 'application/zip'; type: 'base64'; }; export type ShellToolInlineSkill = { description: string; name: string; source: ShellToolInlineSkillSource; type: 'inline'; }; export type ShellToolContainerSkill = ShellToolSkillReference | ShellToolInlineSkill; export type ShellToolContainerNetworkPolicyDomainSecret = { domain: string; name: string; value: string; }; export type ShellToolContainerNetworkPolicyAllowlist = { allowedDomains: string[]; domainSecrets?: ShellToolContainerNetworkPolicyDomainSecret[]; type: 'allowlist'; }; export type ShellToolContainerNetworkPolicyDisabled = { type: 'disabled'; }; export type ShellToolContainerNetworkPolicy = ShellToolContainerNetworkPolicyAllowlist | ShellToolContainerNetworkPolicyDisabled; export type ShellToolLocalEnvironment = { type: 'local'; skills?: ShellToolLocalSkill[]; }; export type ShellToolContainerAutoEnvironment = { type: 'container_auto'; fileIds?: string[]; memoryLimit?: '1g' | '4g' | '16g' | '64g' | null; networkPolicy?: ShellToolContainerNetworkPolicy; skills?: ShellToolContainerSkill[]; }; export type ShellToolContainerReferenceEnvironment = { type: 'container_reference'; containerId: string; }; export type ShellToolHostedEnvironment = ShellToolContainerAutoEnvironment | ShellToolContainerReferenceEnvironment; export type ShellToolEnvironment = ShellToolLocalEnvironment | ShellToolHostedEnvironment; export type ApplyPatchApprovalFunction = (runContext: RunContext, operation: ApplyPatchOperation, callId?: string) => Promise<boolean>; export type ApplyPatchOnApprovalFunction = (runContext: RunContext, approvalItem: RunToolApprovalItem) => Promise<{ approve: boolean; reason?: string; }>; export type ComputerApprovalFunction = (runContext: RunContext, action: protocol.ComputerAction, callId?: string) => Promise<boolean>; export type ComputerSafetyCheck = { id: string; code: string; message?: string; [key: string]: unknown; }; /** * Return true to acknowledge all pending checks, or false to reject the computer * call without executing it. Rejection returns a tool result and lets the run * continue. Returning void leaves the checks unacknowledged and allows execution. */ export type ComputerSafetyCheckResult = void | boolean | { acknowledgedSafetyChecks: ComputerSafetyCheck[]; } | { acknowledged_safety_checks: ComputerSafetyCheck[]; }; export type ComputerOnSafetyCheckFunction = (args: { runContext: RunContext; pendingSafetyChecks: ComputerSafetyCheck[]; toolCall: protocol.ComputerUseCallItem; }) => Promise<ComputerSafetyCheckResult>; export type ToolEnabledFunction<Context = UnknownContext> = (runContext: RunContext<Context>, agent: Agent<any, any>) => Promise<boolean>; type ToolEnabledPredicate<Context = UnknownContext> = (args: { runContext: RunContext<Context>; agent: Agent<any, any>; }) => boolean | Promise<boolean>; type ToolEnabledOption<Context = UnknownContext> = boolean | ToolEnabledPredicate<Context>; /** * Exposes a function to the agent as a tool to be called * * @param Context The context of the tool * @param Result The result of the tool */ export type FunctionTool<Context = UnknownContext, TParameters extends ToolInputParameters = undefined, Result = unknown> = { type: 'function'; /** * The name of the tool. */ name: string; /** * The description of the tool that helps the model to understand when to use the tool */ description: string; /** * A JSON schema describing the parameters of the tool. */ parameters: JsonObjectSchema<any>; /** * Whether the tool is strict. If true, the model must try to strictly follow the schema (might result in slower response times). */ strict: boolean; /** * Responses API only. Hides a top-level function tool definition until tool search loads it. */ deferLoading?: boolean; /** * A fresh copy of the untrusted annotations supplied by the MCP server at discovery. * Absent for ordinary function tools and when the server omits annotations. * Missing hints stay omitted. The application decides which servers to trust * and when to approve or retry a call. */ readonly mcpAnnotations?: Readonly<NonNullable<MCPTool['annotations']>>; /** * Additional provider-specific metadata forwarded with the function tool definition. */ providerData?: Record<string, any>; /** * Responses API only. Controls which execution contexts can invoke the tool. * When omitted, the Responses API defaults to direct calls only. */ allowedCallers?: ToolAllowedCallers; /** * Responses API only. Describes the JSON value encoded in string outputs. * Zod schemas also validate the tool result at runtime. */ outputSchema?: JsonObjectSchema<any>; /** * The function to invoke when the tool is called. */ invoke: (runContext: RunContext<Context>, input: string, details?: ToolCallDetails) => Promise<string | Result>; /** * Optional model-visible fallback for execution errors and pre-execution * failures. Structured tools use this to preserve their output contract. */ errorFunction?: ToolErrorFunction<Context, string | Result> | null; /** * Whether the tool needs human approval before it can be called. If this is true, the run will result in an `interruption` that the * program has to resolve by approving or rejecting the tool call. */ needsApproval: ToolApprovalFunction<TParameters>; /** * Optional timeout in milliseconds for each tool invocation. */ timeoutMs?: number; /** * Defines how timeout errors are handled. * * - `error_as_result`: return a model-visible timeout message. * - `raise_exception`: raise `ToolTimeoutError` and fail the run. * * Tools created with an output schema default to `raise_exception`; other * function tools default to `error_as_result`. */ timeoutBehavior?: FunctionToolTimeoutBehavior; /** * Optional formatter for timeout errors when timeoutBehavior is `error_as_result`. */ timeoutErrorFunction?: ToolTimeoutErrorFunction<Context, Result>; /** * Determines whether the tool should be made available to the model for the current run. */ isEnabled: ToolEnabledFunction<Context>; /** * Guardrails that run before the tool executes. */ inputGuardrails?: ToolInputGuardrailDefinition<Context>[]; /** * Guardrails that run after the tool executes. */ outputGuardrails?: ToolOutputGuardrailDefinition<Context>[]; /** * Optional callback that attaches SDK-only custom data to the emitted tool output item. */ customDataExtractor?: FunctionToolCustomDataExtractor<Context, TParameters, Result>; }; /** * Arguments provided to computer initializers. */ export type ComputerInitializerArgs<Context = UnknownContext> = { runContext: RunContext<Context>; }; /** * A function that initializes a computer for the current run. */ type BivariantComputerCreate<Context = UnknownContext, TComputer extends Computer = Computer> = { bivarianceHack: (args: ComputerInitializerArgs<Context>) => TComputer | Promise<TComputer>; }['bivarianceHack']; export type ComputerCreate<Context = UnknownContext, TComputer extends Computer = Computer> = BivariantComputerCreate<Context, TComputer>; /** * Optional cleanup invoked after a run finishes when the computer was created via an initializer. */ type BivariantComputerDispose<Context = UnknownContext, TComputer extends Computer = Computer> = { bivarianceHack: (args: ComputerInitializerArgs<Context> & { computer: TComputer; }) => void | Promise<void>; }['bivarianceHack']; export type ComputerDispose<Context = UnknownContext, TComputer extends Computer = Computer> = BivariantComputerDispose<Context, TComputer>; /** * Initializes a computer for the current run and optionally tears it down after the run. */ export type ComputerProvider<Context = UnknownContext, TComputer extends Computer = Computer> = { create: ComputerCreate<Context, TComputer>; dispose?: ComputerDispose<Context, TComputer>; }; type ComputerInitializer<Context = UnknownContext, TComputer extends Computer = Computer> = ComputerCreate<Context, TComputer> | ComputerProvider<Context, TComputer>; export type ComputerConfig<Context = UnknownContext, TComputer extends Computer = Computer> = Computer | ComputerInitializer<Context, TComputer>; /** * Exposes a computer to the model as a tool to be called * * @param Context The context of the tool * @param Result The result of the tool */ export type ComputerTool<Context = UnknownContext, TComputer extends Computer = Computer> = { type: 'computer'; /** * The name of the tool. */ name: 'computer_use_preview' | (string & {}); /** * The computer to use. */ computer: ComputerConfig<Context, TComputer>; /** * Predicate determining whether this computer action requires approval. */ needsApproval: ComputerApprovalFunction; /** * Optional handler invoked before execution when the model reports pending safety checks. * If omitted, the checks remain unacknowledged and execution continues with a warning. * Return false to reject the call, or true to acknowledge all checks. * Returning void allows execution without acknowledgment. */ onSafetyCheck?: ComputerOnSafetyCheckFunction; /** * Optional callback that attaches SDK-only custom data to the emitted tool output item. */ customDataExtractor?: ComputerToolCustomDataExtractor<Context, TComputer>; }; /** * Exposes a computer to the agent as a tool to be called. * * @param options Additional configuration for the computer tool like specifying the location of your agent * @returns a computer tool definition */ export declare function computerTool<Context = UnknownContext, TComputer extends Computer = Computer>(options: { name?: string; computer: ComputerConfig<Context, TComputer>; needsApproval?: boolean | ComputerApprovalFunction; onSafetyCheck?: ComputerOnSafetyCheckFunction; customDataExtractor?: ComputerToolCustomDataExtractor<Context, TComputer>; }): ComputerTool<Context, TComputer>; type ShellToolBase = { type: 'shell'; /** * Public name exposed to the model. Defaults to `shell`. */ name: string; /** * Predicate determining whether this shell action requires approval. */ needsApproval: ShellApprovalFunction; /** * Optional handler to auto-approve or reject when approval is required. * If provided, it will be invoked immediately when an approval is needed. */ onApproval?: ShellOnApprovalFunction; /** * Responses API only. Controls which execution contexts can invoke the tool. */ allowedCallers?: ToolAllowedCallers; }; type LocalShellTool = ShellToolBase & { /** * Optional for backward compatibility with direct `ShellTool` literals. * When omitted, local mode is assumed. */ environment?: ShellToolLocalEnvironment; /** * The shell implementation to execute commands in local mode. */ shell: Shell; }; type NormalizedLocalShellTool = Omit<LocalShellTool, 'environment'> & { environment: ShellToolLocalEnvironment; }; type HostedShellTool = ShellToolBase & { environment: ShellToolHostedEnvironment; /** * Hosted environments do not accept local shell implementations. */ shell?: never; }; export type ShellTool = LocalShellTool | HostedShellTool; type LocalShellToolOptions = { name?: string; environment?: ShellToolLocalEnvironment; shell: Shell; needsApproval?: boolean | ShellApprovalFunction; onApproval?: ShellOnApprovalFunction; allowedCallers?: ToolAllowedCallers; }; type HostedShellToolOptions = { name?: string; environment: ShellToolHostedEnvironment; shell?: never; needsApproval?: never; onApproval?: never; allowedCallers?: ToolAllowedCallers; }; export declare function shellTool(options: LocalShellToolOptions): NormalizedLocalShellTool; export declare function shellTool(options: HostedShellToolOptions): HostedShellTool; export type ApplyPatchTool = { type: 'apply_patch'; /** * Public name exposed to the model. Defaults to `apply_patch`. */ name: string; /** * Diff applier invoked when the tool is called. */ editor: Editor; /** * Predicate determining whether this apply_patch operation requires approval. */ needsApproval: ApplyPatchApprovalFunction; /** * Optional handler to auto-approve or reject when approval is required. */ onApproval?: ApplyPatchOnApprovalFunction; /** * Responses API only. Controls which execution contexts can invoke the tool. */ allowedCallers?: ToolAllowedCallers; /** * Optional callback that attaches SDK-only custom data to the emitted tool output item. */ customDataExtractor?: ApplyPatchToolCustomDataExtractor; }; export declare function applyPatchTool(options: Partial<Omit<ApplyPatchTool, 'type' | 'editor' | 'needsApproval'>> & { editor: Editor; needsApproval?: boolean | ApplyPatchApprovalFunction; onApproval?: ApplyPatchOnApprovalFunction; customDataExtractor?: ApplyPatchToolCustomDataExtractor; }): ApplyPatchTool; export type HostedMCPApprovalFunction<Context = UnknownContext> = (context: RunContext<Context>, data: RunToolApprovalItem) => Promise<{ approve: boolean; reason?: string; }>; /** * A hosted MCP tool that lets the model call a remote MCP server directly * without a round trip back to your code. */ export type HostedMCPTool<Context = UnknownContext> = HostedTool & { name: 'hosted_mcp'; providerData: ProviderData.HostedMCPTool<Context>; }; /** * Creates a hosted MCP tool definition. * * @param options - Configuration for the hosted MCP tool, including server connection details * and approval requirements. */ export declare function hostedMcpTool<Context = UnknownContext>(options: { allowedTools?: string[] | { toolNames?: string[]; }; allowedCallers?: ToolAllowedCallers; deferLoading?: boolean; serverDescription?: string; } & ({ serverLabel: string; serverUrl?: string; authorization?: string; headers?: Record<string, string>; } | { serverLabel: string; connectorId: string; authorization?: string; headers?: Record<string, string>; }) & ({ requireApproval?: never; } | { requireApproval: 'never'; } | { requireApproval: 'always' | { never?: { toolNames?: string[]; readOnly?: boolean; }; always?: { toolNames?: string[]; readOnly?: boolean; }; }; onApproval?: HostedMCPApprovalFunction<Context>; })): HostedMCPTool<Context>; /** * A built-in hosted tool that will be executed directly by the model during the request and won't result in local code executions. * Examples of these are `web_search_call` or `file_search_call`. * * @param Context The context of the tool * @param Result The result of the tool */ export type HostedTool = { type: 'hosted_tool'; /** * A unique name for the tool. */ name: string; /** * Additional configuration data that gets passed to the tool */ providerData?: Record<string, any>; }; export type ClientToolSearchLoadDefaultFunction<Context = UnknownContext> = (paths: string[]) => Tool<Context>[]; export type ClientToolSearchExecutorArgs<Context = UnknownContext> = { agent: Agent<Context, any>; availableTools: Tool<Context>[]; loadDefault: ClientToolSearchLoadDefaultFunction<Context>; runContext: RunContext<Context>; toolCall: protocol.ToolSearchCallItem; }; export type ClientToolSearchExecutorResult<Context = UnknownContext> = Tool<Context> | Tool<Context>[] | null | undefined; export type ClientToolSearchExecutor<Context = UnknownContext> = (args: ClientToolSearchExecutorArgs<Context>) => ClientToolSearchExecutorResult<Context> | Promise<ClientToolSearchExecutorResult<Context>>; export declare const CLIENT_TOOL_SEARCH_EXECUTOR: unique symbol; export declare function attachClientToolSearchExecutor<Context = UnknownContext>(tool: HostedTool, executor: ClientToolSearchExecutor<Context>): HostedTool; export declare function getClientToolSearchExecutor<Context = UnknownContext>(tool: Tool<Context>): ClientToolSearchExecutor<Context> | undefined; export declare function getToolSearchRuntimeToolKey<Context = UnknownContext>(tool: Tool<Context>): string | undefined; /** * A tool that can be called by the model. * @template Context The context passed to the tool */ export type Tool<Context = unknown> = FunctionTool<Context, any, any> | ComputerTool<Context, any> | ShellTool | ApplyPatchTool | HostedTool; /** * The result of invoking a function tool. Either the actual output of the execution or a tool * approval request. * * These get passed for example to the `toolUseBehavior` option of the `Agent` constructor. */ export type FunctionToolResult<Context = UnknownContext, TParameters extends ToolInputParameters = any, Result = any> = { type: 'function_output'; /** * The tool that was called. */ tool: FunctionTool<Context, TParameters, Result>; /** * The output of the tool call. This can be a string or a stringifable item. */ output: string | unknown; /** * The run item representing the tool call output. */ runItem: RunToolCallOutputItem; /** * The result returned when the tool execution runs another agent. Populated when the * invocation originated from {@link Agent.asTool} and the nested agent completed a run. */ agentRunResult?: RunResult<Context, Agent<Context, any>>; /** * Any interruptions collected while the nested agent executed. These are surfaced to allow * callers to pause and resume workflows that require approvals. */ interruptions?: RunToolApprovalItem[]; } | { /** * Indicates that the tool requires approval before it can be called. */ type: 'function_approval'; /** * The tool that is requiring to be approved. */ tool: FunctionTool<Context, TParameters, Result>; /** * The item representing the tool call that is requiring approval. */ runItem: RunToolApprovalItem; } | { /** * Indicates that the tool requires approval before it can be called. */ type: 'hosted_mcp_tool_approval'; /** * The tool that is requiring to be approved. */ tool: HostedMCPTool<Context>; /** * The item representing the tool call that is requiring approval. */ runItem: RunToolApprovalItem; }; /** * The parameters of a tool. * * This can be a supported Standard Schema, a Zod schema, a JSON schema or undefined. * * If a supported Standard Schema or Zod schema is provided, the arguments to the tool will * automatically be parsed and validated against the schema. * * If a JSON schema is provided, the arguments to the tool will be passed as is. * * If undefined is provided, the arguments to the tool will be passed as a string. */ export type ToolInputParameters = undefined | ZodObjectLike | StandardSchemaWithJSON<any, any> | JsonObjectSchema<any>; /** * The parameters of a tool that has strict mode enabled. * * This can be a supported Standard Schema, a Zod schema, a JSON schema or undefined. * * If a supported Standard Schema or Zod schema is provided, the arguments to the tool will * automatically be parsed and validated against the schema. * * If a JSON schema is provided, the arguments to the tool will be parsed as JSON but not validated. * * If undefined is provided, the arguments to the tool will be passed as a string. */ export type ToolInputParametersStrict = undefined | ZodObjectLike | StandardSchemaWithJSON<any, any> | JsonObjectSchemaStrict<any>; /** * The parameters of a tool that has strict mode disabled. * * If a JSON schema is provided, the arguments to the tool will be parsed as JSON but not validated. * * Zod schemas are not supported without strict: true. */ export type ToolInputParametersNonStrict = undefined | JsonObjectSchemaNonStrict<any>; /** * A schema describing the JSON object encoded in a function tool output. * * Zod schemas are converted to JSON Schema when the tool is created. Plain * JSON Schema objects are passed through unchanged. */ export type ToolOutputSchema = ZodObjectLike | JsonObjectSchema<any>; type ToolExecuteResult<TOutputSchema extends ToolOutputSchema | undefined, Result> = TOutputSchema extends ZodObjectLike ? ZodInfer<TOutputSchema> : TOutputSchema extends JsonObjectSchema<any> ? unknown : Result; type ToolFallbackResult<TOutputSchema extends ToolOutputSchema | undefined> = TOutputSchema extends undefined ? string : ToolExecuteResult<TOutputSchema, unknown>; /** * The arguments to a tool. * * The type of the arguments are derived from the parameters passed to the tool definition. * * If the parameters are passed as a JSON schema the type is `unknown`. For Standard Schema and * Zod schemas it will match the inferred validation output type. Otherwise the type is `string`. */ export type ToolExecuteArgument<TParameters extends ToolInputParameters> = TParameters extends StandardSchemaWithJSON<any, any> ? StandardSchemaOutput<TParameters> : TParameters extends ZodObjectLike ? ZodInfer<TParameters> : TParameters extends JsonObjectSchema<any> ? unknown : string; /** * The function to invoke when the tool is called. * * @param input The arguments to the tool (see ToolExecuteArgument) * @param context An instance of the current RunContext */ type ToolExecuteFunction<TParameters extends ToolInputParameters, Context = UnknownContext, Result = unknown> = (input: ToolExecuteArgument<TParameters>, context?: RunContext<Context>, details?: ToolCallDetails) => Promise<Result> | Result; /** * The function to invoke when an error or model-visible pre-execution rejection * occurs. This can provide additional context or a fallback value. * * @param context An instance of the current RunContext * @param error The error that occurred */ type ToolErrorFunction<Context = UnknownContext, Result = string> = (context: RunContext<Context>, error: Error | unknown, details?: ToolCallDetails) => Promise<Result> | Result; type ToolTimeoutOptions<Context, TOutputSchema extends ToolOutputSchema | undefined> = [TOutputSchema] extends [undefined] ? { /** Optional timeout in milliseconds for each tool call. */ timeoutMs?: number; /** Determines whether a timeout becomes a result or an exception. */ timeoutBehavior?: FunctionToolTimeoutBehavior; /** Optional formatter for model-visible timeout results. */ timeoutErrorFunction?: ToolTimeoutErrorFunction<Context, string>; } : { /** Optional timeout in milliseconds for each tool call. */ timeoutMs?: number; /** Structured tools raise timeout exceptions by default. */ timeoutBehavior?: 'raise_exception'; timeoutErrorFunction?: never; } | { /** Optional timeout in milliseconds for each tool call. */ timeoutMs?: number; /** Return a schema-compatible timeout result. */ timeoutBehavior: 'error_as_result'; /** Required formatter for schema-compatible timeout results. */ timeoutErrorFunction: ToolTimeoutErrorFunction<Context, ToolFallbackResult<TOutputSchema>>; }; type ToolGuardrailOptions<Context = UnknownContext> = { /** * Guardrails that validate or block tool invocation before it runs. */ inputGuardrails?: ToolInputGuardrailDefinition<Context>[] | { name: string; run: ToolInputGuardrailFunction<Context>; }[]; /** * Guardrails that validate or alter tool output after it runs. */ outputGuardrails?: ToolOutputGuardrailDefinition<Context>[] | { name: string; run: ToolOutputGuardrailFunction<Context>; }[]; }; /** * The options for a tool that has strict mode enabled. * * @param TParameters The parameters of the tool * @param Context The context of the tool */ type StrictToolOptionsBase<TParameters extends ToolInputParametersStrict, Context = UnknownContext, TOutputSchema extends ToolOutputSchema | undefined = undefined> = { /** * The name of the tool. Must be unique within the agent. */ name?: string; /** * The description of the tool. This is used to help the model understand when to use the tool. */ description: string; /** * A supported Standard Schema, Zod schema, or JSON schema describing the parameters of the tool. * Standard Schema and Zod parameters are automatically parsed and validated synchronously. */ parameters: TParameters; /** * Whether the tool is strict. If true, the model must try to strictly follow the schema (might result in slower response times). */ strict?: true; /** * Responses API only. Hides a top-level function tool definition until tool search loads it. */ deferLoading?: boolean; /** * Additional provider-specific metadata forwarded with the function tool definition. */ providerData?: Record<string, any>; /** * Responses API only. Controls which execution contexts can invoke the tool. */ allowedCallers?: ToolAllowedCallers; /** * Responses API only. Describes the JSON object encoded in string outputs. * Zod object schemas are converted to JSON Schema and constrain the return * type of `execute` to the inferred Zod output type. They also validate the * result at runtime. */ outputSchema?: TOutputSchema; /** * The function to invoke when the tool is called. */ execute: ToolExecuteFunction<TParameters, Context, ToolExecuteResult<TOutputSchema, unknown>>; /** * The function to invoke when an error or model-visible pre-execution * rejection occurs. Tools with an output schema rethrow by default so they * cannot emit an unstructured error string. Provide this callback to return * a schema-compatible fallback. Without an output schema, the default returns * a fixed generic error message. For failures handled during tool invocation, * provide this callback for application-approved details, or set it to `null` * to propagate the error. Without an output schema, `Runner` handles malformed * JSON before invoking the tool and returns fixed feedback without calling this * callback, even when it is `null`. */ errorFunction?: ToolErrorFunction<Context, ToolFallbackResult<TOutputSchema>> | null; /** * Whether the tool needs human approval before it can be called. If this is true, the run will result in an `interruption` that the * program has to resolve by approving or rejecting the tool call. */ needsApproval?: boolean | ToolApprovalFunction<TParameters>; /** * Determines whether the tool should be exposed to the model for the current run. */ isEnabled?: ToolEnabledOption<Context>; /** * Optional callback that attaches SDK-only custom data to the emitted tool output item. */ customDataExtractor?: FunctionToolCustomDataExtractor<Context, TParameters, ToolExecuteResult<TOutputSchema, unknown>>; }; type StrictToolOptions<TParameters extends ToolInputParametersStrict, Context = UnknownContext, TOutputSchema extends ToolOutputSchema | undefined = undefined> = StrictToolOptionsBase<TParameters, Context, TOutputSchema> & ToolGuardrailOptions<Context> & ToolTimeoutOptions<Context, TOutputSchema>; /** * The options for a tool that has strict mode disabled. * * @param TParameters The parameters of the tool * @param Context The context of the tool */ type NonStrictToolOptionsBase<TParameters extends ToolInputParametersNonStrict, Context = UnknownContext, TOutputSchema extends ToolOutputSchema | undefined = undefined> = { /** * The name of the tool. Must be unique within the agent. */ name?: string; /** * The description of the tool. This is used to help the model understand when to use the tool. */ description: string; /** * A JSON schema of the tool. To use a Zod schema, you need to use a `strict` schema. */ parameters: TParameters; /** * Whether the tool is strict If true, the model must try to strictly follow the schema (might result in slower response times). */ strict: false; /** * Responses API only. Hides a top-level function tool definition until tool search loads it. */ deferLoading?: boolean; /** * Additional provider-specific metadata forwarded with the function tool definition. */ providerData?: Record<string, any>; /** * Responses API only. Controls which execution contexts can invoke the tool. */ allowedCallers?: ToolAllowedCallers; /** * Responses API only. Describes the JSON object encoded in string outputs. * Zod object schemas are converted to JSON Schema and constrain the return * type of `execute` to the inferred Zod output type. They also validate the * result at runtime. */ outputSchema?: TOutputSchema; /** * The function to invoke when the tool is called. */ execute: ToolExecuteFunction<TParameters, Context, ToolExecuteResult<TOutputSchema, unknown>>; /** * The function to invoke when an error or model-visible pre-execution * rejection occurs. Tools with an output schema rethrow by default so they * cannot emit an unstructured error string. Provide this callback to return * a schema-compatible fallback. Without an output schema, the default returns * a fixed generic error message. For failures handled during tool invocation, * provide this callback for application-approved details, or set it to `null` * to propagate the error. Without an output schema, `Runner` handles malformed * JSON before invoking the tool and returns fixed feedback without calling this * callback, even when it is `null`. */ errorFunction?: ToolErrorFunction<Context, ToolFallbackResult<TOutputSchema>> | null; /** * Whether the tool needs human approval before it can be called. If this is true, the run will result in an `interruption` that the * program has to resolve by approving or rejecting the tool call. */ needsApproval?: boolean | ToolApprovalFunction<TParameters>; /** * Determines whether the tool should be exposed to the model for the current run. */ isEnabled?: ToolEnabledOption<Context>; /** * Optional callback that attaches SDK-only custom data to the emitted tool output item. */ customDataExtractor?: FunctionToolCustomDataExtractor<Context, TParameters, ToolExecuteResult<TOutputSchema, unknown>>; }; type NonStrictToolOptions<TParameters extends ToolInputParametersNonStrict, Context = UnknownContext, TOutputSchema extends ToolOutputSchema | undefined = undefined> = NonStrictToolOptionsBase<TParameters, Context, TOutputSchema> & ToolGuardrailOptions<Context> & ToolTimeoutOptions<Context, TOutputSchema>; /** * The options for a tool. * * @param TParameters The parameters of the tool * @param Context The context of the tool */ export type ToolOptions<TParameters extends ToolInputParameters, Context = UnknownContext, TOutputSchema extends ToolOutputSchema | undefined = undefined> = StrictToolOptions<Extract<TParameters, ToolInputParametersStrict>, Context, TOutputSchema> | NonStrictToolOptions<Extract<TParameters, ToolInputParametersNonStrict>, Context, TOutputSchema>; export type ToolOptionsWithGuardrails<TParameters extends ToolInputParameters, Context = UnknownContext, TOutputSchema extends ToolOutputSchema | undefined = undefined> = ToolOptions<TParameters, Context, TOutputSchema>; type AnyFunctionTool = FunctionTool<any, any, any>; type FunctionToolInvocationArgs<Context = UnknownContext, TParameters extends ToolInputParameters = ToolInputParameters, Result = unknown> = { tool: FunctionTool<Context, TParameters, Result>; runContext: RunContext<Context>; input: string; details?: ToolCallDetails; }; /** * Validate a function tool output when the tool was created with a runtime * output schema. */ export declare function validateFunctionToolOutput<Context = UnknownContext, TParameters extends ToolInputParameters = ToolInputParameters, Result = unknown>(args: { tool: FunctionTool<Context, TParameters, Result>; output: unknown; runContext: RunContext<Context>; details?: ToolCallDetails; }): unknown; /** * Invoke a function tool while enforcing optional per-tool timeout settings. */ export declare function invokeFunctionTool<Context = UnknownContext, TParameters extends ToolInputParameters = ToolInputParameters, Result = unknown>(args: FunctionToolInvocationArgs<Context, TParameters, Result>): Promise<string | Result>; /** * Exposes a function to the agent as a tool to be called * * @param options The options for the tool * @returns A new tool */ export declare function tool<TParameters extends ToolInputParameters = undefined, Context = UnknownContext, Result = string, TOutputSchema extends ToolOutputSchema | undefined = undefined>(options: ToolOptions<TParameters, Context, TOutputSchema>): FunctionTool<Context, TParameters, ToolExecuteResult<TOutputSchema, Result>>; export type ToolNamespaceOptions<TTools extends readonly AnyFunctionTool[] = readonly AnyFunctionTool[]> = { /** * The namespace name to expose to the model. */ name: string; /** * Description shared by all tools in the namespace. */ description: string; /** * Function tools to attach to the namespace. */ tools: TTools; }; /** * Responses API only. Group function tools under a shared namespace. * * @param options - Namespace metadata and function tools to attach. * @returns shallow-cloned function tools carrying namespace metadata. */ export declare function toolNamespace<TTools extends readonly AnyFunctionTool[]>(options: ToolNamespaceOptions<TTools>): TTools;