fix chat pending drop when title model fails and filter auto-title vision model
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled

This commit is contained in:
Your Name 2026-02-19 04:54:58 +08:00
parent cbad5ee2e2
commit 8aba32d35d
2 changed files with 34 additions and 13 deletions

View File

@ -23,19 +23,28 @@ export async function generateTitleFromUserMessage({
}: {
message: UIMessage;
}) {
// 优先使用数据库配置的模型,回退到预定义模型
let model = await getSystemModel("title");
if (!model) {
model = myProvider.languageModel("title-model");
const prompt = (getTextFromMessage(message) || "").trim();
const fallbackTitle = prompt.slice(0, 20) || "新对话";
try {
// 优先使用数据库配置的模型,回退到预定义模型
let model = await getSystemModel("title");
if (!model) {
model = myProvider.languageModel("title-model");
}
const { text: title } = await generateText({
model,
system: titlePrompt,
prompt,
});
const normalized = (title || "").trim();
return normalized || fallbackTitle;
} catch (error) {
console.warn("[generateTitleFromUserMessage] fallback title:", error);
return fallbackTitle;
}
const { text: title } = await generateText({
model,
system: titlePrompt,
prompt: getTextFromMessage(message),
});
return title;
}
export async function deleteTrailingMessages({ id }: { id: string }) {

View File

@ -21,15 +21,27 @@ export async function POST(request: NextRequest) {
return NextResponse.json({ error: "Image URL is required" }, { status: 400 });
}
const blockedProviderTypes = new Set([
"fal-video",
"qianwen-video",
"volcano-video",
"doubao-video",
]);
// 从数据库获取支持视觉的模型(优先使用 supportsVision)
const modelsData = await getEnabledAiModelsWithProvider();
console.log("[Auto-title] Available models count:", modelsData.length);
console.log("[Auto-title] All model IDs:", modelsData.map(m => m.model.modelId));
let visionModelData = modelsData.find(m => m.model.supportsVision);
let visionModelData = modelsData.find(
(m) => m.model.supportsVision && !blockedProviderTypes.has(String(m.provider?.type || "")),
);
if (!visionModelData) {
// 兼容旧配置:根据模型名称兜底匹配
visionModelData = modelsData.find(m => {
if (blockedProviderTypes.has(String(m.provider?.type || ""))) {
return false;
}
const id = m.model.modelId?.toLowerCase() || '';
const name = m.model.displayName?.toLowerCase() || '';
return id.includes('qwen-vl') ||