返回 AiToEarn
image.vo.ts
1 import { createZodDto, FileUtil, zodI18nString } from '@yikart/common'
2 import { z } from 'zod'
3 import { AiLogStatus } from '../enums'
4
5 // 使用情况统计
6 const usageMetadataSchema = z.object({
7 input_tokens: z.number().optional().describe('输入token数'),
8 output_tokens: z.number().optional().describe('输出token数'),
9 total_tokens: z.number().optional().describe('总token数'),
10 })
11
12 // 图片对象
13 const imageObjectSchema = z.object({
14 url: FileUtil.zodBuildUrl().nullable().optional().describe('图片URL'),
15 b64_json: z.string().optional().describe('base64编码的图片'),
16 revised_prompt: z.string().optional().describe('修订后的提示词'),
17 })
18
19 // 用户图片响应
20 const userImageResponseSchema = z.object({
21 created: z.number().describe('创建时间戳'),
22 list: z.array(imageObjectSchema).describe('生成的图片列表'),
23 usage: usageMetadataSchema.optional().describe('token使用情况'),
24 background: z.string().optional(),
25 output_format: z.string().optional(),
26 quality: z.string().optional(),
27 size: z.string().optional(),
28 })
29
30 export class ImageResponseVo extends createZodDto(userImageResponseSchema) {}
31
32 // 图片生成模型参数 VO
33 export const imageGenerationModelSchema = z.object({
34 name: z.string().describe('模型名称'),
35 description: z.string().describe('模型描述'),
36 summary: z.string().optional(),
37 logo: z.string().optional(),
38 tags: z.array(zodI18nString()).default([]),
39 mainTag: z.string().optional(),
40 sizes: z.array(z.string()).describe('支持的尺寸'),
41 qualities: z.array(z.string()).describe('支持的质量选项'),
42 styles: z.array(z.string()).describe('支持的风格选项'),
43 })
44
45 export class ImageGenerationModelParamsVo extends createZodDto(imageGenerationModelSchema) {}
46
47 // 图片编辑模型参数 VO
48 export const imageEditModelSchema = z.object({
49 name: z.string().describe('模型名称'),
50 description: z.string().describe('模型描述'),
51 summary: z.string().optional(),
52 logo: z.string().optional(),
53 tags: z.array(zodI18nString()).default([]),
54 mainTag: z.string().optional(),
55 sizes: z.array(z.string()).describe('支持的尺寸'),
56 maxInputImages: z.number(),
57 })
58
59 export class ImageEditModelParamsVo extends createZodDto(imageEditModelSchema) {}
60
61 // 异步任务响应
62 const asyncTaskResponseSchema = z.object({
63 logId: z.string().describe('任务日志ID'),
64 status: z.enum(AiLogStatus).describe('任务状态'),
65 })
66
67 export class AsyncTaskResponseVo extends createZodDto(asyncTaskResponseSchema) {}
68
69 // 任务状态响应
70 const taskStatusResponseSchema = z.object({
71 logId: z.string().describe('任务日志ID'),
72 status: z.enum(AiLogStatus).describe('任务状态'),
73 startedAt: z.coerce.date().describe('开始时间'),
74 duration: z.number().optional().describe('持续时间(毫秒)'),
75 request: z.record(z.string(), z.unknown()).describe('请求参数'),
76 response: z.record(z.string(), z.unknown()).optional().describe('响应结果'),
77 images: z.array(imageObjectSchema).optional().describe('生成的图片列表'),
78 errorMessage: z.string().optional().describe('错误信息'),
79 createdAt: z.coerce.date().describe('创建时间'),
80 updatedAt: z.coerce.date().describe('更新时间'),
81 })
82
83 export class TaskStatusResponseVo extends createZodDto(taskStatusResponseSchema) {}
84
84 lines TYPESCRIPT