@tanstack/ai
Version:
Type-safe TypeScript AI SDK for streaming chat, tool calling, agents, structured outputs, and multimodal generation.
35 lines (32 loc) • 1.66 kB
text/typescript
import { describe, expect, it } from 'vitest'
import { EventType } from '../types'
import { specKeysFor, isSpecTopLevelKey } from './spec-event-keys'
describe('specKeysFor', () => {
it('allows metadata on every event and usage on RUN_FINISHED / RUN_ERROR', () => {
expect(isSpecTopLevelKey(EventType.RUN_FINISHED, 'usage')).toBe(true)
expect(isSpecTopLevelKey(EventType.RUN_ERROR, 'usage')).toBe(true)
expect(isSpecTopLevelKey(EventType.RUN_STARTED, 'metadata')).toBe(true)
expect(isSpecTopLevelKey(EventType.CUSTOM, 'name')).toBe(true)
})
it('rejects TanStack extras', () => {
expect(isSpecTopLevelKey(EventType.RUN_FINISHED, 'finishReason')).toBe(
false,
)
expect(isSpecTopLevelKey(EventType.RUN_FINISHED, 'model')).toBe(false)
expect(isSpecTopLevelKey(EventType.TOOL_CALL_START, 'toolName')).toBe(false)
expect(isSpecTopLevelKey(EventType.TOOL_CALL_START, 'index')).toBe(false)
expect(isSpecTopLevelKey(EventType.TEXT_MESSAGE_CONTENT, 'content')).toBe(
false,
)
expect(isSpecTopLevelKey(EventType.TOOL_CALL_ARGS, 'args')).toBe(false)
expect(isSpecTopLevelKey(EventType.TOOL_CALL_END, 'input')).toBe(false)
expect(isSpecTopLevelKey(EventType.TOOL_CALL_END, 'result')).toBe(false)
expect(isSpecTopLevelKey(EventType.RUN_ERROR, 'error')).toBe(false)
expect(
isSpecTopLevelKey(EventType.RUN_ERROR, 'tanstack:interruptErrors'),
).toBe(false)
expect(isSpecTopLevelKey(EventType.STATE_SNAPSHOT, 'state')).toBe(false)
expect(isSpecTopLevelKey(EventType.CUSTOM, 'threadId')).toBe(false)
expect(specKeysFor(EventType.RUN_ERROR).has('threadId')).toBe(false)
})
})