import type { LanguageModel, LanguageModelCallOptions, ModelMessage, Output, SystemModelMessage, TelemetryOptions, ToolCallRepairFunction, ToolSet } from 'ai'; import type { FinishReason, SerializableAgentState, TokenUsage } from '../../types'; import type { ExecutionOptions, RunOptions } from '../../types/sdk/agent'; import type { AgentMessage } from '../../types/sdk/message'; import type { JSONObject } from '../../types/utils/json'; import type { AgentMessageList } from '../model/message-list'; import type { ToolCallBatchResult, ToolCallSuspension } from '../tools/tool-call-executor'; type RunCallOptions = (RunOptions & ExecutionOptions) | undefined; export type ModelTurnErrorType = 'prompt_blocked' | 'no_output'; export interface ModelTurnError { type: ModelTurnErrorType; message: string; } export interface ModelTurnResult { aiFinishReason: string; finishReason: FinishReason; usage: TokenUsage | undefined; newMessages: AgentMessage[]; toolCalls: Array<{ toolCallId: string; toolName: string; input: unknown; providerExecuted?: boolean; }>; structuredOutput: unknown; errorReason?: ModelTurnError; } export interface ModelCallContext { model: LanguageModel; system: SystemModelMessage | SystemModelMessage[]; messages: ModelMessage[]; abortSignal: AbortSignal; hasTools: boolean; aiTools: ToolSet; reasoning?: LanguageModelCallOptions['reasoning']; providerOptions?: Record; outputSpec?: ReturnType; maxOutputTokens?: number; aiSdkOptions: { telemetry?: TelemetryOptions; repairToolCall?: ToolCallRepairFunction>; }; } export interface SuspendEmission { suspendRunId: string; list: AgentMessageList; usage: TokenUsage | undefined; suspensions: ToolCallSuspension[]; } export interface CompleteEmission { list: AgentMessageList; options: RunCallOptions; finishReason: FinishReason; usage: TokenUsage | undefined; structuredOutput: unknown; } export interface RunServices { readonly runId: string; readonly modelId: string; applyCost(usage: TokenUsage | undefined): TokenUsage | undefined; saveToMemory(list: AgentMessageList, options: RunCallOptions): Promise; maybeGenerateTitle(list: AgentMessageList, options: RunCallOptions): Promise; flushTelemetry(options: RunCallOptions): Promise; cleanupRun(): Promise; updateState(patch: Partial): void; emitAgentEnd(messages: AgentMessage[]): void; getState(): SerializableAgentState; } export interface RunOutputSink { callModel(ctx: ModelCallContext): Promise; reportUsage(usage: TokenUsage | undefined): void; onTurnFolded?(): void; emitToolBatch(batch: ToolCallBatchResult): Promise; finishSuspended(emission: SuspendEmission): Promise; finishComplete(emission: CompleteEmission): Promise; } export {};