alwaysai
Version:
The alwaysAI command-line interface (CLI)
50 lines (47 loc) • 1.52 kB
text/typescript
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);
}