All files / shared/src/types realtime.ts

0% Statements 0/65
0% Branches 0/1
0% Functions 0/1
0% Lines 0/65

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107                                                                                                                                                                                                                     
import { SuperAgentsTarget } from '@shared/types/api/request/headers';
import { z } from 'zod';
 
export const RealtimeSession = z.object({
  id: z.string(),
  createdAt: z.string(),
  updatedAt: z.string(),
  provider: z.string(),
  model: z.string(),
});
 
export type RealtimeSession = z.infer<typeof RealtimeSession>;
 
interface RealtimeConversationItemType {
  id: string;
  createdAt: string;
  updatedAt: string;
  content: string;
  role: string;
  previous_item_id: string | null;
  item?: RealtimeConversationItemType;
}
 
export const RealtimeConversationItem: z.ZodType<RealtimeConversationItemType> =
  z.lazy(() =>
    z.object({
      id: z.string(),
      createdAt: z.string(),
      updatedAt: z.string(),
      content: z.string(),
      role: z.string(),
      previous_item_id: z.string().nullable(),
      item: z.lazy(() => RealtimeConversationItem).optional(),
    }),
  );
 
export type RealtimeConversationItem = z.infer<typeof RealtimeConversationItem>;
 
export const RealtimeConversation = z.object({
  items: z.map(z.string(), RealtimeConversationItem),
});
 
export type RealtimeConversation = z.infer<typeof RealtimeConversation>;
 
export const RealtimeResponse = z.object({
  id: z.string(),
  createdAt: z.string(),
  updatedAt: z.string(),
  output: z.array(RealtimeConversationItem),
});
 
export type RealtimeResponse = z.infer<typeof RealtimeResponse>;
 
export const RealtimeResponses = z.map(z.string(), RealtimeResponse);
 
export type RealtimeResponses = z.infer<typeof RealtimeResponses>;
 
export const RealtimeSessionState = z.object({
  sessionDetails: RealtimeSession.nullable(),
  conversation: RealtimeConversation,
  responses: RealtimeResponses,
});
 
export type RealtimeSessionState = z.infer<typeof RealtimeSessionState>;
 
export const RealtimeAIProviderOptions = z.intersection(
  SuperAgentsTarget,
  z.object({
    requestURL: z.string(),
    rubeusURL: z.string(),
  }),
);
 
export type RealtimeAIProviderOptions = z.infer<
  typeof RealtimeAIProviderOptions
>;
 
export const RealtimeSessionOptions = z.object({
  id: z.uuid(),
  providerOptions: RealtimeAIProviderOptions,
  requestHeaders: z.record(z.string(), z.string()),
  requestParams: z.record(z.string(), z.string()),
});
 
export type RealtimeSessionOptions = z.infer<typeof RealtimeSessionOptions>;
 
export enum RealtimeEventTypes {
  SESSION_CREATED = 'session.created',
  SESSION_UPDATED = 'session.updated',
  CONVERSATION_ITEM_CREATED = 'conversation.item.created',
  CONVERSATION_ITEM_DELETED = 'conversation.item.deleted',
  RESPONSE_DONE = 'response.done',
  ERROR = 'error',
}
 
export const RealtimeEvent = z
  .object({
    type: z.enum(RealtimeEventTypes),
    session: RealtimeSession,
    item: RealtimeConversationItem,
    response: RealtimeResponse,
    error: z.unknown().nullable(),
  })
  .catchall(z.unknown());
 
export type RealtimeEvent = z.infer<typeof RealtimeEvent>;