import type { AIProviderName } from "../constants/enums.js"; import type { EnhancedGenerateResult, NeurolinkCredentials, OpenAICompatStreamLifecycleListeners, TextGenerationOptions } from "../types/index.js"; import { OpenAIChatCompletionsProvider } from "./openaiChatCompletionsBase.js"; /** * OpenAI Provider — direct HTTP, no AI SDK. * * OpenAI chat completions at api.openai.com/v1. All request / stream / * tool-loop orchestration lives in `OpenAIChatCompletionsProvider`; this * class adds: * - OTel span wrap with cost (`onStreamStart`) * - Native `/v1/embeddings` (`embed` / `embedMany`) * - Image generation via `/v1/images/generations` (`executeImageGeneration`) * - OpenAI-specific error mapping (`formatProviderError`) * * @see https://platform.openai.com/docs/api-reference */ export declare class OpenAIProvider extends OpenAIChatCompletionsProvider { constructor(modelName?: string, sdk?: unknown, _region?: string, credentials?: NeurolinkCredentials["openai"]); protected getProviderName(): AIProviderName; protected getDefaultModel(): string; formatProviderError(error: unknown): Error; /** * Wrap the stream in an OTel span to capture provider-level latency, * token usage, finish reason, and cost. Mirrors the pre-migration * `streamText`-span behaviour. */ protected onStreamStart(modelId: string): OpenAICompatStreamLifecycleListeners | undefined; /** * Default embedding model, overridable via OPENAI_EMBEDDING_MODEL env var. */ protected getDefaultEmbeddingModel(): string; /** * Generate an embedding for a single text input via native /v1/embeddings. * * @param text - The text to embed * @param modelName - The embedding model to use (default: text-embedding-3-small) * @returns Promise resolving to the embedding vector */ embed(text: string, modelName?: string): Promise; /** * Generate embeddings for multiple texts in a single batch via native /v1/embeddings. * * @param texts - The texts to embed * @param modelName - The embedding model to use (default: text-embedding-3-small) * @returns Promise resolving to an array of embedding vectors */ embedMany(texts: string[], modelName?: string): Promise; private callEmbeddings; /** * Image generation via the OpenAI Images API (`/v1/images/generations`). * * Supports `gpt-image-1`, `dall-e-3`, and `dall-e-2`. The three models * differ in which body params they accept: * * - `gpt-image-1` returns base64 by default; does NOT accept `response_format`. * - `dall-e-3` / `dall-e-2` accept `response_format: "b64_json"` to get base64. * - `dall-e-2` does NOT accept `quality` / `style`. * * The model is taken from `options.model || this.modelName`. * * @see https://platform.openai.com/docs/api-reference/images/create */ protected executeImageGeneration(options: TextGenerationOptions): Promise; /** * Map a NeuroLink-style aspect ratio (e.g. "16:9") to the OpenAI * `size` parameter accepted by the active image model. Falls back to * the per-model square default when the ratio is unknown. */ private aspectRatioToOpenAISize; }