Merge branch 'feat/llm-support-tools' into feat/support-agent-sandbox

This commit is contained in:
Novice
2026-01-20 10:27:42 +08:00
28 changed files with 706 additions and 19 deletions

View File

@ -2,6 +2,7 @@ import type { FC } from 'react'
import {
RiFileTextLine,
RiFilmAiLine,
RiHammerLine,
RiImageCircleAiLine,
RiVoiceAiFill,
} from '@remixicon/react'
@ -38,17 +39,33 @@ const FeatureIcon: FC<FeatureIconProps> = ({
// )
// }
// if (feature === ModelFeatureEnum.toolCall) {
// return (
// <Tooltip
// popupContent={t('common.modelProvider.featureSupported', { feature: ModelFeatureTextEnum.toolCall })}
// >
// <ModelBadge className={`mr-0.5 !px-0 w-[18px] justify-center text-gray-500 ${className}`}>
// <MagicWand className='w-3 h-3' />
// </ModelBadge>
// </Tooltip>
// )
// }
if (feature === ModelFeatureEnum.toolCall) {
if (showFeaturesLabel) {
return (
<ModelBadge className={cn('gap-x-0.5', className)}>
<RiHammerLine className="size-3" />
<span>{ModelFeatureTextEnum.toolCall}</span>
</ModelBadge>
)
}
return (
<Tooltip
popupContent={t('modelProvider.featureSupported', { ns: 'common', feature: ModelFeatureTextEnum.toolCall })}
>
<div className="inline-block cursor-help">
<ModelBadge
className={cn(
'w-[18px] justify-center !px-0',
className,
)}
>
<RiHammerLine className="size-3" />
</ModelBadge>
</div>
</Tooltip>
)
}
// if (feature === ModelFeatureEnum.multiToolCall) {
// return (

View File

@ -96,6 +96,14 @@ const PopupItem: FC<PopupItemProps> = ({
<div className='text-text-tertiary system-xs-regular'>{currentProvider?.description?.[language] || currentProvider?.description?.en_US}</div>
)} */}
<div className="flex flex-wrap gap-1">
{
modelItem.features?.includes(ModelFeatureEnum.toolCall) && (
<FeatureIcon
feature={ModelFeatureEnum.toolCall}
showFeaturesLabel
/>
)
}
{modelItem.model_type && (
<ModelBadge>
{modelTypeFormat(modelItem.model_type)}
@ -118,7 +126,7 @@ const PopupItem: FC<PopupItemProps> = ({
<div className="pt-2">
<div className="system-2xs-medium-uppercase mb-1 text-text-tertiary">{t('model.capabilities', { ns: 'common' })}</div>
<div className="flex flex-wrap gap-1">
{modelItem.features?.map(feature => (
{modelItem.features?.filter(feature => feature !== ModelFeatureEnum.toolCall).map(feature => (
<FeatureIcon
key={feature}
feature={feature}