File size: 2,124 Bytes
9853396
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import { z } from 'zod';
import { pageInfoSchema } from '@/gql/pagination';
import { channelSchema } from '@/features/channels/data';

// Usage Log Source
export const usageLogSourceSchema = z.enum(['api', 'playground', 'test']);
export type UsageLogSource = z.infer<typeof usageLogSourceSchema>;

export const costItemSchema = z.object({
  itemCode: z.string(),
  quantity: z.number(),
  subtotal: z.number(),
});

// Usage Log schema based on backend entity structure
export const usageLogSchema = z.object({
  id: z.string(),
  createdAt: z.coerce.date(),
  updatedAt: z.coerce.date(),
  requestID: z.string(),
  channel: channelSchema.partial().nullable().optional(),
  modelID: z.string(),
  promptTokens: z.number(),
  completionTokens: z.number(),
  totalTokens: z.number(),
  promptAudioTokens: z.number().nullable().optional(),
  promptCachedTokens: z.number().nullable().optional(),
  promptWriteCachedTokens: z.number().nullable().optional(),
  completionAudioTokens: z.number().nullable().optional(),
  completionReasoningTokens: z.number().nullable().optional(),
  completionAcceptedPredictionTokens: z.number().nullable().optional(),
  completionRejectedPredictionTokens: z.number().nullable().optional(),
  source: usageLogSourceSchema,
  format: z.string(),
  totalCost: z.number().nullable().optional(),
  costItems: z.array(costItemSchema).nullable().optional(),
});
export type UsageLog = z.infer<typeof usageLogSchema>;

// Usage Log Connection schema for GraphQL pagination
export const usageLogEdgeSchema = z.object({
  node: usageLogSchema,
  cursor: z.string(),
});

export const usageLogConnectionSchema = z.object({
  edges: z.array(usageLogEdgeSchema),
  pageInfo: pageInfoSchema,
  totalCount: z.number(),
});
export type UsageLogConnection = z.infer<typeof usageLogConnectionSchema>;

// Usage Log Edge type
export type UsageLogEdge = z.infer<typeof usageLogEdgeSchema>;

// Usage Log List schema for table display
export const usageLogListSchema = z.array(usageLogSchema);
export type UsageLogList = z.infer<typeof usageLogListSchema>;