Compare commits
1 Commits
main
...
gru/projec
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
18ddccb709 |
128
test/cases/service/core/dataset/training/utils.test.ts
Normal file
128
test/cases/service/core/dataset/training/utils.test.ts
Normal file
@ -0,0 +1,128 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import {
|
||||
createDatasetTrainingMongoWatch,
|
||||
startTrainingQueue
|
||||
} from '@/service/core/dataset/training/utils';
|
||||
import { MongoDatasetTraining } from '@fastgpt/service/core/dataset/training/schema';
|
||||
import { generateQA } from '@/service/core/dataset/queues/generateQA';
|
||||
import { generateVector } from '@/service/core/dataset/queues/generateVector';
|
||||
import { TrainingModeEnum } from '@fastgpt/global/core/dataset/constants';
|
||||
|
||||
vi.mock('@/service/core/dataset/queues/generateQA', () => ({
|
||||
generateQA: vi.fn()
|
||||
}));
|
||||
|
||||
vi.mock('@/service/core/dataset/queues/generateVector', () => ({
|
||||
generateVector: vi.fn()
|
||||
}));
|
||||
|
||||
vi.mock('@fastgpt/service/core/dataset/training/schema', () => ({
|
||||
MongoDatasetTraining: {
|
||||
watch: vi.fn().mockReturnValue({
|
||||
on: vi.fn()
|
||||
})
|
||||
}
|
||||
}));
|
||||
|
||||
describe('dataset training utils', () => {
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
describe('createDatasetTrainingMongoWatch', () => {
|
||||
it('should setup mongo watch and handle qa mode', () => {
|
||||
const mockOn = vi.fn();
|
||||
vi.mocked(MongoDatasetTraining.watch).mockReturnValue({
|
||||
on: mockOn
|
||||
});
|
||||
|
||||
createDatasetTrainingMongoWatch();
|
||||
|
||||
expect(MongoDatasetTraining.watch).toHaveBeenCalled();
|
||||
expect(mockOn).toHaveBeenCalledWith('change', expect.any(Function));
|
||||
|
||||
// Simulate change event for QA mode
|
||||
const changeHandler = mockOn.mock.calls[0][1];
|
||||
changeHandler({
|
||||
operationType: 'insert',
|
||||
fullDocument: {
|
||||
mode: TrainingModeEnum.qa
|
||||
}
|
||||
});
|
||||
|
||||
expect(generateQA).toHaveBeenCalled();
|
||||
expect(generateVector).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should handle chunk mode', () => {
|
||||
const mockOn = vi.fn();
|
||||
vi.mocked(MongoDatasetTraining.watch).mockReturnValue({
|
||||
on: mockOn
|
||||
});
|
||||
|
||||
createDatasetTrainingMongoWatch();
|
||||
|
||||
const changeHandler = mockOn.mock.calls[0][1];
|
||||
changeHandler({
|
||||
operationType: 'insert',
|
||||
fullDocument: {
|
||||
mode: TrainingModeEnum.chunk
|
||||
}
|
||||
});
|
||||
|
||||
expect(generateVector).toHaveBeenCalled();
|
||||
expect(generateQA).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should ignore non-insert operations', () => {
|
||||
const mockOn = vi.fn();
|
||||
vi.mocked(MongoDatasetTraining.watch).mockReturnValue({
|
||||
on: mockOn
|
||||
});
|
||||
|
||||
createDatasetTrainingMongoWatch();
|
||||
|
||||
const changeHandler = mockOn.mock.calls[0][1];
|
||||
changeHandler({
|
||||
operationType: 'update',
|
||||
fullDocument: {
|
||||
mode: TrainingModeEnum.qa
|
||||
}
|
||||
});
|
||||
|
||||
expect(generateQA).not.toHaveBeenCalled();
|
||||
expect(generateVector).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
describe('startTrainingQueue', () => {
|
||||
beforeEach(() => {
|
||||
global.systemEnv = {
|
||||
qaMaxProcess: 3
|
||||
};
|
||||
});
|
||||
|
||||
it('should start single process by default', () => {
|
||||
startTrainingQueue();
|
||||
|
||||
expect(generateQA).toHaveBeenCalledTimes(1);
|
||||
expect(generateVector).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('should start max processes when fast mode enabled', () => {
|
||||
startTrainingQueue(true);
|
||||
|
||||
expect(generateQA).toHaveBeenCalledTimes(3);
|
||||
expect(generateVector).toHaveBeenCalledTimes(3);
|
||||
});
|
||||
|
||||
it('should use default max process when not configured', () => {
|
||||
global.systemEnv = undefined;
|
||||
|
||||
startTrainingQueue(true);
|
||||
|
||||
expect(generateQA).toHaveBeenCalledTimes(10);
|
||||
expect(generateVector).toHaveBeenCalledTimes(10);
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user