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"; /** Selesai: options for secondary selectors (e.g. the vision caption model picker). */ export interface ModelSelectorOptions { /** Restrict the list (for example, to vision-capable models). */ modelFilter?: (model: Model) => boolean; /** Add an "off" choice; selecting it calls onSelect(undefined). */ allowOff?: boolean; } interface ScopedModelItem { model: Model; thinkingLevel?: string; } interface DefaultModelReference { provider: string; id: 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 modelRuntime; private onSelectCallback; private readonly options; private onSelectAsDefaultCallback?; private onCancelCallback; private errorMessage?; private refreshStatusMessage; private refreshStatusSuccess; private tui; private scopedModels; private defaultModel?; private scope; private scopeText?; private scopeHintText?; private readonly refreshAbortController; private refreshTimeout?; private closed; constructor(tui: TUI, currentModel: Model | undefined, modelRuntime: ModelRuntime, scopedModels: ReadonlyArray, onSelect: (model: Model | undefined) => void, onCancel: () => void, initialSearchInput?: string, onSelectAsDefault?: (model: Model) => void, defaultModel?: DefaultModelReference, options?: ModelSelectorOptions); private loadModelsFromSnapshot; private refreshModels; dispose(): void; private sortModels; private getScopeText; private getScopeHintText; private isDefaultModel; private isDefaultSearch; private setScope; private filterModels; private updateList; handleInput(keyData: string): void; private getActiveModels; private handleSelect; getSearchInput(): Input; } export {};