| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | 
							- 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
 
 
  |