mirror of
				https://github.com/langgenius/dify.git
				synced 2025-11-04 12:53:38 +00:00 
			
		
		
		
	
		
			
	
	
		
			89 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			89 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import produce from 'immer'
							 | 
						||
| 
								 | 
							
								import { useCallback } from 'react'
							 | 
						||
| 
								 | 
							
								import { useIsChatMode } from './use-workflow'
							 | 
						||
| 
								 | 
							
								import type { ModelConfig, VisionSetting } from '@/app/components/workflow/types'
							 | 
						||
| 
								 | 
							
								import { useTextGenerationCurrentProviderAndModelAndModelList } from '@/app/components/header/account-setting/model-provider-page/hooks'
							 | 
						||
| 
								 | 
							
								import {
							 | 
						||
| 
								 | 
							
								  ModelFeatureEnum,
							 | 
						||
| 
								 | 
							
								} from '@/app/components/header/account-setting/model-provider-page/declarations'
							 | 
						||
| 
								 | 
							
								import { Resolution } from '@/types/app'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type Payload = {
							 | 
						||
| 
								 | 
							
								  enabled: boolean
							 | 
						||
| 
								 | 
							
								  configs?: VisionSetting
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								type Params = {
							 | 
						||
| 
								 | 
							
								  payload: Payload
							 | 
						||
| 
								 | 
							
								  onChange: (payload: Payload) => void
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								const useConfigVision = (model: ModelConfig, {
							 | 
						||
| 
								 | 
							
								  payload = {
							 | 
						||
| 
								 | 
							
								    enabled: false,
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  onChange,
							 | 
						||
| 
								 | 
							
								}: Params) => {
							 | 
						||
| 
								 | 
							
								  const {
							 | 
						||
| 
								 | 
							
								    currentModel: currModel,
							 | 
						||
| 
								 | 
							
								  } = useTextGenerationCurrentProviderAndModelAndModelList(
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								      provider: model.provider,
							 | 
						||
| 
								 | 
							
								      model: model.name,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								  )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const isChatMode = useIsChatMode()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const getIsVisionModel = useCallback(() => {
							 | 
						||
| 
								 | 
							
								    return !!currModel?.features?.includes(ModelFeatureEnum.vision)
							 | 
						||
| 
								 | 
							
								  }, [currModel])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const isVisionModel = getIsVisionModel()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const handleVisionResolutionEnabledChange = useCallback((enabled: boolean) => {
							 | 
						||
| 
								 | 
							
								    const newPayload = produce(payload, (draft) => {
							 | 
						||
| 
								 | 
							
								      draft.enabled = enabled
							 | 
						||
| 
								 | 
							
								      if (enabled && isChatMode) {
							 | 
						||
| 
								 | 
							
								        draft.configs = {
							 | 
						||
| 
								 | 
							
								          detail: Resolution.high,
							 | 
						||
| 
								 | 
							
								          variable_selector: ['sys', 'files'],
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    onChange(newPayload)
							 | 
						||
| 
								 | 
							
								  }, [isChatMode, onChange, payload])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const handleVisionResolutionChange = useCallback((config: VisionSetting) => {
							 | 
						||
| 
								 | 
							
								    const newPayload = produce(payload, (draft) => {
							 | 
						||
| 
								 | 
							
								      draft.configs = config
							 | 
						||
| 
								 | 
							
								    })
							 | 
						||
| 
								 | 
							
								    onChange(newPayload)
							 | 
						||
| 
								 | 
							
								  }, [onChange, payload])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const handleModelChanged = useCallback(() => {
							 | 
						||
| 
								 | 
							
								    const isVisionModel = getIsVisionModel()
							 | 
						||
| 
								 | 
							
								    if (!isVisionModel) {
							 | 
						||
| 
								 | 
							
								      handleVisionResolutionEnabledChange(false)
							 | 
						||
| 
								 | 
							
								      return
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    if (payload.enabled) {
							 | 
						||
| 
								 | 
							
								      onChange({
							 | 
						||
| 
								 | 
							
								        enabled: true,
							 | 
						||
| 
								 | 
							
								        configs: {
							 | 
						||
| 
								 | 
							
								          detail: Resolution.high,
							 | 
						||
| 
								 | 
							
								          variable_selector: [],
							 | 
						||
| 
								 | 
							
								        },
							 | 
						||
| 
								 | 
							
								      })
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }, [getIsVisionModel, handleVisionResolutionEnabledChange, onChange, payload.enabled])
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return {
							 | 
						||
| 
								 | 
							
								    isVisionModel,
							 | 
						||
| 
								 | 
							
								    handleVisionResolutionEnabledChange,
							 | 
						||
| 
								 | 
							
								    handleVisionResolutionChange,
							 | 
						||
| 
								 | 
							
								    handleModelChanged,
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default useConfigVision
							 |