fix: use agent avatar for auto mode and hide selector in agent mode
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-20 17:58:53 +08:00
parent 9cb6a779c3
commit afd231dde0
2 changed files with 34 additions and 60 deletions

View File

@ -3,7 +3,6 @@ import {
getAgentAiModelWithProvider,
getDefaultAiModel,
getEnabledAiModelsWithProvider,
getSiteSettings,
} from "@/lib/db/queries";
import { ChatSDKError } from "@/lib/errors";
import { isAiModelAgentAuto } from "@/lib/db/ai-model-flags";
@ -34,7 +33,6 @@ export async function GET() {
const modelsWithProvider = await getEnabledAiModelsWithProvider(false);
const agentModelWithProvider = await getAgentAiModelWithProvider();
const defaultModel = await getDefaultAiModel();
const siteSettings = await getSiteSettings();
const visibleModelsWithProvider = sortModelsForDisplay(
modelsWithProvider
.filter(({ model }) => !isAiModelAgentAuto(model))
@ -68,32 +66,6 @@ export async function GET() {
sortOrder: model.sortOrder ?? 0,
}));
// Agent 模式在前端展示头像/参数时,优先使用“Agent模式 - 默认生图模型”的配置
// 避免展示成分析模型(如视觉模型)的头像,导致与管理员设置不一致
const imageGenModelsWithProvider = visibleModelsWithProviderSorted.filter(
({ model }) => model.supportsImageGen
);
const configuredAutoImageModelId =
typeof siteSettings?.canvasAutoModeDefaultModelId === "string"
? siteSettings.canvasAutoModeDefaultModelId.trim()
: "";
const configuredAutoImageModel = configuredAutoImageModelId
? imageGenModelsWithProvider.find(
({ model }) => model.id === configuredAutoImageModelId
)
: undefined;
const defaultImageGenModel =
(defaultModel &&
!isAiModelAgentAuto(defaultModel) &&
defaultModel.supportsImageGen
? imageGenModelsWithProvider.find(({ model }) => model.id === defaultModel.id)
: undefined) || imageGenModelsWithProvider[0];
const agentDisplayModelWithProvider =
configuredAutoImageModel ||
defaultImageGenModel ||
agentModelWithProvider ||
null;
const resolvedDefaultModelId =
(defaultModel &&
!isAiModelAgentAuto(defaultModel) &&
@ -106,13 +78,13 @@ export async function GET() {
return Response.json({
models,
defaultModelId: resolvedDefaultModelId,
agentModel: agentDisplayModelWithProvider
agentModel: agentModelWithProvider
? {
id: agentDisplayModelWithProvider.model.id,
displayName: agentDisplayModelWithProvider.model.displayName,
avatarUrl: agentDisplayModelWithProvider.model.avatarUrl,
providerType: agentDisplayModelWithProvider.provider.type,
imageGenConfig: agentDisplayModelWithProvider.model.imageGenConfig,
id: agentModelWithProvider.model.id,
displayName: agentModelWithProvider.model.displayName,
avatarUrl: agentModelWithProvider.model.avatarUrl,
providerType: agentModelWithProvider.provider.type,
imageGenConfig: agentModelWithProvider.model.imageGenConfig,
}
: null,
});

View File

@ -5386,32 +5386,34 @@ export function CanvasChatPanel({ chatId, initialMessages = [], onClose, onOpenF
</div>
<div className="flex items-center gap-2 flex-shrink-0">
<Select
value={modelSelectValue}
onValueChange={(value) => {
setSelectedModelId(value);
if (value !== "auto" || !aiDetailGenerationEnabled) {
setIsDetailGenerationMode(false);
}
}}
>
<SelectTrigger className="h-8 w-8 rounded-full border border-[#cfd4dc] bg-white p-0 justify-center [&>svg]:hidden">
<span className="h-6 w-6 overflow-hidden rounded-full bg-white flex items-center justify-center">
{selectDisplayModel?.avatarUrl ? (
<img
src={selectDisplayModel.avatarUrl}
alt={selectDisplayModel.displayName || "模型头像"}
className="h-full w-full object-cover"
/>
) : (
<span className="flex h-full w-full items-center justify-center text-[10px] font-medium text-[#4b5563]">
{(selectDisplayModel?.displayName || "A").slice(0, 1)}
</span>
)}
</span>
</SelectTrigger>
{renderModelSelectContent()}
</Select>
{activeComposerMode !== "agent" ? (
<Select
value={modelSelectValue}
onValueChange={(value) => {
setSelectedModelId(value);
if (value !== "auto" || !aiDetailGenerationEnabled) {
setIsDetailGenerationMode(false);
}
}}
>
<SelectTrigger className="h-8 w-8 rounded-full border border-[#cfd4dc] bg-white p-0 justify-center [&>svg]:hidden">
<span className="h-6 w-6 overflow-hidden rounded-full bg-white flex items-center justify-center">
{selectDisplayModel?.avatarUrl ? (
<img
src={selectDisplayModel.avatarUrl}
alt={selectDisplayModel.displayName || "模型头像"}
className="h-full w-full object-cover"
/>
) : (
<span className="flex h-full w-full items-center justify-center text-[10px] font-medium text-[#4b5563]">
{(selectDisplayModel?.displayName || "A").slice(0, 1)}
</span>
)}
</span>
</SelectTrigger>
{renderModelSelectContent()}
</Select>
) : null}
<Button
size="icon"