import type { Context, Model, ProviderHeaders, SimpleStreamOptions, Tool, Usage } from "@earendil-works/pi-ai"; export type MaybePromise = T | Promise; export interface BridgeModel { id: string; name: string; reasoning?: boolean; input?: ("text" | "image")[]; contextWindow?: number; maxTokens?: number; cost?: { input: number; output: number; cacheRead: number; cacheWrite: number; }; } export interface BridgeProvider { id: string; name: string; baseUrl?: string; apiKey?: string; authHeader?: boolean; headers?: Record; models: BridgeModel[]; } export interface BridgeRequest { prompt: string; context: Context; model: Model; signal?: AbortSignal; apiKey?: string; headers?: ProviderHeaders; timeoutMs?: number; sessionId?: string; options?: SimpleStreamOptions; } export interface BridgeDelta { text?: string; usage?: Partial>; responseId?: string; responseModel?: string; } export type BridgeChunk = string | BridgeDelta; export interface NeedleModelConfig { repo?: string; revision?: string; filename?: string; maxTokens?: number; } export interface ToolCallShape { name: string; arguments: Record; } export interface ToolRouter { route(intent: string, tools: Tool[], signal?: AbortSignal): Promise; close?(): void; } export interface BridgeConfig { provider: BridgeProvider; request(input: BridgeRequest): MaybePromise; decode(response: TResponse, input: BridgeRequest): AsyncIterable; stopSequences?: string[]; includeSystemPrompt?: boolean; extraInstructions?: string; strictProtocol?: boolean; router?: ToolRouter; needle?: NeedleModelConfig; }