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