fix: reject empty gpt image results
This commit is contained in:
parent
010d7d1be5
commit
fdff0c2865
@ -129,6 +129,7 @@ import {
|
||||
buildAgentToolVideoMarkdown,
|
||||
prependImageModelBadge,
|
||||
} from "@/lib/ai/runtime/agent-media-markdown";
|
||||
import { extractImageUrlsFromText } from "@/lib/image-url";
|
||||
import { saveGeneratedImages } from "@/lib/ai/runtime/generated-image-persistence";
|
||||
import {
|
||||
recordAiModelHealthFailure,
|
||||
@ -6332,6 +6333,21 @@ export async function POST(request: Request) {
|
||||
return injectHistoryImagesToLastUserMessage(messagesForGemini, smartAutoHistoryImages);
|
||||
};
|
||||
|
||||
const assertGeneratedImageMarkdown = (markdown: string, modelLabel: string) => {
|
||||
const normalizedMarkdown = String(markdown || "").trim();
|
||||
const imageUrls = extractImageUrlsFromText(normalizedMarkdown);
|
||||
if (imageUrls.length > 0) {
|
||||
return normalizedMarkdown;
|
||||
}
|
||||
|
||||
const failureHintPattern =
|
||||
/生成图片失败|未找到图片数据|未解析到图片|模型未返回生成图片|图片数据不可用/i;
|
||||
const reason = failureHintPattern.test(normalizedMarkdown)
|
||||
? normalizedMarkdown
|
||||
: "模型响应未包含可用图片";
|
||||
throw new Error(`${modelLabel} 未返回可用图片:${reason.slice(0, 160)}`);
|
||||
};
|
||||
|
||||
// 🆕 尝试生成图片的函数(支持备用模型切换)
|
||||
const tryGenerateImage = async (modelIdToUse: string, isRetry = false): Promise<string> => {
|
||||
chatApiLogger.info(`[Chat API] ${isRetry ? "🔄 Retry with fallback" : "🚀 Trying"} model: ${modelIdToUse}`);
|
||||
@ -6352,7 +6368,10 @@ export async function POST(request: Request) {
|
||||
overrideModelId: isRetry ? modelIdToUse : undefined, // 🆕 使用备用模型 ID
|
||||
});
|
||||
|
||||
return result.text || "图片生成失败";
|
||||
return assertGeneratedImageMarkdown(
|
||||
result.text || "",
|
||||
isRetry ? `备用模型 ${modelIdToUse}` : `主模型 ${modelIdToUse}`,
|
||||
);
|
||||
};
|
||||
|
||||
let stopKeepalive: (() => void) | null = null;
|
||||
@ -6428,7 +6447,10 @@ export async function POST(request: Request) {
|
||||
imageSize: defaultImageQualityParams.imageSize,
|
||||
},
|
||||
});
|
||||
imageMarkdown = fallbackResult.text;
|
||||
imageMarkdown = assertGeneratedImageMarkdown(
|
||||
fallbackResult.text,
|
||||
`备用模型 ${fallbackResult.displayName}`,
|
||||
);
|
||||
usedModelId = fallbackResult.usedModelId;
|
||||
fallbackSuccess = true;
|
||||
chatApiLogger.info(`[Chat API] ✅ Fallback model ${fallbackResult.displayName} succeeded!`);
|
||||
@ -6493,7 +6515,10 @@ export async function POST(request: Request) {
|
||||
imageCount: defaultImageQualityParams.imageCount,
|
||||
},
|
||||
});
|
||||
imageMarkdown = fallbackResult.text;
|
||||
imageMarkdown = assertGeneratedImageMarkdown(
|
||||
fallbackResult.text,
|
||||
`跨服务备用模型 ${fallbackResult.displayName}`,
|
||||
);
|
||||
usedModelId = fallbackResult.usedModelId;
|
||||
fallbackSuccess = true;
|
||||
chatApiLogger.info(`[Chat API] ✅ Gemini cross-provider fallback model ${fallbackResult.displayName} succeeded!`);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user