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