giga-code
Version:
A personal AI CLI assistant powered by Grok for local development.
149 lines • 8.4 kB
JavaScript
"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.useRouteSelection = exports.RouteSelection = void 0;
const react_1 = __importStar(require("react"));
const ink_1 = require("ink");
const openrouter_providers_1 = require("../../utils/openrouter-providers");
const added_models_1 = require("../../utils/added-models");
const api_keys_1 = require("../../utils/api-keys");
function RouteSelection({ models, selectedModelIndex, selectedProviderIndex, isVisible, currentModel, viewMode, currentSelectedModel, providers, isLoadingProviders, onModelSelect, onProviderSelect, onBack, }) {
if (!isVisible)
return null;
if (viewMode === 'models') {
return (react_1.default.createElement(ink_1.Box, { marginTop: 1, flexDirection: "column" },
react_1.default.createElement(ink_1.Box, { marginBottom: 1 },
react_1.default.createElement(ink_1.Text, { color: "cyan" },
"Select Model to Configure Provider (current: ",
currentModel,
"):")),
models.length === 0 ? (react_1.default.createElement(ink_1.Box, { paddingLeft: 1 },
react_1.default.createElement(ink_1.Text, { color: "yellow" }, "No OpenRouter models found. Add models with format \"author/model\" using /add-model."))) : (models.map((modelOption, index) => {
const openRouterProvider = (0, added_models_1.getOpenRouterProvider)(modelOption.model);
const hasProviderSet = openRouterProvider !== null;
return (react_1.default.createElement(ink_1.Box, { key: index, paddingLeft: 1 },
react_1.default.createElement(ink_1.Text, { color: index === selectedModelIndex ? "black" : "white", backgroundColor: index === selectedModelIndex ? "cyan" : undefined },
modelOption.model,
hasProviderSet && (react_1.default.createElement(ink_1.Text, { color: index === selectedModelIndex ? "black" : "green" },
" ",
"\u2192 ",
openRouterProvider))),
react_1.default.createElement(ink_1.Box, { marginLeft: 1 },
react_1.default.createElement(ink_1.Text, { color: "gray" }, modelOption.description))));
})),
react_1.default.createElement(ink_1.Box, { marginTop: 1 },
react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, "\u2191\u2193 navigate \u2022 Enter configure provider \u2022 Esc cancel"))));
}
// Provider selection view
return (react_1.default.createElement(ink_1.Box, { marginTop: 1, flexDirection: "column" },
react_1.default.createElement(ink_1.Box, { marginBottom: 1 },
react_1.default.createElement(ink_1.Text, { color: "cyan" },
"Select Provider for ",
currentSelectedModel,
":")),
isLoadingProviders ? (react_1.default.createElement(ink_1.Box, { paddingLeft: 1 },
react_1.default.createElement(ink_1.Text, { color: "yellow" }, "Loading available providers..."))) : providers.length === 0 ? (react_1.default.createElement(ink_1.Box, { paddingLeft: 1 },
react_1.default.createElement(ink_1.Text, { color: "red" }, "No providers available for this model"))) : (providers.map((provider, index) => {
const currentProvider = (0, added_models_1.getOpenRouterProvider)(currentSelectedModel || '');
const isCurrentlySelected = currentProvider === provider.id;
return (react_1.default.createElement(ink_1.Box, { key: index, paddingLeft: 1 },
react_1.default.createElement(ink_1.Text, { color: index === selectedProviderIndex ? "black" : "white", backgroundColor: index === selectedProviderIndex ? "cyan" : undefined },
provider.name,
isCurrentlySelected && (react_1.default.createElement(ink_1.Text, { color: index === selectedProviderIndex ? "black" : "green" },
" ",
"(current)"))),
react_1.default.createElement(ink_1.Box, { marginLeft: 1, flexDirection: "column" },
provider.pricing && (react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true },
"$",
provider.pricing.prompt,
"/1k prompt \u2022 $",
provider.pricing.completion,
"/1k completion")),
(provider.quantization || provider.uptime || provider.context_length) && (react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true },
provider.quantization ? `${provider.quantization}` : '',
provider.quantization && provider.uptime ? ' • ' : '',
provider.uptime ? `${provider.uptime}% uptime` : '',
(provider.quantization || provider.uptime) && provider.context_length ? ' • ' : '',
provider.context_length ? `${provider.context_length.toLocaleString()} context` : '')))));
})),
react_1.default.createElement(ink_1.Box, { marginTop: 1 },
react_1.default.createElement(ink_1.Text, { color: "gray", dimColor: true }, "\u2191\u2193 navigate \u2022 Enter select provider \u2022 Esc back to models"))));
}
exports.RouteSelection = RouteSelection;
// Hook for managing route selection state
function useRouteSelection() {
const [viewMode, setViewMode] = (0, react_1.useState)('models');
const [currentSelectedModel, setCurrentSelectedModel] = (0, react_1.useState)('');
const [providers, setProviders] = (0, react_1.useState)([]);
const [isLoadingProviders, setIsLoadingProviders] = (0, react_1.useState)(false);
const handleModelSelect = async (model) => {
setCurrentSelectedModel(model);
setViewMode('providers');
setIsLoadingProviders(true);
setProviders([]);
try {
const apiKeys = (0, api_keys_1.loadApiKeys)();
const openRouterKey = apiKeys.openRouterApiKey;
if (openRouterKey) {
const modelProviders = await (0, openrouter_providers_1.getModelProvidersWithFallback)(model, openRouterKey);
setProviders(modelProviders);
}
else {
// If no OpenRouter key, show message
setProviders([]);
}
}
catch (error) {
console.error('Error fetching providers:', error);
setProviders([]);
}
finally {
setIsLoadingProviders(false);
}
};
const handleBack = () => {
setViewMode('models');
setCurrentSelectedModel('');
setProviders([]);
setIsLoadingProviders(false);
};
const reset = () => {
setViewMode('models');
setCurrentSelectedModel('');
setProviders([]);
setIsLoadingProviders(false);
};
return {
viewMode,
currentSelectedModel,
providers,
isLoadingProviders,
handleModelSelect,
handleBack,
reset,
};
}
exports.useRouteSelection = useRouteSelection;
//# sourceMappingURL=route-selection.js.map