34 lines
3.5 KiB
TypeScript
34 lines
3.5 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { admitModelExecution, type ModelAdmissionRequest, type ModelBudgetReservation, type ModelExecutionPolicy } from '../../src/document-workbench/model-admission';
|
|
|
|
const request: ModelAdmissionRequest = { tenantId: 'a', projectId: 'p', jobId: 'j', modelId: 'model', dataClass: 'medium', maxInputTokens: 100, maxOutputTokens: 50, maximumCredits: 10 };
|
|
const policy: ModelExecutionPolicy = { tenantId: 'a', projectId: 'p', allowedModelIds: ['model'], allowedDataClasses: ['medium'], destination: 'external', externalTransferAllowed: true, maxInputTokens: 100, maxOutputTokens: 50 };
|
|
const hold: ModelBudgetReservation = { tenantId: 'a', projectId: 'p', jobId: 'j', status: 'reserved', credits: 10 };
|
|
describe('model execution admission', () => {
|
|
it('requires a scoped allowed model, data policy and sufficient reservation', () => {
|
|
expect(admitModelExecution(request, policy, hold)).toEqual({ allowed: true });
|
|
expect(admitModelExecution(request, { ...policy, projectId: 'other' }, hold)).toEqual({ allowed: false, reason: 'scope_mismatch' });
|
|
expect(admitModelExecution(request, { ...policy, allowedModelIds: [] }, hold)).toEqual({ allowed: false, reason: 'model_not_allowed' });
|
|
expect(admitModelExecution(request, { ...policy, allowedDataClasses: [] }, hold)).toEqual({ allowed: false, reason: 'data_class_not_allowed' });
|
|
expect(admitModelExecution(request, { ...policy, externalTransferAllowed: false }, hold)).toEqual({ allowed: false, reason: 'external_transfer_denied' });
|
|
expect(admitModelExecution({ ...request, dataClass: 'high' }, { ...policy, allowedDataClasses: ['high'] }, hold)).toEqual({ allowed: false, reason: 'external_transfer_denied' });
|
|
expect(admitModelExecution({ ...request, dataClass: 'restricted' }, { ...policy, allowedDataClasses: ['restricted'] }, hold)).toEqual({ allowed: false, reason: 'external_transfer_denied' });
|
|
expect(admitModelExecution({ ...request, maxOutputTokens: 51 }, policy, hold)).toEqual({ allowed: false, reason: 'token_limit_exceeded' });
|
|
expect(admitModelExecution(request, policy, { ...hold, credits: 9 })).toEqual({ allowed: false, reason: 'reservation_required' });
|
|
expect(admitModelExecution(request, policy, { ...hold, status: 'settled' })).toEqual({ allowed: false, reason: 'reservation_required' });
|
|
expect(admitModelExecution(request, policy, { ...hold, jobId: 'other' })).toEqual({ allowed: false, reason: 'reservation_required' });
|
|
});
|
|
it('pilot mode (maximumCredits 0) requires no reservation but still enforces every other rule', () => {
|
|
const pilot = { ...request, maximumCredits: 0 };
|
|
expect(admitModelExecution(pilot, policy, undefined)).toEqual({ allowed: true });
|
|
expect(admitModelExecution(pilot, { ...policy, allowedModelIds: [] }, undefined)).toEqual({ allowed: false, reason: 'model_not_allowed' });
|
|
expect(admitModelExecution(pilot, { ...policy, projectId: 'other' }, undefined)).toEqual({ allowed: false, reason: 'scope_mismatch' });
|
|
expect(admitModelExecution({ ...pilot, maximumCredits: -1 }, policy, undefined)).toEqual({ allowed: false, reason: 'invalid_request' });
|
|
expect(admitModelExecution(request, policy, undefined)).toEqual({ allowed: false, reason: 'reservation_required' });
|
|
});
|
|
it('rejects invalid limits and never treats an unknown destination as local', () => {
|
|
expect(admitModelExecution({ ...request, maxInputTokens: NaN }, policy, hold).allowed).toBe(false);
|
|
expect(admitModelExecution(request, { ...policy, destination: 'unknown' as never }, hold).allowed).toBe(false);
|
|
});
|
|
});
|