ai
Version:
AI SDK by Vercel - build apps like ChatGPT, Claude, Gemini, and more with a single interface for any model using the Vercel AI Gateway or go direct to OpenAI, Anthropic, Google, or any other model provider.
34 lines (28 loc) • 952 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 isLoopFinished(): StopCondition<any> {
return () => false;
}
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);
}