UNPKG

capsule-ai-cli

Version:

The AI Model Orchestrator - Intelligent multi-model workflows with device-locked licensing

54 lines 2.83 kB
import React from 'react'; import { Box, Text } from 'ink'; import SelectInput from 'ink-select-input'; import { getProviderColor } from '../utils/provider-colors.js'; import { getModelDisplayName } from '../utils/model-display.js'; import { ModelItem } from './ModelItem.js'; export const ModelSelector = ({ models = [], currentModel, provider, onSelect, onClose }) => { const providerColor = getProviderColor(provider); const items = models.map(model => ({ label: getModelDisplayName(model), value: model, isCurrent: model === currentModel })); if (models.length === 0) { return (React.createElement(Box, { flexDirection: "column", borderStyle: "single", borderColor: "yellow", paddingX: 1 }, React.createElement(Text, { color: "yellow" }, "No models available for provider ", provider))); } const maxVisibleItems = 10; const showingAllItems = items.length <= maxVisibleItems; return (React.createElement(Box, { flexDirection: "column", borderStyle: "single", borderColor: providerColor, paddingX: 1 }, React.createElement(Box, { marginBottom: 1 }, React.createElement(Text, { bold: true }, "Select a model for ", React.createElement(Text, { color: providerColor }, provider), ":")), React.createElement(Box, { marginBottom: 1 }, React.createElement(Box, { width: 35, flexShrink: 0 }, React.createElement(Text, { dimColor: true }, "Model")), React.createElement(Box, { width: 8, flexShrink: 0 }, React.createElement(Text, { dimColor: true }, "Context")), React.createElement(Box, { flexGrow: 1 }, React.createElement(Text, { dimColor: true }, "Input \u2192 Output"))), React.createElement(SelectInput, { items: items, limit: maxVisibleItems, onSelect: (item) => { onSelect(item.value); onClose(); }, itemComponent: ({ isSelected, label }) => { const item = items.find(i => i.label === label); if (!item) return null; return (React.createElement(ModelItem, { isSelected: isSelected, label: label, value: item.value, provider: provider, isCurrent: item.isCurrent })); } }), !showingAllItems && (React.createElement(Box, { marginTop: 1 }, React.createElement(Text, { dimColor: true }, "Showing ", maxVisibleItems, " of ", items.length, " models"))), React.createElement(Box, { marginTop: 1 }, React.createElement(Text, { dimColor: true }, "Press ESC to cancel")))); }; //# sourceMappingURL=ModelSelector.js.map