mirror of
https://github.com/langgenius/dify.git
synced 2026-04-27 02:36:29 +08:00
update style of model & parameter selector
This commit is contained in:
parent
5efcdd6fa7
commit
75a037bc2a
@ -19,11 +19,12 @@ const ModelIcon: FC<ModelIconProps> = ({
|
|||||||
}) => {
|
}) => {
|
||||||
const language = useLanguage()
|
const language = useLanguage()
|
||||||
|
|
||||||
if (provider?.provider === 'openai' && (modelName?.startsWith('gpt-4') || modelName?.includes('4o')))
|
if (provider?.provider.includes('openai') && (modelName?.startsWith('gpt-4') || modelName?.includes('4o')))
|
||||||
return <OpenaiViolet className={`w-4 h-4 ${className}`}/>
|
return <OpenaiViolet className={`w-4 h-4 ${className}`}/>
|
||||||
|
|
||||||
if (provider?.icon_small) {
|
if (provider?.icon_small) {
|
||||||
return (
|
return (
|
||||||
|
// eslint-disable-next-line @next/next/no-img-element
|
||||||
<img
|
<img
|
||||||
alt='model-icon'
|
alt='model-icon'
|
||||||
src={`${provider.icon_small[language] || provider.icon_small.en_US}`}
|
src={`${provider.icon_small[language] || provider.icon_small.en_US}`}
|
||||||
|
|||||||
@ -190,26 +190,22 @@ const ModelParameterModal: FC<ModelParameterModalProps> = ({
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
</PortalToFollowElemTrigger>
|
</PortalToFollowElemTrigger>
|
||||||
<PortalToFollowElemContent className={cn(portalToFollowElemContentClassName, 'z-[60]')}>
|
<PortalToFollowElemContent className={cn('z-[60]', portalToFollowElemContentClassName)}>
|
||||||
<div className={cn(popupClassName, 'w-[496px] rounded-xl border border-gray-100 bg-white shadow-xl')}>
|
<div className={cn(popupClassName, 'w-[389px] rounded-2xl border-[0.5px] border-components-panel-border bg-components-panel-bg shadow-lg')}>
|
||||||
<div className={cn(
|
<div className={cn('max-h-[420px] p-4 pt-3 overflow-y-auto')}>
|
||||||
'max-h-[480px] overflow-y-auto',
|
<div className='relative'>
|
||||||
!isInWorkflow && 'px-10 pt-6 pb-8',
|
<div className={cn('mb-1 h-6 flex items-center text-text-secondary system-sm-semibold')}>
|
||||||
isInWorkflow && 'p-4')}>
|
|
||||||
<div className='flex items-center justify-between h-8'>
|
|
||||||
<div className={cn('font-semibold text-gray-900 shrink-0', isInWorkflow && 'text-[13px]')}>
|
|
||||||
{t('common.modelProvider.model').toLocaleUpperCase()}
|
{t('common.modelProvider.model').toLocaleUpperCase()}
|
||||||
</div>
|
</div>
|
||||||
<ModelSelector
|
<ModelSelector
|
||||||
defaultModel={(provider || modelId) ? { provider, model: modelId } : undefined}
|
defaultModel={(provider || modelId) ? { provider, model: modelId } : undefined}
|
||||||
modelList={activeTextGenerationModelList}
|
modelList={activeTextGenerationModelList}
|
||||||
onSelect={handleChangeModel}
|
onSelect={handleChangeModel}
|
||||||
triggerClassName='max-w-[295px]'
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
{
|
{
|
||||||
!!parameterRules.length && (
|
!!parameterRules.length && (
|
||||||
<div className='my-5 h-[1px] bg-gray-100' />
|
<div className='my-3 h-[1px] bg-divider-subtle' />
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@ -219,8 +215,8 @@ const ModelParameterModal: FC<ModelParameterModalProps> = ({
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
!isLoading && !!parameterRules.length && (
|
!isLoading && !!parameterRules.length && (
|
||||||
<div className='flex items-center justify-between mb-4'>
|
<div className='flex items-center justify-between mb-2'>
|
||||||
<div className={cn('font-semibold text-gray-900', isInWorkflow && 'text-[13px]')}>{t('common.modelProvider.parameters')}</div>
|
<div className={cn('h-6 flex items-center text-text-secondary system-sm-semibold')}>{t('common.modelProvider.parameters')}</div>
|
||||||
{
|
{
|
||||||
PROVIDER_WITH_PRESET_TONE.includes(provider) && (
|
PROVIDER_WITH_PRESET_TONE.includes(provider) && (
|
||||||
<PresetsParameter onSelect={handleSelectPresetParameter} />
|
<PresetsParameter onSelect={handleSelectPresetParameter} />
|
||||||
@ -237,7 +233,6 @@ const ModelParameterModal: FC<ModelParameterModalProps> = ({
|
|||||||
].map(parameter => (
|
].map(parameter => (
|
||||||
<ParameterItem
|
<ParameterItem
|
||||||
key={`${modelId}-${parameter.name}`}
|
key={`${modelId}-${parameter.name}`}
|
||||||
className='mb-4'
|
|
||||||
parameterRule={parameter}
|
parameterRule={parameter}
|
||||||
value={completionParams?.[parameter.name]}
|
value={completionParams?.[parameter.name]}
|
||||||
onChange={v => handleParamChange(parameter.name, v)}
|
onChange={v => handleParamChange(parameter.name, v)}
|
||||||
@ -250,7 +245,7 @@ const ModelParameterModal: FC<ModelParameterModalProps> = ({
|
|||||||
</div>
|
</div>
|
||||||
{!hideDebugWithMultipleModel && (
|
{!hideDebugWithMultipleModel && (
|
||||||
<div
|
<div
|
||||||
className='flex items-center justify-between px-6 h-[50px] bg-gray-50 border-t border-t-gray-100 text-xs font-medium text-primary-600 cursor-pointer rounded-b-xl'
|
className='flex items-center justify-between px-4 h-[50px] bg-components-section-burn border-t border-t-divider-subtle system-sm-regular text-text-accent cursor-pointer rounded-b-xl'
|
||||||
onClick={() => onDebugWithMultipleModelChange?.()}
|
onClick={() => onDebugWithMultipleModelChange?.()}
|
||||||
>
|
>
|
||||||
{
|
{
|
||||||
|
|||||||
@ -17,7 +17,6 @@ type ParameterItemProps = {
|
|||||||
parameterRule: ModelParameterRule
|
parameterRule: ModelParameterRule
|
||||||
value?: ParameterValue
|
value?: ParameterValue
|
||||||
onChange?: (value: ParameterValue) => void
|
onChange?: (value: ParameterValue) => void
|
||||||
className?: string
|
|
||||||
onSwitch?: (checked: boolean, assignValue: ParameterValue) => void
|
onSwitch?: (checked: boolean, assignValue: ParameterValue) => void
|
||||||
isInWorkflow?: boolean
|
isInWorkflow?: boolean
|
||||||
}
|
}
|
||||||
@ -25,7 +24,6 @@ const ParameterItem: FC<ParameterItemProps> = ({
|
|||||||
parameterRule,
|
parameterRule,
|
||||||
value,
|
value,
|
||||||
onChange,
|
onChange,
|
||||||
className,
|
|
||||||
onSwitch,
|
onSwitch,
|
||||||
isInWorkflow,
|
isInWorkflow,
|
||||||
}) => {
|
}) => {
|
||||||
@ -249,9 +247,20 @@ const ParameterItem: FC<ParameterItemProps> = ({
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={`flex items-center justify-between ${className}`}>
|
<div className='flex items-center justify-between mb-2'>
|
||||||
<div>
|
<div className='shrink-0 basis-1/2'>
|
||||||
<div className={cn(isInWorkflow ? 'w-[140px]' : 'w-full', 'ml-4 shrink-0 flex items-center')}>
|
<div className={cn('shrink-0 w-full flex items-center')}>
|
||||||
|
{
|
||||||
|
!parameterRule.required && parameterRule.name !== 'stop' && (
|
||||||
|
<div className='mr-2 w-7'>
|
||||||
|
<Switch
|
||||||
|
defaultValue={!isNullOrUndefined(value)}
|
||||||
|
onChange={handleSwitch}
|
||||||
|
size='md'
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
<div
|
<div
|
||||||
className='mr-0.5 text-[13px] font-medium text-gray-700 truncate'
|
className='mr-0.5 text-[13px] font-medium text-gray-700 truncate'
|
||||||
title={parameterRule.label[language] || parameterRule.label.en_US}
|
title={parameterRule.label[language] || parameterRule.label.en_US}
|
||||||
@ -269,16 +278,6 @@ const ParameterItem: FC<ParameterItemProps> = ({
|
|||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
{
|
|
||||||
!parameterRule.required && parameterRule.name !== 'stop' && (
|
|
||||||
<Switch
|
|
||||||
className='mr-1'
|
|
||||||
defaultValue={!isNullOrUndefined(value)}
|
|
||||||
onChange={handleSwitch}
|
|
||||||
size='md'
|
|
||||||
/>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
</div>
|
</div>
|
||||||
{
|
{
|
||||||
parameterRule.type === 'tag' && (
|
parameterRule.type === 'tag' && (
|
||||||
|
|||||||
@ -2,12 +2,13 @@ import type { FC } from 'react'
|
|||||||
import { useCallback } from 'react'
|
import { useCallback } from 'react'
|
||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { RiArrowDownSLine } from '@remixicon/react'
|
import { RiArrowDownSLine } from '@remixicon/react'
|
||||||
|
import Button from '@/app/components/base/button'
|
||||||
import Dropdown from '@/app/components/base/dropdown'
|
import Dropdown from '@/app/components/base/dropdown'
|
||||||
import { SlidersH } from '@/app/components/base/icons/src/vender/line/mediaAndDevices'
|
|
||||||
import { Brush01 } from '@/app/components/base/icons/src/vender/solid/editor'
|
import { Brush01 } from '@/app/components/base/icons/src/vender/solid/editor'
|
||||||
import { Scales02 } from '@/app/components/base/icons/src/vender/solid/FinanceAndECommerce'
|
import { Scales02 } from '@/app/components/base/icons/src/vender/solid/FinanceAndECommerce'
|
||||||
import { Target04 } from '@/app/components/base/icons/src/vender/solid/general'
|
import { Target04 } from '@/app/components/base/icons/src/vender/solid/general'
|
||||||
import { TONE_LIST } from '@/config'
|
import { TONE_LIST } from '@/config'
|
||||||
|
import cn from '@/utils/classnames'
|
||||||
|
|
||||||
type PresetsParameterProps = {
|
type PresetsParameterProps = {
|
||||||
onSelect: (toneId: number) => void
|
onSelect: (toneId: number) => void
|
||||||
@ -18,19 +19,16 @@ const PresetsParameter: FC<PresetsParameterProps> = ({
|
|||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
const renderTrigger = useCallback((open: boolean) => {
|
const renderTrigger = useCallback((open: boolean) => {
|
||||||
return (
|
return (
|
||||||
<div
|
<Button
|
||||||
className={`
|
size={'small'}
|
||||||
flex items-center px-[7px] h-7 rounded-md border-[0.5px] border-gray-200 shadow-xs
|
variant={'secondary'}
|
||||||
text-xs font-medium text-gray-700 cursor-pointer
|
className={cn(open && 'bg-state-base-hover')}
|
||||||
${open && 'bg-gray-100'}
|
|
||||||
`}
|
|
||||||
>
|
>
|
||||||
<SlidersH className='mr-[5px] w-3.5 h-3.5 text-gray-500' />
|
|
||||||
{t('common.modelProvider.loadPresets')}
|
{t('common.modelProvider.loadPresets')}
|
||||||
<RiArrowDownSLine className='ml-0.5 w-3.5 h-3.5 text-gray-500' />
|
<RiArrowDownSLine className='ml-0.5 w-3.5 h-3.5' />
|
||||||
</div>
|
</Button>
|
||||||
)
|
)
|
||||||
}, [])
|
}, [t])
|
||||||
const getToneIcon = (toneId: number) => {
|
const getToneIcon = (toneId: number) => {
|
||||||
const className = 'mr-2 w-[14px] h-[14px]'
|
const className = 'mr-2 w-[14px] h-[14px]'
|
||||||
const res = ({
|
const res = ({
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user