69 lines
1.9 KiB
TypeScript
69 lines
1.9 KiB
TypeScript
export type SessionState = 'idle' | 'listening' | 'thinking' | 'speaking';
|
|
|
|
export type MessageEnvelope<TType extends string, TPayload> = {
|
|
type: TType;
|
|
payload: TPayload;
|
|
};
|
|
|
|
export type ClientEventPayloads = {
|
|
'session.start': Record<string, never>;
|
|
'input_audio.append': {
|
|
chunk: string;
|
|
};
|
|
'input_audio.commit': Record<string, never>;
|
|
'response.cancel': Record<string, never>;
|
|
};
|
|
|
|
export type ServerEventPayloads = {
|
|
'session.ready': {
|
|
sessionId: string;
|
|
};
|
|
'session.state': {
|
|
value: SessionState;
|
|
};
|
|
'transcript.partial': {
|
|
text: string;
|
|
};
|
|
'transcript.final': {
|
|
text: string;
|
|
};
|
|
'response.text.delta': {
|
|
text: string;
|
|
};
|
|
'response.completed': Record<string, never>;
|
|
'error': {
|
|
code: string;
|
|
message: string;
|
|
retryable?: boolean;
|
|
};
|
|
};
|
|
|
|
export type ClientEventType = keyof ClientEventPayloads;
|
|
export type ServerEventType = keyof ServerEventPayloads;
|
|
|
|
export type ClientEvent = {
|
|
[Type in ClientEventType]: MessageEnvelope<Type, ClientEventPayloads[Type]>;
|
|
}[ClientEventType];
|
|
|
|
export type ServerEvent = {
|
|
[Type in ServerEventType]: MessageEnvelope<Type, ServerEventPayloads[Type]>;
|
|
}[ServerEventType];
|
|
|
|
export const PROTOCOL_PACKAGE_NAME: '@vela/protocol';
|
|
export const SESSION_STATES: readonly SessionState[];
|
|
export const CLIENT_EVENT_TYPES: readonly ClientEventType[];
|
|
export const SERVER_EVENT_TYPES: readonly ServerEventType[];
|
|
|
|
export function createMessageEnvelope<TType extends ClientEventType>(
|
|
type: TType,
|
|
payload: ClientEventPayloads[TType]
|
|
): MessageEnvelope<TType, ClientEventPayloads[TType]>;
|
|
export function createMessageEnvelope<TType extends ServerEventType>(
|
|
type: TType,
|
|
payload: ServerEventPayloads[TType]
|
|
): MessageEnvelope<TType, ServerEventPayloads[TType]>;
|
|
|
|
export function isMessageEnvelope(value: unknown): value is MessageEnvelope<string, unknown>;
|
|
export function isClientEventType(type: string): type is ClientEventType;
|
|
export function isServerEventType(type: string): type is ServerEventType;
|