ai
Version:
AI SDK by Vercel - The AI Toolkit for TypeScript and JavaScript
30 lines (25 loc) • 872 B
text/typescript
import { StepResult } from './step-result';
import { ToolSet } from './tool-set';
export type StopCondition<TOOLS extends ToolSet> = (options: {
steps: Array<StepResult<TOOLS>>;
}) => PromiseLike<boolean> | boolean;
export function stepCountIs(stepCount: number): StopCondition<any> {
return ({ steps }) => steps.length === stepCount;
}
export function hasToolCall(toolName: string): StopCondition<any> {
return ({ steps }) =>
steps[steps.length - 1]?.toolCalls?.some(
toolCall => toolCall.toolName === toolName,
) ?? false;
}
export async function isStopConditionMet<TOOLS extends ToolSet>({
stopConditions,
steps,
}: {
stopConditions: Array<StopCondition<TOOLS>>;
steps: Array<StepResult<TOOLS>>;
}): Promise<boolean> {
return (
await Promise.all(stopConditions.map(condition => condition({ steps })))
).some(result => result);
}