From 3846eb967afd77dba6f037e8185ed94494454d5a Mon Sep 17 00:00:00 2001 From: oleg Date: Tue, 23 Jul 2024 16:40:28 +0200 Subject: [PATCH] feat(editor): Split Tools and Models into sub-sections (#10159) --- cypress/constants.ts | 2 +- .../nodes/agents/Agent/Agent.node.ts | 12 +++++-- .../LMChatAnthropic/LmChatAnthropic.node.ts | 1 + .../llms/LMChatOllama/LmChatOllama.node.ts | 1 + .../llms/LMChatOpenAi/LmChatOpenAi.node.ts | 1 + .../nodes/llms/LMCohere/LmCohere.node.ts | 1 + .../nodes/llms/LMOllama/LmOllama.node.ts | 1 + .../nodes/llms/LMOpenAi/LmOpenAi.node.ts | 1 + .../LmOpenHuggingFaceInference.node.ts | 1 + .../LmChatAwsBedrock/LmChatAwsBedrock.node.ts | 1 + .../LmChatAzureOpenAi.node.ts | 1 + .../LmChatGoogleGemini.node.ts | 1 + .../LmChatGooglePalm/LmChatGooglePalm.node.ts | 1 + .../LmChatGoogleVertex.node.ts | 1 + .../nodes/llms/LmChatGroq/LmChatGroq.node.ts | 1 + .../LmChatMistralCloud.node.ts | 1 + .../llms/LmGooglePalm/LmGooglePalm.node.ts | 1 + .../ToolCalculator/ToolCalculator.node.ts | 1 + .../nodes/tools/ToolCode/ToolCode.node.ts | 5 +-- .../ToolHttpRequest/ToolHttpRequest.node.ts | 1 + .../tools/ToolSerpApi/ToolSerpApi.node.ts | 1 + .../ToolVectorStore/ToolVectorStore.node.ts | 1 + .../tools/ToolWikipedia/ToolWikipedia.node.ts | 1 + .../ToolWolframAlpha/ToolWolframAlpha.node.ts | 1 + .../tools/ToolWorkflow/ToolWorkflow.node.ts | 5 +-- .../Node/NodeCreator/Panel/NoResults.vue | 5 ++- .../NodeCreator/composables/useViewStacks.ts | 32 +++++++++++++------ .../src/components/Node/NodeCreator/utils.ts | 6 ++++ 28 files changed, 71 insertions(+), 17 deletions(-) diff --git a/cypress/constants.ts b/cypress/constants.ts index 7efd9b0470..a3c619280e 100644 --- a/cypress/constants.ts +++ b/cypress/constants.ts @@ -53,7 +53,7 @@ export const AGENT_NODE_NAME = 'AI Agent'; export const BASIC_LLM_CHAIN_NODE_NAME = 'Basic LLM Chain'; export const AI_MEMORY_WINDOW_BUFFER_MEMORY_NODE_NAME = 'Window Buffer Memory'; export const AI_TOOL_CALCULATOR_NODE_NAME = 'Calculator'; -export const AI_TOOL_CODE_NODE_NAME = 'Custom Code Tool'; +export const AI_TOOL_CODE_NODE_NAME = 'Code Tool'; export const AI_TOOL_WIKIPEDIA_NODE_NAME = 'Wikipedia'; export const AI_LANGUAGE_MODEL_OPENAI_CHAT_MODEL_NODE_NAME = 'OpenAI Chat Model'; export const AI_OUTPUT_PARSER_AUTO_FIXING_NODE_NAME = 'Auto-fixing Output Parser'; diff --git a/packages/@n8n/nodes-langchain/nodes/agents/Agent/Agent.node.ts b/packages/@n8n/nodes-langchain/nodes/agents/Agent/Agent.node.ts index ccdd184166..4a6d8a733c 100644 --- a/packages/@n8n/nodes-langchain/nodes/agents/Agent/Agent.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/agents/Agent/Agent.node.ts @@ -47,10 +47,18 @@ function getInputs( }; return inputs.map(({ type, filter }) => { + const isModelType = type === NodeConnectionType.AiLanguageModel; + let displayName = type in displayNames ? displayNames[type] : undefined; + if ( + isModelType && + ['openAiFunctionsAgent', 'toolsAgent', 'conversationalAgent'].includes(agent) + ) { + displayName = 'Chat Model'; + } const input: INodeInputConfiguration = { type, - displayName: type in displayNames ? displayNames[type] : undefined, - required: type === NodeConnectionType.AiLanguageModel, + displayName, + required: isModelType, maxConnections: [NodeConnectionType.AiLanguageModel, NodeConnectionType.AiMemory].includes( type as NodeConnectionType, ) diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMChatAnthropic/LmChatAnthropic.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LMChatAnthropic/LmChatAnthropic.node.ts index af77c4b212..241efadb6d 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LMChatAnthropic/LmChatAnthropic.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LMChatAnthropic/LmChatAnthropic.node.ts @@ -75,6 +75,7 @@ export class LmChatAnthropic implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Chat Models (Recommended)'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMChatOllama/LmChatOllama.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LMChatOllama/LmChatOllama.node.ts index 8ef8d01b01..de6a53bfc4 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LMChatOllama/LmChatOllama.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LMChatOllama/LmChatOllama.node.ts @@ -29,6 +29,7 @@ export class LmChatOllama implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Chat Models (Recommended)'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/LmChatOpenAi.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/LmChatOpenAi.node.ts index eaaf4b6315..264c594d1b 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/LmChatOpenAi.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/LmChatOpenAi.node.ts @@ -27,6 +27,7 @@ export class LmChatOpenAi implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Chat Models (Recommended)'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMCohere/LmCohere.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LMCohere/LmCohere.node.ts index a8eee46952..ee5163a78f 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LMCohere/LmCohere.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LMCohere/LmCohere.node.ts @@ -27,6 +27,7 @@ export class LmCohere implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Text Completion Models'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMOllama/LmOllama.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LMOllama/LmOllama.node.ts index ee416ccbbb..95024ad4b2 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LMOllama/LmOllama.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LMOllama/LmOllama.node.ts @@ -28,6 +28,7 @@ export class LmOllama implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Text Completion Models'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/LmOpenAi.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/LmOpenAi.node.ts index 5ac75827a9..2f0e3480d8 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/LmOpenAi.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/LmOpenAi.node.ts @@ -39,6 +39,7 @@ export class LmOpenAi implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Text Completion Models'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMOpenHuggingFaceInference/LmOpenHuggingFaceInference.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LMOpenHuggingFaceInference/LmOpenHuggingFaceInference.node.ts index f0a248c3fb..9a30ef74d7 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LMOpenHuggingFaceInference/LmOpenHuggingFaceInference.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LMOpenHuggingFaceInference/LmOpenHuggingFaceInference.node.ts @@ -27,6 +27,7 @@ export class LmOpenHuggingFaceInference implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Text Completion Models'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LmChatAwsBedrock/LmChatAwsBedrock.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LmChatAwsBedrock/LmChatAwsBedrock.node.ts index 99eb4196ea..d313ba53b5 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LmChatAwsBedrock/LmChatAwsBedrock.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LmChatAwsBedrock/LmChatAwsBedrock.node.ts @@ -30,6 +30,7 @@ export class LmChatAwsBedrock implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Chat Models (Recommended)'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LmChatAzureOpenAi/LmChatAzureOpenAi.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LmChatAzureOpenAi/LmChatAzureOpenAi.node.ts index 66aedb2963..2e05b4770d 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LmChatAzureOpenAi/LmChatAzureOpenAi.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LmChatAzureOpenAi/LmChatAzureOpenAi.node.ts @@ -28,6 +28,7 @@ export class LmChatAzureOpenAi implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Chat Models (Recommended)'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LmChatGoogleGemini/LmChatGoogleGemini.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LmChatGoogleGemini/LmChatGoogleGemini.node.ts index 168356c61d..d3d3d1ea2c 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LmChatGoogleGemini/LmChatGoogleGemini.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LmChatGoogleGemini/LmChatGoogleGemini.node.ts @@ -28,6 +28,7 @@ export class LmChatGoogleGemini implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Chat Models (Recommended)'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LmChatGooglePalm/LmChatGooglePalm.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LmChatGooglePalm/LmChatGooglePalm.node.ts index 517e28dc68..a32a5e959c 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LmChatGooglePalm/LmChatGooglePalm.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LmChatGooglePalm/LmChatGooglePalm.node.ts @@ -26,6 +26,7 @@ export class LmChatGooglePalm implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Chat Models (Recommended)'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LmChatGoogleVertex/LmChatGoogleVertex.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LmChatGoogleVertex/LmChatGoogleVertex.node.ts index d801ff7f60..1e3837818f 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LmChatGoogleVertex/LmChatGoogleVertex.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LmChatGoogleVertex/LmChatGoogleVertex.node.ts @@ -33,6 +33,7 @@ export class LmChatGoogleVertex implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Chat Models (Recommended)'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LmChatGroq/LmChatGroq.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LmChatGroq/LmChatGroq.node.ts index b38f0ae575..3354ac030f 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LmChatGroq/LmChatGroq.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LmChatGroq/LmChatGroq.node.ts @@ -27,6 +27,7 @@ export class LmChatGroq implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Chat Models (Recommended)'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LmChatMistralCloud/LmChatMistralCloud.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LmChatMistralCloud/LmChatMistralCloud.node.ts index 06cc5bbbc8..32364545d2 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LmChatMistralCloud/LmChatMistralCloud.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LmChatMistralCloud/LmChatMistralCloud.node.ts @@ -28,6 +28,7 @@ export class LmChatMistralCloud implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Chat Models (Recommended)'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LmGooglePalm/LmGooglePalm.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LmGooglePalm/LmGooglePalm.node.ts index 61a5bd4fe9..d79f74be02 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LmGooglePalm/LmGooglePalm.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LmGooglePalm/LmGooglePalm.node.ts @@ -26,6 +26,7 @@ export class LmGooglePalm implements INodeType { categories: ['AI'], subcategories: { AI: ['Language Models'], + 'Language Models': ['Text Completion Models'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/tools/ToolCalculator/ToolCalculator.node.ts b/packages/@n8n/nodes-langchain/nodes/tools/ToolCalculator/ToolCalculator.node.ts index 5af816ba4f..f37a3176a4 100644 --- a/packages/@n8n/nodes-langchain/nodes/tools/ToolCalculator/ToolCalculator.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/tools/ToolCalculator/ToolCalculator.node.ts @@ -25,6 +25,7 @@ export class ToolCalculator implements INodeType { categories: ['AI'], subcategories: { AI: ['Tools'], + Tools: ['Other Tools'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/tools/ToolCode/ToolCode.node.ts b/packages/@n8n/nodes-langchain/nodes/tools/ToolCode/ToolCode.node.ts index 7691839672..492284b190 100644 --- a/packages/@n8n/nodes-langchain/nodes/tools/ToolCode/ToolCode.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/tools/ToolCode/ToolCode.node.ts @@ -17,19 +17,20 @@ import { getConnectionHintNoticeField } from '../../../utils/sharedFields'; export class ToolCode implements INodeType { description: INodeTypeDescription = { - displayName: 'Custom Code Tool', + displayName: 'Code Tool', name: 'toolCode', icon: 'fa:code', group: ['transform'], version: [1, 1.1], description: 'Write a tool in JS or Python', defaults: { - name: 'Custom Code Tool', + name: 'Code Tool', }, codex: { categories: ['AI'], subcategories: { AI: ['Tools'], + Tools: ['Recommended Tools'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/tools/ToolHttpRequest/ToolHttpRequest.node.ts b/packages/@n8n/nodes-langchain/nodes/tools/ToolHttpRequest/ToolHttpRequest.node.ts index 5ad2f6e83e..1d391f313e 100644 --- a/packages/@n8n/nodes-langchain/nodes/tools/ToolHttpRequest/ToolHttpRequest.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/tools/ToolHttpRequest/ToolHttpRequest.node.ts @@ -49,6 +49,7 @@ export class ToolHttpRequest implements INodeType { categories: ['AI'], subcategories: { AI: ['Tools'], + Tools: ['Recommended Tools'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/tools/ToolSerpApi/ToolSerpApi.node.ts b/packages/@n8n/nodes-langchain/nodes/tools/ToolSerpApi/ToolSerpApi.node.ts index 9a47417547..c08553b96e 100644 --- a/packages/@n8n/nodes-langchain/nodes/tools/ToolSerpApi/ToolSerpApi.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/tools/ToolSerpApi/ToolSerpApi.node.ts @@ -25,6 +25,7 @@ export class ToolSerpApi implements INodeType { categories: ['AI'], subcategories: { AI: ['Tools'], + Tools: ['Other Tools'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/tools/ToolVectorStore/ToolVectorStore.node.ts b/packages/@n8n/nodes-langchain/nodes/tools/ToolVectorStore/ToolVectorStore.node.ts index abdab09053..b4ea7c3321 100644 --- a/packages/@n8n/nodes-langchain/nodes/tools/ToolVectorStore/ToolVectorStore.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/tools/ToolVectorStore/ToolVectorStore.node.ts @@ -23,6 +23,7 @@ export class ToolVectorStore implements INodeType { categories: ['AI'], subcategories: { AI: ['Tools'], + Tools: ['Other Tools'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/tools/ToolWikipedia/ToolWikipedia.node.ts b/packages/@n8n/nodes-langchain/nodes/tools/ToolWikipedia/ToolWikipedia.node.ts index a85d18adaa..0b3aeaff74 100644 --- a/packages/@n8n/nodes-langchain/nodes/tools/ToolWikipedia/ToolWikipedia.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/tools/ToolWikipedia/ToolWikipedia.node.ts @@ -25,6 +25,7 @@ export class ToolWikipedia implements INodeType { categories: ['AI'], subcategories: { AI: ['Tools'], + Tools: ['Other Tools'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/tools/ToolWolframAlpha/ToolWolframAlpha.node.ts b/packages/@n8n/nodes-langchain/nodes/tools/ToolWolframAlpha/ToolWolframAlpha.node.ts index 1a77d067c5..3a1f7ea2cc 100644 --- a/packages/@n8n/nodes-langchain/nodes/tools/ToolWolframAlpha/ToolWolframAlpha.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/tools/ToolWolframAlpha/ToolWolframAlpha.node.ts @@ -31,6 +31,7 @@ export class ToolWolframAlpha implements INodeType { categories: ['AI'], subcategories: { AI: ['Tools'], + Tools: ['Other Tools'], }, resources: { primaryDocumentation: [ diff --git a/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/ToolWorkflow.node.ts b/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/ToolWorkflow.node.ts index 3b06c84186..54b8318f5b 100644 --- a/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/ToolWorkflow.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/tools/ToolWorkflow/ToolWorkflow.node.ts @@ -28,19 +28,20 @@ import { } from '../../../utils/descriptions'; export class ToolWorkflow implements INodeType { description: INodeTypeDescription = { - displayName: 'Custom n8n Workflow Tool', + displayName: 'Call n8n Workflow Tool', name: 'toolWorkflow', icon: 'fa:network-wired', group: ['transform'], version: [1, 1.1], description: 'Uses another n8n workflow as a tool. Allows packaging any n8n node(s) as a tool.', defaults: { - name: 'Custom n8n Workflow Tool', + name: 'Call n8n Workflow Tool', }, codex: { categories: ['AI'], subcategories: { AI: ['Tools'], + Tools: ['Recommended Tools'], }, resources: { primaryDocumentation: [ diff --git a/packages/editor-ui/src/components/Node/NodeCreator/Panel/NoResults.vue b/packages/editor-ui/src/components/Node/NodeCreator/Panel/NoResults.vue index 2f149eae56..59a9bc49a4 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/Panel/NoResults.vue +++ b/packages/editor-ui/src/components/Node/NodeCreator/Panel/NoResults.vue @@ -9,7 +9,10 @@

-

+
{{ $locale.baseText('nodeCreator.noResults.dontWorryYouCanProbablyDoItWithThe') }} {{ $locale.baseText('nodeCreator.noResults.httpRequest') }} diff --git a/packages/editor-ui/src/components/Node/NodeCreator/composables/useViewStacks.ts b/packages/editor-ui/src/components/Node/NodeCreator/composables/useViewStacks.ts index cb6f1c3e55..b67869204d 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/composables/useViewStacks.ts +++ b/packages/editor-ui/src/components/Node/NodeCreator/composables/useViewStacks.ts @@ -93,8 +93,9 @@ export const useViewStacks = defineStore('nodeCreatorViewStacks', () => { if ( // Filter-out AI sub-nodes if canvas has no AI nodes and the root view is not AI !(isAiRootView(stack) || canvasHasAINodes) || - // or if the source is a plus endpoint or a node connection drop - ['plus_endpoint', 'node_connection_drop'].includes(nodeCreatorStore.openSource) + // or if the source is a plus endpoint or a node connection drop and the root view is not AI subcategory + (['plus_endpoint', 'node_connection_drop'].includes(nodeCreatorStore.openSource) && + !isAiSubcategoryView(stack)) ) { searchBase = filterOutAiNodes(searchBase); } @@ -135,6 +136,10 @@ export const useViewStacks = defineStore('nodeCreatorViewStacks', () => { return stack.searchItems.map((item) => transformNodeType(item, stack.subcategory)); }); + function isAiSubcategoryView(stack: ViewStack) { + return stack.rootView === AI_OTHERS_NODE_CREATOR_VIEW; + } + function getLastActiveStack() { return viewStacks.value[viewStacks.value.length - 1]; } @@ -142,7 +147,7 @@ export const useViewStacks = defineStore('nodeCreatorViewStacks', () => { // Generate a delta between the global search results(all nodes) and the stack search results const globalSearchItemsDiff = computed(() => { const stack = getLastActiveStack(); - if (!stack?.search) return []; + if (!stack?.search || isAiSubcategoryView(stack)) return []; const allNodes = nodeCreatorStore.mergedNodes.map((item) => transformNodeType(item)); // Apply filtering for AI nodes if the current view is not the AI root view @@ -213,17 +218,25 @@ export const useViewStacks = defineStore('nodeCreatorViewStacks', () => { const section = node.properties.codex?.subcategories?.[AI_SUBCATEGORY]?.[0]; if (section) { - const currentItems = sectionsMap.get(section)?.items ?? []; + const subSection = node.properties.codex?.subcategories?.[section]?.[0]; + const sectionKey = subSection ?? section; + const currentItems = sectionsMap.get(sectionKey)?.items ?? []; const isSubnodesSection = !node.properties.codex?.subcategories?.[AI_SUBCATEGORY].includes( AI_CATEGORY_ROOT_NODES, ); - sectionsMap.set(section, { - key: section, - title: isSubnodesSection - ? `${section} (${i18n.baseText('nodeCreator.subnodes')})` - : section, + let title = section; + if (isSubnodesSection) { + title = `${section} (${i18n.baseText('nodeCreator.subnodes')})`; + } + if (subSection) { + title = subSection; + } + + sectionsMap.set(sectionKey, { + key: sectionKey, + title, items: [...currentItems, node.key], }); } @@ -419,6 +432,7 @@ export const useViewStacks = defineStore('nodeCreatorViewStacks', () => { activeViewStack, activeViewStackMode, globalSearchItemsDiff, + isAiSubcategoryView, gotoCompatibleConnectionView, resetViewStacks, updateCurrentViewStack, diff --git a/packages/editor-ui/src/components/Node/NodeCreator/utils.ts b/packages/editor-ui/src/components/Node/NodeCreator/utils.ts index ac16811929..a76c62a7ca 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/utils.ts +++ b/packages/editor-ui/src/components/Node/NodeCreator/utils.ts @@ -157,6 +157,12 @@ export function groupItemsInSections( }) .filter((section) => section.type !== 'section' || section.children.length > 0); + result.sort((a, b) => { + if (a.key.toLowerCase().includes('recommended')) return -1; + if (b.key.toLowerCase().includes('recommended')) return 1; + + return 0; + }); if (result.length <= 1) { return items; }