UNPKG

giga-code

Version:

A personal AI CLI assistant powered by Grok for local development.

241 lines 12.5 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExpertModels = void 0; const react_1 = __importStar(require("react")); const ink_1 = require("ink"); const fuzzy_search_1 = require("../../utils/fuzzy-search"); const expert_models_manager_1 = require("../../utils/expert-models-manager"); const instance_models_1 = require("../../utils/instance-models"); const ExpertModels = ({ onExit }) => { const { exit } = (0, ink_1.useApp)(); const [config, setConfig] = (0, react_1.useState)({ enabled: false, fastModel: null, codeModel: null, reasoningModel: null, toolsModel: null, }); const [availableModels, setAvailableModels] = (0, react_1.useState)([]); const [currentField, setCurrentField] = (0, react_1.useState)('enabled'); const [searchQuery, setSearchQuery] = (0, react_1.useState)(''); const [filteredModels, setFilteredModels] = (0, react_1.useState)([]); const [selectedIndex, setSelectedIndex] = (0, react_1.useState)(0); const [showModelPicker, setShowModelPicker] = (0, react_1.useState)(false); (0, react_1.useEffect)(() => { // Load current expert models configuration const expertConfig = expert_models_manager_1.expertModelsManager.getExpertModelsConfig(); setConfig(expertConfig); // Load available models const instanceModels = (0, instance_models_1.getInstanceAvailableModels)(); const models = instanceModels.map(m => ({ name: m.model, provider: m.description.split('(')[1]?.split(')')[0] || 'Unknown' })); setAvailableModels(models); setFilteredModels(models); }, []); (0, react_1.useEffect)(() => { if (searchQuery) { const filtered = (0, fuzzy_search_1.fuzzySearch)(searchQuery, availableModels, (model) => model.name); setFilteredModels(filtered); } else { setFilteredModels(availableModels); } setSelectedIndex(0); }, [searchQuery, availableModels]); (0, ink_1.useInput)((input, key) => { if (key.escape) { if (showModelPicker) { setShowModelPicker(false); setSearchQuery(''); } else { onExit(); } return; } if (showModelPicker) { if (key.upArrow) { setSelectedIndex(Math.max(0, selectedIndex - 1)); } else if (key.downArrow) { setSelectedIndex(Math.min(filteredModels.length - 1, selectedIndex + 1)); } else if (key.return) { const selectedModel = filteredModels[selectedIndex]; if (selectedModel) { const newConfig = { ...config }; switch (currentField) { case 'fast': newConfig.fastModel = selectedModel.name; break; case 'code': newConfig.codeModel = selectedModel.name; break; case 'reasoning': newConfig.reasoningModel = selectedModel.name; break; case 'tools': newConfig.toolsModel = selectedModel.name; break; } setConfig(newConfig); expert_models_manager_1.expertModelsManager.setExpertModelsConfig(newConfig); } setShowModelPicker(false); setSearchQuery(''); } else if (key.backspace || key.delete) { setSearchQuery(searchQuery.slice(0, -1)); } else if (input && !key.ctrl && !key.meta) { setSearchQuery(searchQuery + input); } } else { if (key.upArrow) { const fields = ['enabled', 'fast', 'code', 'reasoning', 'tools']; const currentIndex = fields.indexOf(currentField); setCurrentField(fields[Math.max(0, currentIndex - 1)]); } else if (key.downArrow) { const fields = ['enabled', 'fast', 'code', 'reasoning', 'tools']; const currentIndex = fields.indexOf(currentField); setCurrentField(fields[Math.min(fields.length - 1, currentIndex + 1)]); } else if (key.return) { if (currentField === 'enabled') { const newConfig = { ...config, enabled: !config.enabled }; setConfig(newConfig); expert_models_manager_1.expertModelsManager.setExpertModelsConfig(newConfig); } else { setShowModelPicker(true); } } else if (key.backspace || key.delete) { if (currentField !== 'enabled') { const newConfig = { ...config }; switch (currentField) { case 'fast': newConfig.fastModel = null; break; case 'code': newConfig.codeModel = null; break; case 'reasoning': newConfig.reasoningModel = null; break; case 'tools': newConfig.toolsModel = null; break; } setConfig(newConfig); expert_models_manager_1.expertModelsManager.setExpertModelsConfig(newConfig); } } } }); if (showModelPicker) { return (react_1.default.createElement(ink_1.Box, { flexDirection: "column" }, react_1.default.createElement(ink_1.Text, { bold: true, color: "cyan" }, "Select Model for ", currentField === 'fast' ? 'Fast Operations' : currentField === 'code' ? 'Code Tasks' : currentField === 'reasoning' ? 'Complex Reasoning' : 'Tool Operations'), react_1.default.createElement(ink_1.Text, { dimColor: true }, "Type to search, \u2191\u2193 to navigate, Enter to select, Esc to cancel"), react_1.default.createElement(ink_1.Box, { marginTop: 1 }, react_1.default.createElement(ink_1.Text, null, "Search: ", searchQuery)), react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginTop: 1 }, filteredModels.slice(0, 10).map((model, index) => (react_1.default.createElement(ink_1.Box, { key: model.name }, react_1.default.createElement(ink_1.Text, { color: index === selectedIndex ? 'cyan' : 'white' }, index === selectedIndex ? '► ' : ' ', model.name, " ", react_1.default.createElement(ink_1.Text, { dimColor: true }, "(", model.provider, ")"))))), filteredModels.length > 10 && (react_1.default.createElement(ink_1.Text, { dimColor: true }, "... and ", filteredModels.length - 10, " more"))))); } return (react_1.default.createElement(ink_1.Box, { flexDirection: "column" }, react_1.default.createElement(ink_1.Text, { bold: true, color: "cyan" }, "Expert Models Configuration"), react_1.default.createElement(ink_1.Text, { dimColor: true }, "Use different models for different types of tasks"), react_1.default.createElement(ink_1.Text, { dimColor: true }, "\u2191\u2193 to navigate, Enter to toggle/select, Backspace to clear, Esc to exit"), react_1.default.createElement(ink_1.Box, { flexDirection: "column", marginTop: 2 }, react_1.default.createElement(ink_1.Box, null, react_1.default.createElement(ink_1.Text, { color: currentField === 'enabled' ? 'cyan' : 'white' }, currentField === 'enabled' ? '► ' : ' ', "Expert Mode: ", config.enabled ? react_1.default.createElement(ink_1.Text, { color: "green" }, "Enabled") : react_1.default.createElement(ink_1.Text, { color: "red" }, "Disabled"))), react_1.default.createElement(ink_1.Box, { marginTop: 1 }, react_1.default.createElement(ink_1.Text, { color: currentField === 'fast' ? 'cyan' : config.enabled ? 'white' : 'gray' }, currentField === 'fast' ? '► ' : ' ', "Fast Operations: ", config.fastModel ? react_1.default.createElement(ink_1.Text, { color: "green" }, config.fastModel) : react_1.default.createElement(ink_1.Text, { dimColor: true }, "Not set"))), react_1.default.createElement(ink_1.Box, null, react_1.default.createElement(ink_1.Text, { color: currentField === 'code' ? 'cyan' : config.enabled ? 'white' : 'gray' }, currentField === 'code' ? '► ' : ' ', "Code Tasks: ", config.codeModel ? react_1.default.createElement(ink_1.Text, { color: "green" }, config.codeModel) : react_1.default.createElement(ink_1.Text, { dimColor: true }, "Not set"))), react_1.default.createElement(ink_1.Box, null, react_1.default.createElement(ink_1.Text, { color: currentField === 'reasoning' ? 'cyan' : config.enabled ? 'white' : 'gray' }, currentField === 'reasoning' ? '► ' : ' ', "Complex Reasoning: ", config.reasoningModel ? react_1.default.createElement(ink_1.Text, { color: "green" }, config.reasoningModel) : react_1.default.createElement(ink_1.Text, { dimColor: true }, "Not set"))), react_1.default.createElement(ink_1.Box, null, react_1.default.createElement(ink_1.Text, { color: currentField === 'tools' ? 'cyan' : config.enabled ? 'white' : 'gray' }, currentField === 'tools' ? '► ' : ' ', "Tool Operations: ", config.toolsModel ? react_1.default.createElement(ink_1.Text, { color: "green" }, config.toolsModel) : react_1.default.createElement(ink_1.Text, { dimColor: true }, "Not set")))), react_1.default.createElement(ink_1.Box, { marginTop: 2 }, react_1.default.createElement(ink_1.Text, { dimColor: true }, "\u2022 Fast: File navigation, simple commands", '\n', "\u2022 Code: Code editing, refactoring, syntax fixes", '\n', "\u2022 Reasoning: Complex problem solving, architecture decisions", '\n', "\u2022 Tools: Multi-tool workflows, complex orchestration")))); }; exports.ExpertModels = ExpertModels; //# sourceMappingURL=expert-models.js.map