import type { ChatLogs, FunctionDefinition } from '../llm/index.js';
import type { AgentFunction } from './AgentFunction.js';
import type { AgentOutput } from './AgentOutput.js';
import type { RunResult } from './RunnableAgent.js';
import type { ExecuteAgentFunctionCalled, ExecuteAgentFunctionResult } from './processFunctionArgs.js';
import type { AgentContext } from './AgentContext.js';
export declare function basicFunctionCallLoop(context: AgentContext, shouldTerminate: (functionCalled: ExecuteAgentFunctionCalled, result: ExecuteAgentFunctionResult['result']) => boolean, loopPreventionPrompt: string, agentSpeakPrompt: string | undefined, beforeLlmResponse: () => Promise<{
    logs: ChatLogs;
    agentFunctions: FunctionDefinition[];
    allFunctions: AgentFunction<AgentContext>[];
    finalOutput?: AgentOutput;
}>): AsyncGenerator<AgentOutput, RunResult, string | undefined>;
