fix: verify and preview generated test images

This commit is contained in:
Codex
2026-08-02 00:05:13 +08:00
parent 922f8f4f2a
commit 0eb2a86f36
7 changed files with 195 additions and 17 deletions
+23 -4
View File
@@ -452,7 +452,7 @@ export function SettingsCenter({ open, onClose, onReadinessChange }: SettingsCen
type ModelPoolPanelProps = {
draft: Record<string, unknown>;
tests: Record<string, { ok: boolean; message: string }>;
tests: Record<string, { ok: boolean; message: string; details?: Record<string, unknown> }>;
busy: string | null;
onChange: (key: string, value: unknown) => void;
onTest: (modelId: string) => void;
@@ -768,7 +768,7 @@ type ModelGroupProps = {
description: string;
category: ModelCategory;
models: ModelPoolItem[];
tests: Record<string, { ok: boolean; message: string }>;
tests: Record<string, { ok: boolean; message: string; details?: Record<string, unknown> }>;
busy: string | null;
onAdd: () => void;
onEdit: (model: ModelPoolItem) => void;
@@ -800,6 +800,9 @@ function ModelGroup({ title, description, category, models, tests, busy, onAdd,
const result = tests[target];
const generationTarget = `generation:${model.id}`;
const generationResult = tests[generationTarget];
const generationImageUrl = typeof generationResult?.details?.result_url === "string"
? generationResult.details.result_url
: null;
return (
<article className={`model-row ${!model.enabled ? "disabled" : ""}`} key={model.id}>
<div className={`model-state ${result?.ok ? "ok" : result ? "failed" : "untested"}`}>
@@ -820,7 +823,11 @@ function ModelGroup({ title, description, category, models, tests, busy, onAdd,
</button>
{model.capabilities.includes("image_generation") ? (
<button className="button button-secondary compact" type="button" onClick={() => onTrial(model.id)} disabled={Boolean(busy) || !model.enabled} title="会消耗一次模型调用额度">
{busy === generationTarget ? <ArrowClockwiseIcon className="spin" size={14} /> : <ImageIcon size={14} />}
{busy === generationTarget
? <ArrowClockwiseIcon className="spin" size={14} />
: generationResult?.ok
? <CheckCircleIcon size={14} weight="fill" />
: <ImageIcon size={14} />}
</button>
) : null}
@@ -832,7 +839,19 @@ function ModelGroup({ title, description, category, models, tests, busy, onAdd,
</button>
</div>
{result ? <p className={`model-test-message ${result.ok ? "ok" : "failed"}`}>{result.message}</p> : <p className="model-test-message"> ID</p>}
{generationResult ? <p className={`model-test-message ${generationResult.ok ? "ok" : "failed"}`}>{generationResult.message}</p> : null}
{generationResult ? (
<div className="model-generation-result">
<p className={`model-test-message ${generationResult.ok ? "ok" : "failed"}`}>{generationResult.message}</p>
{generationResult.ok && generationImageUrl ? (
<a href={generationImageUrl} target="_blank" rel="noreferrer" title="打开原始测试图片">
{/* eslint-disable-next-line @next/next/no-img-element -- runtime model URLs are not known to Next Image. */}
<img src={generationImageUrl} alt={`${model.name} 真实试生成结果`} />
</a>
) : null}
</div>
) : model.capabilities.includes("image_generation") ? (
<p className="model-test-message"></p>
) : null}
</article>
);
})}