lovart3/app/(chat)/api/chat/schema.ts
Your Name bb4f51d198 feat: improve canvas workflow and auto title
Hide internal prompts from users, auto-focus new images, avoid overlap, enable drag-and-drop upload, and fix canvas navigation reloads.
2026-02-03 16:33:51 +08:00

61 lines
2.1 KiB
TypeScript

import { z } from "zod";
const textPartSchema = z.object({
type: z.enum(["text"]),
text: z.string().min(1).max(2000),
});
const filePartSchema = z.object({
type: z.enum(["file"]),
mediaType: z.enum(["image/jpeg", "image/png", "image/webp", "image/gif", "image/jpg", "image/bmp", "image/svg+xml"]),
name: z.string().min(1).max(100),
url: z.string().url(),
});
const partSchema = z.union([textPartSchema, filePartSchema]);
// 视频参数 schema
const videoParamsSchema = z.object({
mode: z.enum(["text-to-video", "first-frame", "first-last-frame", "reference-images"]),
resolution: z.enum(["480p", "720p", "1080p"]).optional(),
ratio: z.string().optional(),
duration: z.number().optional(),
watermark: z.boolean().optional(),
cameraFixed: z.boolean().optional(),
cameraMove: z.string().optional(),
fps: z.number().optional(),
seed: z.number().optional(),
returnLastFrame: z.boolean().optional(),
}).optional();
// 🆕 图片生成参数 schema
const imageParamsSchema = z.object({
aspectRatio: z.string().optional(),
imageSize: z.string().optional(),
imageCount: z.number().min(1).max(10).optional(),
// 阿里生图专用参数
size: z.string().optional(), // 自定义分辨率,如 "1024*1024"
negativePrompt: z.string().optional(), // 反向提示词
promptExtend: z.boolean().optional(), // 提示词智能优化
watermark: z.boolean().optional(), // 水印
seed: z.number().optional(), // 随机种子
n: z.number().min(1).max(10).optional(), // 兼容 n 参数
}).optional();
export const postRequestBodySchema = z.object({
id: z.string().uuid(),
message: z.object({
id: z.string().uuid(),
role: z.enum(["user"]),
parts: z.array(partSchema),
}),
hiddenPrompt: z.string().max(4000).optional(),
// 支持预定义模型名称或数据库中的模型 UUID
selectedChatModel: z.string().min(1).max(128),
selectedVisibilityType: z.enum(["public", "private"]),
videoParams: videoParamsSchema, // 视频参数
imageParams: imageParamsSchema, // 🆕 图片生成参数
});
export type PostRequestBody = z.infer<typeof postRequestBodySchema>;