feat(页面): 聊天页面集成图片生成功能
- 传递 isGeneratingImage 状态到消息气泡 - 传递 generatedImages 数据到消息组件 - 支持历史消息中的生成图片显示
This commit is contained in:
parent
8b558fb780
commit
de0860a5aa
@ -112,6 +112,8 @@ export default function ChatPage({ params }: PageProps) {
|
|||||||
uploadedDocuments: (msg.uploadedDocuments as { name: string; size: number; type: string; content: string }[]) || undefined,
|
uploadedDocuments: (msg.uploadedDocuments as { name: string; size: number; type: string; content: string }[]) || undefined,
|
||||||
// 从数据库加载使用的工具列表
|
// 从数据库加载使用的工具列表
|
||||||
usedTools: (msg.usedTools as string[]) || undefined,
|
usedTools: (msg.usedTools as string[]) || undefined,
|
||||||
|
// 从数据库加载 AI 生成的图片(Gemini 等图片生成模型)
|
||||||
|
generatedImages: (msg.generatedImages as { mimeType: string; data: string; width?: number; height?: number }[]) || undefined,
|
||||||
}));
|
}));
|
||||||
setInitialMessages(historyMessages);
|
setInitialMessages(historyMessages);
|
||||||
}
|
}
|
||||||
@ -393,12 +395,31 @@ export default function ChatPage({ params }: PageProps) {
|
|||||||
setLinkPreviewOpen(true);
|
setLinkPreviewOpen(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 判断是否为图片生成模型
|
||||||
|
const isImageGenerationModel = (modelId: string): boolean => {
|
||||||
|
const imageModels = [
|
||||||
|
'gemini-2.0-flash-preview-image-generation',
|
||||||
|
'gemini-3-pro-image-preview',
|
||||||
|
'imagen-3.0-generate-002',
|
||||||
|
];
|
||||||
|
return imageModels.some(model => modelId.includes(model)) ||
|
||||||
|
modelId.includes('image-generation') ||
|
||||||
|
modelId.includes('imagen');
|
||||||
|
};
|
||||||
|
|
||||||
|
// 获取模型标签
|
||||||
|
const getModelTag = (modelId: string, supportsThinking: boolean): string => {
|
||||||
|
if (isImageGenerationModel(modelId)) return '图片';
|
||||||
|
if (supportsThinking) return 'Thinking';
|
||||||
|
return '';
|
||||||
|
};
|
||||||
|
|
||||||
// 转换模型格式
|
// 转换模型格式
|
||||||
const modelOptions = models.map((m) => ({
|
const modelOptions = models.map((m) => ({
|
||||||
id: m.modelId,
|
id: m.modelId,
|
||||||
name: m.modelId,
|
name: m.modelId,
|
||||||
displayName: m.displayName,
|
displayName: m.displayName,
|
||||||
tag: m.supportsThinking ? 'Thinking' : '',
|
tag: getModelTag(m.modelId, m.supportsThinking),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const selectedModel = modelOptions.find((m) => m.id === selectedModelId) || modelOptions[0];
|
const selectedModel = modelOptions.find((m) => m.id === selectedModelId) || modelOptions[0];
|
||||||
@ -623,6 +644,8 @@ export default function ChatPage({ params }: PageProps) {
|
|||||||
uploadedDocuments={message.uploadedDocuments}
|
uploadedDocuments={message.uploadedDocuments}
|
||||||
usedTools={message.usedTools}
|
usedTools={message.usedTools}
|
||||||
pyodideStatus={message.pyodideStatus}
|
pyodideStatus={message.pyodideStatus}
|
||||||
|
generatedImages={message.generatedImages}
|
||||||
|
isGeneratingImage={message.isGeneratingImage}
|
||||||
onRegenerate={message.role === 'assistant' && !isStreaming ? handleRegenerate : undefined}
|
onRegenerate={message.role === 'assistant' && !isStreaming ? handleRegenerate : undefined}
|
||||||
onSaveToNote={message.role === 'assistant' && !isStreaming ? handleSaveToNote : undefined}
|
onSaveToNote={message.role === 'assistant' && !isStreaming ? handleSaveToNote : undefined}
|
||||||
onLinkClick={handleLinkClick}
|
onLinkClick={handleLinkClick}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user