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<number[]>;
    /**
     * 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<number[][]>;
    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<EnhancedGenerateResult>;
    /**
     * 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;
}
