47 lines
1.8 KiB
TypeScript
47 lines
1.8 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { rankMessagesByImportance, scoreMessageImportance, selectImportantMessages } from './weighting.js';
|
|
import type { Message } from '../models/types.js';
|
|
|
|
describe('weighting', () => {
|
|
it('scores low-value chatter lower than preference and tool outcomes', () => {
|
|
const chatter: Message = { role: 'user', content: 'hello there' };
|
|
const preference: Message = { role: 'user', content: 'I prefer concise bullet points in responses.' };
|
|
const outcome: Message = { role: 'assistant', content: 'Command succeeded with exit code 0. Output saved.' };
|
|
|
|
const chatterScore = scoreMessageImportance(chatter);
|
|
const preferenceScore = scoreMessageImportance(preference);
|
|
const outcomeScore = scoreMessageImportance(outcome);
|
|
|
|
expect(preferenceScore).toBeGreaterThan(chatterScore);
|
|
expect(outcomeScore).toBeGreaterThan(chatterScore);
|
|
});
|
|
|
|
it('applies recency as a small tie-break boost', () => {
|
|
const messages: Message[] = [
|
|
{ role: 'user', content: 'simple note' },
|
|
{ role: 'user', content: 'simple note' },
|
|
];
|
|
|
|
const ranked = rankMessagesByImportance(messages);
|
|
expect(ranked[1].score).toBeGreaterThan(ranked[0].score);
|
|
});
|
|
|
|
it('selects important messages above threshold and keeps original order', () => {
|
|
const messages: Message[] = [
|
|
{ role: 'user', content: 'hello' },
|
|
{ role: 'user', content: 'I prefer markdown tables for reports.' },
|
|
{ role: 'assistant', content: 'Tool result: command failed with exit code 1' },
|
|
{ role: 'assistant', content: 'ok' },
|
|
];
|
|
|
|
const selected = selectImportantMessages(messages, {
|
|
threshold: 0.45,
|
|
maxMessages: 4,
|
|
});
|
|
|
|
expect(selected).toHaveLength(2);
|
|
expect(selected[0].index).toBe(1);
|
|
expect(selected[1].index).toBe(2);
|
|
});
|
|
});
|