UNPKG

alwaysai

Version:

The alwaysAI command-line interface (CLI)

89 lines (79 loc) 2.46 kB
import { join } from 'path'; import * as t from 'io-ts'; import { ConfigFile } from '@alwaysai/config-nodejs'; import { APP_DOT_PY } from '../constants'; import chalk from 'chalk'; export const APP_CONFIG_FILE_NAME = 'alwaysai.app.json'; const codec = t.partial({ models: t.record(t.string, t.string, 'models'), scripts: t.record(t.string, t.string, 'scripts'), }); export type AppConfig = t.TypeOf<typeof codec>; const ENOENT = { message: `${APP_CONFIG_FILE_NAME} not found. Did you run "alwaysai app configure"?`, code: 'TERSE', }; export function AppConfigFile(dir = process.cwd()) { const configFile = ConfigFile({ path: join(dir, APP_CONFIG_FILE_NAME), codec, ENOENT, initialValue: { models: {}, scripts: { start: `python ${APP_DOT_PY}`, }, }, }); return { ...configFile, addModel(id: string, version: string) { return configFile.update(config => { config.models = config.models || {}; config.models[id] = version; }); }, removeModel(id: string) { return configFile.update(config => { if (config.models) { delete config.models[id]; } }); }, describeModels() { const config = configFile.readIfExists(); const MODELS_COLON = 'Models:'; if (!config) { return `${MODELS_COLON} "${APP_CONFIG_FILE_NAME}" not found`; } let description = `${MODELS_COLON} ${chalk.bold('None')}`; if (config.models) { const entries = Object.entries(config.models); if (entries.length > 0) { description = `${MODELS_COLON}\n${entries .map(([modelId, modelVersion]) => ` ${modelId}@${modelVersion}`) .join('\n')}`; } } return description; }, describeScripts() { const config = configFile.readIfExists(); const SCRIPTS_COLON = 'Scripts:'; if (!config) { return `${SCRIPTS_COLON} "${APP_CONFIG_FILE_NAME}" not found`; } let description = `${SCRIPTS_COLON} ${chalk.bold('None')}`; if (config.scripts) { const entries = Object.entries(config.scripts); if (entries.length > 0) { description = `${SCRIPTS_COLON}\n${entries .map(([scriptName, scriptValue]) => ` ${scriptName} => "${scriptValue}"`) .join('\n')}`; } } return description; }, }; } export const appConfigFile = AppConfigFile();