import { type Model } from "@earendil-works/pi-ai"; import { Container, type Focusable, Input, type TUI } from "@earendil-works/pi-tui"; import type { ModelRuntime } from "../../../core/model-runtime.ts"; import type { SettingsManager } from "../../../core/settings-manager.ts"; export interface ModelSelectorOptions { /** Restrict the list (for example, to vision-capable models). */ modelFilter?: (model: Model) => boolean; /** Add an "off" choice without changing the active/default model. */ allowOff?: boolean; /** Do not persist this selection as the main/default model. */ persistSelection?: boolean; } interface ScopedModelItem { model: Model; thinkingLevel?: string; } /** * Component that renders a model selector with search */ export declare class ModelSelectorComponent extends Container implements Focusable { private searchInput; private _focused; get focused(): boolean; set focused(value: boolean); private listContainer; private allModels; private scopedModelItems; private activeModels; private filteredModels; private selectedIndex; private currentModel?; private settingsManager; private modelRuntime; private onSelectCallback; private onCancelCallback; private readonly options; private errorMessage?; private refreshStatusMessage; private refreshStatusSuccess; private tui; private scopedModels; private scope; private scopeText?; private scopeHintText?; private readonly refreshAbortController; private refreshTimeout?; private closed; constructor(tui: TUI, currentModel: Model | undefined, settingsManager: SettingsManager, modelRuntime: ModelRuntime, scopedModels: ReadonlyArray, onSelect: (model: Model | undefined) => void, onCancel: () => void, initialSearchInput?: string, options?: ModelSelectorOptions); private loadModelsFromSnapshot; private getActiveModels; private refreshModels; private close; private sortModels; private getScopeText; private getScopeHintText; private setScope; private filterModels; private updateList; handleInput(keyData: string): void; private handleSelect; getSearchInput(): Input; } export {};