import type { AIProviderName } from "../constants/enums.js"; import type { NeurolinkCredentials, OpenAICompatBuildBodyArgs, OpenAICompatChatRequest } from "../types/index.js"; import { OpenAIChatCompletionsProvider } from "./openaiChatCompletionsBase.js"; declare const isNimFieldRejection: (body: string, field: string) => boolean; /** * Strip an offending field from a JSON request body and return the rebuilt * stringified body. Returns `null` if the body isn't JSON-parseable or the * field isn't present (signal: nothing to retry). */ declare const stripFieldFromJsonBody: (body: string, field: "reasoning_budget" | "chat_template") => string | null; /** * NVIDIA NIM Provider — native HTTP+SSE, no AI SDK. * * Wraps NVIDIA's hosted (or self-hosted) inference endpoints. * Passes NIM-specific extras (top_k, min_p, repetition_penalty, min_tokens, * chat_template, chat_template_kwargs.reasoning_budget) to the wire via the * `extraBody` channel of adjustBuildBodyOptions, and retries once without * `chat_template`/`reasoning_budget` when a model server rejects them with a * 400 (adjustBodyAfter400 — applies on both generate and stream paths). * reasoning_content is surfaced automatically by the native base client * (streamed as `{ content: "", reasoning }` chunks; `result.reasoning` on * the non-streaming path); all other behavior is preserved. * * @see https://docs.api.nvidia.com/nim/reference/ */ export declare class NvidiaNimProvider extends OpenAIChatCompletionsProvider { constructor(modelName?: string, sdk?: unknown, _region?: string, credentials?: NeurolinkCredentials["nvidiaNim"]); protected getProviderName(): AIProviderName; protected getDefaultModel(): string; /** * Inject NIM-specific body fields (top_k, min_p, repetition_penalty, * min_tokens, chat_template, chat_template_kwargs) into the wire body. * * The base passes the full StreamOptions as `opts` at runtime (typed * narrowly as OpenAICompatBuildBodyArgs["options"] for standard fields). * We access thinkingLevel via an indexed-access cast since the runtime * value is the full StreamOptions object. */ protected adjustBuildBodyOptions(_modelId: string, opts: OpenAICompatBuildBodyArgs["options"]): OpenAICompatBuildBodyArgs["options"] & Record; /** * One-shot 400 retry (base hook): some NIM model servers reject * `chat_template` or `chat_template_kwargs.reasoning_budget` with a 400 * naming the field. Strip the rejected field(s) and let the base retry * once, restoring the pre-migration fetch-level behavior. Returns * undefined for unrelated 400s so they propagate unchanged. */ protected adjustBodyAfter400(body: OpenAICompatChatRequest, error: Error & { statusCode?: number; responseBody?: string; }): OpenAICompatChatRequest | undefined; protected formatProviderError(error: unknown): Error; validateConfiguration(): Promise; getConfiguration(): { provider: AIProviderName; model: string; defaultModel: string; baseURL: string; }; } export { isNimFieldRejection, stripFieldFromJsonBody };