| import { useProviderContext } from '@/context/provider-context' | import { useProviderContext } from '@/context/provider-context' | ||||
| import { AgentStrategy, AppType, ModelModeType, RETRIEVE_TYPE, Resolution, TransferMethod } from '@/types/app' | import { AgentStrategy, AppType, ModelModeType, RETRIEVE_TYPE, Resolution, TransferMethod } from '@/types/app' | ||||
| import { PromptMode } from '@/models/debug' | import { PromptMode } from '@/models/debug' | ||||
| import { ANNOTATION_DEFAULT, DEFAULT_AGENT_SETTING, DEFAULT_CHAT_PROMPT_CONFIG, DEFAULT_COMPLETION_PROMPT_CONFIG, supportFunctionCallModels } from '@/config' | |||||
| import { ANNOTATION_DEFAULT, DEFAULT_AGENT_SETTING, DEFAULT_CHAT_PROMPT_CONFIG, DEFAULT_COMPLETION_PROMPT_CONFIG } from '@/config' | |||||
| import SelectDataSet from '@/app/components/app/configuration/dataset-config/select-dataset' | import SelectDataSet from '@/app/components/app/configuration/dataset-config/select-dataset' | ||||
| import { useModalContext } from '@/context/modal-context' | import { useModalContext } from '@/context/modal-context' | ||||
| import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' | import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' | ||||
| dataSets: [], | dataSets: [], | ||||
| agentConfig: DEFAULT_AGENT_SETTING, | agentConfig: DEFAULT_AGENT_SETTING, | ||||
| }) | }) | ||||
| const isChatApp = mode === AppType.chat | const isChatApp = mode === AppType.chat | ||||
| const isAgent = modelConfig.agentConfig?.enabled | const isAgent = modelConfig.agentConfig?.enabled | ||||
| const setIsAgent = (value: boolean) => { | const setIsAgent = (value: boolean) => { | ||||
| doSetModelConfig(newModelConfig) | doSetModelConfig(newModelConfig) | ||||
| } | } | ||||
| const isOpenAI = modelConfig.provider === 'openai' | const isOpenAI = modelConfig.provider === 'openai' | ||||
| const isFunctionCall = (isOpenAI && modelConfig.mode === ModelModeType.chat) || supportFunctionCallModels.includes(modelConfig.model_id) | |||||
| const [collectionList, setCollectionList] = useState<Collection[]>([]) | const [collectionList, setCollectionList] = useState<Collection[]>([]) | ||||
| useEffect(() => { | useEffect(() => { | ||||
| }, | }, | ||||
| ) | ) | ||||
| const isFunctionCall = (() => { | |||||
| const features = currModel?.features | |||||
| if (!features) | |||||
| return false | |||||
| return features.includes(ModelFeatureEnum.toolCall) || features.includes(ModelFeatureEnum.multiToolCall) | |||||
| })() | |||||
| // Fill old app data missing model mode. | // Fill old app data missing model mode. | ||||
| useEffect(() => { | useEffect(() => { | ||||
| if (hasFetchedDetail && !modelModeType) { | if (hasFetchedDetail && !modelModeType) { |
| } | } | ||||
| } | } | ||||
| export const useAgentThoughtCurrentProviderAndModelAndModelList = (defaultModel?: DefaultModel) => { | |||||
| const { agentThoughtModelList } = useProviderContext() | |||||
| const { | |||||
| currentProvider, | |||||
| currentModel, | |||||
| } = useCurrentProviderAndModel(agentThoughtModelList, defaultModel) | |||||
| return { | |||||
| currentProvider, | |||||
| currentModel, | |||||
| agentThoughtModelList, | |||||
| } | |||||
| } | |||||
| export const useModelListAndDefaultModel = (type: ModelTypeIndex) => { | export const useModelListAndDefaultModel = (type: ModelTypeIndex) => { | ||||
| const { data: modelList } = useModelList(type) | const { data: modelList } = useModelList(type) | ||||
| const { data: defaultModel } = useDefaultModel(type) | const { data: defaultModel } = useDefaultModel(type) |
| tools: [], | tools: [], | ||||
| } | } | ||||
| export const supportFunctionCallModels = ['glm-3-turbo', 'glm-4'] | |||||
| export const DEFAULT_AGENT_PROMPT = { | export const DEFAULT_AGENT_PROMPT = { | ||||
| chat: `Respond to the human as helpfully and accurately as possible. | chat: `Respond to the human as helpfully and accurately as possible. | ||||
| import { createContext, useContext } from 'use-context-selector' | import { createContext, useContext } from 'use-context-selector' | ||||
| import useSWR from 'swr' | import useSWR from 'swr' | ||||
| import { useEffect, useMemo, useState } from 'react' | |||||
| import { useEffect, useState } from 'react' | |||||
| import { | import { | ||||
| fetchModelList, | fetchModelList, | ||||
| fetchModelProviders, | fetchModelProviders, | ||||
| fetchSupportRetrievalMethods, | fetchSupportRetrievalMethods, | ||||
| } from '@/service/common' | } from '@/service/common' | ||||
| import { | import { | ||||
| ModelFeatureEnum, | |||||
| ModelStatusEnum, | ModelStatusEnum, | ||||
| ModelTypeEnum, | ModelTypeEnum, | ||||
| } from '@/app/components/header/account-setting/model-provider-page/declarations' | } from '@/app/components/header/account-setting/model-provider-page/declarations' | ||||
| const ProviderContext = createContext<{ | const ProviderContext = createContext<{ | ||||
| modelProviders: ModelProvider[] | modelProviders: ModelProvider[] | ||||
| textGenerationModelList: Model[] | textGenerationModelList: Model[] | ||||
| agentThoughtModelList: Model[] | |||||
| supportRetrievalMethods: RETRIEVE_METHOD[] | supportRetrievalMethods: RETRIEVE_METHOD[] | ||||
| hasSettedApiKey: boolean | hasSettedApiKey: boolean | ||||
| plan: { | plan: { | ||||
| }>({ | }>({ | ||||
| modelProviders: [], | modelProviders: [], | ||||
| textGenerationModelList: [], | textGenerationModelList: [], | ||||
| agentThoughtModelList: [], | |||||
| supportRetrievalMethods: [], | supportRetrievalMethods: [], | ||||
| hasSettedApiKey: true, | hasSettedApiKey: true, | ||||
| plan: { | plan: { | ||||
| const { data: textGenerationModelList } = useSWR(`${fetchModelListUrlPrefix}${ModelTypeEnum.textGeneration}`, fetchModelList) | const { data: textGenerationModelList } = useSWR(`${fetchModelListUrlPrefix}${ModelTypeEnum.textGeneration}`, fetchModelList) | ||||
| const { data: supportRetrievalMethods } = useSWR('/datasets/retrieval-setting', fetchSupportRetrievalMethods) | const { data: supportRetrievalMethods } = useSWR('/datasets/retrieval-setting', fetchSupportRetrievalMethods) | ||||
| const agentThoughtModelList = useMemo(() => { | |||||
| const result: Model[] = [] | |||||
| if (textGenerationModelList?.data) { | |||||
| textGenerationModelList?.data.forEach((item) => { | |||||
| const agentThoughtModels = item.models.filter(model => model.features?.includes(ModelFeatureEnum.agentThought)) | |||||
| if (agentThoughtModels.length) { | |||||
| result.push({ | |||||
| ...item, | |||||
| models: agentThoughtModels, | |||||
| }) | |||||
| } | |||||
| }) | |||||
| return result | |||||
| } | |||||
| return [] | |||||
| }, [textGenerationModelList]) | |||||
| const [plan, setPlan] = useState(defaultPlan) | const [plan, setPlan] = useState(defaultPlan) | ||||
| const [isFetchedPlan, setIsFetchedPlan] = useState(false) | const [isFetchedPlan, setIsFetchedPlan] = useState(false) | ||||
| const [enableBilling, setEnableBilling] = useState(true) | const [enableBilling, setEnableBilling] = useState(true) | ||||
| <ProviderContext.Provider value={{ | <ProviderContext.Provider value={{ | ||||
| modelProviders: providersData?.data || [], | modelProviders: providersData?.data || [], | ||||
| textGenerationModelList: textGenerationModelList?.data || [], | textGenerationModelList: textGenerationModelList?.data || [], | ||||
| agentThoughtModelList, | |||||
| hasSettedApiKey: !!textGenerationModelList?.data.some(model => model.status === ModelStatusEnum.active), | hasSettedApiKey: !!textGenerationModelList?.data.some(model => model.status === ModelStatusEnum.active), | ||||
| supportRetrievalMethods: supportRetrievalMethods?.retrieval_method || [], | supportRetrievalMethods: supportRetrievalMethods?.retrieval_method || [], | ||||
| plan, | plan, |