From a430284aa21e3ae1f0d5654e55b2ad2852519cc2 Mon Sep 17 00:00:00 2001 From: wwf <yearningwang@iqtogether.com> Date: 星期三, 04 六月 2025 15:17:49 +0800 Subject: [PATCH] 初始化 --- app/components/app/configuration/index.tsx | 124 ++++++++++++++--------------------------- 1 files changed, 42 insertions(+), 82 deletions(-) diff --git a/app/components/app/configuration/index.tsx b/app/components/app/configuration/index.tsx index 5b8f865..3a5ee38 100644 --- a/app/components/app/configuration/index.tsx +++ b/app/components/app/configuration/index.tsx @@ -2,7 +2,6 @@ import type { FC } from 'react' import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react' import useSWR from 'swr' -import { basePath } from '@/utils/var' import { useTranslation } from 'react-i18next' import { useContext } from 'use-context-selector' import { usePathname } from 'next/navigation' @@ -20,7 +19,6 @@ } from '@/app/components/app/configuration/debug/hooks' import type { ModelAndParameter } from '@/app/components/app/configuration/debug/types' import Button from '@/app/components/base/button' -import Divider from '@/app/components/base/divider' import Loading from '@/app/components/base/loading' import AppPublisher from '@/app/components/app/app-publisher/features-wrapper' import type { @@ -61,7 +59,7 @@ useTextGenerationCurrentProviderAndModelAndModelList, } from '@/app/components/header/account-setting/model-provider-page/hooks' import { fetchCollectionList } from '@/service/tools' -import type { Collection } from '@/app/components/tools/types' +import { type Collection } from '@/app/components/tools/types' import { useStore as useAppStore } from '@/app/components/app/store' import { getMultipleRetrievalConfig, @@ -73,12 +71,6 @@ import { SupportUploadFileTypes } from '@/app/components/workflow/types' import NewFeaturePanel from '@/app/components/base/features/new-feature-panel' import { fetchFileUploadConfig } from '@/service/common' -import { - correctModelProvider, - correctToolProvider, -} from '@/utils' -import PluginDependency from '@/app/components/workflow/plugin-dependency' -import { supportFunctionCall } from '@/utils/tool-call' type PublishConfig = { modelConfig: ModelConfig @@ -96,7 +88,7 @@ }))) const { data: fileUploadConfigResponse } = useSWR({ url: '/files/upload' }, fetchFileUploadConfig) - const latestPublishedAt = useMemo(() => appDetail?.model_config?.updated_at, [appDetail]) + const latestPublishedAt = useMemo(() => appDetail?.model_config.updated_at, [appDetail]) const [formattingChanged, setFormattingChanged] = useState(false) const { setShowAccountSettingModal } = useModalContext() const [hasFetchedDetail, setHasFetchedDetail] = useState(false) @@ -164,7 +156,7 @@ const setCompletionParams = (value: FormValue) => { const params = { ...value } - // eslint-disable-next-line ts/no-use-before-define + // eslint-disable-next-line @typescript-eslint/no-use-before-define if ((!params.stop || params.stop.length === 0) && (modeModeTypeRef.current === ModelModeType.completion)) { params.stop = getTempStop() setTempStop([]) @@ -173,7 +165,7 @@ } const [modelConfig, doSetModelConfig] = useState<ModelConfig>({ - provider: 'langgenius/openai/openai', + provider: 'openai', model_id: 'gpt-3.5-turbo', mode: ModelModeType.unset, configs: { @@ -193,12 +185,16 @@ dataSets: [], agentConfig: DEFAULT_AGENT_SETTING, }) + const isAgent = mode === 'agent-chat' - const isOpenAI = modelConfig.provider === 'langgenius/openai/openai' + const isOpenAI = modelConfig.provider === 'openai' const [collectionList, setCollectionList] = useState<Collection[]>([]) - const [datasetConfigs, doSetDatasetConfigs] = useState<DatasetConfigs>({ + useEffect(() => { + + }, []) + const [datasetConfigs, setDatasetConfigs] = useState<DatasetConfigs>({ retrieval_model: RETRIEVE_TYPE.multiWay, reranking_model: { reranking_provider_name: '', @@ -211,11 +207,6 @@ datasets: [], }, }) - const datasetConfigsRef = useRef(datasetConfigs) - const setDatasetConfigs = useCallback((newDatasetConfigs: DatasetConfigs) => { - doSetDatasetConfigs(newDatasetConfigs) - datasetConfigsRef.current = newDatasetConfigs - }, []) const setModelConfig = (newModelConfig: ModelConfig) => { doSetModelConfig(newModelConfig) @@ -228,7 +219,7 @@ }, [modelModeType]) const [dataSets, setDataSets] = useState<DataSet[]>([]) - const contextVar = modelConfig.configs.prompt_variables.find(item => item.is_context_var)?.key + const contextVar = modelConfig.configs.prompt_variables.find((item: any) => item.is_context_var)?.key const hasSetContextVar = !!contextVar const [isShowSelectDataSet, { setTrue: showSelectDataSet, setFalse: hideSelectDataSet }] = useBoolean(false) const selectedIds = dataSets.map(item => item.id) @@ -246,7 +237,7 @@ formattingChangedDispatcher() let newDatasets = data if (data.find(item => !item.name)) { // has not loaded selected dataset - const newSelected = produce(data, (draft) => { + const newSelected = produce(data, (draft: any) => { data.forEach((item, index) => { if (!item.name) { // not fetched database const newItem = dataSets.find(i => i.id === item.id) @@ -295,7 +286,6 @@ }) setDatasetConfigs({ - ...datasetConfigsRef.current, ...retrievalConfig, reranking_model: { reranking_provider_name: retrievalConfig?.reranking_model?.provider || '', @@ -346,7 +336,12 @@ }, ) - const isFunctionCall = supportFunctionCall(currModel?.features) + 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. useEffect(() => { @@ -366,7 +361,7 @@ const [canReturnToSimpleMode, setCanReturnToSimpleMode] = useState(true) const setPromptMode = async (mode: PromptMode) => { if (mode === PromptMode.advanced) { - // eslint-disable-next-line ts/no-use-before-define + // eslint-disable-next-line @typescript-eslint/no-use-before-define await migrateToDefaultPrompt() setCanReturnToSimpleMode(true) } @@ -504,12 +499,6 @@ useEffect(() => { (async () => { const collectionList = await fetchCollectionList() - if (basePath) { - collectionList.forEach((item) => { - if (typeof item.icon == 'string' && !item.icon.includes(basePath)) - item.icon = `${basePath}${item.icon}` - }) - } setCollectionList(collectionList) fetchAppDetail({ url: '/apps', id: appId }).then(async (res: any) => { setMode(res.mode) @@ -520,7 +509,7 @@ if (modelConfig.chat_prompt_config && modelConfig.chat_prompt_config.prompt.length > 0) setChatPromptConfig(modelConfig.chat_prompt_config) else - setChatPromptConfig(clone(DEFAULT_CHAT_PROMPT_CONFIG)) + setChatPromptConfig(clone(DEFAULT_CHAT_PROMPT_CONFIG) as any) setCompletionPromptConfig(modelConfig.completion_prompt_config || clone(DEFAULT_COMPLETION_PROMPT_CONFIG) as any) setCanReturnToSimpleMode(false) } @@ -558,19 +547,8 @@ if (modelConfig.retriever_resource) setCitationConfig(modelConfig.retriever_resource) - if (modelConfig.annotation_reply) { - let annotationConfig = modelConfig.annotation_reply - if (modelConfig.annotation_reply.enabled) { - annotationConfig = { - ...modelConfig.annotation_reply, - embedding_model: { - ...modelConfig.annotation_reply.embedding_model, - embedding_provider_name: correctModelProvider(modelConfig.annotation_reply.embedding_model.embedding_provider_name), - }, - } - } - setAnnotationConfig(annotationConfig, true) - } + if (modelConfig.annotation_reply) + setAnnotationConfig(modelConfig.annotation_reply, true) if (modelConfig.sensitive_word_avoidance) setModerationConfig(modelConfig.sensitive_word_avoidance) @@ -580,7 +558,7 @@ const config = { modelConfig: { - provider: correctModelProvider(model.provider), + provider: model.provider, model_id: model.name, mode: model.mode, configs: { @@ -622,6 +600,7 @@ annotation_reply: modelConfig.annotation_reply, external_data_tools: modelConfig.external_data_tools, dataSets: datasets || [], + // eslint-disable-next-line multiline-ternary agentConfig: res.mode === 'agent-chat' ? { max_iteration: DEFAULT_AGENT_SETTING.max_iteration, ...modelConfig.agent_mode, @@ -630,15 +609,10 @@ tools: modelConfig.agent_mode?.tools.filter((tool: any) => { return !tool.dataset }).map((tool: any) => { - const toolInCollectionList = collectionList.find(c => tool.provider_id === c.id) return { ...tool, - isDeleted: res.deleted_tools?.some((deletedTool: any) => deletedTool.id === tool.id && deletedTool.tool_name === tool.tool_name), - notAuthor: toolInCollectionList?.is_team_authorization === false, - ...(tool.provider_type === 'builtin' ? { - provider_id: correctToolProvider(tool.provider_name, !!toolInCollectionList), - provider_name: correctToolProvider(tool.provider_name, !!toolInCollectionList), - } : {}), + isDeleted: res.deleted_tools?.includes(tool.tool_name), + notAuthor: collectionList.find(c => tool.provider_id === c.id)?.is_team_authorization === false, } }), } : DEFAULT_AGENT_SETTING, @@ -651,13 +625,7 @@ syncToPublishedConfig(config) setPublishedConfig(config) - const retrievalConfig = getMultipleRetrievalConfig({ - ...modelConfig.dataset_configs, - reranking_model: modelConfig.dataset_configs.reranking_model && { - provider: modelConfig.dataset_configs.reranking_model.reranking_provider_name, - model: modelConfig.dataset_configs.reranking_model.reranking_model_name, - }, - }, datasets, datasets, { + const retrievalConfig = getMultipleRetrievalConfig(modelConfig.dataset_configs, datasets, datasets, { provider: currentRerankProvider?.provider, model: currentRerankModel?.model, }) @@ -665,12 +633,6 @@ retrieval_model: RETRIEVE_TYPE.multiWay, ...modelConfig.dataset_configs, ...retrievalConfig, - ...(retrievalConfig.reranking_model ? { - reranking_model: { - reranking_model_name: retrievalConfig.reranking_model.model, - reranking_provider_name: correctModelProvider(retrievalConfig.reranking_model.provider), - }, - } : {}), }) setHasFetchedDetail(true) }) @@ -826,7 +788,7 @@ } if (isLoading) { - return <div className='flex h-full items-center justify-center'> + return <div className='flex items-center justify-center h-full'> <Loading type='area' /> </div> } @@ -895,7 +857,6 @@ dataSets, setDataSets, datasetConfigs, - datasetConfigsRef, setDatasetConfigs, hasSetContextVar, isShowVisionConfig, @@ -909,16 +870,16 @@ > <FeaturesProvider features={featuresData}> <> - <div className="flex h-full flex-col"> - <div className='relative flex h-[200px] grow pt-14'> + <div className="flex flex-col h-full"> + <div className='relative flex grow h-[200px] pt-14'> {/* Header */} - <div className='bg-default-subtle absolute left-0 top-0 h-14 w-full'> - <div className='flex h-14 items-center justify-between px-6'> + <div className='absolute top-0 left-0 w-full bg-white h-14'> + <div className='flex items-center justify-between px-6 h-14'> <div className='flex items-center'> - <div className='system-xl-semibold text-text-primary'>{t('appDebug.orchestrate')}</div> - <div className='flex h-[14px] items-center space-x-1 text-xs'> + <div className='text-base font-semibold leading-6 text-gray-900'>{t('appDebug.orchestrate')}</div> + <div className='flex items-center h-[14px] space-x-1 text-xs'> {isAdvancedMode && ( - <div className='system-xs-medium-uppercase ml-1 flex h-5 items-center rounded-md border border-components-button-secondary-border px-1.5 uppercase text-text-tertiary'>{t('appDebug.promptMode.advanced')}</div> + <div className='ml-1 flex items-center h-5 px-1.5 border border-gray-100 rounded-md text-[11px] font-medium text-gray-500 uppercase'>{t('appDebug.promptMode.advanced')}</div> )} </div> </div> @@ -954,13 +915,13 @@ debugWithMultipleModel={debugWithMultipleModel} onDebugWithMultipleModelChange={handleDebugWithMultipleModelChange} /> - <Divider type='vertical' className='mx-2 h-[14px]' /> + <div className='mx-2 w-[1px] h-[14px] bg-gray-200'></div> </> )} {isMobile && ( - <Button className='mr-2 !h-8 !text-[13px] font-medium' onClick={showDebugPanel}> + <Button className='!h-8 !text-[13px] font-medium' onClick={showDebugPanel}> <span className='mr-1'>{t('appDebug.operation.debugConfig')}</span> - <CodeBracketIcon className="h-4 w-4 text-text-tertiary" /> + <CodeBracketIcon className="w-4 h-4 text-gray-500" /> </Button> )} <AppPublisher {...{ @@ -975,11 +936,11 @@ </div> </div> </div> - <div className={`flex h-full w-full shrink-0 flex-col sm:w-1/2 ${debugWithMultipleModel && 'max-w-[560px]'}`}> + <div className={`w-full sm:w-1/2 shrink-0 flex flex-col h-full ${debugWithMultipleModel && 'max-w-[560px]'}`}> <Config /> </div> - {!isMobile && <div className="relative flex h-full w-1/2 grow flex-col overflow-y-auto " style={{ borderColor: 'rgba(0, 0, 0, 0.02)' }}> - <div className='flex grow flex-col rounded-tl-2xl border-l-[0.5px] border-t-[0.5px] border-components-panel-border bg-chatbot-bg '> + {!isMobile && <div className="relative flex flex-col w-1/2 h-full overflow-y-auto grow " style={{ borderColor: 'rgba(0, 0, 0, 0.02)' }}> + <div className='grow flex flex-col border-t-[0.5px] border-l-[0.5px] rounded-tl-2xl border-components-panel-border bg-chatbot-bg '> <Debug isAPIKeySet={isAPIKeySet} onSetting={() => setShowAccountSettingModal({ payload: 'provider' })} @@ -1031,7 +992,7 @@ /> )} {isMobile && ( - <Drawer showClose isOpen={isShowDebugPanel} onClose={hideDebugPanel} mask footer={null}> + <Drawer showClose isOpen={isShowDebugPanel} onClose={hideDebugPanel} mask footer={null} panelClassname='!bg-gray-50'> <Debug isAPIKeySet={isAPIKeySet} onSetting={() => setShowAccountSettingModal({ payload: 'provider' })} @@ -1059,7 +1020,6 @@ onAutoAddPromptVariable={handleAddPromptVariable} /> )} - <PluginDependency /> </> </FeaturesProvider> </ConfigContext.Provider> -- Gitblit v1.8.0