Repair multimodal vision parsing and rerun fallback history

这个提交包含在:
cryptocommuniums-afk
2026-03-15 02:31:44 +08:00
父节点 f4f425de42
当前提交 ae93269c62
修改 10 个文件,包含 417 行新增21 行删除

查看文件

@@ -1,4 +1,4 @@
import { eq, desc, and, asc, lte, gte, sql } from "drizzle-orm";
import { eq, desc, and, asc, lte, gte, or, sql } from "drizzle-orm";
import { drizzle } from "drizzle-orm/mysql2";
import {
InsertUser, users,
@@ -1280,6 +1280,56 @@ export async function listVisionTestRuns(userId?: number, limit = 50) {
.limit(limit);
}
export async function getVisionTestRunById(runId: number) {
const db = await getDb();
if (!db) return null;
const [row] = await db.select({
id: visionTestRuns.id,
taskId: visionTestRuns.taskId,
userId: visionTestRuns.userId,
status: visionTestRuns.status,
visionStatus: visionTestRuns.visionStatus,
title: visionTestRuns.title,
}).from(visionTestRuns)
.where(eq(visionTestRuns.id, runId))
.limit(1);
return row || null;
}
export async function listRepairableVisionTestRuns(limit = 50) {
const db = await getDb();
if (!db) return [];
return db.select({
id: visionTestRuns.id,
taskId: visionTestRuns.taskId,
userId: visionTestRuns.userId,
title: visionTestRuns.title,
status: visionTestRuns.status,
visionStatus: visionTestRuns.visionStatus,
}).from(visionTestRuns)
.where(or(eq(visionTestRuns.visionStatus, "fallback"), eq(visionTestRuns.status, "failed")))
.orderBy(desc(visionTestRuns.createdAt))
.limit(limit);
}
export async function resetVisionTestRun(taskId: string) {
const db = await getDb();
if (!db) return;
await db.update(visionTestRuns).set({
status: "queued",
visionStatus: "pending",
summary: null,
corrections: null,
report: null,
warning: null,
error: null,
}).where(eq(visionTestRuns.taskId, taskId));
}
export async function completeVisionTestRun(taskId: string, data: {
visionStatus: "ok" | "fallback";
summary?: string | null;