import type { ChatMessageDto, UpstreamErrorDto, EffortLevel, ChatStreamPieceDto, ChatResponseDto, ProviderResponseDto, ProviderStreamEventDto, StreamErrorCode } from './protocol.js'; /** Options for building chat request payloads */ export type ChatRequestOpts = { effort?: EffortLevel; webSearch?: boolean; } | undefined; /** * Error thrown by provider stream parsing when the provider or server reports an error. * Carries structured error info (code, retryable) so callers can handle appropriately. */ export declare class ProviderStreamError extends Error { readonly code: StreamErrorCode; readonly retryable: boolean; constructor(message: string, code?: StreamErrorCode, retryable?: boolean); } /** * Unified base class for all AI providers. * Handles both request building (outbound) and response parsing (inbound). */ export declare abstract class AIProvider { protected abstract readonly providerName: string; abstract readonly defaultBaseUrl: string; abstract readonly path: string; /** * Get the request path. Override for providers that need dynamic paths (e.g., model in URL). */ getPath(_model: string, _stream: boolean): string; abstract buildHeaders(apiKey: string, origin?: string): Record; abstract buildPayload(messages: ChatMessageDto[], model: string, opts: ChatRequestOpts, stream: boolean): unknown; parseError(errorText: string, status: number): UpstreamErrorDto; abstract parseNonStreamingResponse(json: ProviderResponseDto): ChatResponseDto; /** * Parse a streaming chunk. Handles server errors (rate limit, etc.) before * delegating to provider-specific parsing. */ parseStreamChunk(json: ProviderStreamEventDto): ChatStreamPieceDto | null; protected abstract parseProviderStreamChunk(json: ProviderStreamEventDto): ChatStreamPieceDto | null; /** Split system messages from conversation messages. */ protected extractSystemMessages(messages: ChatMessageDto[], separator?: string): { system: string | undefined; conversationMessages: ChatMessageDto[]; }; /** * Parse JSON error response with nested error object (common OpenAI/Anthropic format) */ protected parseJsonError(errorText: string, status: number): UpstreamErrorDto; /** * Check if the JSON contains an error and throw if so. * Handles two formats: * - Unified format: { type: 'error', code, message, retryable } * - Provider format: { error: "message" } or { error: { message: "..." } } */ protected checkAndThrowError(json: unknown): void; private extractErrorMessage; } //# sourceMappingURL=aiProvider.d.ts.map