feat: complete TASK-WP2-06 generation terminal states

This commit is contained in:
suyx
2026-08-03 01:06:28 +08:00
parent c8643c080d
commit 2bb4f86d04
18 changed files with 1419 additions and 14 deletions
+2
View File
@@ -270,12 +270,14 @@ function generationTaskResponse(task: GenerationTaskView) {
return {
confirmed_credit_cost: task.confirmedCreditCost,
created_at: task.createdAt,
error_category: task.errorCategory,
generation_id: task.generationId,
model_config_version: task.modelConfigVersion,
model_id: task.modelId,
project_id: task.projectId,
prompt: task.prompt,
ratio: task.ratio,
reference_asset_ids: task.referenceAssetIds,
reference_count: task.referenceCount,
reserved_credits: task.reservedCredits,
status: task.status,
+11 -3
View File
@@ -88,12 +88,16 @@ export type GenerationSubmissionFields = Omit<GenerationSubmissionInput, "newRef
export interface GenerationTaskView {
confirmedCreditCost: number;
createdAt: string;
errorCategory: "upstream_timeout" | "upstream_failed" | "safety_rejected" | "model_disabled"
| "gateway_balance_insufficient" | "gateway_contract_invalid" | "reference_invalid"
| "unknown_retryable" | "unknown_non_retryable" | null;
generationId: string;
modelConfigVersion: number;
modelId: string;
projectId: string;
prompt: string;
ratio: ProjectRatio;
referenceAssetIds: string[];
referenceCount: number;
reservedCredits: number;
status: "queued" | "running" | "succeeded" | "failed" | "rejected";
@@ -111,6 +115,7 @@ export interface GenerationUploadSession {
interface GenerationRow {
confirmed_credit_cost: number;
created_at: number;
error_category: GenerationTaskView["errorCategory"];
generation_id: string;
model_config_version: number;
model_id: string;
@@ -452,18 +457,21 @@ export class GenerationSubmissionService {
}
private taskView(row: GenerationRow): GenerationTaskView {
const referenceCount = (this.database.prepare("SELECT COUNT(*) AS count FROM generation_reference_snapshots WHERE generation_id = ?")
.get(row.generation_id) as { count: number }).count;
const referenceAssetIds = (this.database.prepare(`
SELECT managed_file_id FROM generation_reference_snapshots WHERE generation_id = ? ORDER BY position
`).all(row.generation_id) as Array<{ managed_file_id: string }>).map((entry) => entry.managed_file_id);
return {
confirmedCreditCost: row.confirmed_credit_cost,
createdAt: iso(row.created_at),
errorCategory: row.error_category,
generationId: row.generation_id,
modelConfigVersion: row.model_config_version,
modelId: row.model_id,
projectId: row.project_id,
prompt: row.prompt,
ratio: row.ratio,
referenceCount,
referenceAssetIds,
referenceCount: referenceAssetIds.length,
reservedCredits: row.reserved_credits,
status: row.status,
updatedAt: iso(row.updated_at),