Skip to content
25 changes: 14 additions & 11 deletions frontend/src/features/tasks/components/ModelSelector.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ export interface Model {
name: string;
provider: string; // 'openai' | 'claude'
modelId: string;
displayName?: string | null; // Human-readable display name
type?: ModelTypeEnum; // 'public' | 'user' - identifies model source
}

Expand Down Expand Up @@ -67,10 +68,17 @@ function unifiedToModel(unified: UnifiedModel): Model {
name: unified.name,
provider: unified.provider || 'claude',
modelId: unified.modelId || '',
displayName: unified.displayName,
type: unified.type,
};
}

// Helper function to get display text for a model: displayName(modelId) or name(modelId)
function getModelDisplayText(model: Model): string {
const displayName = model.displayName || model.name;
return model.modelId ? `${displayName}(${model.modelId})` : displayName;
}

// Helper function to check if all bots in a team have predefined models
function allBotsHavePredefinedModel(team: TeamWithBotDetails | null): boolean {
if (!team || !team.bots || team.bots.length === 0) {
Expand Down Expand Up @@ -262,10 +270,11 @@ export default function ModelSelector({
if (selectedModel.name === DEFAULT_MODEL_NAME) {
return t('task_submit.default_model', '默认');
}
const displayText = getModelDisplayText(selectedModel);
if (forceOverride && !isMixedTeam) {
return `${selectedModel.name}(${t('task_submit.override_short', '覆盖')})`;
return `${displayText}(${t('task_submit.override_short', '覆盖')})`;
}
return selectedModel.name;
return displayText;
};

return (
Expand Down Expand Up @@ -370,7 +379,7 @@ export default function ModelSelector({
{filteredModels.map(model => (
<CommandItem
key={getModelKey(model)}
value={`${model.name} ${model.provider} ${model.modelId} ${model.type}`}
value={`${model.name} ${model.displayName || ''} ${model.provider} ${model.modelId} ${model.type}`}
onSelect={() => handleModelSelect(getModelKey(model))}
className={cn(
'group cursor-pointer select-none',
Expand All @@ -396,22 +405,16 @@ export default function ModelSelector({
<div className="flex items-center gap-1.5">
<span
className="font-medium text-xs text-text-secondary truncate"
title={model.name}
title={getModelDisplayText(model)}
>
{model.name}
{getModelDisplayText(model)}
</span>
{model.type === 'public' && (
<Tag variant="info" className="text-[10px]">
{t('models.public', '公共')}
</Tag>
)}
</div>
<span
className="text-[10px] text-text-muted truncate mt-0.5"
title={model.modelId}
>
{model.modelId}
</span>
</div>
</div>
</CommandItem>
Expand Down