export declare const CONVERSATION_CAPABILITY_CONTRACT_VERSION: 2;
export type ModelKind = "chat" | "embedding" | "ocr-vision";
export type CostClass = "low" | "medium" | "high";
export type LatencyClass = "fast" | "standard" | "slow";
export interface ModelCapability {
    readonly id: string;
    readonly kind: ModelKind;
    readonly contextWindow: number;
    readonly maxOutputTokens: number;
    readonly toolCalling: boolean;
    readonly structuredOutput: boolean;
    readonly streaming: boolean;
    readonly supportsImageInput: boolean;
    readonly supportsDocumentInput: boolean;
    readonly workflowEligible: boolean;
    readonly costClass: CostClass;
    readonly latencyClass: LatencyClass;
    readonly throughputHint: string;
    readonly preferredUseCases: readonly string[];
    readonly knownLimitations: readonly string[];
    /** Whether the model supports a `seed` parameter for deterministic sampling (Epic #761). */
    readonly supportsSeeding?: boolean | undefined;
    /** Whether the model supports a `responseFormat` parameter for JSON output (Epic #761). */
    readonly supportsResponseFormat?: boolean | undefined;
}
export interface ChatMessage {
    readonly role: "system" | "user" | "assistant" | "tool";
    readonly content: string;
    readonly toolCallId?: string | undefined;
    readonly toolCalls?: readonly NormalizedToolCall[] | undefined;
}
export interface ToolDefinition {
    readonly name: string;
    readonly description: string;
    readonly parameters: Record<string, unknown>;
}
export type ResponseFormat = {
    readonly type: "text";
} | {
    readonly type: "json_schema";
    readonly schema: Record<string, unknown>;
};
export interface GatewayRequest {
    readonly modelId: string;
    readonly messages: readonly ChatMessage[];
    readonly tools?: readonly ToolDefinition[] | undefined;
    readonly responseFormat?: ResponseFormat | undefined;
    readonly stream?: boolean | undefined;
    readonly cancellationSignal?: AbortSignal | undefined;
    /** Optional seed for deterministic sampling when the model supports it (Epic #761). */
    readonly seed?: number | undefined;
}
export interface NormalizedToolCall {
    readonly id: string;
    readonly name: string;
    readonly arguments: Record<string, unknown>;
}
export interface UsageMetadata {
    readonly requestId: string;
    readonly promptTokens: number;
    readonly completionTokens: number;
    readonly latencyMs: number;
    readonly costClass: CostClass;
}
export type FinishReason = "stop" | "tool_calls" | "length" | "content_filter" | "error" | "cancelled";
export interface NormalizedResponse {
    readonly modelId: string;
    readonly content: string;
    readonly finishReason: FinishReason;
    readonly toolCalls: readonly NormalizedToolCall[];
    readonly structuredOutput: Record<string, unknown> | null;
    readonly usage: UsageMetadata;
}
export interface StreamDelta {
    readonly role?: "assistant" | undefined;
    readonly contentDelta?: string | undefined;
    readonly toolCallDelta?: Partial<NormalizedToolCall> | undefined;
    readonly finishReason?: FinishReason | undefined;
    readonly usage?: UsageMetadata | undefined;
}
export type StreamEvent = {
    readonly type: "delta";
    readonly delta: StreamDelta;
} | {
    readonly type: "done";
    readonly response: NormalizedResponse;
};
export type ConversationIneligibilityReason = "embedding-only" | "ocr-vision-only" | "non-chat";
export declare function isConversationEligibleModel(capability: ModelCapability): boolean;
export declare function explainConversationIneligibility(capability: ModelCapability): ConversationIneligibilityReason | undefined;
//# sourceMappingURL=gateway.d.ts.map