Severian's picture
initial commit
a8b3f00
raw
history blame
2.37 kB
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