Something went wrong. Try again.
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950import { describe, expect, it } from 'bun:test';import { SessionModelController } from '@/core/model-controller';import type { Provider } from '@/contracts/provider';import type { ModelDescriptor } from '@/contracts/model';
const openai: ModelDescriptor = { id: 'openai:gpt-4o', provider: 'openai', model: 'gpt-4o' };const local: ModelDescriptor = { id: 'local:llama3', provider: 'local', model: 'llama3' };const provider = (): Provider => ({ stream: async function* () { yield { kind: 'done', message: { id: 'm', role: 'assistant', content: [] }, usage: { input: 0, output: 0 } }; },});
describe('SessionModelController', () => { it('lists immutable catalog descriptors and selects a known id', () => { const queued: Provider[] = []; const controller = new SessionModelController({ models: [openai, local], active: openai, createProvider: provider, queueProvider: (p) => queued.push(p), }); expect(controller.list()).toEqual({ models: [openai, local], active: openai }); const result = controller.set(local.id); expect(result).toEqual({ previous: openai, active: local, effective: 'next_provider_call' }); expect(queued).toHaveLength(1); const listed = controller.list(); listed.models[0]!.model = 'mutated'; expect(controller.list().models[0]!.model).toBe(openai.model); });
it('rejects an unknown selection without creating or queuing a provider', () => { let created = 0; let queued = 0; const controller = new SessionModelController({ models: [openai], active: openai, createProvider: () => { created += 1; return provider(); }, queueProvider: () => { queued += 1; }, }); expect(() => controller.set('missing')).toThrow('unknown model selection'); expect(created).toBe(0); expect(queued).toBe(0); expect(controller.list().active).toEqual(openai); });
it('does not queue a provider when selecting the active id', () => { let created = 0; const controller = new SessionModelController({ models: [openai], active: openai, createProvider: () => { created += 1; return provider(); }, queueProvider: () => undefined, }); expect(controller.set(openai.id).previous).toEqual(openai); expect(created).toBe(0); });});