feat: add AI analysis integration with moderation and LLM processing

This commit is contained in:
MythEclipse
2026-05-14 02:31:16 +07:00
parent b36d038eba
commit be6c9f8132
9 changed files with 322 additions and 7 deletions
+28
View File
@@ -34,6 +34,34 @@ const configSchema = z.object({
ATTACHMENT_RETRY_ATTEMPTS: z.coerce.number().positive().default(3),
BACKLOG_SYNC_HOURS: z.coerce.number().positive().default(24),
BACKLOG_SYNC_BATCH_SIZE: z.coerce.number().int().positive().max(100).default(100),
AI_ANALYSIS_ENABLED: z
.string()
.optional()
.transform((v) => v === "true")
.default(false),
OPENAI_MODERATION_API_KEY: z.string().optional(),
OPENAI_MODERATION_BASE_URL: z.string().url().default("https://api.openai.com/v1"),
OPENAI_MODERATION_MODEL: z.string().default("omni-moderation-latest"),
AI_LLM_API_KEY: z.string().optional(),
AI_LLM_BASE_URL: z.string().url().default("https://9router.asepharyana.tech/v1"),
AI_LLM_MODEL: z.string().default("free"),
AI_ANALYSIS_TIMEOUT_MS: z.coerce.number().positive().default(30000),
}).superRefine((value, ctx) => {
if (!value.AI_ANALYSIS_ENABLED) return;
if (!value.OPENAI_MODERATION_API_KEY) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
path: ["OPENAI_MODERATION_API_KEY"],
message: "OPENAI_MODERATION_API_KEY is required when AI_ANALYSIS_ENABLED=true",
});
}
if (!value.AI_LLM_API_KEY) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
path: ["AI_LLM_API_KEY"],
message: "AI_LLM_API_KEY is required when AI_ANALYSIS_ENABLED=true",
});
}
});
export type AppConfig = z.infer<typeof configSchema>;