| @@ -30,6 +30,7 @@ import { ModelFeatureEnum } from '@/app/components/header/account-setting/model- | |||
| import { useFeatures } from '@/app/components/base/features/hooks' | |||
| import type { InputForm } from '@/app/components/base/chat/chat/type' | |||
| import { getLastAnswer } from '@/app/components/base/chat/utils' | |||
| import { canFindTool } from '@/utils' | |||
| type ChatItemProps = { | |||
| modelAndParameter: ModelAndParameter | |||
| @@ -128,7 +129,7 @@ const ChatItem: FC<ChatItemProps> = ({ | |||
| const allToolIcons = useMemo(() => { | |||
| const icons: Record<string, any> = {} | |||
| modelConfig.agentConfig.tools?.forEach((item: any) => { | |||
| icons[item.tool_name] = collectionList.find((collection: any) => collection.id === item.provider_id)?.icon | |||
| icons[item.tool_name] = collectionList.find((collection: any) => canFindTool(collection.id, item.provider_id))?.icon | |||
| }) | |||
| return icons | |||
| }, [collectionList, modelConfig.agentConfig.tools]) | |||
| @@ -26,6 +26,7 @@ import { useStore as useAppStore } from '@/app/components/app/store' | |||
| import { useFeatures } from '@/app/components/base/features/hooks' | |||
| import { getLastAnswer, isValidGeneratedAnswer } from '@/app/components/base/chat/utils' | |||
| import type { InputForm } from '@/app/components/base/chat/chat/type' | |||
| import { canFindTool } from '@/utils' | |||
| type DebugWithSingleModelProps = { | |||
| checkCanSend?: () => boolean | |||
| @@ -134,7 +135,7 @@ const DebugWithSingleModel = forwardRef<DebugWithSingleModelRefType, DebugWithSi | |||
| const allToolIcons = useMemo(() => { | |||
| const icons: Record<string, any> = {} | |||
| modelConfig.agentConfig.tools?.forEach((item: any) => { | |||
| icons[item.tool_name] = collectionList.find((collection: any) => collection.id === item.provider_id)?.icon | |||
| icons[item.tool_name] = collectionList.find((collection: any) => canFindTool(collection.id, item.provider_id))?.icon | |||
| }) | |||
| return icons | |||
| }, [collectionList, modelConfig.agentConfig.tools]) | |||
| @@ -72,7 +72,10 @@ import { FILE_EXTS } from '@/app/components/base/prompt-editor/constants' | |||
| import { SupportUploadFileTypes } from '@/app/components/workflow/types' | |||
| import NewFeaturePanel from '@/app/components/base/features/new-feature-panel' | |||
| import { fetchFileUploadConfig } from '@/service/common' | |||
| import { correctProvider } from '@/utils' | |||
| import { | |||
| correctModelProvider, | |||
| correctToolProvider, | |||
| } from '@/utils' | |||
| import PluginDependency from '@/app/components/workflow/plugin-dependency' | |||
| type PublishConfig = { | |||
| @@ -557,7 +560,7 @@ const Configuration: FC = () => { | |||
| ...modelConfig.annotation_reply, | |||
| embedding_model: { | |||
| ...modelConfig.annotation_reply.embedding_model, | |||
| embedding_provider_name: correctProvider(modelConfig.annotation_reply.embedding_model.embedding_provider_name), | |||
| embedding_provider_name: correctModelProvider(modelConfig.annotation_reply.embedding_model.embedding_provider_name), | |||
| }, | |||
| } | |||
| } | |||
| @@ -572,7 +575,7 @@ const Configuration: FC = () => { | |||
| const config = { | |||
| modelConfig: { | |||
| provider: correctProvider(model.provider), | |||
| provider: correctModelProvider(model.provider), | |||
| model_id: model.name, | |||
| mode: model.mode, | |||
| configs: { | |||
| @@ -627,8 +630,8 @@ const Configuration: FC = () => { | |||
| isDeleted: res.deleted_tools?.some((deletedTool: any) => deletedTool.id === tool.id && deletedTool.tool_name === tool.tool_name), | |||
| notAuthor: collectionList.find(c => tool.provider_id === c.id)?.is_team_authorization === false, | |||
| ...(tool.provider_type === 'builtin' ? { | |||
| provider_id: correctProvider(tool.provider_name), | |||
| provider_name: correctProvider(tool.provider_name), | |||
| provider_id: correctToolProvider(tool.provider_name), | |||
| provider_name: correctToolProvider(tool.provider_name), | |||
| } : {}), | |||
| } | |||
| }), | |||
| @@ -653,7 +656,7 @@ const Configuration: FC = () => { | |||
| ...(retrievalConfig.reranking_model ? { | |||
| reranking_model: { | |||
| ...retrievalConfig.reranking_model, | |||
| reranking_provider_name: correctProvider(modelConfig.dataset_configs.reranking_model.reranking_provider_name), | |||
| reranking_provider_name: correctModelProvider(modelConfig.dataset_configs.reranking_model.reranking_provider_name), | |||
| }, | |||
| } : {}), | |||
| }) | |||
| @@ -26,6 +26,7 @@ import { CollectionType } from '@/app/components/tools/types' | |||
| import { useGetLanguage } from '@/context/i18n' | |||
| import type { AgentNodeType } from '../nodes/agent/types' | |||
| import { useStrategyProviders } from '@/service/use-strategy' | |||
| import { canFindTool } from '@/utils' | |||
| export const useChecklist = (nodes: Node[], edges: Edge[]) => { | |||
| const { t } = useTranslation() | |||
| @@ -51,7 +52,7 @@ export const useChecklist = (nodes: Node[], edges: Edge[]) => { | |||
| moreDataForCheckValid = getToolCheckParams(node.data as ToolNodeType, buildInTools, customTools, workflowTools, language) | |||
| if (provider_type === CollectionType.builtIn) | |||
| toolIcon = buildInTools.find(tool => tool.id === node.data.provider_id)?.icon | |||
| toolIcon = buildInTools.find(tool => canFindTool(tool.id, node.data.provider_id || ''))?.icon | |||
| if (provider_type === CollectionType.custom) | |||
| toolIcon = customTools.find(tool => tool.id === node.data.provider_id)?.icon | |||
| @@ -58,6 +58,7 @@ import I18n from '@/context/i18n' | |||
| import { CollectionType } from '@/app/components/tools/types' | |||
| import { CUSTOM_ITERATION_START_NODE } from '@/app/components/workflow/nodes/iteration-start/constants' | |||
| import { useWorkflowConfig } from '@/service/use-workflow' | |||
| import { canFindTool } from '@/utils' | |||
| export const useIsChatMode = () => { | |||
| const appDetail = useAppStore(s => s.appDetail) | |||
| @@ -608,11 +609,7 @@ export const useToolIcon = (data: Node['data']) => { | |||
| targetTools = customTools | |||
| else | |||
| targetTools = workflowTools | |||
| return targetTools.find((toolWithProvider) => { | |||
| return toolWithProvider.id === data.provider_id | |||
| || toolWithProvider.id === `langgenius/${data.provider_id}/${data.provider_id}` | |||
| || toolWithProvider.id === `langgenius/${data.provider_id}_tool/${data.provider_id}` | |||
| })?.icon | |||
| return targetTools.find(toolWithProvider => canFindTool(toolWithProvider.id, data.provider_id))?.icon | |||
| } | |||
| }, [data, buildInTools, customTools, workflowTools]) | |||
| @@ -22,6 +22,7 @@ import type { Node } from '@/app/components/workflow/types' | |||
| import { BlockEnum } from '@/app/components/workflow/types' | |||
| import { useGetLanguage } from '@/context/i18n' | |||
| import { CollectionType } from '@/app/components/tools/types' | |||
| import { canFindTool } from '@/utils' | |||
| type PanelOperatorPopupProps = { | |||
| id: string | |||
| @@ -57,7 +58,7 @@ const PanelOperatorPopup = ({ | |||
| return nodesExtraData[data.type].author | |||
| if (data.provider_type === CollectionType.builtIn) | |||
| return buildInTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.author | |||
| return buildInTools.find(toolWithProvider => canFindTool(toolWithProvider.id, data.provider_id))?.author | |||
| if (data.provider_type === CollectionType.workflow) | |||
| return workflowTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.author | |||
| @@ -70,7 +71,7 @@ const PanelOperatorPopup = ({ | |||
| return nodesExtraData[data.type].about | |||
| if (data.provider_type === CollectionType.builtIn) | |||
| return buildInTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.description[language] | |||
| return buildInTools.find(toolWithProvider => canFindTool(toolWithProvider.id, data.provider_id))?.description[language] | |||
| if (data.provider_type === CollectionType.workflow) | |||
| return workflowTools.find(toolWithProvider => toolWithProvider.id === data.provider_id)?.description[language] | |||
| @@ -14,6 +14,7 @@ import type { ToolParameter } from '@/app/components/tools/types' | |||
| import { CollectionType } from '@/app/components/tools/types' | |||
| import type { BlockEnum } from '@/app/components/workflow/types' | |||
| import { useLanguage } from '@/app/components/header/account-setting/model-provider-page/hooks' | |||
| import { canFindTool } from '@/utils' | |||
| const i18nPrefix = 'workflow.nodes.parameterExtractor' | |||
| @@ -56,7 +57,7 @@ const ImportFromTool: FC<Props> = ({ | |||
| return [] | |||
| } | |||
| })() | |||
| const currCollection = currentTools.find(item => item.id === provider_id) | |||
| const currCollection = currentTools.find(item => canFindTool(item.id, provider_id)) | |||
| const currTool = currCollection?.tools.find(tool => tool.name === tool_name) | |||
| const toExactParams = (currTool?.parameters || []).filter((item: any) => item.form === 'llm') | |||
| const formattedParams = toParmExactParams(toExactParams, language) | |||
| @@ -18,6 +18,7 @@ import { | |||
| useFetchToolsData, | |||
| useNodesReadOnly, | |||
| } from '@/app/components/workflow/hooks' | |||
| import { canFindTool } from '@/utils' | |||
| const useConfig = (id: string, payload: ToolNodeType) => { | |||
| const { nodesReadOnly: readOnly } = useNodesReadOnly() | |||
| @@ -49,7 +50,7 @@ const useConfig = (id: string, payload: ToolNodeType) => { | |||
| return [] | |||
| } | |||
| })() | |||
| const currCollection = currentTools.find(item => item.id === provider_id) | |||
| const currCollection = currentTools.find(item => canFindTool(item.id, provider_id)) | |||
| // Auth | |||
| const needAuth = !!currCollection?.allow_delete | |||
| @@ -41,7 +41,7 @@ import type { ToolNodeType } from './nodes/tool/types' | |||
| import type { IterationNodeType } from './nodes/iteration/types' | |||
| import { CollectionType } from '@/app/components/tools/types' | |||
| import { toolParametersToFormSchemas } from '@/app/components/tools/utils/to-form-schema' | |||
| import { correctProvider } from '@/utils' | |||
| import { canFindTool, correctModelProvider } from '@/utils' | |||
| const WHITE = 'WHITE' | |||
| const GRAY = 'GRAY' | |||
| @@ -284,16 +284,16 @@ export const initialNodes = (originNodes: Node[], originEdges: Edge[]) => { | |||
| // legacy provider handle | |||
| if (node.data.type === BlockEnum.LLM) | |||
| (node as any).data.model.provider = correctProvider((node as any).data.model.provider) | |||
| (node as any).data.model.provider = correctModelProvider((node as any).data.model.provider) | |||
| if (node.data.type === BlockEnum.KnowledgeRetrieval && (node as any).data.multiple_retrieval_config.reranking_model) | |||
| (node as any).data.multiple_retrieval_config.reranking_model.provider = correctProvider((node as any).data.multiple_retrieval_config.reranking_model.provider) | |||
| (node as any).data.multiple_retrieval_config.reranking_model.provider = correctModelProvider((node as any).data.multiple_retrieval_config.reranking_model.provider) | |||
| if (node.data.type === BlockEnum.QuestionClassifier) | |||
| (node as any).data.model.provider = correctProvider((node as any).data.model.provider) | |||
| (node as any).data.model.provider = correctModelProvider((node as any).data.model.provider) | |||
| if (node.data.type === BlockEnum.ParameterExtractor) | |||
| (node as any).data.model.provider = correctProvider((node as any).data.model.provider) | |||
| (node as any).data.model.provider = correctModelProvider((node as any).data.model.provider) | |||
| if (node.data.type === BlockEnum.HttpRequest && !node.data.retry_config) { | |||
| node.data.retry_config = { | |||
| retry_enabled: true, | |||
| @@ -517,7 +517,7 @@ export const getToolCheckParams = ( | |||
| const { provider_id, provider_type, tool_name } = toolData | |||
| const isBuiltIn = provider_type === CollectionType.builtIn | |||
| const currentTools = provider_type === CollectionType.builtIn ? buildInTools : provider_type === CollectionType.custom ? customTools : workflowTools | |||
| const currCollection = currentTools.find(item => item.id === provider_id) | |||
| const currCollection = currentTools.find(item => canFindTool(item.id, provider_id)) | |||
| const currTool = currCollection?.tools.find(tool => tool.name === tool_name) | |||
| const formSchemas = currTool ? toolParametersToFormSchemas(currTool.parameters) : [] | |||
| const toolInputVarSchema = formSchemas.filter((item: any) => item.form === 'llm') | |||
| @@ -56,12 +56,34 @@ export async function fetchWithRetry<T = any>(fn: Promise<T>, retries = 3): Prom | |||
| } | |||
| } | |||
| export const correctProvider = (provider: string) => { | |||
| export const correctModelProvider = (provider: string) => { | |||
| if (!provider) | |||
| return '' | |||
| if (provider.includes('/')) | |||
| return provider | |||
| if (['google'].includes(provider)) | |||
| return 'langgenius/gemini/google' | |||
| return `langgenius/${provider}/${provider}` | |||
| } | |||
| export const correctToolProvider = (provider: string) => { | |||
| if (!provider) | |||
| return '' | |||
| if (provider.includes('/')) | |||
| return provider | |||
| if (['stepfun', 'jina', 'siliconflow'].includes(provider)) | |||
| return `langgenius/${provider}_tool/${provider}` | |||
| return `langgenius/${provider}/${provider}` | |||
| } | |||
| export const canFindTool = (providerId: string, oldToolId?: string) => { | |||
| return providerId === oldToolId | |||
| || providerId === `langgenius/${oldToolId}/${oldToolId}` | |||
| || providerId === `langgenius/${oldToolId}_tool/${oldToolId}` | |||
| } | |||