ai
Version:
AI SDK by Vercel - The AI Toolkit for TypeScript and JavaScript
186 lines (167 loc) • 5.24 kB
text/typescript
import {
FlexibleSchema,
MaybePromiseLike,
ProviderOptions,
SystemModelMessage,
} from '@ai-sdk/provider-utils';
import { Output } from '../generate-text/output';
import { PrepareStepFunction } from '../generate-text/prepare-step';
import { StopCondition } from '../generate-text/stop-condition';
import { ToolCallRepairFunction } from '../generate-text/tool-call-repair-function';
import { ToolSet } from '../generate-text/tool-set';
import { CallSettings } from '../prompt/call-settings';
import { Prompt } from '../prompt/prompt';
import { TelemetrySettings } from '../telemetry/telemetry-settings';
import { LanguageModel, ToolChoice } from '../types/language-model';
import { DownloadFunction } from '../util/download/download-function';
import { AgentCallParameters } from './agent';
import { ToolLoopAgentOnFinishCallback } from './tool-loop-agent-on-finish-callback';
import { ToolLoopAgentOnStepFinishCallback } from './tool-loop-agent-on-step-finish-callback';
/**
* Configuration options for an agent.
*/
export type ToolLoopAgentSettings<
CALL_OPTIONS = never,
TOOLS extends ToolSet = {},
OUTPUT extends Output = never,
> = Omit<CallSettings, 'abortSignal'> & {
/**
* The id of the agent.
*/
id?: string;
/**
* The instructions for the agent.
*
* It can be a string, or, if you need to pass additional provider options (e.g. for caching), a `SystemModelMessage`.
*/
instructions?: string | SystemModelMessage | Array<SystemModelMessage>;
/**
* The language model to use.
*/
model: LanguageModel;
/**
* The tools that the model can call. The model needs to support calling tools.
*/
tools?: TOOLS;
/**
* The tool choice strategy. Default: 'auto'.
*/
toolChoice?: ToolChoice<NoInfer<TOOLS>>;
/**
* Condition for stopping the generation when there are tool results in the last step.
* When the condition is an array, any of the conditions can be met to stop the generation.
*
* @default stepCountIs(20)
*/
stopWhen?:
| StopCondition<NoInfer<TOOLS>>
| Array<StopCondition<NoInfer<TOOLS>>>;
/**
* Optional telemetry configuration (experimental).
*/
experimental_telemetry?: TelemetrySettings;
/**
* Limits the tools that are available for the model to call without
* changing the tool call and result types in the result.
*/
activeTools?: Array<keyof NoInfer<TOOLS>>;
/**
* Optional specification for generating structured outputs.
*/
output?: OUTPUT;
/**
* Optional function that you can use to provide different settings for a step.
*/
prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;
/**
* A function that attempts to repair a tool call that failed to parse.
*/
experimental_repairToolCall?: ToolCallRepairFunction<NoInfer<TOOLS>>;
/**
* Callback that is called when each step (LLM call) is finished, including intermediate steps.
*/
onStepFinish?: ToolLoopAgentOnStepFinishCallback<NoInfer<TOOLS>>;
/**
* Callback that is called when all steps are finished and the response is complete.
*/
onFinish?: ToolLoopAgentOnFinishCallback<NoInfer<TOOLS>>;
/**
* Additional provider-specific options. They are passed through
* to the provider from the AI SDK and enable provider-specific
* functionality that can be fully encapsulated in the provider.
*/
providerOptions?: ProviderOptions;
/**
* Context that is passed into tool calls.
*
* Experimental (can break in patch releases).
*
* @default undefined
*/
experimental_context?: unknown;
/**
* Custom download function to use for URLs.
*
* By default, files are downloaded if the model does not support the URL for the given media type.
*/
experimental_download?: DownloadFunction | undefined;
/**
* The schema for the call options.
*/
callOptionsSchema?: FlexibleSchema<CALL_OPTIONS>;
/**
* Prepare the parameters for the generateText or streamText call.
*
* You can use this to have templates based on call options.
*/
prepareCall?: (
options: Omit<
AgentCallParameters<CALL_OPTIONS, NoInfer<TOOLS>>,
'onStepFinish'
> &
Pick<
ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, OUTPUT>,
| 'model'
| 'tools'
| 'maxOutputTokens'
| 'temperature'
| 'topP'
| 'topK'
| 'presencePenalty'
| 'frequencyPenalty'
| 'stopSequences'
| 'seed'
| 'headers'
| 'instructions'
| 'stopWhen'
| 'experimental_telemetry'
| 'activeTools'
| 'providerOptions'
| 'experimental_context'
| 'experimental_download'
>,
) => MaybePromiseLike<
Pick<
ToolLoopAgentSettings<CALL_OPTIONS, TOOLS, OUTPUT>,
| 'model'
| 'tools'
| 'maxOutputTokens'
| 'temperature'
| 'topP'
| 'topK'
| 'presencePenalty'
| 'frequencyPenalty'
| 'stopSequences'
| 'seed'
| 'headers'
| 'instructions'
| 'stopWhen'
| 'experimental_telemetry'
| 'activeTools'
| 'providerOptions'
| 'experimental_context'
| 'experimental_download'
> &
Omit<Prompt, 'system'>
>;
};