UNPKG

@tanstack/ai

Version:

Type-safe TypeScript AI SDK for streaming chat, tool calling, agents, structured outputs, and multimodal generation.

49 lines (38 loc) • 1.43 kB
import { describe, expect, it } from 'vitest' import { BaseTextAdapter } from './adapter' import type { AnyTextAdapter } from './adapter' import type { DefaultMessageMetadataByModality, Modality } from '../../types' // Stands in for a provider's model-meta map. const INPUT_BY_MODEL: Record<string, ReadonlyArray<Modality>> = { 'vision-model': ['text', 'image'], } /** A provider adapter that does not set `inputModalities`. */ class StubTextAdapter extends BaseTextAdapter< string, Record<string, never>, ReadonlyArray<Modality>, DefaultMessageMetadataByModality > { readonly name = 'stub' constructor(model: string) { super({}, model) } async *chatStream() {} structuredOutput() { return Promise.resolve({ data: {}, rawText: '{}' }) } } /** A provider adapter that sets `inputModalities` from its model name. */ class ModelMetaTextAdapter extends StubTextAdapter { override readonly inputModalities = INPUT_BY_MODEL[this.model] } describe('TextAdapter inputModalities', () => { it('exposes the list a subclass sets from its model name', () => { const adapter: AnyTextAdapter = new ModelMetaTextAdapter('vision-model') expect(adapter.inputModalities).toEqual(['text', 'image']) }) it('is undefined when the subclass does not set it', () => { const adapter: AnyTextAdapter = new StubTextAdapter('vision-model') expect(adapter.inputModalities).toBeUndefined() }) })