Spaces:
Build error
Build error
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 | |