diff --git a/components/message.tsx b/components/message.tsx index 3224e530d..7693f0e32 100644 --- a/components/message.tsx +++ b/components/message.tsx @@ -194,6 +194,15 @@ function stripModelBadgeLines(text: string): string { .trim(); } +function isInternalImageGenerationFailureText(text: string): boolean { + const normalized = stripModelBadgeLines(filterAgentRoutingNoise(filterVideoContent(text))).trim(); + if (!normalized) return false; + if (extractImageUrlsFromText(normalized).length > 0) return false; + return /^(?:生成图片失败|图片生成失败)[,,::\s]*(?:未找到图片数据|未解析到图片|模型未返回生成图片|图片数据不可用)?$/i.test( + normalized + ); +} + function appendImageDoneSummary(text: string): string { if (!text) return text; const normalized = String(text || "").trim(); @@ -375,9 +384,23 @@ const PurePreviewMessage = ({ const attachmentsFromMessage = message.parts.filter( (part) => part.type === "file" ); + const hasVisibleTextPart = message.parts.some( + (part) => + part.type === "text" && + part.text?.trim() && + !(message.role === "assistant" && isInternalImageGenerationFailureText(part.text)) + ); useDataStream(); + if ( + message.role === "assistant" && + !hasVisibleTextPart && + attachmentsFromMessage.length === 0 + ) { + return null; + } + return (