UNPKG

alwaysai

Version:

The alwaysAI command-line interface (CLI)

50 lines (47 loc) 1.52 kB
import { CliTerseError } from '@alwaysai/alwayscli'; import { addModelToProject } from '../../project'; import { checkUserIsLoggedInComponent } from '../../user'; import { Spinner } from '../../../util'; import { CliRpcClient } from '../../../infrastructure'; import { AppJsonFile } from '../../../core/app'; import { downloadModelPackageToCache, modelPackageCache } from '../../../core/model'; export async function appModelsAddComponent(props: { yes: boolean; dir?: string; id: string; version?: number; addToProject: boolean; }) { const { yes, dir = process.cwd(), id, addToProject } = props; const appJsonFile = AppJsonFile(dir); appJsonFile.read(); await checkUserIsLoggedInComponent({ yes }); let modelVersion: number; const modelVersionStr = props.version ? `@${props.version}` : ''; const spinner = Spinner(`Fetch model ${id}${modelVersionStr}`); try { if (props.version) { modelVersion = props.version; } else { const { version } = await CliRpcClient().getModelVersion({ id }); modelVersion = version; } if (!modelPackageCache.has(id, modelVersion)) { await downloadModelPackageToCache(id, modelVersion); } spinner.succeed(); } catch (exception) { spinner.fail(); if (exception.code === 'MODEL_VERSION_NOT_FOUND') { throw new CliTerseError(`Model not found: ${id}${modelVersionStr}`); } throw exception; } if (addToProject) { await addModelToProject(id); } appJsonFile.addModel(id, modelVersion); }