/** * Model-family classification shared by request serialization and route * profiles. Pure string classification with no runtime dependencies so both * the HTTP layer and the profile layer can consume it without cycles. */ import type { FinalTurnPreservation, ReasoningControlDialect, ReasoningDisableForm, ReasoningGeneration, ReplayOptIn, StreamTerminalProof } from "./provider-profile.js"; export type SamplingParameter = "temperature" | "top_p"; export interface ModelFamilyContract { readonly id: string; readonly pattern: RegExp; readonly generation: ReasoningGeneration; readonly dialect: ReasoningControlDialect; readonly acceptedEfforts: readonly string[]; readonly defaultEffort?: string; readonly disableForm: ReasoningDisableForm; readonly replayOptIn?: ReplayOptIn; readonly finalTurnPreservation: FinalTurnPreservation; readonly omitSampling?: readonly SamplingParameter[]; readonly minOutputTokensWithReasoning?: number; readonly terminalProofs?: readonly StreamTerminalProof[]; } export declare const MODEL_FAMILIES: readonly ModelFamilyContract[]; export declare function bareModelId(model: string): string; export declare function modelFamilyFor(model: string): ModelFamilyContract | undefined; export declare function modelFamilyId(model: string): string | undefined; export type NvidiaReasoningKind = "kimi-thinking" | "deepseek-v4" | "thinking" | "nemotron-3" | "glm-thinking" | "enable-thinking" | "effort-only" | "none"; export declare function classifyNvidiaModel(model: string): NvidiaReasoningKind; export type BynaraReasoningKind = "kimi" | "deepseek" | "agnes" | "stepfun" | "none"; export declare function classifyBynaraModel(model: string): BynaraReasoningKind;