Spaces:
Build error
Build error
File size: 2,371 Bytes
a8b3f00 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
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
|