fix chat pending drop when title model fails and filter auto-title vision model
This commit is contained in:
parent
cbad5ee2e2
commit
8aba32d35d
@ -23,19 +23,28 @@ export async function generateTitleFromUserMessage({
|
|||||||
}: {
|
}: {
|
||||||
message: UIMessage;
|
message: UIMessage;
|
||||||
}) {
|
}) {
|
||||||
// 优先使用数据库配置的模型,回退到预定义模型
|
const prompt = (getTextFromMessage(message) || "").trim();
|
||||||
let model = await getSystemModel("title");
|
const fallbackTitle = prompt.slice(0, 20) || "新对话";
|
||||||
if (!model) {
|
|
||||||
model = myProvider.languageModel("title-model");
|
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 }) {
|
export async function deleteTrailingMessages({ id }: { id: string }) {
|
||||||
|
|||||||
@ -21,15 +21,27 @@ export async function POST(request: NextRequest) {
|
|||||||
return NextResponse.json({ error: "Image URL is required" }, { status: 400 });
|
return NextResponse.json({ error: "Image URL is required" }, { status: 400 });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const blockedProviderTypes = new Set([
|
||||||
|
"fal-video",
|
||||||
|
"qianwen-video",
|
||||||
|
"volcano-video",
|
||||||
|
"doubao-video",
|
||||||
|
]);
|
||||||
|
|
||||||
// 从数据库获取支持视觉的模型(优先使用 supportsVision)
|
// 从数据库获取支持视觉的模型(优先使用 supportsVision)
|
||||||
const modelsData = await getEnabledAiModelsWithProvider();
|
const modelsData = await getEnabledAiModelsWithProvider();
|
||||||
console.log("[Auto-title] Available models count:", modelsData.length);
|
console.log("[Auto-title] Available models count:", modelsData.length);
|
||||||
console.log("[Auto-title] All model IDs:", modelsData.map(m => m.model.modelId));
|
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) {
|
if (!visionModelData) {
|
||||||
// 兼容旧配置:根据模型名称兜底匹配
|
// 兼容旧配置:根据模型名称兜底匹配
|
||||||
visionModelData = modelsData.find(m => {
|
visionModelData = modelsData.find(m => {
|
||||||
|
if (blockedProviderTypes.has(String(m.provider?.type || ""))) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
const id = m.model.modelId?.toLowerCase() || '';
|
const id = m.model.modelId?.toLowerCase() || '';
|
||||||
const name = m.model.displayName?.toLowerCase() || '';
|
const name = m.model.displayName?.toLowerCase() || '';
|
||||||
return id.includes('qwen-vl') ||
|
return id.includes('qwen-vl') ||
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user