Skip to content
This repository was archived by the owner on Jul 4, 2025. It is now read-only.

Commit 3a731ec

Browse files
authored
chore: correct output logs (#940)
1 parent 271ca14 commit 3a731ec

File tree

9 files changed

+56
-16
lines changed

9 files changed

+56
-16
lines changed

cortex-js/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
"preuninstall": "node ./uninstall.js"
3939
},
4040
"dependencies": {
41-
"@cortexso/cortex.js": "^0.1.4",
41+
"@cortexso/cortex.js": "^0.1.5",
4242
"@huggingface/gguf": "^0.1.5",
4343
"@huggingface/hub": "^0.15.1",
4444
"@nestjs/axios": "^3.0.2",

cortex-js/src/infrastructure/commanders/run.command.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,10 @@ export class RunCommand extends BaseCommand {
5757
// Check model compatibility on this machine
5858
await checkModelCompatibility(modelId, checkingSpinner);
5959

60+
let existingModel = await this.cortex.models.retrieve(modelId);
6061
// If not exist
6162
// Try Pull
62-
if (!(await this.cortex.models.retrieve(modelId))) {
63+
if (!existingModel) {
6364
checkingSpinner.succeed();
6465

6566
console.log('Downloading model...');
@@ -68,16 +69,17 @@ export class RunCommand extends BaseCommand {
6869
exit(1);
6970
});
7071
await downloadProgress(this.cortex, modelId);
71-
}
72-
ora().succeed('Model downloaded');
72+
checkingSpinner.succeed('Model downloaded');
7373

74-
// Second check if model is available
75-
const existingModel = await this.cortex.models.retrieve(modelId);
76-
if (!existingModel) {
77-
checkingSpinner.fail(`Model is not available`);
78-
process.exit(1);
74+
// Second check if model is available
75+
existingModel = await this.cortex.models.retrieve(modelId);
76+
if (!existingModel) {
77+
checkingSpinner.fail(`Model is not available`);
78+
process.exit(1);
79+
}
80+
} else {
81+
checkingSpinner.succeed('Model found');
7982
}
80-
checkingSpinner.succeed('Model found');
8183

8284
const engine = existingModel.engine || Engines.llamaCPP;
8385
// Pull engine if not exist

cortex-js/src/infrastructure/commanders/test/models.command.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { TestingModule } from '@nestjs/testing';
2-
import { stubMethod } from 'hanbi';
32
import { CommandTestFactory } from 'nest-commander-testing';
43
import { CommandModule } from '@/command.module';
54
import { join } from 'path';

cortex-js/src/infrastructure/controllers/embeddings.controller.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { EventEmitterModule } from '@nestjs/event-emitter';
1010
import { TelemetryModule } from '@/usecases/telemetry/telemetry.module';
1111
import { FileManagerModule } from '../services/file-manager/file-manager.module';
1212
import { ModelsModule } from '@/usecases/models/models.module';
13+
import { CortexModule } from '@/usecases/cortex/cortex.module';
1314

1415
describe('EmbeddingsController', () => {
1516
let controller: EmbeddingsController;
@@ -27,6 +28,7 @@ describe('EmbeddingsController', () => {
2728
TelemetryModule,
2829
FileManagerModule,
2930
ModelsModule,
31+
CortexModule,
3032
],
3133
controllers: [EmbeddingsController],
3234
providers: [ChatUsecases],

cortex-js/src/infrastructure/controllers/models.controller.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import { DeleteModelResponseDto } from '@/infrastructure/dtos/models/delete-mode
1919
import { ApiOperation, ApiParam, ApiTags, ApiResponse } from '@nestjs/swagger';
2020
import { StartModelSuccessDto } from '@/infrastructure/dtos/models/start-model-success.dto';
2121
import { TransformInterceptor } from '../interceptors/transform.interceptor';
22-
import { CortexUsecases } from '@/usecases/cortex/cortex.usecases';
2322
import { ModelSettingsDto } from '../dtos/models/model-settings.dto';
2423
import { EventName } from '@/domain/telemetry/telemetry.interface';
2524
import { TelemetryUsecases } from '@/usecases/telemetry/telemetry.usecases';
@@ -32,7 +31,6 @@ import { HuggingFaceRepoSibling } from '@/domain/models/huggingface.interface';
3231
export class ModelsController {
3332
constructor(
3433
private readonly modelsUsecases: ModelsUsecases,
35-
private readonly cortexUsecases: CortexUsecases,
3634
private readonly telemetryUsecases: TelemetryUsecases,
3735
) {}
3836

@@ -71,9 +69,7 @@ export class ModelsController {
7169
@Param('modelId') modelId: string,
7270
@Body() params: ModelSettingsDto,
7371
) {
74-
return this.cortexUsecases
75-
.startCortex()
76-
.then(() => this.modelsUsecases.startModel(modelId, params));
72+
return this.modelsUsecases.startModel(modelId, params);
7773
}
7874

7975
@HttpCode(200)

cortex-js/src/infrastructure/repositories/extensions/extension.repository.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,46 @@ export class ExtensionRepositoryImpl implements ExtensionRepository {
2828
this.loadCoreExtensions();
2929
this.loadExternalExtensions();
3030
}
31+
/**
32+
* Persist extension to the extensions map
33+
* @param object
34+
* @returns
35+
*/
3136
create(object: Extension): Promise<Extension> {
3237
this.extensions.set(object.name ?? '', object);
3338
return Promise.resolve(object);
3439
}
40+
41+
/**
42+
* Find all extensions
43+
* @returns
44+
*/
3545
findAll(): Promise<Extension[]> {
3646
return Promise.resolve(Array.from(this.extensions.values()));
3747
}
48+
49+
/**
50+
* Find one extension by id
51+
* @param id
52+
* @returns
53+
*/
3854
findOne(id: string): Promise<Extension | null> {
3955
return Promise.resolve(this.extensions.get(id) ?? null);
4056
}
57+
58+
/**
59+
* Update extension
60+
* It is not applicable
61+
*/
4162
update(): Promise<void> {
4263
throw new Error('Method not implemented.');
4364
}
65+
66+
/**
67+
* Remove extension from the extensions map
68+
* @param id
69+
* @returns
70+
*/
4471
remove(id: string): Promise<void> {
4572
this.extensions.delete(id);
4673
return Promise.resolve();

cortex-js/src/usecases/cortex/cortex.usecases.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,12 @@ export class CortexUsecases implements BeforeApplicationShutdown {
7373
});
7474
this.cortexProcess.unref();
7575

76+
// Handle process exit
77+
this.cortexProcess.on('close', (code) => {
78+
this.cortexProcess = undefined
79+
console.log(`child process exited with code ${code}`);
80+
});
81+
7682
// Await for the /healthz status ok
7783
return new Promise<CortexOperationSuccessfullyDto>((resolve, reject) => {
7884
const interval = setInterval(() => {

cortex-js/src/usecases/models/models.usecases.spec.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { DownloadManagerModule } from '@/infrastructure/services/download-manage
1010
import { EventEmitterModule } from '@nestjs/event-emitter';
1111
import { TelemetryModule } from '../telemetry/telemetry.module';
1212
import { ContextModule } from '@/infrastructure/services/context/context.module';
13+
import { CortexModule } from '../cortex/cortex.module';
1314

1415
describe('ModelsService', () => {
1516
let service: ModelsUsecases;
@@ -30,6 +31,7 @@ describe('ModelsService', () => {
3031
TelemetryModule,
3132
TelemetryModule,
3233
ContextModule,
34+
CortexModule,
3335
],
3436
providers: [ModelsUsecases],
3537
exports: [ModelsUsecases],

cortex-js/src/usecases/models/models.usecases.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,13 @@ import { ContextService } from '@/infrastructure/services/context/context.servic
3434
import { Engines } from '@/infrastructure/commanders/types/engine.interface';
3535
import { load } from 'js-yaml';
3636
import { llamaModelFile } from '@/utils/app-path';
37+
import { CortexUsecases } from '../cortex/cortex.usecases';
3738

3839
@Injectable()
3940
export class ModelsUsecases {
4041
constructor(
4142
private readonly modelRepository: ModelRepository,
43+
private readonly cortexUsecases: CortexUsecases,
4244
private readonly extensionRepository: ExtensionRepository,
4345
private readonly fileManagerService: FileManagerService,
4446
private readonly downloadManagerService: DownloadManagerService,
@@ -170,6 +172,10 @@ export class ModelsUsecases {
170172
modelId,
171173
};
172174
}
175+
176+
// Attempt to start cortex
177+
await this.cortexUsecases.startCortex()
178+
173179
const loadingModelSpinner = ora('Loading model...').start();
174180
// update states and emitting event
175181
this.activeModelStatuses[modelId] = {

0 commit comments

Comments
 (0)