alwaysai
Version:
The alwaysAI command-line interface (CLI)
52 lines (48 loc) • 1.73 kB
text/typescript
import { posix } from 'path';
import * as logSymbols from 'log-symbols';
import { CliTerseError } from '@alwaysai/alwayscli';
import { APP_MODELS_DIRECTORY_NAME } from '../../../paths';
import { AppJsonFile, TargetJsonFile } from '../../../core/app';
import { ModelId } from '../../../core/model';
import { logger, echo, stringifyError } from '../../../util';
import { removeModelFromProject } from '../../project';
export async function appModelsRemoveComponent(props: {
id: string;
purge: boolean;
removeFromProject: boolean;
}) {
const { id, purge, removeFromProject } = props;
const appJsonFile = AppJsonFile();
const models = appJsonFile.read().models;
if (!models || Object.keys(models).indexOf(id) === -1) {
throw new CliTerseError(`Model ${id} not part of application config!`);
}
appJsonFile.removeModel(id);
let success = true;
if (purge) {
const { publisher, name } = ModelId.parse(id);
const modelDir = posix.join(APP_MODELS_DIRECTORY_NAME, publisher, name);
const targetJsonFile = TargetJsonFile();
try {
const targetSpawner = targetJsonFile.readHostSpawner();
await targetSpawner.rimraf(modelDir);
} catch (error) {
logger.error(stringifyError(error));
success = false;
echo(`${logSymbols.error} Failed to purge model package: ${error}`);
}
}
if (removeFromProject) {
try {
await removeModelFromProject(id);
} catch (error) {
logger.error(stringifyError(error));
success = false;
echo(`${logSymbols.error} Failed to purge model package: ${error}`);
}
}
if (!success) {
throw new CliTerseError(`Failed during process of removing ${id}`);
}
echo(`${logSymbols.success} Remove ${id}`);
}