mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-12 17:39:06 +08:00
fix: vision config doesn't enabled in llm (#3225)
This commit is contained in:
parent
a33b774314
commit
269432a5e6
@ -23,7 +23,7 @@ const Item: FC<ItemProps> = ({ title, value, onSelect, isSelected }) => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={cn(isSelected ? 'bg-white border-[2px] border-primary-400 shadow-xs' : 'bg-gray-25 border border-gray-100', 'flex items-center h-8 px-3 rounded-xl text-[13px] font-normal text-gray-900 cursor-pointer')}
|
className={cn(isSelected ? 'bg-white border-[2px] border-primary-400 shadow-xs' : 'bg-gray-25 border border-gray-100', 'flex items-center h-8 px-3 rounded-lg text-[13px] font-normal text-gray-900 cursor-pointer')}
|
||||||
onClick={handleSelect}
|
onClick={handleSelect}
|
||||||
>
|
>
|
||||||
{title}
|
{title}
|
||||||
@ -43,7 +43,7 @@ const ResolutionPicker: FC<Props> = ({
|
|||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='flex items-center'>
|
<div className='flex items-center justify-between'>
|
||||||
<div className='mr-2 text-xs font-medium text-gray-500 uppercase'>{t(`${i18nPrefix}.resolution.name`)}</div>
|
<div className='mr-2 text-xs font-medium text-gray-500 uppercase'>{t(`${i18nPrefix}.resolution.name`)}</div>
|
||||||
<div className='flex items-center space-x-1'>
|
<div className='flex items-center space-x-1'>
|
||||||
<Item
|
<Item
|
||||||
|
@ -21,6 +21,7 @@ import ResultPanel from '@/app/components/workflow/run/result-panel'
|
|||||||
import TooltipPlus from '@/app/components/base/tooltip-plus'
|
import TooltipPlus from '@/app/components/base/tooltip-plus'
|
||||||
import { HelpCircle } from '@/app/components/base/icons/src/vender/line/general'
|
import { HelpCircle } from '@/app/components/base/icons/src/vender/line/general'
|
||||||
import Editor from '@/app/components/workflow/nodes/_base/components/prompt/editor'
|
import Editor from '@/app/components/workflow/nodes/_base/components/prompt/editor'
|
||||||
|
import Switch from '@/app/components/base/switch'
|
||||||
const i18nPrefix = 'workflow.nodes.llm'
|
const i18nPrefix = 'workflow.nodes.llm'
|
||||||
|
|
||||||
const Panel: FC<NodePanelProps<LLMNodeType>> = ({
|
const Panel: FC<NodePanelProps<LLMNodeType>> = ({
|
||||||
@ -51,6 +52,7 @@ const Panel: FC<NodePanelProps<LLMNodeType>> = ({
|
|||||||
filterVar,
|
filterVar,
|
||||||
handlePromptChange,
|
handlePromptChange,
|
||||||
handleMemoryChange,
|
handleMemoryChange,
|
||||||
|
handleVisionResolutionEnabledChange,
|
||||||
handleVisionResolutionChange,
|
handleVisionResolutionChange,
|
||||||
isShowSingleRun,
|
isShowSingleRun,
|
||||||
hideSingleRun,
|
hideSingleRun,
|
||||||
@ -240,12 +242,19 @@ const Panel: FC<NodePanelProps<LLMNodeType>> = ({
|
|||||||
title={t(`${i18nPrefix}.vision`)}
|
title={t(`${i18nPrefix}.vision`)}
|
||||||
tooltip={t('appDebug.vision.description')!}
|
tooltip={t('appDebug.vision.description')!}
|
||||||
operations={
|
operations={
|
||||||
|
<Switch size='md' defaultValue={inputs.vision.enabled} onChange={handleVisionResolutionEnabledChange} />
|
||||||
|
}
|
||||||
|
>
|
||||||
|
{inputs.vision.enabled
|
||||||
|
? (
|
||||||
<ResolutionPicker
|
<ResolutionPicker
|
||||||
value={inputs.vision.configs?.detail || Resolution.high}
|
value={inputs.vision.configs?.detail || Resolution.high}
|
||||||
onChange={handleVisionResolutionChange}
|
onChange={handleVisionResolutionChange}
|
||||||
/>
|
/>
|
||||||
}
|
)
|
||||||
/>
|
: null}
|
||||||
|
|
||||||
|
</Field>
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
@ -103,6 +103,7 @@ const useConfig = (id: string, payload: LLMNodeType) => {
|
|||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
}, [defaultConfig, isChatModel])
|
}, [defaultConfig, isChatModel])
|
||||||
|
|
||||||
|
const [modelChanged, setModelChanged] = useState(false)
|
||||||
const {
|
const {
|
||||||
currentProvider,
|
currentProvider,
|
||||||
currentModel,
|
currentModel,
|
||||||
@ -118,6 +119,7 @@ const useConfig = (id: string, payload: LLMNodeType) => {
|
|||||||
appendDefaultPromptConfig(draft, defaultConfig, model.mode === 'chat')
|
appendDefaultPromptConfig(draft, defaultConfig, model.mode === 'chat')
|
||||||
})
|
})
|
||||||
setInputs(newInputs)
|
setInputs(newInputs)
|
||||||
|
setModelChanged(true)
|
||||||
}, [setInputs, defaultConfig, appendDefaultPromptConfig])
|
}, [setInputs, defaultConfig, appendDefaultPromptConfig])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -146,7 +148,35 @@ const useConfig = (id: string, payload: LLMNodeType) => {
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
const isShowVisionConfig = !!currModel?.features?.includes(ModelFeatureEnum.vision)
|
const isShowVisionConfig = !!currModel?.features?.includes(ModelFeatureEnum.vision)
|
||||||
|
// change to vision model to set vision enabled, else disabled
|
||||||
|
useEffect(() => {
|
||||||
|
if (!modelChanged)
|
||||||
|
return
|
||||||
|
setModelChanged(false)
|
||||||
|
if (!isShowVisionConfig) {
|
||||||
|
const newInputs = produce(inputs, (draft) => {
|
||||||
|
draft.vision = {
|
||||||
|
enabled: false,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
setInputs(newInputs)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (!inputs.vision?.enabled) {
|
||||||
|
const newInputs = produce(inputs, (draft) => {
|
||||||
|
if (!draft.vision?.enabled) {
|
||||||
|
draft.vision = {
|
||||||
|
enabled: true,
|
||||||
|
configs: {
|
||||||
|
detail: Resolution.high,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
setInputs(newInputs)
|
||||||
|
}
|
||||||
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||||
|
}, [isShowVisionConfig, modelChanged])
|
||||||
// variables
|
// variables
|
||||||
const { handleVarListChange, handleAddVariable } = useVarList<LLMNodeType>({
|
const { handleVarListChange, handleAddVariable } = useVarList<LLMNodeType>({
|
||||||
inputs,
|
inputs,
|
||||||
@ -176,6 +206,28 @@ const useConfig = (id: string, payload: LLMNodeType) => {
|
|||||||
setInputs(newInputs)
|
setInputs(newInputs)
|
||||||
}, [inputs, setInputs])
|
}, [inputs, setInputs])
|
||||||
|
|
||||||
|
const handleVisionResolutionEnabledChange = useCallback((enabled: boolean) => {
|
||||||
|
const newInputs = produce(inputs, (draft) => {
|
||||||
|
if (!draft.vision) {
|
||||||
|
draft.vision = {
|
||||||
|
enabled,
|
||||||
|
configs: {
|
||||||
|
detail: Resolution.high,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
draft.vision.enabled = enabled
|
||||||
|
if (!draft.vision.configs) {
|
||||||
|
draft.vision.configs = {
|
||||||
|
detail: Resolution.high,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
setInputs(newInputs)
|
||||||
|
}, [inputs, setInputs])
|
||||||
|
|
||||||
const handleVisionResolutionChange = useCallback((newResolution: Resolution) => {
|
const handleVisionResolutionChange = useCallback((newResolution: Resolution) => {
|
||||||
const newInputs = produce(inputs, (draft) => {
|
const newInputs = produce(inputs, (draft) => {
|
||||||
if (!draft.vision.configs) {
|
if (!draft.vision.configs) {
|
||||||
@ -296,6 +348,7 @@ const useConfig = (id: string, payload: LLMNodeType) => {
|
|||||||
filterVar,
|
filterVar,
|
||||||
handlePromptChange,
|
handlePromptChange,
|
||||||
handleMemoryChange,
|
handleMemoryChange,
|
||||||
|
handleVisionResolutionEnabledChange,
|
||||||
handleVisionResolutionChange,
|
handleVisionResolutionChange,
|
||||||
isShowSingleRun,
|
isShowSingleRun,
|
||||||
hideSingleRun,
|
hideSingleRun,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user