/** * OpenAI-compatible types for /v1/chat/completions endpoint * These match the official OpenAI API format to enable drop-in replacement */ export interface OpenAIMessage { role: 'system' | 'user' | 'assistant' | 'tool' | 'function'; content?: string | OpenAIMessageContent[]; name?: string; tool_calls?: OpenAIToolCall[]; tool_call_id?: string; function_call?: { name: string; arguments: string; }; } export type OpenAIMessageContent = { type: 'text'; text: string; } | { type: 'image_url'; image_url: { url: string; detail?: 'auto' | 'low' | 'high'; }; }; export interface OpenAITool { type: 'function'; function: { name: string; description?: string; parameters?: Record; }; } export interface OpenAIToolCall { id: string; type: 'function'; function: { name: string; arguments: string; }; } export type OpenAIToolChoice = 'auto' | 'required' /** Mistral's spelling of 'required'. */ | 'any' | 'none' | { type: 'function'; function: { name: string; }; }; export interface OpenAIResponseFormat { type: 'text' | 'json_object' | 'json_schema'; json_schema?: { name: string; description?: string; schema: Record; strict?: boolean; }; } export interface OpenAIChatCompletionRequest { model: string; messages: OpenAIMessage[]; temperature?: number; top_p?: number; n?: number; stream?: boolean; stop?: string | string[]; max_tokens?: number; max_completion_tokens?: number; presence_penalty?: number; frequency_penalty?: number; logit_bias?: Record; user?: string; tools?: OpenAITool[]; tool_choice?: OpenAIToolChoice; response_format?: OpenAIResponseFormat; seed?: number; /** Requested processing tier: auto | default | flex | priority. */ service_tier?: string; /** Mistral's spelling of `seed`. When both are present, `seed` wins. */ random_seed?: number; /** Mistral-only guardrail toggle: asks Mistral to prepend its safety * prompt. Forwarded to Mistral; other providers ignore it. */ safe_prompt?: boolean; /** Reasoning-effort knob for reasoning models (OpenAI o-series, xAI * Grok reasoning models). 'minimal' is OpenAI-only and normalized * down to 'low'. */ reasoning_effort?: 'minimal' | 'low' | 'medium' | 'high'; logprobs?: boolean; top_logprobs?: number; parallel_tool_calls?: boolean; gateId?: string; } export interface OpenAIUsage { prompt_tokens: number; completion_tokens: number; total_tokens: number; } export interface OpenAIChatCompletionChoice { index: number; message: OpenAIMessage; finish_reason: 'stop' | 'length' | 'tool_calls' | 'content_filter' | 'function_call' | null; logprobs?: null | { content: Array<{ token: string; logprob: number; bytes: number[] | null; top_logprobs: Array<{ token: string; logprob: number; bytes: number[] | null; }>; }> | null; }; } export interface OpenAIChatCompletionResponse { id: string; object: 'chat.completion'; created: number; model: string; choices: OpenAIChatCompletionChoice[]; usage: OpenAIUsage; system_fingerprint?: string; } export interface OpenAIChatCompletionChunkDelta { role?: 'system' | 'user' | 'assistant' | 'tool'; content?: string; tool_calls?: Array<{ index: number; id?: string; type?: 'function'; function?: { name?: string; arguments?: string; }; }>; } export interface OpenAIChatCompletionChunkChoice { index: number; delta: OpenAIChatCompletionChunkDelta; finish_reason: 'stop' | 'length' | 'tool_calls' | 'content_filter' | null; logprobs?: null; } export interface OpenAIChatCompletionChunk { id: string; object: 'chat.completion.chunk'; created: number; model: string; choices: OpenAIChatCompletionChunkChoice[]; usage?: OpenAIUsage; system_fingerprint?: string; } export interface OpenAIImageGenerationRequest { model?: string; prompt: string; n?: number; /** OpenAI v1 sizes (dall-e-2/3) plus newer gpt-image-1 sizes. */ size?: '256x256' | '512x512' | '1024x1024' | '1792x1024' | '1024x1792' | '1024x1536' | '1536x1024' | 'auto'; quality?: 'standard' | 'hd' | 'low' | 'medium' | 'high' | 'auto'; /** dall-e-3 only. Mistral / Google ignore. */ style?: 'vivid' | 'natural'; response_format?: 'url' | 'b64_json'; user?: string; gateId?: string; } export interface OpenAIImageGenerationDatum { url?: string; b64_json?: string; revised_prompt?: string; } export interface OpenAIImageGenerationResponse { created: number; data: OpenAIImageGenerationDatum[]; } export interface OpenAIAudioSpeechRequest { model?: string; input: string; voice: string; /** OpenAI's documented set; aligns with our AudioFormat enum. */ response_format?: 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm'; /** 0.25 – 4.0 per OpenAI's docs. */ speed?: number; /** gpt-4o-mini-tts only — instructs the model on prosody/style. */ instructions?: string; gateId?: string; } export interface OpenAIEmbeddingsRequest { model?: string; /** Single text, batch of texts, or pre-tokenized arrays. */ input: string | string[] | number[] | number[][]; encoding_format?: 'float' | 'base64'; /** text-embedding-3 models only. */ dimensions?: number; user?: string; gateId?: string; } export interface OpenAIEmbeddingDatum { object: 'embedding'; index: number; /** `number[]` when encoding_format is 'float' (default); base64 string when 'base64'. */ embedding: number[] | string; } export interface OpenAIEmbeddingsResponse { object: 'list'; data: OpenAIEmbeddingDatum[]; model: string; usage: { prompt_tokens: number; total_tokens: number; }; } export interface OpenAIError { error: { message: string; type: string; param?: string | null; code?: string | null; }; } //# sourceMappingURL=openai-format.d.ts.map