lite_webui / tests /context.test.js
blyon1995's picture
init this repo
ca51841
import { describe, expect, it } from 'vitest';
import { formatCompactTokenCount } from '../src/api.js';
import {
DEFAULT_CONTEXT_LIMIT_TOKENS,
DEFAULT_CONTEXT_RESET_THRESHOLD_PERCENT,
resolveContextConfig,
estimateThreadTokens,
} from '../src/context.js';
describe('context helpers – resolveContextConfig', () => {
it('falls back to the default context window when nothing is configured', () => {
const config = resolveContextConfig({}, '');
expect(config.maxTokens).toBe(DEFAULT_CONTEXT_LIMIT_TOKENS);
expect(config.resetPercent).toBe(DEFAULT_CONTEXT_RESET_THRESHOLD_PERCENT);
expect(config.source).toBe('default');
});
it('prefers a manually configured context window', () => {
const config = resolveContextConfig({ contextLimitTokens: 65536 }, 'qwen-32k');
expect(config.maxTokens).toBe(65536);
expect(config.source).toBe('manual');
});
it('does not infer context length from model ids anymore', () => {
const config = resolveContextConfig({ contextLimitTokens: null }, 'qwen-128k');
expect(config.maxTokens).toBe(DEFAULT_CONTEXT_LIMIT_TOKENS);
expect(config.source).toBe('default');
});
it('respects thresholds below the default warning band', () => {
const config = resolveContextConfig({
contextLimitTokens: 4096,
contextResetThresholdPercent: 70,
}, '');
expect(config.resetTokens).toBe(Math.floor(4096 * 0.7));
expect(config.warnTokens).toBe(config.resetTokens);
});
it('keeps resetTokens below the hard window when threshold percent is too aggressive', () => {
const config = resolveContextConfig({
contextLimitTokens: 32768,
contextResetThresholdPercent: 95,
}, '');
expect(config.warnTokens).toBe(Math.floor(32768 * 0.8));
expect(config.resetTokens).toBe(30720);
});
});
describe('context helpers – estimateThreadTokens', () => {
it('includes pending messages in the projected estimate', () => {
const messages = [{ role: 'user', content: 'hello world' }];
const pending = { role: 'assistant', content: 'reply' };
expect(estimateThreadTokens(messages, pending)).toBeGreaterThan(estimateThreadTokens(messages));
});
});
describe('api helpers – formatCompactTokenCount', () => {
it('keeps 4k-class windows readable without rounding them up', () => {
expect(formatCompactTokenCount(4096)).toBe('4.1k');
});
});