Spaces:
Running
Running
File size: 1,747 Bytes
21ad36a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | import { describe, expect, it } from 'vitest';
import { parseReleasePromptMatrix } from './prompt-matrix';
function fixtures() {
return [
{ id: 'a', messages: [{ role: 'user', content: 'A' }] },
{ id: 'b', messages: [{ role: 'user', content: 'B' }] },
{ id: 'c', messages: [{ role: 'user', content: 'C' }] },
{ id: 'd', messages: [{ role: 'user', content: 'D' }] },
{
id: 'multiturn',
messages: [
{ role: 'system', content: 'Track facts.' },
{ role: 'user', content: 'One.' },
{ role: 'assistant', content: 'Noted.' },
{ role: 'user', content: 'Repeat.' },
],
},
{
id: 'tool_call',
messages: [{ role: 'user', content: 'Use memory.' }],
tools: [{
type: 'function',
function: {
name: 'memory',
parameters: {
type: 'object',
properties: { key: { type: 'string' } },
required: ['key'],
},
},
}],
},
];
}
describe('parseReleasePromptMatrix', () => {
it('accepts the locked six-case shape with multi-turn and tool coverage', () => {
const result = parseReleasePromptMatrix(fixtures());
expect(result).toHaveLength(6);
expect(result.at(-1)?.tools[0]?.function.name).toBe('memory');
});
it('rejects a matrix that only looks complete by count', () => {
const value = fixtures().map((fixture) => ({ ...fixture, tools: undefined }));
expect(() => parseReleasePromptMatrix(value)).toThrow(/tool-call case/);
});
it('rejects duplicate case ids', () => {
const value = fixtures();
value[1] = { ...value[1]!, id: 'a' };
expect(() => parseReleasePromptMatrix(value)).toThrow(/Duplicate release prompt id/);
});
});
|