/**
 * Model Profile — bundles all model-specific pipeline settings into a single
 * switchable unit.  When the user toggles between Claude and Gemma in the
 * Glass UI, the active profile drives delta throttling, text filtering,
 * prompt additions, and UI behavior.
 *
 * Profiles are resolved by {@link resolveModelProfile} in
 * `resolve-model-profile.ts`.
 */
export interface ModelProfileStreaming {
    /** Minimum ms between delta broadcasts (default 150). */
    deltaThrottleMs: number;
    /** If true, force-flush accumulated text on final event. */
    flushOnFinal: boolean;
    /** Expected chunk pattern: "token" (Claude) or "burst" (vLLM/Gemma). */
    chunkPattern: "token" | "burst";
}
export interface ModelProfileFilters {
    /** Regex patterns (as strings) to strip from output text before rendering. */
    stripPatterns: string[];
    /** If true, run self-reflection heuristic filter on assistant output. */
    suppressMonologue: boolean;
    /** If true, the model produces structured thinking blocks (Claude-style). */
    hasStructuredThinking: boolean;
    /** If true, validate tool arguments (exec commands) before execution. Default false. */
    validateToolArgs?: boolean;
}
export interface ModelProfileUi {
    /** Badge text shown next to model name in Glass UI header. */
    badge?: string;
    /** Override watchdog timeout (ms). Longer for slower models. */
    watchdogMs?: number;
    /** If true, arm watchdog immediately on send (don't wait for streaming). */
    armWatchdogOnSend: boolean;
}
export interface ModelProfileParams {
    temperature?: number;
    top_p?: number;
    top_k?: number;
    max_tokens?: number;
    stop?: string[];
    presence_penalty?: number;
    frequency_penalty?: number;
    repeat_penalty?: number;
    /**
     * vLLM chat_template_kwargs — passed through to the request body as a
     * top-level object.  Use for model-specific template flags like
     * Qwen 3.6's `preserve_thinking` (keep <think> blocks across turns for
     * agent-loop prefix-cache hit rate) or `enable_thinking: false`.
     */
    chatTemplateKwargs?: Record<string, boolean | number | string>;
}
export interface ModelProfile {
    /** Match pattern(s) — checked against model ID via prefix/substring. */
    match: string | string[];
    /** Human label shown in Glass UI. */
    label: string;
    /** Sampling parameters applied to this model. */
    params: ModelProfileParams;
    /** Streaming behavior hints. */
    streaming: ModelProfileStreaming;
    /** Post-processing filters applied to streamed text. */
    filters: ModelProfileFilters;
    /** System prompt additions for this model. */
    promptAdditions: string[];
    /** UI hints sent to Glass UI. */
    ui: ModelProfileUi;
}
