/** * @license * Copyright 2025 Qwen * SPDX-License-Identifier: Apache-2.0 */ import type React from 'react'; import { Box, Text } from 'ink'; import { Colors } from '../colors.js'; import { RadioButtonSelect, type RadioSelectItem, } from './shared/RadioButtonSelect.js'; import { useKeypress } from '../hooks/useKeypress.js'; import type { AvailableModel } from '../models/availableModels.js'; export interface ModelSelectionDialogProps { availableModels: AvailableModel[]; currentModel: string; onSelect: (modelId: string) => void; onCancel: () => void; } export const ModelSelectionDialog: React.FC = ({ availableModels, currentModel, onSelect, onCancel, }) => { useKeypress( (key) => { if (key.name === 'escape') { onCancel(); } }, { isActive: true }, ); const options: Array> = availableModels.map( (model) => { const visionIndicator = model.isVision ? ' [Vision]' : ''; const currentIndicator = model.id === currentModel ? ' (current)' : ''; return { label: `${model.label}${visionIndicator}${currentIndicator}`, value: model.id, }; }, ); const initialIndex = Math.max( 0, availableModels.findIndex((model) => model.id === currentModel), ); const handleSelect = (modelId: string) => { onSelect(modelId); }; return ( Select Model Choose a model for this session: Press Enter to select, Esc to cancel ); };