File size: 1,060 Bytes
4e23b01
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { z } from 'zod';

import { isoDateTimeSchema, timelineMessageBase } from './base';
import { turnOriginSchema } from './turn-origin';

export const turnUsageSchema = z.object({
  input_tokens: z.number().int().nonnegative().optional(),
  output_tokens: z.number().int().nonnegative().optional(),
  cached_tokens: z.number().int().nonnegative().optional(),
  cost: z.number().nonnegative().optional(),
});

export type TurnUsage = z.infer<typeof turnUsageSchema>;

export const turnMessageSchema = z.object({
  type: z.literal('turn'),
  ...timelineMessageBase,
  turn_id: z.string().min(1),
  ordinal: z.number().int().nonnegative(),
  status: z.enum(['running', 'completed']),
  origin: turnOriginSchema,
  user_message_id: z.string().min(1).optional(),
  attachment_ids: z.array(z.string().min(1)).optional(),
  started_at: isoDateTimeSchema.optional(),
  ended_at: isoDateTimeSchema.optional(),
  usage: turnUsageSchema.optional(),
  duration_ms: z.number().nonnegative().optional(),
});

export type TurnMessage = z.infer<typeof turnMessageSchema>;