@n8n/n8n-nodes-langchain 1.86.0 → 1.87.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/credentials/AnthropicApi.credentials.js +1 -0
- package/dist/credentials/AnthropicApi.credentials.js.map +1 -0
- package/dist/credentials/AzureOpenAiApi.credentials.js +1 -0
- package/dist/credentials/AzureOpenAiApi.credentials.js.map +1 -0
- package/dist/credentials/CohereApi.credentials.js +1 -0
- package/dist/credentials/CohereApi.credentials.js.map +1 -0
- package/dist/credentials/DeepSeekApi.credentials.js +1 -0
- package/dist/credentials/DeepSeekApi.credentials.js.map +1 -0
- package/dist/credentials/GooglePalmApi.credentials.js +1 -0
- package/dist/credentials/GooglePalmApi.credentials.js.map +1 -0
- package/dist/credentials/GroqApi.credentials.js +1 -0
- package/dist/credentials/GroqApi.credentials.js.map +1 -0
- package/dist/credentials/HuggingFaceApi.credentials.js +1 -0
- package/dist/credentials/HuggingFaceApi.credentials.js.map +1 -0
- package/dist/credentials/MistralCloudApi.credentials.js +1 -0
- package/dist/credentials/MistralCloudApi.credentials.js.map +1 -0
- package/dist/credentials/MotorheadApi.credentials.js +1 -0
- package/dist/credentials/MotorheadApi.credentials.js.map +1 -0
- package/dist/credentials/OllamaApi.credentials.js +1 -0
- package/dist/credentials/OllamaApi.credentials.js.map +1 -0
- package/dist/credentials/OpenRouterApi.credentials.js +1 -0
- package/dist/credentials/OpenRouterApi.credentials.js.map +1 -0
- package/dist/credentials/PineconeApi.credentials.js +1 -0
- package/dist/credentials/PineconeApi.credentials.js.map +1 -0
- package/dist/credentials/QdrantApi.credentials.js +1 -0
- package/dist/credentials/QdrantApi.credentials.js.map +1 -0
- package/dist/credentials/SerpApi.credentials.js +1 -0
- package/dist/credentials/SerpApi.credentials.js.map +1 -0
- package/dist/credentials/WolframAlphaApi.credentials.js +1 -0
- package/dist/credentials/WolframAlphaApi.credentials.js.map +1 -0
- package/dist/credentials/XAiApi.credentials.js +1 -0
- package/dist/credentials/XAiApi.credentials.js.map +1 -0
- package/dist/credentials/XataApi.credentials.js +1 -0
- package/dist/credentials/XataApi.credentials.js.map +1 -0
- package/dist/credentials/ZepApi.credentials.js +1 -0
- package/dist/credentials/ZepApi.credentials.js.map +1 -0
- package/dist/known/nodes.json +12 -0
- package/dist/nodes/agents/Agent/Agent.node.js +1 -0
- package/dist/nodes/agents/Agent/Agent.node.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/ConversationalAgent/description.js +1 -0
- package/dist/nodes/agents/Agent/agents/ConversationalAgent/description.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/ConversationalAgent/execute.js +1 -0
- package/dist/nodes/agents/Agent/agents/ConversationalAgent/execute.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/ConversationalAgent/prompt.js +1 -0
- package/dist/nodes/agents/Agent/agents/ConversationalAgent/prompt.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/OpenAiFunctionsAgent/description.js +1 -0
- package/dist/nodes/agents/Agent/agents/OpenAiFunctionsAgent/description.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/OpenAiFunctionsAgent/execute.js +1 -0
- package/dist/nodes/agents/Agent/agents/OpenAiFunctionsAgent/execute.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/OpenAiFunctionsAgent/prompt.js +1 -0
- package/dist/nodes/agents/Agent/agents/OpenAiFunctionsAgent/prompt.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/PlanAndExecuteAgent/description.js +1 -0
- package/dist/nodes/agents/Agent/agents/PlanAndExecuteAgent/description.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/PlanAndExecuteAgent/execute.js +1 -0
- package/dist/nodes/agents/Agent/agents/PlanAndExecuteAgent/execute.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/PlanAndExecuteAgent/prompt.js +1 -0
- package/dist/nodes/agents/Agent/agents/PlanAndExecuteAgent/prompt.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/ReActAgent/description.js +1 -0
- package/dist/nodes/agents/Agent/agents/ReActAgent/description.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/ReActAgent/execute.js +1 -0
- package/dist/nodes/agents/Agent/agents/ReActAgent/execute.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/ReActAgent/prompt.js +1 -0
- package/dist/nodes/agents/Agent/agents/ReActAgent/prompt.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/SqlAgent/description.js +1 -0
- package/dist/nodes/agents/Agent/agents/SqlAgent/description.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/SqlAgent/execute.js +1 -0
- package/dist/nodes/agents/Agent/agents/SqlAgent/execute.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/SqlAgent/other/handlers/mysql.js +1 -0
- package/dist/nodes/agents/Agent/agents/SqlAgent/other/handlers/mysql.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/SqlAgent/other/handlers/postgres.js +1 -0
- package/dist/nodes/agents/Agent/agents/SqlAgent/other/handlers/postgres.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/SqlAgent/other/handlers/sqlite.js +1 -0
- package/dist/nodes/agents/Agent/agents/SqlAgent/other/handlers/sqlite.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/SqlAgent/other/prompts.js +1 -0
- package/dist/nodes/agents/Agent/agents/SqlAgent/other/prompts.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/ToolsAgent/description.js +1 -0
- package/dist/nodes/agents/Agent/agents/ToolsAgent/description.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/ToolsAgent/execute.js +1 -0
- package/dist/nodes/agents/Agent/agents/ToolsAgent/execute.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/ToolsAgent/prompt.js +1 -0
- package/dist/nodes/agents/Agent/agents/ToolsAgent/prompt.js.map +1 -0
- package/dist/nodes/agents/Agent/agents/utils.js +1 -0
- package/dist/nodes/agents/Agent/agents/utils.js.map +1 -0
- package/dist/nodes/agents/OpenAiAssistant/OpenAiAssistant.node.js +1 -0
- package/dist/nodes/agents/OpenAiAssistant/OpenAiAssistant.node.js.map +1 -0
- package/dist/nodes/agents/OpenAiAssistant/utils.js +1 -0
- package/dist/nodes/agents/OpenAiAssistant/utils.js.map +1 -0
- package/dist/nodes/chains/ChainLLM/ChainLlm.node.js +1 -0
- package/dist/nodes/chains/ChainLLM/ChainLlm.node.js.map +1 -0
- package/dist/nodes/chains/ChainLLM/methods/chainExecutor.js +1 -0
- package/dist/nodes/chains/ChainLLM/methods/chainExecutor.js.map +1 -0
- package/dist/nodes/chains/ChainLLM/methods/config.js +1 -0
- package/dist/nodes/chains/ChainLLM/methods/config.js.map +1 -0
- package/dist/nodes/chains/ChainLLM/methods/imageUtils.js +1 -0
- package/dist/nodes/chains/ChainLLM/methods/imageUtils.js.map +1 -0
- package/dist/nodes/chains/ChainLLM/methods/index.js +1 -0
- package/dist/nodes/chains/ChainLLM/methods/index.js.map +1 -0
- package/dist/nodes/chains/ChainLLM/methods/promptUtils.js +1 -0
- package/dist/nodes/chains/ChainLLM/methods/promptUtils.js.map +1 -0
- package/dist/nodes/chains/ChainLLM/methods/responseFormatter.js +1 -0
- package/dist/nodes/chains/ChainLLM/methods/responseFormatter.js.map +1 -0
- package/dist/nodes/chains/ChainLLM/methods/types.js +1 -0
- package/dist/nodes/chains/ChainLLM/methods/types.js.map +1 -0
- package/dist/nodes/chains/ChainRetrievalQA/ChainRetrievalQa.node.js +1 -0
- package/dist/nodes/chains/ChainRetrievalQA/ChainRetrievalQa.node.js.map +1 -0
- package/dist/nodes/chains/ChainSummarization/ChainSummarization.node.js +1 -0
- package/dist/nodes/chains/ChainSummarization/ChainSummarization.node.js.map +1 -0
- package/dist/nodes/chains/ChainSummarization/V1/ChainSummarizationV1.node.js +1 -0
- package/dist/nodes/chains/ChainSummarization/V1/ChainSummarizationV1.node.js.map +1 -0
- package/dist/nodes/chains/ChainSummarization/V2/ChainSummarizationV2.node.js +1 -0
- package/dist/nodes/chains/ChainSummarization/V2/ChainSummarizationV2.node.js.map +1 -0
- package/dist/nodes/chains/ChainSummarization/helpers.js +1 -0
- package/dist/nodes/chains/ChainSummarization/helpers.js.map +1 -0
- package/dist/nodes/chains/ChainSummarization/prompt.js +1 -0
- package/dist/nodes/chains/ChainSummarization/prompt.js.map +1 -0
- package/dist/nodes/chains/InformationExtractor/InformationExtractor.node.js +1 -0
- package/dist/nodes/chains/InformationExtractor/InformationExtractor.node.js.map +1 -0
- package/dist/nodes/chains/InformationExtractor/helpers.js +1 -0
- package/dist/nodes/chains/InformationExtractor/helpers.js.map +1 -0
- package/dist/nodes/chains/InformationExtractor/types.js +1 -0
- package/dist/nodes/chains/InformationExtractor/types.js.map +1 -0
- package/dist/nodes/chains/SentimentAnalysis/SentimentAnalysis.node.js +1 -0
- package/dist/nodes/chains/SentimentAnalysis/SentimentAnalysis.node.js.map +1 -0
- package/dist/nodes/chains/TextClassifier/TextClassifier.node.js +1 -0
- package/dist/nodes/chains/TextClassifier/TextClassifier.node.js.map +1 -0
- package/dist/nodes/code/Code.node.js +1 -0
- package/dist/nodes/code/Code.node.js.map +1 -0
- package/dist/nodes/document_loaders/DocumentBinaryInputLoader/DocumentBinaryInputLoader.node.js +1 -0
- package/dist/nodes/document_loaders/DocumentBinaryInputLoader/DocumentBinaryInputLoader.node.js.map +1 -0
- package/dist/nodes/document_loaders/DocumentDefaultDataLoader/DocumentDefaultDataLoader.node.js +1 -0
- package/dist/nodes/document_loaders/DocumentDefaultDataLoader/DocumentDefaultDataLoader.node.js.map +1 -0
- package/dist/nodes/document_loaders/DocumentGithubLoader/DocumentGithubLoader.node.js +1 -0
- package/dist/nodes/document_loaders/DocumentGithubLoader/DocumentGithubLoader.node.js.map +1 -0
- package/dist/nodes/document_loaders/DocumentJSONInputLoader/DocumentJsonInputLoader.node.js +1 -0
- package/dist/nodes/document_loaders/DocumentJSONInputLoader/DocumentJsonInputLoader.node.js.map +1 -0
- package/dist/nodes/embeddings/EmbeddingsAwsBedrock/EmbeddingsAwsBedrock.node.js +1 -0
- package/dist/nodes/embeddings/EmbeddingsAwsBedrock/EmbeddingsAwsBedrock.node.js.map +1 -0
- package/dist/nodes/embeddings/EmbeddingsAzureOpenAi/EmbeddingsAzureOpenAi.node.js +1 -0
- package/dist/nodes/embeddings/EmbeddingsAzureOpenAi/EmbeddingsAzureOpenAi.node.js.map +1 -0
- package/dist/nodes/embeddings/EmbeddingsCohere/EmbeddingsCohere.node.js +1 -0
- package/dist/nodes/embeddings/EmbeddingsCohere/EmbeddingsCohere.node.js.map +1 -0
- package/dist/nodes/embeddings/EmbeddingsGoogleGemini/EmbeddingsGoogleGemini.node.js +1 -0
- package/dist/nodes/embeddings/EmbeddingsGoogleGemini/EmbeddingsGoogleGemini.node.js.map +1 -0
- package/dist/nodes/embeddings/EmbeddingsGoogleVertex/EmbeddingsGoogleVertex.node.js +166 -0
- package/dist/nodes/embeddings/EmbeddingsGoogleVertex/EmbeddingsGoogleVertex.node.js.map +1 -0
- package/dist/nodes/embeddings/EmbeddingsGoogleVertex/google.svg +1 -0
- package/dist/nodes/embeddings/EmbeddingsHuggingFaceInference/EmbeddingsHuggingFaceInference.node.js +1 -0
- package/dist/nodes/embeddings/EmbeddingsHuggingFaceInference/EmbeddingsHuggingFaceInference.node.js.map +1 -0
- package/dist/nodes/embeddings/EmbeddingsMistralCloud/EmbeddingsMistralCloud.node.js +1 -0
- package/dist/nodes/embeddings/EmbeddingsMistralCloud/EmbeddingsMistralCloud.node.js.map +1 -0
- package/dist/nodes/embeddings/EmbeddingsOllama/EmbeddingsOllama.node.js +1 -0
- package/dist/nodes/embeddings/EmbeddingsOllama/EmbeddingsOllama.node.js.map +1 -0
- package/dist/nodes/embeddings/EmbeddingsOpenAI/EmbeddingsOpenAi.node.js +1 -0
- package/dist/nodes/embeddings/EmbeddingsOpenAI/EmbeddingsOpenAi.node.js.map +1 -0
- package/dist/nodes/llms/LMChatAnthropic/LmChatAnthropic.node.js +1 -0
- package/dist/nodes/llms/LMChatAnthropic/LmChatAnthropic.node.js.map +1 -0
- package/dist/nodes/llms/LMChatAnthropic/methods/searchModels.js +1 -0
- package/dist/nodes/llms/LMChatAnthropic/methods/searchModels.js.map +1 -0
- package/dist/nodes/llms/LMChatOllama/LmChatOllama.node.js +1 -0
- package/dist/nodes/llms/LMChatOllama/LmChatOllama.node.js.map +1 -0
- package/dist/nodes/llms/LMChatOpenAi/LmChatOpenAi.node.js +1 -0
- package/dist/nodes/llms/LMChatOpenAi/LmChatOpenAi.node.js.map +1 -0
- package/dist/nodes/llms/LMChatOpenAi/methods/loadModels.js +1 -0
- package/dist/nodes/llms/LMChatOpenAi/methods/loadModels.js.map +1 -0
- package/dist/nodes/llms/LMCohere/LmCohere.node.js +1 -0
- package/dist/nodes/llms/LMCohere/LmCohere.node.js.map +1 -0
- package/dist/nodes/llms/LMOllama/LmOllama.node.js +1 -0
- package/dist/nodes/llms/LMOllama/LmOllama.node.js.map +1 -0
- package/dist/nodes/llms/LMOllama/description.js +1 -0
- package/dist/nodes/llms/LMOllama/description.js.map +1 -0
- package/dist/nodes/llms/LMOpenAi/LmOpenAi.node.js +1 -0
- package/dist/nodes/llms/LMOpenAi/LmOpenAi.node.js.map +1 -0
- package/dist/nodes/llms/LMOpenHuggingFaceInference/LmOpenHuggingFaceInference.node.js +1 -0
- package/dist/nodes/llms/LMOpenHuggingFaceInference/LmOpenHuggingFaceInference.node.js.map +1 -0
- package/dist/nodes/llms/LmChatAwsBedrock/LmChatAwsBedrock.node.js +1 -0
- package/dist/nodes/llms/LmChatAwsBedrock/LmChatAwsBedrock.node.js.map +1 -0
- package/dist/nodes/llms/LmChatAzureOpenAi/LmChatAzureOpenAi.node.js +1 -0
- package/dist/nodes/llms/LmChatAzureOpenAi/LmChatAzureOpenAi.node.js.map +1 -0
- package/dist/nodes/llms/LmChatDeepSeek/LmChatDeepSeek.node.js +1 -0
- package/dist/nodes/llms/LmChatDeepSeek/LmChatDeepSeek.node.js.map +1 -0
- package/dist/nodes/llms/LmChatGoogleGemini/LmChatGoogleGemini.node.js +1 -0
- package/dist/nodes/llms/LmChatGoogleGemini/LmChatGoogleGemini.node.js.map +1 -0
- package/dist/nodes/llms/LmChatGoogleVertex/LmChatGoogleVertex.node.js +1 -0
- package/dist/nodes/llms/LmChatGoogleVertex/LmChatGoogleVertex.node.js.map +1 -0
- package/dist/nodes/llms/LmChatGoogleVertex/error-handling.js +1 -0
- package/dist/nodes/llms/LmChatGoogleVertex/error-handling.js.map +1 -0
- package/dist/nodes/llms/LmChatGroq/LmChatGroq.node.js +1 -0
- package/dist/nodes/llms/LmChatGroq/LmChatGroq.node.js.map +1 -0
- package/dist/nodes/llms/LmChatMistralCloud/LmChatMistralCloud.node.js +1 -0
- package/dist/nodes/llms/LmChatMistralCloud/LmChatMistralCloud.node.js.map +1 -0
- package/dist/nodes/llms/LmChatOpenRouter/LmChatOpenRouter.node.js +1 -0
- package/dist/nodes/llms/LmChatOpenRouter/LmChatOpenRouter.node.js.map +1 -0
- package/dist/nodes/llms/LmChatXAiGrok/LmChatXAiGrok.node.js +1 -0
- package/dist/nodes/llms/LmChatXAiGrok/LmChatXAiGrok.node.js.map +1 -0
- package/dist/nodes/llms/N8nLlmTracing.js +1 -0
- package/dist/nodes/llms/N8nLlmTracing.js.map +1 -0
- package/dist/nodes/llms/gemini-common/additional-options.js +1 -0
- package/dist/nodes/llms/gemini-common/additional-options.js.map +1 -0
- package/dist/nodes/llms/gemini-common/safety-options.js +1 -0
- package/dist/nodes/llms/gemini-common/safety-options.js.map +1 -0
- package/dist/nodes/llms/n8nDefaultFailedAttemptHandler.js +1 -0
- package/dist/nodes/llms/n8nDefaultFailedAttemptHandler.js.map +1 -0
- package/dist/nodes/llms/n8nLlmFailedAttemptHandler.js +1 -0
- package/dist/nodes/llms/n8nLlmFailedAttemptHandler.js.map +1 -0
- package/dist/nodes/memory/MemoryBufferWindow/MemoryBufferWindow.node.js +1 -0
- package/dist/nodes/memory/MemoryBufferWindow/MemoryBufferWindow.node.js.map +1 -0
- package/dist/nodes/memory/MemoryChatRetriever/MemoryChatRetriever.node.js +1 -0
- package/dist/nodes/memory/MemoryChatRetriever/MemoryChatRetriever.node.js.map +1 -0
- package/dist/nodes/memory/MemoryManager/MemoryManager.node.js +1 -0
- package/dist/nodes/memory/MemoryManager/MemoryManager.node.js.map +1 -0
- package/dist/nodes/memory/MemoryMongoDbChat/MemoryMongoDbChat.node.js +155 -0
- package/dist/nodes/memory/MemoryMongoDbChat/MemoryMongoDbChat.node.js.map +1 -0
- package/dist/nodes/memory/MemoryMongoDbChat/mongodb.dark.svg +3 -0
- package/dist/nodes/memory/MemoryMongoDbChat/mongodb.svg +3 -0
- package/dist/nodes/memory/MemoryMotorhead/MemoryMotorhead.node.js +1 -0
- package/dist/nodes/memory/MemoryMotorhead/MemoryMotorhead.node.js.map +1 -0
- package/dist/nodes/memory/MemoryPostgresChat/MemoryPostgresChat.node.js +1 -0
- package/dist/nodes/memory/MemoryPostgresChat/MemoryPostgresChat.node.js.map +1 -0
- package/dist/nodes/memory/MemoryRedisChat/MemoryRedisChat.node.js +1 -0
- package/dist/nodes/memory/MemoryRedisChat/MemoryRedisChat.node.js.map +1 -0
- package/dist/nodes/memory/MemoryXata/MemoryXata.node.js +1 -0
- package/dist/nodes/memory/MemoryXata/MemoryXata.node.js.map +1 -0
- package/dist/nodes/memory/MemoryZep/MemoryZep.node.js +1 -0
- package/dist/nodes/memory/MemoryZep/MemoryZep.node.js.map +1 -0
- package/dist/nodes/memory/descriptions.js +1 -0
- package/dist/nodes/memory/descriptions.js.map +1 -0
- package/dist/nodes/output_parser/OutputParserAutofixing/OutputParserAutofixing.node.js +1 -0
- package/dist/nodes/output_parser/OutputParserAutofixing/OutputParserAutofixing.node.js.map +1 -0
- package/dist/nodes/output_parser/OutputParserAutofixing/prompt.js +1 -0
- package/dist/nodes/output_parser/OutputParserAutofixing/prompt.js.map +1 -0
- package/dist/nodes/output_parser/OutputParserItemList/OutputParserItemList.node.js +1 -0
- package/dist/nodes/output_parser/OutputParserItemList/OutputParserItemList.node.js.map +1 -0
- package/dist/nodes/output_parser/OutputParserStructured/OutputParserStructured.node.js +1 -0
- package/dist/nodes/output_parser/OutputParserStructured/OutputParserStructured.node.js.map +1 -0
- package/dist/nodes/retrievers/RetrieverContextualCompression/RetrieverContextualCompression.node.js +1 -0
- package/dist/nodes/retrievers/RetrieverContextualCompression/RetrieverContextualCompression.node.js.map +1 -0
- package/dist/nodes/retrievers/RetrieverMultiQuery/RetrieverMultiQuery.node.js +1 -0
- package/dist/nodes/retrievers/RetrieverMultiQuery/RetrieverMultiQuery.node.js.map +1 -0
- package/dist/nodes/retrievers/RetrieverVectorStore/RetrieverVectorStore.node.js +1 -0
- package/dist/nodes/retrievers/RetrieverVectorStore/RetrieverVectorStore.node.js.map +1 -0
- package/dist/nodes/retrievers/RetrieverWorkflow/RetrieverWorkflow.node.js +1 -0
- package/dist/nodes/retrievers/RetrieverWorkflow/RetrieverWorkflow.node.js.map +1 -0
- package/dist/nodes/text_splitters/TextSplitterCharacterTextSplitter/TextSplitterCharacterTextSplitter.node.js +1 -0
- package/dist/nodes/text_splitters/TextSplitterCharacterTextSplitter/TextSplitterCharacterTextSplitter.node.js.map +1 -0
- package/dist/nodes/text_splitters/TextSplitterRecursiveCharacterTextSplitter/TextSplitterRecursiveCharacterTextSplitter.node.js +1 -0
- package/dist/nodes/text_splitters/TextSplitterRecursiveCharacterTextSplitter/TextSplitterRecursiveCharacterTextSplitter.node.js.map +1 -0
- package/dist/nodes/text_splitters/TextSplitterTokenSplitter/TextSplitterTokenSplitter.node.js +1 -0
- package/dist/nodes/text_splitters/TextSplitterTokenSplitter/TextSplitterTokenSplitter.node.js.map +1 -0
- package/dist/nodes/tools/ToolCalculator/ToolCalculator.node.js +1 -0
- package/dist/nodes/tools/ToolCalculator/ToolCalculator.node.js.map +1 -0
- package/dist/nodes/tools/ToolCode/ToolCode.node.js +1 -0
- package/dist/nodes/tools/ToolCode/ToolCode.node.js.map +1 -0
- package/dist/nodes/tools/ToolHttpRequest/ToolHttpRequest.node.js +1 -0
- package/dist/nodes/tools/ToolHttpRequest/ToolHttpRequest.node.js.map +1 -0
- package/dist/nodes/tools/ToolHttpRequest/descriptions.js +1 -0
- package/dist/nodes/tools/ToolHttpRequest/descriptions.js.map +1 -0
- package/dist/nodes/tools/ToolHttpRequest/interfaces.js +1 -0
- package/dist/nodes/tools/ToolHttpRequest/interfaces.js.map +1 -0
- package/dist/nodes/tools/ToolHttpRequest/utils.js +3 -2
- package/dist/nodes/tools/ToolHttpRequest/utils.js.map +1 -0
- package/dist/nodes/tools/ToolSerpApi/ToolSerpApi.node.js +1 -0
- package/dist/nodes/tools/ToolSerpApi/ToolSerpApi.node.js.map +1 -0
- package/dist/nodes/tools/ToolThink/ToolThink.node.js +94 -0
- package/dist/nodes/tools/ToolThink/ToolThink.node.js.map +1 -0
- package/dist/nodes/tools/ToolVectorStore/ToolVectorStore.node.js +1 -0
- package/dist/nodes/tools/ToolVectorStore/ToolVectorStore.node.js.map +1 -0
- package/dist/nodes/tools/ToolWikipedia/ToolWikipedia.node.js +1 -0
- package/dist/nodes/tools/ToolWikipedia/ToolWikipedia.node.js.map +1 -0
- package/dist/nodes/tools/ToolWolframAlpha/ToolWolframAlpha.node.js +1 -0
- package/dist/nodes/tools/ToolWolframAlpha/ToolWolframAlpha.node.js.map +1 -0
- package/dist/nodes/tools/ToolWorkflow/ToolWorkflow.node.js +1 -0
- package/dist/nodes/tools/ToolWorkflow/ToolWorkflow.node.js.map +1 -0
- package/dist/nodes/tools/ToolWorkflow/v1/ToolWorkflowV1.node.js +1 -0
- package/dist/nodes/tools/ToolWorkflow/v1/ToolWorkflowV1.node.js.map +1 -0
- package/dist/nodes/tools/ToolWorkflow/v1/versionDescription.js +1 -0
- package/dist/nodes/tools/ToolWorkflow/v1/versionDescription.js.map +1 -0
- package/dist/nodes/tools/ToolWorkflow/v2/ToolWorkflowV2.node.js +1 -0
- package/dist/nodes/tools/ToolWorkflow/v2/ToolWorkflowV2.node.js.map +1 -0
- package/dist/nodes/tools/ToolWorkflow/v2/methods/index.js +1 -0
- package/dist/nodes/tools/ToolWorkflow/v2/methods/index.js.map +1 -0
- package/dist/nodes/tools/ToolWorkflow/v2/methods/localResourceMapping.js +1 -0
- package/dist/nodes/tools/ToolWorkflow/v2/methods/localResourceMapping.js.map +1 -0
- package/dist/nodes/tools/ToolWorkflow/v2/utils/WorkflowToolService.js +1 -0
- package/dist/nodes/tools/ToolWorkflow/v2/utils/WorkflowToolService.js.map +1 -0
- package/dist/nodes/tools/ToolWorkflow/v2/versionDescription.js +1 -0
- package/dist/nodes/tools/ToolWorkflow/v2/versionDescription.js.map +1 -0
- package/dist/nodes/trigger/ChatTrigger/ChatTrigger.node.js +1 -0
- package/dist/nodes/trigger/ChatTrigger/ChatTrigger.node.js.map +1 -0
- package/dist/nodes/trigger/ChatTrigger/GenericFunctions.js +1 -0
- package/dist/nodes/trigger/ChatTrigger/GenericFunctions.js.map +1 -0
- package/dist/nodes/trigger/ChatTrigger/constants.js +1 -0
- package/dist/nodes/trigger/ChatTrigger/constants.js.map +1 -0
- package/dist/nodes/trigger/ChatTrigger/error.js +1 -0
- package/dist/nodes/trigger/ChatTrigger/error.js.map +1 -0
- package/dist/nodes/trigger/ChatTrigger/templates.js +1 -0
- package/dist/nodes/trigger/ChatTrigger/templates.js.map +1 -0
- package/dist/nodes/trigger/ChatTrigger/types.js +1 -0
- package/dist/nodes/trigger/ChatTrigger/types.js.map +1 -0
- package/dist/nodes/trigger/ManualChatTrigger/ManualChatTrigger.node.js +1 -0
- package/dist/nodes/trigger/ManualChatTrigger/ManualChatTrigger.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStoreInMemory/VectorStoreInMemory.node.js +1 -0
- package/dist/nodes/vector_store/VectorStoreInMemory/VectorStoreInMemory.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStoreInMemoryInsert/VectorStoreInMemoryInsert.node.js +1 -0
- package/dist/nodes/vector_store/VectorStoreInMemoryInsert/VectorStoreInMemoryInsert.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStoreInMemoryLoad/VectorStoreInMemoryLoad.node.js +1 -0
- package/dist/nodes/vector_store/VectorStoreInMemoryLoad/VectorStoreInMemoryLoad.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStoreMongoDBAtlas/VectorStoreMongoDBAtlas.node.js +1 -0
- package/dist/nodes/vector_store/VectorStoreMongoDBAtlas/VectorStoreMongoDBAtlas.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStorePGVector/VectorStorePGVector.node.js +1 -0
- package/dist/nodes/vector_store/VectorStorePGVector/VectorStorePGVector.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStorePinecone/VectorStorePinecone.node.js +1 -0
- package/dist/nodes/vector_store/VectorStorePinecone/VectorStorePinecone.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStorePineconeInsert/VectorStorePineconeInsert.node.js +1 -0
- package/dist/nodes/vector_store/VectorStorePineconeInsert/VectorStorePineconeInsert.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStorePineconeLoad/VectorStorePineconeLoad.node.js +1 -0
- package/dist/nodes/vector_store/VectorStorePineconeLoad/VectorStorePineconeLoad.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStoreQdrant/VectorStoreQdrant.node.js +1 -0
- package/dist/nodes/vector_store/VectorStoreQdrant/VectorStoreQdrant.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStoreSupabase/VectorStoreSupabase.node.js +1 -0
- package/dist/nodes/vector_store/VectorStoreSupabase/VectorStoreSupabase.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStoreSupabaseInsert/VectorStoreSupabaseInsert.node.js +1 -0
- package/dist/nodes/vector_store/VectorStoreSupabaseInsert/VectorStoreSupabaseInsert.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStoreSupabaseLoad/VectorStoreSupabaseLoad.node.js +1 -0
- package/dist/nodes/vector_store/VectorStoreSupabaseLoad/VectorStoreSupabaseLoad.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStoreZep/VectorStoreZep.node.js +1 -0
- package/dist/nodes/vector_store/VectorStoreZep/VectorStoreZep.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStoreZepInsert/VectorStoreZepInsert.node.js +1 -0
- package/dist/nodes/vector_store/VectorStoreZepInsert/VectorStoreZepInsert.node.js.map +1 -0
- package/dist/nodes/vector_store/VectorStoreZepLoad/VectorStoreZepLoad.node.js +1 -0
- package/dist/nodes/vector_store/VectorStoreZepLoad/VectorStoreZepLoad.node.js.map +1 -0
- package/dist/nodes/vector_store/shared/MemoryManager/MemoryCalculator.js +1 -0
- package/dist/nodes/vector_store/shared/MemoryManager/MemoryCalculator.js.map +1 -0
- package/dist/nodes/vector_store/shared/MemoryManager/MemoryVectorStoreManager.js +1 -0
- package/dist/nodes/vector_store/shared/MemoryManager/MemoryVectorStoreManager.js.map +1 -0
- package/dist/nodes/vector_store/shared/MemoryManager/StoreCleanupService.js +1 -0
- package/dist/nodes/vector_store/shared/MemoryManager/StoreCleanupService.js.map +1 -0
- package/dist/nodes/vector_store/shared/MemoryManager/config.js +1 -0
- package/dist/nodes/vector_store/shared/MemoryManager/config.js.map +1 -0
- package/dist/nodes/vector_store/shared/MemoryManager/types.js +1 -0
- package/dist/nodes/vector_store/shared/MemoryManager/types.js.map +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/constants.js +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/constants.js.map +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/createVectorStoreNode.js +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/createVectorStoreNode.js.map +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/methods/listSearch.js +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/methods/listSearch.js.map +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/operations/index.js +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/operations/index.js.map +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/operations/insertOperation.js +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/operations/insertOperation.js.map +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/operations/loadOperation.js +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/operations/loadOperation.js.map +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/operations/retrieveAsToolOperation.js +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/operations/retrieveAsToolOperation.js.map +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/operations/retrieveOperation.js +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/operations/retrieveOperation.js.map +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/operations/updateOperation.js +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/operations/updateOperation.js.map +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/types.js +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/types.js.map +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/utils.js +1 -0
- package/dist/nodes/vector_store/shared/createVectorStoreNode/utils.js.map +1 -0
- package/dist/nodes/vector_store/shared/descriptions.js +1 -0
- package/dist/nodes/vector_store/shared/descriptions.js.map +1 -0
- package/dist/nodes/vector_store/shared/processDocuments.js +1 -0
- package/dist/nodes/vector_store/shared/processDocuments.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/OpenAi.node.js +1 -0
- package/dist/nodes/vendors/OpenAi/OpenAi.node.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/assistant/create.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/assistant/create.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/assistant/deleteAssistant.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/assistant/deleteAssistant.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/assistant/index.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/assistant/index.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/assistant/list.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/assistant/list.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/assistant/message.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/assistant/message.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/assistant/update.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/assistant/update.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/audio/generate.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/audio/generate.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/audio/index.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/audio/index.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/audio/transcribe.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/audio/transcribe.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/audio/translate.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/audio/translate.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/descriptions.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/descriptions.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/file/deleteFile.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/file/deleteFile.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/file/index.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/file/index.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/file/list.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/file/list.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/file/upload.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/file/upload.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/image/analyze.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/image/analyze.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/image/generate.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/image/generate.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/image/index.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/image/index.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/node.type.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/node.type.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/router.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/router.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/text/classify.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/text/classify.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/text/index.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/text/index.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/text/message.operation.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/text/message.operation.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/actions/versionDescription.js +1 -0
- package/dist/nodes/vendors/OpenAi/actions/versionDescription.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/helpers/constants.js +1 -0
- package/dist/nodes/vendors/OpenAi/helpers/constants.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/helpers/error-handling.js +1 -0
- package/dist/nodes/vendors/OpenAi/helpers/error-handling.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/helpers/interfaces.js +1 -0
- package/dist/nodes/vendors/OpenAi/helpers/interfaces.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/helpers/utils.js +1 -0
- package/dist/nodes/vendors/OpenAi/helpers/utils.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/methods/index.js +1 -0
- package/dist/nodes/vendors/OpenAi/methods/index.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/methods/listSearch.js +1 -0
- package/dist/nodes/vendors/OpenAi/methods/listSearch.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/methods/loadOptions.js +1 -0
- package/dist/nodes/vendors/OpenAi/methods/loadOptions.js.map +1 -0
- package/dist/nodes/vendors/OpenAi/transport/index.js +1 -0
- package/dist/nodes/vendors/OpenAi/transport/index.js.map +1 -0
- package/dist/types/nodes.json +3 -0
- package/dist/types/types.js +1 -0
- package/dist/types/types.js.map +1 -0
- package/dist/types/zod.types.js +1 -0
- package/dist/types/zod.types.js.map +1 -0
- package/dist/utils/N8nBinaryLoader.js +1 -0
- package/dist/utils/N8nBinaryLoader.js.map +1 -0
- package/dist/utils/N8nJsonLoader.js +1 -0
- package/dist/utils/N8nJsonLoader.js.map +1 -0
- package/dist/utils/N8nTool.js +1 -0
- package/dist/utils/N8nTool.js.map +1 -0
- package/dist/utils/descriptions.js +1 -0
- package/dist/utils/descriptions.js.map +1 -0
- package/dist/utils/helpers.js +1 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/logWrapper.js +1 -0
- package/dist/utils/logWrapper.js.map +1 -0
- package/dist/utils/output_parsers/N8nItemListOutputParser.js +1 -0
- package/dist/utils/output_parsers/N8nItemListOutputParser.js.map +1 -0
- package/dist/utils/output_parsers/N8nOutputFixingParser.js +1 -0
- package/dist/utils/output_parsers/N8nOutputFixingParser.js.map +1 -0
- package/dist/utils/output_parsers/N8nOutputParser.js +1 -0
- package/dist/utils/output_parsers/N8nOutputParser.js.map +1 -0
- package/dist/utils/output_parsers/N8nStructuredOutputParser.js +1 -0
- package/dist/utils/output_parsers/N8nStructuredOutputParser.js.map +1 -0
- package/dist/utils/output_parsers/prompt.js +1 -0
- package/dist/utils/output_parsers/prompt.js.map +1 -0
- package/dist/utils/schemaParsing.js +1 -0
- package/dist/utils/schemaParsing.js.map +1 -0
- package/dist/utils/sharedFields.js +1 -0
- package/dist/utils/sharedFields.js.map +1 -0
- package/dist/utils/tracing.js +1 -0
- package/dist/utils/tracing.js.map +1 -0
- package/package.json +8 -5
package/dist/types/nodes.json
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
{"displayName":"Embeddings AWS Bedrock","name":"embeddingsAwsBedrock","credentials":[{"name":"aws","required":true}],"group":["transform"],"version":1,"description":"Use Embeddings AWS Bedrock","defaults":{"name":"Embeddings AWS Bedrock"},"codex":{"categories":["AI"],"subcategories":{"AI":["Embeddings"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsawsbedrock/"}]}},"inputs":[],"outputs":["ai_embedding"],"outputNames":["Embeddings"],"requestDefaults":{"ignoreHttpStatusErrors":true,"baseURL":"=https://bedrock.{{$credentials?.region ?? \"eu-central-1\"}}.amazonaws.com"},"properties":[{"displayName":"This node must be connected to a vector store. <a data-action='openSelectiveNodeCreator' data-action-parameter-connectiontype='ai_vectorStore'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Model","name":"model","type":"options","description":"The model which will generate the completion. <a href=\"https://docs.aws.amazon.com/bedrock/latest/userguide/foundation-models.html\">Learn more</a>.","typeOptions":{"loadOptions":{"routing":{"request":{"method":"GET","url":"/foundation-models?byInferenceType=ON_DEMAND&byOutputModality=EMBEDDING"},"output":{"postReceive":[{"type":"rootProperty","properties":{"property":"modelSummaries"}},{"type":"setKeyValue","properties":{"name":"={{$responseItem.modelName}}","description":"={{$responseItem.modelArn}}","value":"={{$responseItem.modelId}}"}},{"type":"sort","properties":{"key":"name"}}]}}}},"routing":{"send":{"type":"body","property":"model"}},"default":""}],"iconUrl":"icons/@n8n/n8n-nodes-langchain/dist/nodes/embeddings/EmbeddingsAwsBedrock/bedrock.svg"},
|
|
19
19
|
{"displayName":"Embeddings Azure OpenAI","name":"embeddingsAzureOpenAi","credentials":[{"name":"azureOpenAiApi","required":true}],"group":["transform"],"version":1,"description":"Use Embeddings Azure OpenAI","defaults":{"name":"Embeddings Azure OpenAI"},"codex":{"categories":["AI"],"subcategories":{"AI":["Embeddings"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsazureopenai/"}]}},"inputs":[],"outputs":["ai_embedding"],"outputNames":["Embeddings"],"properties":[{"displayName":"This node must be connected to a vector store. <a data-action='openSelectiveNodeCreator' data-action-parameter-connectiontype='ai_vectorStore'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Model (Deployment) Name","name":"model","type":"string","description":"The name of the model(deployment) to use","default":""},{"displayName":"Options","name":"options","placeholder":"Add Option","description":"Additional options to add","type":"collection","default":{},"options":[{"displayName":"Batch Size","name":"batchSize","default":512,"typeOptions":{"maxValue":2048},"description":"Maximum number of documents to send in each request","type":"number"},{"displayName":"Strip New Lines","name":"stripNewLines","default":true,"description":"Whether to strip new lines from the input text","type":"boolean"},{"displayName":"Timeout","name":"timeout","default":-1,"description":"Maximum amount of time a request is allowed to take in seconds. Set to -1 for no timeout.","type":"number"},{"displayName":"Dimensions","name":"dimensions","description":"The number of dimensions the resulting output embeddings should have. Only supported in text-embedding-3 and later models.","type":"options","options":[{"name":"256","value":256},{"name":"512","value":512},{"name":"1024","value":1024},{"name":"1536","value":1536},{"name":"3072","value":3072}]}]}],"iconUrl":"icons/@n8n/n8n-nodes-langchain/dist/nodes/embeddings/EmbeddingsAzureOpenAi/azure.svg"},
|
|
20
20
|
{"displayName":"Embeddings Google Gemini","name":"embeddingsGoogleGemini","group":["transform"],"version":1,"description":"Use Google Gemini Embeddings","defaults":{"name":"Embeddings Google Gemini"},"requestDefaults":{"ignoreHttpStatusErrors":true,"baseURL":"={{ $credentials.host }}"},"credentials":[{"name":"googlePalmApi","required":true}],"codex":{"categories":["AI"],"subcategories":{"AI":["Embeddings"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsgooglegemini/"}]}},"inputs":[],"outputs":["ai_embedding"],"outputNames":["Embeddings"],"properties":[{"displayName":"This node must be connected to a vector store. <a data-action='openSelectiveNodeCreator' data-action-parameter-connectiontype='ai_vectorStore'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Each model is using different dimensional density for embeddings. Please make sure to use the same dimensionality for your vector store. The default model is using 768-dimensional embeddings.","name":"notice","type":"notice","default":""},{"displayName":"Model","name":"modelName","type":"options","description":"The model which will generate the embeddings. <a href=\"https://developers.generativeai.google/api/rest/generativelanguage/models/list\">Learn more</a>.","typeOptions":{"loadOptions":{"routing":{"request":{"method":"GET","url":"/v1beta/models"},"output":{"postReceive":[{"type":"rootProperty","properties":{"property":"models"}},{"type":"filter","properties":{"pass":"={{ $responseItem.name.includes('embedding') }}"}},{"type":"setKeyValue","properties":{"name":"={{$responseItem.name}}","value":"={{$responseItem.name}}","description":"={{$responseItem.description}}"}},{"type":"sort","properties":{"key":"name"}}]}}}},"routing":{"send":{"type":"body","property":"model"}},"default":"textembedding-gecko-multilingual@latest"}],"iconUrl":"icons/@n8n/n8n-nodes-langchain/dist/nodes/embeddings/EmbeddingsGoogleGemini/google.svg"},
|
|
21
|
+
{"displayName":"Embeddings Google Vertex","name":"embeddingsGoogleVertex","group":["transform"],"version":1,"description":"Use Google Vertex Embeddings","defaults":{"name":"Embeddings Google Vertex"},"requestDefaults":{"ignoreHttpStatusErrors":true,"baseURL":"={{ $credentials.host }}"},"credentials":[{"name":"googleApi","required":true}],"codex":{"categories":["AI"],"subcategories":{"AI":["Embeddings"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsgooglevertex/"}]}},"inputs":[],"outputs":["ai_embedding"],"outputNames":["Embeddings"],"properties":[{"displayName":"This node must be connected to a vector store. <a data-action='openSelectiveNodeCreator' data-action-parameter-connectiontype='ai_vectorStore'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Each model is using different dimensional density for embeddings. Please make sure to use the same dimensionality for your vector store. The default model is using 768-dimensional embeddings. You can find available models <a href=\"https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/text-embeddings-api\">here</a>.","name":"notice","type":"notice","default":""},{"displayName":"Project ID","name":"projectId","type":"resourceLocator","default":{"mode":"list","value":""},"required":true,"description":"Select or enter your Google Cloud project ID","modes":[{"displayName":"From List","name":"list","type":"list","typeOptions":{"searchListMethod":"gcpProjectsList"}},{"displayName":"ID","name":"id","type":"string"}]},{"displayName":"Model Name","name":"modelName","type":"string","description":"The model which will generate the embeddings. <a href=\"https://cloud.google.com/vertex-ai/generative-ai/docs/model-reference/text-embeddings-api\">Learn more</a>.","default":"text-embedding-005"}],"iconUrl":"icons/@n8n/n8n-nodes-langchain/dist/nodes/embeddings/EmbeddingsGoogleVertex/google.svg"},
|
|
21
22
|
{"displayName":"Embeddings Hugging Face Inference","name":"embeddingsHuggingFaceInference","group":["transform"],"version":1,"description":"Use HuggingFace Inference Embeddings","defaults":{"name":"Embeddings HuggingFace Inference"},"credentials":[{"name":"huggingFaceApi","required":true}],"codex":{"categories":["AI"],"subcategories":{"AI":["Embeddings"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingshuggingfaceinference/"}]}},"inputs":[],"outputs":["ai_embedding"],"outputNames":["Embeddings"],"properties":[{"displayName":"This node must be connected to a vector store. <a data-action='openSelectiveNodeCreator' data-action-parameter-connectiontype='ai_vectorStore'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Each model is using different dimensional density for embeddings. Please make sure to use the same dimensionality for your vector store. The default model is using 768-dimensional embeddings.","name":"notice","type":"notice","default":""},{"displayName":"Model Name","name":"modelName","type":"string","default":"sentence-transformers/distilbert-base-nli-mean-tokens","description":"The model name to use from HuggingFace library"},{"displayName":"Options","name":"options","placeholder":"Add Option","description":"Additional options to add","type":"collection","default":{},"options":[{"displayName":"Custom Inference Endpoint","name":"endpointUrl","default":"","description":"Custom endpoint URL","type":"string"}]}],"iconUrl":"icons/@n8n/n8n-nodes-langchain/dist/nodes/embeddings/EmbeddingsHuggingFaceInference/huggingface.svg"},
|
|
22
23
|
{"displayName":"Embeddings Mistral Cloud","name":"embeddingsMistralCloud","credentials":[{"name":"mistralCloudApi","required":true}],"group":["transform"],"version":1,"description":"Use Embeddings Mistral Cloud","defaults":{"name":"Embeddings Mistral Cloud"},"codex":{"categories":["AI"],"subcategories":{"AI":["Embeddings"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsmistralcloud/"}]}},"inputs":[],"outputs":["ai_embedding"],"outputNames":["Embeddings"],"requestDefaults":{"ignoreHttpStatusErrors":true,"baseURL":"https://api.mistral.ai/v1"},"properties":[{"displayName":"This node must be connected to a vector store. <a data-action='openSelectiveNodeCreator' data-action-parameter-connectiontype='ai_vectorStore'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Model","name":"model","type":"options","description":"The model which will compute the embeddings. <a href=\"https://docs.mistral.ai/platform/endpoints/\">Learn more</a>.","typeOptions":{"loadOptions":{"routing":{"request":{"method":"GET","url":"/models"},"output":{"postReceive":[{"type":"rootProperty","properties":{"property":"data"}},{"type":"filter","properties":{"pass":"={{ $responseItem.id.includes('embed') }}"}},{"type":"setKeyValue","properties":{"name":"={{ $responseItem.id }}","value":"={{ $responseItem.id }}"}},{"type":"sort","properties":{"key":"name"}}]}}}},"routing":{"send":{"type":"body","property":"model"}},"default":"mistral-embed"},{"displayName":"Options","name":"options","placeholder":"Add Option","description":"Additional options to add","type":"collection","default":{},"options":[{"displayName":"Batch Size","name":"batchSize","default":512,"typeOptions":{"maxValue":2048},"description":"Maximum number of documents to send in each request","type":"number"},{"displayName":"Strip New Lines","name":"stripNewLines","default":true,"description":"Whether to strip new lines from the input text","type":"boolean"}]}],"iconUrl":"icons/@n8n/n8n-nodes-langchain/dist/nodes/embeddings/EmbeddingsMistralCloud/mistral.svg"},
|
|
23
24
|
{"displayName":"Embeddings OpenAI","name":"embeddingsOpenAi","credentials":[{"name":"openAiApi","required":true}],"group":["transform"],"version":[1,1.1,1.2],"description":"Use Embeddings OpenAI","defaults":{"name":"Embeddings OpenAI"},"codex":{"categories":["AI"],"subcategories":{"AI":["Embeddings"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsopenai/"}]}},"inputs":[],"outputs":["ai_embedding"],"outputNames":["Embeddings"],"requestDefaults":{"ignoreHttpStatusErrors":true,"baseURL":"={{ $parameter.options?.baseURL?.split(\"/\").slice(0,-1).join(\"/\") || $credentials.url?.split(\"/\").slice(0,-1).join(\"/\") || \"https://api.openai.com\" }}"},"properties":[{"displayName":"This node must be connected to a vector store. <a data-action='openSelectiveNodeCreator' data-action-parameter-connectiontype='ai_vectorStore'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Model","name":"model","type":"options","description":"The model which will generate the embeddings. <a href=\"https://platform.openai.com/docs/models/overview\">Learn more</a>.","typeOptions":{"loadOptions":{"routing":{"request":{"method":"GET","url":"={{ $parameter.options?.baseURL?.split(\"/\").slice(-1).pop() || $credentials?.url?.split(\"/\").slice(-1).pop() || \"v1\" }}/models"},"output":{"postReceive":[{"type":"rootProperty","properties":{"property":"data"}},{"type":"filter","properties":{"pass":"={{ $responseItem.id.includes('embed') }}"}},{"type":"setKeyValue","properties":{"name":"={{$responseItem.id}}","value":"={{$responseItem.id}}"}},{"type":"sort","properties":{"key":"name"}}]}}}},"routing":{"send":{"type":"body","property":"model"}},"default":"text-embedding-ada-002","displayOptions":{"show":{"@version":[1]}}},{"displayName":"Model","name":"model","type":"options","description":"The model which will generate the embeddings. <a href=\"https://platform.openai.com/docs/models/overview\">Learn more</a>.","typeOptions":{"loadOptions":{"routing":{"request":{"method":"GET","url":"={{ $parameter.options?.baseURL?.split(\"/\").slice(-1).pop() || $credentials?.url?.split(\"/\").slice(-1).pop() || \"v1\" }}/models"},"output":{"postReceive":[{"type":"rootProperty","properties":{"property":"data"}},{"type":"filter","properties":{"pass":"={{ $responseItem.id.includes('embed') }}"}},{"type":"setKeyValue","properties":{"name":"={{$responseItem.id}}","value":"={{$responseItem.id}}"}},{"type":"sort","properties":{"key":"name"}}]}}}},"routing":{"send":{"type":"body","property":"model"}},"default":"text-embedding-3-small","displayOptions":{"hide":{"@version":[1]}}},{"displayName":"Options","name":"options","placeholder":"Add Option","description":"Additional options to add","type":"collection","default":{},"options":[{"displayName":"Dimensions","name":"dimensions","description":"The number of dimensions the resulting output embeddings should have. Only supported in text-embedding-3 and later models.","type":"options","options":[{"name":"256","value":256},{"name":"512","value":512},{"name":"1024","value":1024},{"name":"1536","value":1536},{"name":"3072","value":3072}]},{"displayName":"Base URL","name":"baseURL","default":"https://api.openai.com/v1","description":"Override the default base URL for the API","type":"string","displayOptions":{"hide":{"@version":[{"_cnd":{"gte":1.2}}]}}},{"displayName":"Batch Size","name":"batchSize","default":512,"typeOptions":{"maxValue":2048},"description":"Maximum number of documents to send in each request","type":"number"},{"displayName":"Strip New Lines","name":"stripNewLines","default":true,"description":"Whether to strip new lines from the input text","type":"boolean"},{"displayName":"Timeout","name":"timeout","default":-1,"description":"Maximum amount of time a request is allowed to take in seconds. Set to -1 for no timeout.","type":"number"}]}],"iconUrl":{"light":"icons/@n8n/n8n-nodes-langchain/dist/nodes/embeddings/EmbeddingsOpenAI/openAiLight.svg","dark":"icons/@n8n/n8n-nodes-langchain/dist/nodes/embeddings/EmbeddingsOpenAI/openAiLight.dark.svg"}},
|
|
@@ -41,6 +42,7 @@
|
|
|
41
42
|
{"displayName":"Simple Memory","name":"memoryBufferWindow","icon":"fa:database","iconColor":"black","group":["transform"],"version":[1,1.1,1.2,1.3],"description":"Stores in n8n memory, so no credentials required","defaults":{"name":"Simple Memory"},"codex":{"categories":["AI"],"subcategories":{"AI":["Memory"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorybufferwindow/"}]}},"inputs":[],"outputs":["ai_memory"],"outputNames":["Memory"],"properties":[{"displayName":"This node must be connected to an AI agent. <a data-action='openSelectiveNodeCreator' data-action-parameter-creatorview='AI'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Session Key","name":"sessionKey","type":"string","default":"chat_history","description":"The key to use to store the memory in the workflow data","displayOptions":{"show":{"@version":[1]}}},{"displayName":"Session ID","name":"sessionKey","type":"string","default":"={{ $json.sessionId }}","description":"The key to use to store the memory","displayOptions":{"show":{"@version":[1.1]}}},{"displayName":"Session ID","name":"sessionIdType","type":"options","options":[{"name":"Connected Chat Trigger Node","value":"fromInput","description":"Looks for an input field called 'sessionId' that is coming from a directly connected Chat Trigger"},{"name":"Define below","value":"customKey","description":"Use an expression to reference data in previous nodes or enter static text"}],"default":"fromInput","displayOptions":{"show":{"@version":[{"_cnd":{"gte":1.2}}]}}},{"displayName":"Session Key From Previous Node","name":"sessionKey","type":"string","default":"={{ $json.sessionId }}","disabledOptions":{"show":{"sessionIdType":["fromInput"]}},"displayOptions":{"show":{"sessionIdType":["fromInput"],"@version":[{"_cnd":{"gte":1.3}}]}}},{"displayName":"Key","name":"sessionKey","type":"string","default":"","description":"The key to use to store session ID in the memory","displayOptions":{"show":{"sessionIdType":["customKey"]}}},{"displayName":"Context Window Length","name":"contextWindowLength","type":"number","default":5,"hint":"How many past interactions the model receives as context"}]},
|
|
42
43
|
{"displayName":"Motorhead","name":"memoryMotorhead","icon":"fa:file-export","iconColor":"black","group":["transform"],"version":[1,1.1,1.2,1.3],"description":"Use Motorhead Memory","defaults":{"name":"Motorhead"},"codex":{"categories":["AI"],"subcategories":{"AI":["Memory"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymotorhead/"}]}},"inputs":[],"outputs":["ai_memory"],"outputNames":["Memory"],"credentials":[{"name":"motorheadApi","required":true}],"properties":[{"displayName":"This node must be connected to an AI agent. <a data-action='openSelectiveNodeCreator' data-action-parameter-creatorview='AI'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Session ID","name":"sessionId","type":"string","required":true,"default":"","displayOptions":{"show":{"@version":[1]}}},{"displayName":"Session ID","name":"sessionId","type":"string","default":"={{ $json.sessionId }}","description":"The key to use to store the memory","displayOptions":{"show":{"@version":[1.1]}}},{"displayName":"Session ID","name":"sessionIdType","type":"options","options":[{"name":"Connected Chat Trigger Node","value":"fromInput","description":"Looks for an input field called 'sessionId' that is coming from a directly connected Chat Trigger"},{"name":"Define below","value":"customKey","description":"Use an expression to reference data in previous nodes or enter static text"}],"default":"fromInput","displayOptions":{"show":{"@version":[{"_cnd":{"gte":1.2}}]}}},{"displayName":"Session Key From Previous Node","name":"sessionKey","type":"string","default":"={{ $json.sessionId }}","disabledOptions":{"show":{"sessionIdType":["fromInput"]}},"displayOptions":{"show":{"sessionIdType":["fromInput"],"@version":[{"_cnd":{"gte":1.3}}]}}},{"displayName":"Key","name":"sessionKey","type":"string","default":"","description":"The key to use to store session ID in the memory","displayOptions":{"show":{"sessionIdType":["customKey"]}}}]},
|
|
43
44
|
{"displayName":"Postgres Chat Memory","name":"memoryPostgresChat","group":["transform"],"version":[1,1.1,1.2,1.3],"description":"Stores the chat history in Postgres table.","defaults":{"name":"Postgres Chat Memory"},"credentials":[{"name":"postgres","required":true,"testedBy":"postgresConnectionTest"}],"codex":{"categories":["AI"],"subcategories":{"AI":["Memory"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorypostgreschat/"}]}},"inputs":[],"outputs":["ai_memory"],"outputNames":["Memory"],"properties":[{"displayName":"This node must be connected to an AI agent. <a data-action='openSelectiveNodeCreator' data-action-parameter-creatorview='AI'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Session ID","name":"sessionIdType","type":"options","options":[{"name":"Connected Chat Trigger Node","value":"fromInput","description":"Looks for an input field called 'sessionId' that is coming from a directly connected Chat Trigger"},{"name":"Define below","value":"customKey","description":"Use an expression to reference data in previous nodes or enter static text"}],"default":"fromInput"},{"displayName":"Session Key From Previous Node","name":"sessionKey","type":"string","default":"={{ $json.sessionId }}","disabledOptions":{"show":{"sessionIdType":["fromInput"]}},"displayOptions":{"show":{"sessionIdType":["fromInput"],"@version":[{"_cnd":{"gte":1.2}}]}}},{"displayName":"Key","name":"sessionKey","type":"string","default":"","description":"The key to use to store session ID in the memory","displayOptions":{"show":{"sessionIdType":["customKey"]}}},{"displayName":"Table Name","name":"tableName","type":"string","default":"n8n_chat_histories","description":"The table name to store the chat history in. If table does not exist, it will be created."},{"displayName":"Context Window Length","name":"contextWindowLength","type":"number","default":5,"hint":"How many past interactions the model receives as context","displayOptions":{"hide":{"@version":[{"_cnd":{"lt":1.1}}]}}}],"iconUrl":"icons/@n8n/n8n-nodes-langchain/dist/nodes/memory/MemoryPostgresChat/postgres.svg"},
|
|
45
|
+
{"displayName":"MongoDB Chat Memory","name":"memoryMongoDbChat","group":["transform"],"version":[1],"description":"Stores the chat history in MongoDB collection.","defaults":{"name":"MongoDB Chat Memory"},"credentials":[{"name":"mongoDb","required":true}],"codex":{"categories":["AI"],"subcategories":{"AI":["Memory"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymongochat/"}]}},"inputs":[],"outputs":["ai_memory"],"outputNames":["Memory"],"properties":[{"displayName":"This node must be connected to an AI agent. <a data-action='openSelectiveNodeCreator' data-action-parameter-creatorview='AI'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Session ID","name":"sessionIdType","type":"options","options":[{"name":"Connected Chat Trigger Node","value":"fromInput","description":"Looks for an input field called 'sessionId' that is coming from a directly connected Chat Trigger"},{"name":"Define below","value":"customKey","description":"Use an expression to reference data in previous nodes or enter static text"}],"default":"fromInput"},{"displayName":"Session Key From Previous Node","name":"sessionKey","type":"string","default":"={{ $json.sessionId }}","disabledOptions":{"show":{"sessionIdType":["fromInput"]}},"displayOptions":{"show":{"sessionIdType":["fromInput"],"@version":[{"_cnd":{"gte":1}}]}}},{"displayName":"Key","name":"sessionKey","type":"string","default":"","description":"The key to use to store session ID in the memory","displayOptions":{"show":{"sessionIdType":["customKey"]}}},{"displayName":"Collection Name","name":"collectionName","type":"string","default":"n8n_chat_histories","description":"The collection name to store the chat history in. If collection does not exist, it will be created."},{"displayName":"Database Name","name":"databaseName","type":"string","default":"","description":"The database name to store the chat history in. If not provided, the database from credentials will be used."},{"displayName":"Context Window Length","name":"contextWindowLength","type":"number","default":5,"hint":"How many past interactions the model receives as context"}],"iconUrl":"icons/@n8n/n8n-nodes-langchain/dist/nodes/memory/MemoryMongoDbChat/mongodb.svg"},
|
|
44
46
|
{"displayName":"Redis Chat Memory","name":"memoryRedisChat","group":["transform"],"version":[1,1.1,1.2,1.3,1.4,1.5],"description":"Stores the chat history in Redis.","defaults":{"name":"Redis Chat Memory"},"credentials":[{"name":"redis","required":true}],"codex":{"categories":["AI"],"subcategories":{"AI":["Memory"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memoryredischat/"}]}},"inputs":[],"outputs":["ai_memory"],"outputNames":["Memory"],"properties":[{"displayName":"This node must be connected to an AI agent. <a data-action='openSelectiveNodeCreator' data-action-parameter-creatorview='AI'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Session Key","name":"sessionKey","type":"string","default":"chat_history","description":"The key to use to store the memory in the workflow data","displayOptions":{"show":{"@version":[1]}}},{"displayName":"Session ID","name":"sessionKey","type":"string","default":"={{ $json.sessionId }}","description":"The key to use to store the memory","displayOptions":{"show":{"@version":[1.1]}}},{"displayName":"Session ID","name":"sessionIdType","type":"options","options":[{"name":"Connected Chat Trigger Node","value":"fromInput","description":"Looks for an input field called 'sessionId' that is coming from a directly connected Chat Trigger"},{"name":"Define below","value":"customKey","description":"Use an expression to reference data in previous nodes or enter static text"}],"default":"fromInput","displayOptions":{"show":{"@version":[{"_cnd":{"gte":1.2}}]}}},{"displayName":"Session Key From Previous Node","name":"sessionKey","type":"string","default":"={{ $json.sessionId }}","disabledOptions":{"show":{"sessionIdType":["fromInput"]}},"displayOptions":{"show":{"sessionIdType":["fromInput"],"@version":[{"_cnd":{"gte":1.4}}]}}},{"displayName":"Key","name":"sessionKey","type":"string","default":"","description":"The key to use to store session ID in the memory","displayOptions":{"show":{"sessionIdType":["customKey"]}}},{"displayName":"Session Time To Live","name":"sessionTTL","type":"number","default":0,"description":"For how long the session should be stored in seconds. If set to 0 it will not expire."},{"displayName":"Context Window Length","name":"contextWindowLength","type":"number","default":5,"hint":"How many past interactions the model receives as context","displayOptions":{"hide":{"@version":[{"_cnd":{"lt":1.3}}]}}}],"iconUrl":"icons/@n8n/n8n-nodes-langchain/dist/nodes/memory/MemoryRedisChat/redis.svg"},
|
|
45
47
|
{"displayName":"Chat Memory Manager","name":"memoryManager","icon":"fa:database","iconColor":"black","group":["transform"],"version":[1,1.1],"description":"Manage chat messages memory and use it in the workflow","defaults":{"name":"Chat Memory Manager"},"codex":{"categories":["AI"],"subcategories":{"AI":["Miscellaneous","Root Nodes"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymanager/"}]}},"inputs":[{"displayName":"","type":"main"},{"displayName":"Memory","type":"ai_memory","required":true,"maxConnections":1}],"outputs":[{"displayName":"","type":"main"}],"properties":[{"displayName":"Operation Mode","name":"mode","type":"options","noDataExpression":true,"default":"load","options":[{"name":"Get Many Messages","description":"Retrieve chat messages from connected memory","value":"load"},{"name":"Insert Messages","description":"Insert chat messages into connected memory","value":"insert"},{"name":"Delete Messages","description":"Delete chat messages from connected memory","value":"delete"}]},{"displayName":"Insert Mode","name":"insertMode","type":"options","description":"Choose how new messages are inserted into the memory","noDataExpression":true,"default":"insert","options":[{"name":"Insert Messages","value":"insert","description":"Add messages alongside existing ones"},{"name":"Override All Messages","value":"override","description":"Replace the current memory with new messages"}],"displayOptions":{"show":{"mode":["insert"]}}},{"displayName":"Delete Mode","name":"deleteMode","type":"options","description":"How messages are deleted from memory","noDataExpression":true,"default":"lastN","options":[{"name":"Last N","value":"lastN","description":"Delete the last N messages"},{"name":"All Messages","value":"all","description":"Clear all messages from memory"}],"displayOptions":{"show":{"mode":["delete"]}}},{"displayName":"Chat Messages","name":"messages","description":"Chat messages to insert into memory","type":"fixedCollection","typeOptions":{"multipleValues":true},"default":{},"placeholder":"Add message","options":[{"name":"messageValues","displayName":"Message","values":[{"displayName":"Type Name or ID","name":"type","type":"options","options":[{"name":"AI","value":"ai"},{"name":"System","value":"system"},{"name":"User","value":"user"}],"default":"system"},{"displayName":"Message","name":"message","type":"string","required":true,"default":""},{"displayName":"Hide Message in Chat","name":"hideFromUI","type":"boolean","required":true,"default":false,"description":"Whether to hide the message from the chat UI"}]}],"displayOptions":{"show":{"mode":["insert"]}}},{"displayName":"Messages Count","name":"lastMessagesCount","type":"number","description":"The amount of last messages to delete","default":2,"displayOptions":{"show":{"mode":["delete"],"deleteMode":["lastN"]}}},{"displayName":"Simplify Output","name":"simplifyOutput","type":"boolean","description":"Whether to simplify the output to only include the sender and the text","default":true,"displayOptions":{"show":{"mode":["load"]}}},{"displayName":"Options","name":"options","placeholder":"Add Option","type":"collection","default":{},"options":[{"displayName":"Group Messages","name":"groupMessages","type":"boolean","default":true,"description":"Whether to group messages into a single item or return each message as a separate item"}],"displayOptions":{"show":{"mode":["load"]}}}]},
|
|
46
48
|
{"displayName":"Chat Messages Retriever","name":"memoryChatRetriever","icon":"fa:database","iconColor":"black","group":["transform"],"hidden":true,"version":1,"description":"Retrieve chat messages from memory and use them in the workflow","defaults":{"name":"Chat Messages Retriever"},"codex":{"categories":["AI"],"subcategories":{"AI":["Miscellaneous"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorymanager/"}]}},"inputs":["main",{"displayName":"Memory","maxConnections":1,"type":"ai_memory","required":true}],"outputs":["main"],"properties":[{"displayName":"This node is deprecated. Use 'Chat Memory Manager' node instead.","type":"notice","default":"","name":"deprecatedNotice"},{"displayName":"Simplify Output","name":"simplifyOutput","type":"boolean","description":"Whether to simplify the output to only include the sender and the text","default":true}]},
|
|
@@ -60,6 +62,7 @@
|
|
|
60
62
|
{"displayName":"Code Tool","name":"toolCode","icon":"fa:code","iconColor":"black","group":["transform"],"version":[1,1.1],"description":"Write a tool in JS or Python","defaults":{"name":"Code Tool"},"codex":{"categories":["AI"],"subcategories":{"AI":["Tools"],"Tools":["Recommended Tools"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolcode/"}]}},"inputs":[],"outputs":["ai_tool"],"outputNames":["Tool"],"properties":[{"displayName":"This node must be connected to an AI agent. <a data-action='openSelectiveNodeCreator' data-action-parameter-creatorview='AI'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"See an example of a conversational agent with custom tool written in JavaScript <a href=\"/templates/1963\" target=\"_blank\">here</a>.","name":"noticeTemplateExample","type":"notice","default":""},{"displayName":"Name","name":"name","type":"string","default":"","placeholder":"My_Tool","displayOptions":{"show":{"@version":[1]}}},{"displayName":"Name","name":"name","type":"string","default":"","placeholder":"e.g. My_Tool","validateType":"string-alphanumeric","description":"The name of the function to be called, could contain letters, numbers, and underscores only","displayOptions":{"show":{"@version":[{"_cnd":{"gte":1.1}}]}}},{"displayName":"Description","name":"description","type":"string","default":"","placeholder":"Call this tool to get a random color. The input should be a string with comma separted names of colors to exclude.","typeOptions":{"rows":3}},{"displayName":"Language","name":"language","type":"options","noDataExpression":true,"options":[{"name":"JavaScript","value":"javaScript"},{"name":"Python (Beta)","value":"python"}],"default":"javaScript"},{"displayName":"JavaScript","name":"jsCode","type":"string","displayOptions":{"show":{"language":["javaScript"]}},"typeOptions":{"editor":"jsEditor"},"default":"// Example: convert the incoming query to uppercase and return it\nreturn query.toUpperCase()","hint":"You can access the input the tool receives via the input property \"query\". The returned value should be a single string.","description":"E.g. Converts any text to uppercase","noDataExpression":true},{"displayName":"Python","name":"pythonCode","type":"string","displayOptions":{"show":{"language":["python"]}},"typeOptions":{"editor":"codeNodeEditor","editorLanguage":"python"},"default":"# Example: convert the incoming query to uppercase and return it\nreturn query.upper()","hint":"You can access the input the tool receives via the input property \"query\". The returned value should be a single string.","description":"E.g. Converts any text to uppercase","noDataExpression":true},{"displayName":"Specify Input Schema","name":"specifyInputSchema","type":"boolean","description":"Whether to specify the schema for the function. This would require the LLM to provide the input in the correct format and would validate it against the schema.","noDataExpression":true,"default":false},{"displayName":"Schema Type","name":"schemaType","type":"options","noDataExpression":true,"options":[{"name":"Generate From JSON Example","value":"fromJson","description":"Generate a schema from an example JSON object"},{"name":"Define Below","value":"manual","description":"Define the JSON schema manually"}],"default":"fromJson","description":"How to specify the schema for the function","displayOptions":{"show":{"specifyInputSchema":[true]}}},{"displayName":"JSON Example","name":"jsonSchemaExample","type":"json","default":"{\n\t\"some_input\": \"some_value\"\n}","noDataExpression":true,"typeOptions":{"rows":10},"displayOptions":{"show":{"specifyInputSchema":[true],"schemaType":["fromJson"]}},"description":"Example JSON object to use to generate the schema"},{"displayName":"Input Schema","name":"inputSchema","type":"json","default":"{\n\"type\": \"object\",\n\"properties\": {\n\t\"some_input\": {\n\t\t\"type\": \"string\",\n\t\t\"description\": \"Some input to the function\"\n\t\t}\n\t}\n}","noDataExpression":true,"typeOptions":{"rows":10},"displayOptions":{"show":{"specifyInputSchema":[true],"schemaType":["manual"]}},"description":"Schema to use for the function"}]},
|
|
61
63
|
{"displayName":"HTTP Request Tool","name":"toolHttpRequest","group":["output"],"version":[1,1.1],"description":"Makes an HTTP request and returns the response data","subtitle":"={{ $parameter.toolDescription }}","defaults":{"name":"HTTP Request"},"credentials":[],"codex":{"categories":["AI"],"subcategories":{"AI":["Tools"],"Tools":["Recommended Tools"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolhttprequest/"}]}},"inputs":[],"outputs":["ai_tool"],"outputNames":["Tool"],"properties":[{"displayName":"This node must be connected to an AI agent. <a data-action='openSelectiveNodeCreator' data-action-parameter-creatorview='AI'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Description","name":"toolDescription","type":"string","description":"Explain to LLM what this tool does, better description would allow LLM to produce expected result","placeholder":"e.g. Get the current weather in the requested city","default":"","typeOptions":{"rows":3}},{"displayName":"Method","name":"method","type":"options","options":[{"name":"DELETE","value":"DELETE"},{"name":"GET","value":"GET"},{"name":"PATCH","value":"PATCH"},{"name":"POST","value":"POST"},{"name":"PUT","value":"PUT"}],"default":"GET"},{"displayName":"Tip: You can use a {placeholder} for any part of the request to be filled by the model. Provide more context about them in the placeholders section","name":"placeholderNotice","type":"notice","default":""},{"displayName":"URL","name":"url","type":"string","default":"","required":true,"placeholder":"e.g. http://www.example.com/{path}"},{"displayName":"Authentication","name":"authentication","description":"Select the type of authentication to use if needed, authentication would be done by n8n and your credentials will not be shared with the LLM","noDataExpression":true,"type":"options","options":[{"name":"None","value":"none"},{"name":"Predefined Credential Type","value":"predefinedCredentialType","description":"We've already implemented auth for many services so that you don't have to set it up manually"},{"name":"Generic Credential Type","value":"genericCredentialType","description":"Fully customizable. Choose between basic, header, OAuth2, etc."}],"default":"none"},{"displayName":"Credential Type","name":"nodeCredentialType","type":"credentialsSelect","noDataExpression":true,"required":true,"default":"","credentialTypes":["extends:oAuth2Api","extends:oAuth1Api","has:authenticate"],"displayOptions":{"show":{"authentication":["predefinedCredentialType"]}}},{"displayName":"Make sure you have specified the scope(s) for the Service Account in the credential","name":"googleApiWarning","type":"notice","default":"","displayOptions":{"show":{"nodeCredentialType":["googleApi"]}}},{"displayName":"Generic Auth Type","name":"genericAuthType","type":"credentialsSelect","required":true,"default":"","credentialTypes":["has:genericAuth"],"displayOptions":{"show":{"authentication":["genericCredentialType"]}}},{"displayName":"Send Query Parameters","name":"sendQuery","type":"boolean","default":false,"noDataExpression":true,"description":"Whether the request has query params or not"},{"displayName":"Specify Query Parameters","name":"specifyQuery","type":"options","options":[{"name":"Using Fields Below","value":"keypair"},{"name":"Using JSON Below","value":"json"},{"name":"Let Model Specify Entire Body","value":"model"}],"default":"keypair","displayOptions":{"show":{"sendQuery":[true]}}},{"displayName":"Query Parameters","name":"parametersQuery","type":"fixedCollection","typeOptions":{"multipleValues":true},"placeholder":"Add Parameter","default":{"values":[{"name":""}]},"options":[{"name":"values","displayName":"Values","values":[{"displayName":"Name","name":"name","type":"string","default":""},{"displayName":"Value Provided","name":"valueProvider","type":"options","options":[{"name":"By Model (and is required)","value":"modelRequired"},{"name":"By Model (but is optional)","value":"modelOptional"},{"name":"Using Field Below","value":"fieldValue"}],"default":"modelRequired"},{"displayName":"Value","name":"value","type":"string","default":"","hint":"Use a {placeholder} for any data to be filled in by the model","displayOptions":{"show":{"valueProvider":["fieldValue"]}}}]}],"displayOptions":{"show":{"sendQuery":[true],"specifyQuery":["keypair"]}}},{"displayName":"JSON","name":"jsonQuery","type":"string","typeOptions":{"rows":5},"hint":"Use a {placeholder} for any data to be filled in by the model","default":"","displayOptions":{"show":{"sendQuery":[true],"specifyQuery":["json"]}}},{"displayName":"Send Headers","name":"sendHeaders","type":"boolean","default":false,"noDataExpression":true,"description":"Whether the request has headers or not"},{"displayName":"Specify Headers","name":"specifyHeaders","type":"options","options":[{"name":"Using Fields Below","value":"keypair"},{"name":"Using JSON Below","value":"json"},{"name":"Let Model Specify Entire Body","value":"model"}],"default":"keypair","displayOptions":{"show":{"sendHeaders":[true]}}},{"displayName":"Header Parameters","name":"parametersHeaders","type":"fixedCollection","typeOptions":{"multipleValues":true},"placeholder":"Add Parameter","default":{"values":[{"name":""}]},"options":[{"name":"values","displayName":"Values","values":[{"displayName":"Name","name":"name","type":"string","default":""},{"displayName":"Value Provided","name":"valueProvider","type":"options","options":[{"name":"By Model (and is required)","value":"modelRequired"},{"name":"By Model (but is optional)","value":"modelOptional"},{"name":"Using Field Below","value":"fieldValue"}],"default":"modelRequired"},{"displayName":"Value","name":"value","type":"string","default":"","hint":"Use a {placeholder} for any data to be filled in by the model","displayOptions":{"show":{"valueProvider":["fieldValue"]}}}]}],"displayOptions":{"show":{"sendHeaders":[true],"specifyHeaders":["keypair"]}}},{"displayName":"JSON","name":"jsonHeaders","type":"string","typeOptions":{"rows":5},"hint":"Use a {placeholder} for any data to be filled in by the model","default":"","displayOptions":{"show":{"sendHeaders":[true],"specifyHeaders":["json"]}}},{"displayName":"Send Body","name":"sendBody","type":"boolean","default":false,"noDataExpression":true,"description":"Whether the request has body or not"},{"displayName":"Specify Body","name":"specifyBody","type":"options","options":[{"name":"Using Fields Below","value":"keypair"},{"name":"Using JSON Below","value":"json"},{"name":"Let Model Specify Entire Body","value":"model"}],"default":"keypair","displayOptions":{"show":{"sendBody":[true]}}},{"displayName":"Body Parameters","name":"parametersBody","type":"fixedCollection","typeOptions":{"multipleValues":true},"placeholder":"Add Parameter","default":{"values":[{"name":""}]},"options":[{"name":"values","displayName":"Values","values":[{"displayName":"Name","name":"name","type":"string","default":""},{"displayName":"Value Provided","name":"valueProvider","type":"options","options":[{"name":"By Model (and is required)","value":"modelRequired"},{"name":"By Model (but is optional)","value":"modelOptional"},{"name":"Using Field Below","value":"fieldValue"}],"default":"modelRequired"},{"displayName":"Value","name":"value","type":"string","default":"","hint":"Use a {placeholder} for any data to be filled in by the model","displayOptions":{"show":{"valueProvider":["fieldValue"]}}}]}],"displayOptions":{"show":{"sendBody":[true],"specifyBody":["keypair"]}}},{"displayName":"JSON","name":"jsonBody","type":"string","typeOptions":{"rows":5},"hint":"Use a {placeholder} for any data to be filled in by the model","default":"","displayOptions":{"show":{"sendBody":[true],"specifyBody":["json"]}}},{"displayName":"Placeholder Definitions","name":"placeholderDefinitions","type":"fixedCollection","typeOptions":{"multipleValues":true},"placeholder":"Add Definition","default":[],"options":[{"name":"values","displayName":"Values","values":[{"displayName":"Placeholder Name","name":"name","type":"string","default":""},{"displayName":"Description","name":"description","type":"string","default":""},{"displayName":"Type","name":"type","type":"options","options":[{"name":"Not Specified (Default)","value":"not specified"},{"name":"String","value":"string"},{"name":"Number","value":"number"},{"name":"Boolean","value":"boolean"},{"name":"JSON","value":"json"}],"default":"not specified"}]}]},{"displayName":"Optimize Response","name":"optimizeResponse","type":"boolean","default":false,"noDataExpression":true,"description":"Whether the optimize the tool response to reduce amount of data passed to the LLM that could lead to better result and reduce cost"},{"displayName":"Expected Response Type","name":"responseType","type":"options","displayOptions":{"show":{"optimizeResponse":[true]}},"options":[{"name":"JSON","value":"json"},{"name":"HTML","value":"html"},{"name":"Text","value":"text"}],"default":"json"},{"displayName":"Field Containing Data","name":"dataField","type":"string","default":"","placeholder":"e.g. records","description":"Specify the name of the field in the response containing the data","hint":"leave blank to use whole response","requiresDataPath":"single","displayOptions":{"show":{"optimizeResponse":[true],"responseType":["json"]}}},{"displayName":"Include Fields","name":"fieldsToInclude","type":"options","description":"What fields response object should include","default":"all","displayOptions":{"show":{"optimizeResponse":[true],"responseType":["json"]}},"options":[{"name":"All","value":"all","description":"Include all fields"},{"name":"Selected","value":"selected","description":"Include only fields specified below"},{"name":"Except","value":"except","description":"Exclude fields specified below"}]},{"displayName":"Fields","name":"fields","type":"string","default":"","placeholder":"e.g. field1,field2","description":"Comma-separated list of the field names. Supports dot notation. You can drag the selected fields from the input panel.","requiresDataPath":"multiple","displayOptions":{"show":{"optimizeResponse":[true],"responseType":["json"]},"hide":{"fieldsToInclude":["all"]}}},{"displayName":"Selector (CSS)","name":"cssSelector","type":"string","description":"Select specific element(e.g. body) or multiple elements(e.g. div) of chosen type in the response HTML.","placeholder":"e.g. body","default":"body","displayOptions":{"show":{"optimizeResponse":[true],"responseType":["html"]}}},{"displayName":"Return Only Content","name":"onlyContent","type":"boolean","default":false,"description":"Whether to return only content of html elements, stripping html tags and attributes","hint":"Uses less tokens and may be easier for model to understand","displayOptions":{"show":{"optimizeResponse":[true],"responseType":["html"]}}},{"displayName":"Elements To Omit","name":"elementsToOmit","type":"string","displayOptions":{"show":{"optimizeResponse":[true],"responseType":["html"],"onlyContent":[true]}},"default":"","placeholder":"e.g. img, .className, #ItemId","description":"Comma-separated list of selectors that would be excluded when extracting content"},{"displayName":"Truncate Response","name":"truncateResponse","type":"boolean","default":false,"hint":"Helps save tokens","displayOptions":{"show":{"optimizeResponse":[true],"responseType":["text","html"]}}},{"displayName":"Max Response Characters","name":"maxLength","type":"number","default":1000,"typeOptions":{"minValue":1},"displayOptions":{"show":{"optimizeResponse":[true],"responseType":["text","html"],"truncateResponse":[true]}}}],"iconUrl":{"light":"icons/@n8n/n8n-nodes-langchain/dist/nodes/tools/ToolHttpRequest/httprequest.svg","dark":"icons/@n8n/n8n-nodes-langchain/dist/nodes/tools/ToolHttpRequest/httprequest.dark.svg"}},
|
|
62
64
|
{"displayName":"SerpApi (Google Search)","name":"toolSerpApi","group":["transform"],"version":1,"description":"Search in Google using SerpAPI","defaults":{"name":"SerpAPI"},"codex":{"categories":["AI"],"subcategories":{"AI":["Tools"],"Tools":["Other Tools"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolserpapi/"}]}},"inputs":[],"outputs":["ai_tool"],"outputNames":["Tool"],"credentials":[{"name":"serpApi","required":true}],"properties":[{"displayName":"This node must be connected to an AI agent. <a data-action='openSelectiveNodeCreator' data-action-parameter-creatorview='AI'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Options","name":"options","type":"collection","placeholder":"Add Option","default":{},"options":[{"displayName":"Country","name":"gl","type":"string","default":"us","description":"Defines the country to use for search. Head to <a href=\"https://serpapi.com/google-countries\">Google countries page</a> for a full list of supported countries."},{"displayName":"Device","name":"device","type":"options","options":[{"name":"Desktop","value":"desktop"},{"name":"Mobile","value":"mobile"},{"name":"Tablet","value":"tablet"}],"default":"desktop","description":"Device to use to get the results"},{"displayName":"Explicit Array","name":"no_cache","type":"boolean","default":false,"description":"Whether to force SerpApi to fetch the Google results even if a cached version is already present. Cache expires after 1h. Cached searches are free, and are not counted towards your searches per month."},{"displayName":"Google Domain","name":"google_domain","type":"string","default":"google.com","description":"Defines the domain to use for search. Head to <a href=\"https://serpapi.com/google-domains\">Google domains page</a> for a full list of supported domains."},{"displayName":"Language","name":"hl","type":"string","default":"en","description":"Defines the language to use. It's a two-letter language code. (e.g., `en` for English, `es` for Spanish, or `fr` for French). Head to <a href=\"https://serpapi.com/google-languages\">Google languages page</a> for a full list of supported languages."}]}],"iconUrl":"icons/@n8n/n8n-nodes-langchain/dist/nodes/tools/ToolSerpApi/serpApi.svg"},
|
|
65
|
+
{"displayName":"Think Tool","name":"toolThink","icon":"fa:brain","iconColor":"black","group":["transform"],"version":1,"description":"Invite the AI agent to do some thinking","defaults":{"name":"Think"},"codex":{"categories":["AI"],"subcategories":{"AI":["Tools"],"Tools":["Other Tools"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolthink/"}]}},"inputs":[],"outputs":["ai_tool"],"outputNames":["Tool"],"properties":[{"displayName":"This node must be connected to an AI agent. <a data-action='openSelectiveNodeCreator' data-action-parameter-creatorview='AI'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Think Tool Description","name":"description","type":"string","default":"Use the tool to think about something. It will not obtain new information or change the database, but just append the thought to the log. Use it when complex reasoning or some cache memory is needed.","placeholder":"[Describe your thinking tool here, explaining how it will help the AI think]","description":"The thinking tool's description","typeOptions":{"rows":3},"required":true}]},
|
|
63
66
|
{"displayName":"Vector Store Question Answer Tool","name":"toolVectorStore","icon":"fa:database","iconColor":"black","group":["transform"],"version":[1],"description":"Answer questions with a vector store","defaults":{"name":"Answer questions with a vector store"},"codex":{"categories":["AI"],"subcategories":{"AI":["Tools"],"Tools":["Other Tools"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolvectorstore/"}]}},"inputs":[{"displayName":"Vector Store","maxConnections":1,"type":"ai_vectorStore","required":true},{"displayName":"Model","maxConnections":1,"type":"ai_languageModel","required":true}],"outputs":["ai_tool"],"outputNames":["Tool"],"properties":[{"displayName":"This node must be connected to an AI agent. <a data-action='openSelectiveNodeCreator' data-action-parameter-creatorview='AI'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}},{"displayName":"Data Name","name":"name","type":"string","default":"","placeholder":"e.g. users_info","validateType":"string-alphanumeric","description":"Name of the data in vector store. This will be used to fill this tool description: Useful for when you need to answer questions about [name]. Whenever you need information about [data description], you should ALWAYS use this. Input should be a fully formed question."},{"displayName":"Description of Data","name":"description","type":"string","default":"","placeholder":"[Describe your data here, e.g. a user's name, email, etc.]","description":"Describe the data in vector store. This will be used to fill this tool description: Useful for when you need to answer questions about [name]. Whenever you need information about [data description], you should ALWAYS use this. Input should be a fully formed question.","typeOptions":{"rows":3}},{"displayName":"Limit","name":"topK","type":"number","default":4,"description":"The maximum number of results to return"}]},
|
|
64
67
|
{"displayName":"Wikipedia","name":"toolWikipedia","group":["transform"],"version":1,"description":"Search in Wikipedia","defaults":{"name":"Wikipedia"},"codex":{"categories":["AI"],"subcategories":{"AI":["Tools"],"Tools":["Other Tools"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolwikipedia/"}]}},"inputs":[],"outputs":["ai_tool"],"outputNames":["Tool"],"properties":[{"displayName":"This node must be connected to an AI agent. <a data-action='openSelectiveNodeCreator' data-action-parameter-creatorview='AI'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}}],"iconUrl":"icons/@n8n/n8n-nodes-langchain/dist/nodes/tools/ToolWikipedia/wikipedia.svg"},
|
|
65
68
|
{"displayName":"Wolfram|Alpha","name":"toolWolframAlpha","group":["transform"],"version":1,"description":"Connects to WolframAlpha's computational intelligence engine.","defaults":{"name":"Wolfram Alpha"},"credentials":[{"name":"wolframAlphaApi","required":true}],"codex":{"categories":["AI"],"subcategories":{"AI":["Tools"],"Tools":["Other Tools"]},"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolwolframalpha/"}]}},"inputs":[],"outputs":["ai_tool"],"outputNames":["Tool"],"properties":[{"displayName":"This node must be connected to an AI agent. <a data-action='openSelectiveNodeCreator' data-action-parameter-creatorview='AI'>Insert one</a>","name":"notice","type":"notice","default":"","typeOptions":{"containerClass":"ndv-connection-hint-notice"}}],"iconUrl":"icons/@n8n/n8n-nodes-langchain/dist/nodes/tools/ToolWolframAlpha/wolfram-alpha.svg"},
|
package/dist/types/types.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/types/zod.types.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../types/zod.types.ts"],"sourcesContent":["import type { z } from 'zod';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type DynamicZodObject = z.ZodObject<any, any, any, any>;\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../utils/N8nBinaryLoader.ts"],"sourcesContent":["import { CSVLoader } from '@langchain/community/document_loaders/fs/csv';\nimport { DocxLoader } from '@langchain/community/document_loaders/fs/docx';\nimport { EPubLoader } from '@langchain/community/document_loaders/fs/epub';\nimport { PDFLoader } from '@langchain/community/document_loaders/fs/pdf';\nimport type { Document } from '@langchain/core/documents';\nimport type { TextSplitter } from '@langchain/textsplitters';\nimport { createWriteStream } from 'fs';\nimport { JSONLoader } from 'langchain/document_loaders/fs/json';\nimport { TextLoader } from 'langchain/document_loaders/fs/text';\nimport type {\n\tIBinaryData,\n\tIExecuteFunctions,\n\tINodeExecutionData,\n\tISupplyDataFunctions,\n} from 'n8n-workflow';\nimport { NodeOperationError, BINARY_ENCODING } from 'n8n-workflow';\nimport { pipeline } from 'stream/promises';\nimport { file as tmpFile, type DirectoryResult } from 'tmp-promise';\n\nimport { getMetadataFiltersValues } from './helpers';\n\nconst SUPPORTED_MIME_TYPES = {\n\tauto: ['*/*'],\n\tpdfLoader: ['application/pdf'],\n\tcsvLoader: ['text/csv'],\n\tepubLoader: ['application/epub+zip'],\n\tdocxLoader: ['application/vnd.openxmlformats-officedocument.wordprocessingml.document'],\n\ttextLoader: ['text/plain', 'text/mdx', 'text/md'],\n\tjsonLoader: ['application/json'],\n};\n\nexport class N8nBinaryLoader {\n\tconstructor(\n\t\tprivate context: IExecuteFunctions | ISupplyDataFunctions,\n\t\tprivate optionsPrefix = '',\n\t\tprivate binaryDataKey = '',\n\t\tprivate textSplitter?: TextSplitter,\n\t) {}\n\n\tasync processAll(items?: INodeExecutionData[]): Promise<Document[]> {\n\t\tconst docs: Document[] = [];\n\n\t\tif (!items) return [];\n\n\t\tfor (let itemIndex = 0; itemIndex < items.length; itemIndex++) {\n\t\t\tconst processedDocuments = await this.processItem(items[itemIndex], itemIndex);\n\n\t\t\tdocs.push(...processedDocuments);\n\t\t}\n\n\t\treturn docs;\n\t}\n\n\tprivate async validateMimeType(\n\t\tmimeType: string,\n\t\tselectedLoader: keyof typeof SUPPORTED_MIME_TYPES,\n\t): Promise<void> {\n\t\t// Check if loader matches the mime-type of the data\n\t\tif (selectedLoader !== 'auto' && !SUPPORTED_MIME_TYPES[selectedLoader].includes(mimeType)) {\n\t\t\tconst neededLoader = Object.keys(SUPPORTED_MIME_TYPES).find((loader) =>\n\t\t\t\tSUPPORTED_MIME_TYPES[loader as keyof typeof SUPPORTED_MIME_TYPES].includes(mimeType),\n\t\t\t);\n\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tthis.context.getNode(),\n\t\t\t\t`Mime type doesn't match selected loader. Please select under \"Loader Type\": ${neededLoader}`,\n\t\t\t);\n\t\t}\n\n\t\tif (!Object.values(SUPPORTED_MIME_TYPES).flat().includes(mimeType)) {\n\t\t\tthrow new NodeOperationError(this.context.getNode(), `Unsupported mime type: ${mimeType}`);\n\t\t}\n\n\t\tif (\n\t\t\t!SUPPORTED_MIME_TYPES[selectedLoader].includes(mimeType) &&\n\t\t\tselectedLoader !== 'textLoader' &&\n\t\t\tselectedLoader !== 'auto'\n\t\t) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tthis.context.getNode(),\n\t\t\t\t`Unsupported mime type: ${mimeType} for selected loader: ${selectedLoader}`,\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async getFilePathOrBlob(\n\t\tbinaryData: IBinaryData,\n\t\tmimeType: string,\n\t): Promise<string | Blob> {\n\t\tif (binaryData.id) {\n\t\t\tconst binaryBuffer = await this.context.helpers.binaryToBuffer(\n\t\t\t\tawait this.context.helpers.getBinaryStream(binaryData.id),\n\t\t\t);\n\t\t\treturn new Blob([binaryBuffer], {\n\t\t\t\ttype: mimeType,\n\t\t\t});\n\t\t} else {\n\t\t\treturn new Blob([Buffer.from(binaryData.data, BINARY_ENCODING)], {\n\t\t\t\ttype: mimeType,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate async getLoader(\n\t\tmimeType: string,\n\t\tfilePathOrBlob: string | Blob,\n\t\titemIndex: number,\n\t): Promise<PDFLoader | CSVLoader | EPubLoader | DocxLoader | TextLoader | JSONLoader> {\n\t\tswitch (mimeType) {\n\t\t\tcase 'application/pdf':\n\t\t\t\tconst splitPages = this.context.getNodeParameter(\n\t\t\t\t\t`${this.optionsPrefix}splitPages`,\n\t\t\t\t\titemIndex,\n\t\t\t\t\tfalse,\n\t\t\t\t) as boolean;\n\t\t\t\treturn new PDFLoader(filePathOrBlob, { splitPages });\n\t\t\tcase 'text/csv':\n\t\t\t\tconst column = this.context.getNodeParameter(\n\t\t\t\t\t`${this.optionsPrefix}column`,\n\t\t\t\t\titemIndex,\n\t\t\t\t\tnull,\n\t\t\t\t) as string;\n\t\t\t\tconst separator = this.context.getNodeParameter(\n\t\t\t\t\t`${this.optionsPrefix}separator`,\n\t\t\t\t\titemIndex,\n\t\t\t\t\t',',\n\t\t\t\t) as string;\n\t\t\t\treturn new CSVLoader(filePathOrBlob, { column: column ?? undefined, separator });\n\t\t\tcase 'application/epub+zip':\n\t\t\t\t// EPubLoader currently does not accept Blobs https://github.com/langchain-ai/langchainjs/issues/1623\n\t\t\t\tlet filePath: string;\n\t\t\t\tif (filePathOrBlob instanceof Blob) {\n\t\t\t\t\tconst tmpFileData = await tmpFile({ prefix: 'epub-loader-' });\n\t\t\t\t\tconst bufferData = await filePathOrBlob.arrayBuffer();\n\t\t\t\t\tawait pipeline([new Uint8Array(bufferData)], createWriteStream(tmpFileData.path));\n\t\t\t\t\treturn new EPubLoader(tmpFileData.path);\n\t\t\t\t} else {\n\t\t\t\t\tfilePath = filePathOrBlob;\n\t\t\t\t}\n\t\t\t\treturn new EPubLoader(filePath);\n\t\t\tcase 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\n\t\t\t\treturn new DocxLoader(filePathOrBlob);\n\t\t\tcase 'text/plain':\n\t\t\t\treturn new TextLoader(filePathOrBlob);\n\t\t\tcase 'application/json':\n\t\t\t\tconst pointers = this.context.getNodeParameter(\n\t\t\t\t\t`${this.optionsPrefix}pointers`,\n\t\t\t\t\titemIndex,\n\t\t\t\t\t'',\n\t\t\t\t) as string;\n\t\t\t\tconst pointersArray = pointers.split(',').map((pointer) => pointer.trim());\n\t\t\t\treturn new JSONLoader(filePathOrBlob, pointersArray);\n\t\t\tdefault:\n\t\t\t\treturn new TextLoader(filePathOrBlob);\n\t\t}\n\t}\n\n\tprivate async loadDocuments(\n\t\tloader: PDFLoader | CSVLoader | EPubLoader | DocxLoader | TextLoader | JSONLoader,\n\t): Promise<Document[]> {\n\t\treturn this.textSplitter\n\t\t\t? await this.textSplitter.splitDocuments(await loader.load())\n\t\t\t: await loader.load();\n\t}\n\n\tprivate async cleanupTmpFileIfNeeded(\n\t\tcleanupTmpFile: DirectoryResult['cleanup'] | undefined,\n\t): Promise<void> {\n\t\tif (cleanupTmpFile) {\n\t\t\tawait cleanupTmpFile();\n\t\t}\n\t}\n\n\tasync processItem(item: INodeExecutionData, itemIndex: number): Promise<Document[]> {\n\t\tconst docs: Document[] = [];\n\t\tconst binaryMode = this.context.getNodeParameter('binaryMode', itemIndex, 'allInputData');\n\t\tif (binaryMode === 'allInputData') {\n\t\t\tconst binaryData = this.context.getInputData();\n\n\t\t\tfor (const data of binaryData) {\n\t\t\t\tif (data.binary) {\n\t\t\t\t\tconst binaryDataKeys = Object.keys(data.binary);\n\n\t\t\t\t\tfor (const fileKey of binaryDataKeys) {\n\t\t\t\t\t\tconst processedDocuments = await this.processItemByKey(item, itemIndex, fileKey);\n\t\t\t\t\t\tdocs.push(...processedDocuments);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst processedDocuments = await this.processItemByKey(item, itemIndex, this.binaryDataKey);\n\t\t\tdocs.push(...processedDocuments);\n\t\t}\n\n\t\treturn docs;\n\t}\n\n\tasync processItemByKey(\n\t\titem: INodeExecutionData,\n\t\titemIndex: number,\n\t\tbinaryKey: string,\n\t): Promise<Document[]> {\n\t\tconst selectedLoader: keyof typeof SUPPORTED_MIME_TYPES = this.context.getNodeParameter(\n\t\t\t'loader',\n\t\t\titemIndex,\n\t\t\t'auto',\n\t\t) as keyof typeof SUPPORTED_MIME_TYPES;\n\n\t\tconst docs: Document[] = [];\n\t\tconst metadata = getMetadataFiltersValues(this.context, itemIndex);\n\n\t\tif (!item) return [];\n\n\t\tconst binaryData = this.context.helpers.assertBinaryData(itemIndex, binaryKey);\n\t\tconst { mimeType } = binaryData;\n\n\t\tawait this.validateMimeType(mimeType, selectedLoader);\n\n\t\tconst filePathOrBlob = await this.getFilePathOrBlob(binaryData, mimeType);\n\t\tconst cleanupTmpFile: DirectoryResult['cleanup'] | undefined = undefined;\n\t\tconst loader = await this.getLoader(mimeType, filePathOrBlob, itemIndex);\n\t\tconst loadedDoc = await this.loadDocuments(loader);\n\n\t\tdocs.push(...loadedDoc);\n\n\t\tif (metadata) {\n\t\t\tdocs.forEach((document) => {\n\t\t\t\tdocument.metadata = {\n\t\t\t\t\t...document.metadata,\n\t\t\t\t\t...metadata,\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\n\t\tawait this.cleanupTmpFileIfNeeded(cleanupTmpFile);\n\n\t\treturn docs;\n\t}\n}\n"],"mappings":"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","names":["tmpFile"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../utils/N8nJsonLoader.ts"],"sourcesContent":["import type { Document } from '@langchain/core/documents';\nimport type { TextSplitter } from '@langchain/textsplitters';\nimport { JSONLoader } from 'langchain/document_loaders/fs/json';\nimport { TextLoader } from 'langchain/document_loaders/fs/text';\nimport {\n\ttype IExecuteFunctions,\n\ttype INodeExecutionData,\n\ttype ISupplyDataFunctions,\n\tNodeOperationError,\n} from 'n8n-workflow';\n\nimport { getMetadataFiltersValues } from './helpers';\n\nexport class N8nJsonLoader {\n\tconstructor(\n\t\tprivate context: IExecuteFunctions | ISupplyDataFunctions,\n\t\tprivate optionsPrefix = '',\n\t\tprivate textSplitter?: TextSplitter,\n\t) {}\n\n\tasync processAll(items?: INodeExecutionData[]): Promise<Document[]> {\n\t\tconst docs: Document[] = [];\n\n\t\tif (!items) return [];\n\n\t\tfor (let itemIndex = 0; itemIndex < items.length; itemIndex++) {\n\t\t\tconst processedDocuments = await this.processItem(items[itemIndex], itemIndex);\n\n\t\t\tdocs.push(...processedDocuments);\n\t\t}\n\n\t\treturn docs;\n\t}\n\n\tasync processItem(item: INodeExecutionData, itemIndex: number): Promise<Document[]> {\n\t\tconst mode = this.context.getNodeParameter('jsonMode', itemIndex, 'allInputData') as\n\t\t\t| 'allInputData'\n\t\t\t| 'expressionData';\n\n\t\tconst pointers = this.context.getNodeParameter(\n\t\t\t`${this.optionsPrefix}pointers`,\n\t\t\titemIndex,\n\t\t\t'',\n\t\t) as string;\n\t\tconst pointersArray = pointers.split(',').map((pointer) => pointer.trim());\n\t\tconst metadata = getMetadataFiltersValues(this.context, itemIndex) ?? [];\n\n\t\tif (!item) return [];\n\n\t\tlet documentLoader: JSONLoader | TextLoader | null = null;\n\n\t\tif (mode === 'allInputData') {\n\t\t\tconst itemString = JSON.stringify(item.json);\n\t\t\tconst itemBlob = new Blob([itemString], { type: 'application/json' });\n\t\t\tdocumentLoader = new JSONLoader(itemBlob, pointersArray);\n\t\t}\n\n\t\tif (mode === 'expressionData') {\n\t\t\tconst dataString = this.context.getNodeParameter('jsonData', itemIndex) as string | object;\n\t\t\tif (typeof dataString === 'object') {\n\t\t\t\tconst itemBlob = new Blob([JSON.stringify(dataString)], { type: 'application/json' });\n\t\t\t\tdocumentLoader = new JSONLoader(itemBlob, pointersArray);\n\t\t\t}\n\n\t\t\tif (typeof dataString === 'string') {\n\t\t\t\tconst itemBlob = new Blob([dataString], { type: 'text/plain' });\n\t\t\t\tdocumentLoader = new TextLoader(itemBlob);\n\t\t\t}\n\t\t}\n\n\t\tif (documentLoader === null) {\n\t\t\t// This should never happen\n\t\t\tthrow new NodeOperationError(this.context.getNode(), 'Document loader is not initialized');\n\t\t}\n\n\t\tconst docs = this.textSplitter\n\t\t\t? await this.textSplitter.splitDocuments(await documentLoader.load())\n\t\t\t: await documentLoader.load();\n\n\t\tif (metadata) {\n\t\t\tdocs.forEach((doc) => {\n\t\t\t\tdoc.metadata = {\n\t\t\t\t\t...doc.metadata,\n\t\t\t\t\t...metadata,\n\t\t\t\t};\n\t\t\t});\n\t\t}\n\t\treturn docs;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,kBAA2B;AAC3B,kBAA2B;AAC3B,0BAKO;AAEP,qBAAyC;AAElC,MAAM,cAAc;AAAA,EAC1B,YACS,SACA,gBAAgB,IAChB,cACP;AAHO;AACA;AACA;AAAA,EACN;AAAA,EAEH,MAAM,WAAW,OAAmD;AACnE,UAAM,OAAmB,CAAC;AAE1B,QAAI,CAAC,MAAO,QAAO,CAAC;AAEpB,aAAS,YAAY,GAAG,YAAY,MAAM,QAAQ,aAAa;AAC9D,YAAM,qBAAqB,MAAM,KAAK,YAAY,MAAM,SAAS,GAAG,SAAS;AAE7E,WAAK,KAAK,GAAG,kBAAkB;AAAA,IAChC;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,YAAY,MAA0B,WAAwC;AACnF,UAAM,OAAO,KAAK,QAAQ,iBAAiB,YAAY,WAAW,cAAc;AAIhF,UAAM,WAAW,KAAK,QAAQ;AAAA,MAC7B,GAAG,KAAK,aAAa;AAAA,MACrB;AAAA,MACA;AAAA,IACD;AACA,UAAM,gBAAgB,SAAS,MAAM,GAAG,EAAE,IAAI,CAAC,YAAY,QAAQ,KAAK,CAAC;AACzE,UAAM,eAAW,yCAAyB,KAAK,SAAS,SAAS,KAAK,CAAC;AAEvE,QAAI,CAAC,KAAM,QAAO,CAAC;AAEnB,QAAI,iBAAiD;AAErD,QAAI,SAAS,gBAAgB;AAC5B,YAAM,aAAa,KAAK,UAAU,KAAK,IAAI;AAC3C,YAAM,WAAW,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACpE,uBAAiB,IAAI,uBAAW,UAAU,aAAa;AAAA,IACxD;AAEA,QAAI,SAAS,kBAAkB;AAC9B,YAAM,aAAa,KAAK,QAAQ,iBAAiB,YAAY,SAAS;AACtE,UAAI,OAAO,eAAe,UAAU;AACnC,cAAM,WAAW,IAAI,KAAK,CAAC,KAAK,UAAU,UAAU,CAAC,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACpF,yBAAiB,IAAI,uBAAW,UAAU,aAAa;AAAA,MACxD;AAEA,UAAI,OAAO,eAAe,UAAU;AACnC,cAAM,WAAW,IAAI,KAAK,CAAC,UAAU,GAAG,EAAE,MAAM,aAAa,CAAC;AAC9D,yBAAiB,IAAI,uBAAW,QAAQ;AAAA,MACzC;AAAA,IACD;AAEA,QAAI,mBAAmB,MAAM;AAE5B,YAAM,IAAI,uCAAmB,KAAK,QAAQ,QAAQ,GAAG,oCAAoC;AAAA,IAC1F;AAEA,UAAM,OAAO,KAAK,eACf,MAAM,KAAK,aAAa,eAAe,MAAM,eAAe,KAAK,CAAC,IAClE,MAAM,eAAe,KAAK;AAE7B,QAAI,UAAU;AACb,WAAK,QAAQ,CAAC,QAAQ;AACrB,YAAI,WAAW;AAAA,UACd,GAAG,IAAI;AAAA,UACP,GAAG;AAAA,QACJ;AAAA,MACD,CAAC;AAAA,IACF;AACA,WAAO;AAAA,EACR;AACD;","names":[]}
|
package/dist/utils/N8nTool.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../utils/N8nTool.ts"],"sourcesContent":["import type { DynamicStructuredToolInput } from '@langchain/core/tools';\nimport { DynamicStructuredTool, DynamicTool } from '@langchain/core/tools';\nimport { StructuredOutputParser } from 'langchain/output_parsers';\nimport type { ISupplyDataFunctions, IDataObject } from 'n8n-workflow';\nimport { NodeConnectionTypes, jsonParse, NodeOperationError } from 'n8n-workflow';\nimport type { ZodTypeAny } from 'zod';\nimport { ZodBoolean, ZodNullable, ZodNumber, ZodObject, ZodOptional } from 'zod';\n\nconst getSimplifiedType = (schema: ZodTypeAny) => {\n\tif (schema instanceof ZodObject) {\n\t\treturn 'object';\n\t} else if (schema instanceof ZodNumber) {\n\t\treturn 'number';\n\t} else if (schema instanceof ZodBoolean) {\n\t\treturn 'boolean';\n\t} else if (schema instanceof ZodNullable || schema instanceof ZodOptional) {\n\t\treturn getSimplifiedType(schema.unwrap());\n\t}\n\n\treturn 'string';\n};\n\nconst getParametersDescription = (parameters: Array<[string, ZodTypeAny]>) =>\n\tparameters\n\t\t.map(\n\t\t\t([name, schema]) =>\n\t\t\t\t`${name}: (description: ${schema.description ?? ''}, type: ${getSimplifiedType(schema)}, required: ${!schema.isOptional()})`,\n\t\t)\n\t\t.join(',\\n ');\n\nexport const prepareFallbackToolDescription = (toolDescription: string, schema: ZodObject<any>) => {\n\tlet description = `${toolDescription}`;\n\n\tconst toolParameters = Object.entries<ZodTypeAny>(schema.shape);\n\n\tif (toolParameters.length) {\n\t\tdescription += `\nTool expects valid stringified JSON object with ${toolParameters.length} properties.\nProperty names with description, type and required status:\n${getParametersDescription(toolParameters)}\nALL parameters marked as required must be provided`;\n\t}\n\n\treturn description;\n};\n\nexport class N8nTool extends DynamicStructuredTool {\n\tconstructor(\n\t\tprivate context: ISupplyDataFunctions,\n\t\tfields: DynamicStructuredToolInput,\n\t) {\n\t\tsuper(fields);\n\t}\n\n\tasDynamicTool(): DynamicTool {\n\t\tconst { name, func, schema, context, description } = this;\n\n\t\tconst parser = new StructuredOutputParser(schema);\n\n\t\tconst wrappedFunc = async function (query: string) {\n\t\t\tlet parsedQuery: object;\n\n\t\t\t// First we try to parse the query using the structured parser (Zod schema)\n\t\t\ttry {\n\t\t\t\tparsedQuery = await parser.parse(query);\n\t\t\t} catch (e) {\n\t\t\t\t// If we were unable to parse the query using the schema, we try to gracefully handle it\n\t\t\t\tlet dataFromModel;\n\n\t\t\t\ttry {\n\t\t\t\t\t// First we try to parse a JSON with more relaxed rules\n\t\t\t\t\tdataFromModel = jsonParse<IDataObject>(query, { acceptJSObject: true });\n\t\t\t\t} catch (error) {\n\t\t\t\t\t// In case of error,\n\t\t\t\t\t// If model supplied a simple string instead of an object AND only one parameter expected, we try to recover the object structure\n\t\t\t\t\tif (Object.keys(schema.shape).length === 1) {\n\t\t\t\t\t\tconst parameterName = Object.keys(schema.shape)[0];\n\t\t\t\t\t\tdataFromModel = { [parameterName]: query };\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Finally throw an error if we were unable to parse the query\n\t\t\t\t\t\tthrow new NodeOperationError(\n\t\t\t\t\t\t\tcontext.getNode(),\n\t\t\t\t\t\t\t`Input is not a valid JSON: ${error.message}`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If we were able to parse the query with a fallback, we try to validate it using the schema\n\t\t\t\t// Here we will throw an error if the data still does not match the schema\n\t\t\t\tparsedQuery = schema.parse(dataFromModel);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\t// Call tool function with parsed query\n\t\t\t\tconst result = await func(parsedQuery);\n\n\t\t\t\treturn result;\n\t\t\t} catch (e) {\n\t\t\t\tconst { index } = context.addInputData(NodeConnectionTypes.AiTool, [[{ json: { query } }]]);\n\t\t\t\tvoid context.addOutputData(NodeConnectionTypes.AiTool, index, e);\n\n\t\t\t\treturn e.toString();\n\t\t\t}\n\t\t};\n\n\t\treturn new DynamicTool({\n\t\t\tname,\n\t\t\tdescription: prepareFallbackToolDescription(description, schema),\n\t\t\tfunc: wrappedFunc,\n\t\t});\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAmD;AACnD,4BAAuC;AAEvC,0BAAmE;AAEnE,iBAA2E;AAE3E,MAAM,oBAAoB,CAAC,WAAuB;AACjD,MAAI,kBAAkB,sBAAW;AAChC,WAAO;AAAA,EACR,WAAW,kBAAkB,sBAAW;AACvC,WAAO;AAAA,EACR,WAAW,kBAAkB,uBAAY;AACxC,WAAO;AAAA,EACR,WAAW,kBAAkB,0BAAe,kBAAkB,wBAAa;AAC1E,WAAO,kBAAkB,OAAO,OAAO,CAAC;AAAA,EACzC;AAEA,SAAO;AACR;AAEA,MAAM,2BAA2B,CAAC,eACjC,WACE;AAAA,EACA,CAAC,CAAC,MAAM,MAAM,MACb,GAAG,IAAI,mBAAmB,OAAO,eAAe,EAAE,WAAW,kBAAkB,MAAM,CAAC,eAAe,CAAC,OAAO,WAAW,CAAC;AAC3H,EACC,KAAK,MAAM;AAEP,MAAM,iCAAiC,CAAC,iBAAyB,WAA2B;AAClG,MAAI,cAAc,GAAG,eAAe;AAEpC,QAAM,iBAAiB,OAAO,QAAoB,OAAO,KAAK;AAE9D,MAAI,eAAe,QAAQ;AAC1B,mBAAe;AAAA,kDACiC,eAAe,MAAM;AAAA;AAAA,EAErE,yBAAyB,cAAc,CAAC;AAAA;AAAA,EAEzC;AAEA,SAAO;AACR;AAEO,MAAM,gBAAgB,mCAAsB;AAAA,EAClD,YACS,SACR,QACC;AACD,UAAM,MAAM;AAHJ;AAAA,EAIT;AAAA,EAEA,gBAA6B;AAC5B,UAAM,EAAE,MAAM,MAAM,QAAQ,SAAS,YAAY,IAAI;AAErD,UAAM,SAAS,IAAI,6CAAuB,MAAM;AAEhD,UAAM,cAAc,eAAgB,OAAe;AAClD,UAAI;AAGJ,UAAI;AACH,sBAAc,MAAM,OAAO,MAAM,KAAK;AAAA,MACvC,SAAS,GAAG;AAEX,YAAI;AAEJ,YAAI;AAEH,8BAAgB,+BAAuB,OAAO,EAAE,gBAAgB,KAAK,CAAC;AAAA,QACvE,SAAS,OAAO;AAGf,cAAI,OAAO,KAAK,OAAO,KAAK,EAAE,WAAW,GAAG;AAC3C,kBAAM,gBAAgB,OAAO,KAAK,OAAO,KAAK,EAAE,CAAC;AACjD,4BAAgB,EAAE,CAAC,aAAa,GAAG,MAAM;AAAA,UAC1C,OAAO;AAEN,kBAAM,IAAI;AAAA,cACT,QAAQ,QAAQ;AAAA,cAChB,8BAA8B,MAAM,OAAO;AAAA,YAC5C;AAAA,UACD;AAAA,QACD;AAIA,sBAAc,OAAO,MAAM,aAAa;AAAA,MACzC;AAEA,UAAI;AAEH,cAAM,SAAS,MAAM,KAAK,WAAW;AAErC,eAAO;AAAA,MACR,SAAS,GAAG;AACX,cAAM,EAAE,MAAM,IAAI,QAAQ,aAAa,wCAAoB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAC1F,aAAK,QAAQ,cAAc,wCAAoB,QAAQ,OAAO,CAAC;AAE/D,eAAO,EAAE,SAAS;AAAA,MACnB;AAAA,IACD;AAEA,WAAO,IAAI,yBAAY;AAAA,MACtB;AAAA,MACA,aAAa,+BAA+B,aAAa,MAAM;AAAA,MAC/D,MAAM;AAAA,IACP,CAAC;AAAA,EACF;AACD;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../utils/descriptions.ts"],"sourcesContent":["import type { DisplayCondition, INodeProperties, NodeParameterValue } from 'n8n-workflow';\n\nexport const schemaTypeField: INodeProperties = {\n\tdisplayName: 'Schema Type',\n\tname: 'schemaType',\n\ttype: 'options',\n\tnoDataExpression: true,\n\toptions: [\n\t\t{\n\t\t\tname: 'Generate From JSON Example',\n\t\t\tvalue: 'fromJson',\n\t\t\tdescription: 'Generate a schema from an example JSON object',\n\t\t},\n\t\t{\n\t\t\tname: 'Define Below',\n\t\t\tvalue: 'manual',\n\t\t\tdescription: 'Define the JSON schema manually',\n\t\t},\n\t],\n\tdefault: 'fromJson',\n\tdescription: 'How to specify the schema for the function',\n};\n\nexport const buildJsonSchemaExampleField = (props?: {\n\tshowExtraProps?: Record<string, Array<NodeParameterValue | DisplayCondition> | undefined>;\n}): INodeProperties => ({\n\tdisplayName: 'JSON Example',\n\tname: 'jsonSchemaExample',\n\ttype: 'json',\n\tdefault: `{\n\t\"some_input\": \"some_value\"\n}`,\n\tnoDataExpression: true,\n\ttypeOptions: {\n\t\trows: 10,\n\t},\n\tdisplayOptions: {\n\t\tshow: {\n\t\t\t...props?.showExtraProps,\n\t\t\tschemaType: ['fromJson'],\n\t\t},\n\t},\n\tdescription: 'Example JSON object to use to generate the schema',\n});\n\nexport const jsonSchemaExampleField = buildJsonSchemaExampleField();\n\nexport const buildInputSchemaField = (props?: {\n\tshowExtraProps?: Record<string, Array<NodeParameterValue | DisplayCondition> | undefined>;\n}): INodeProperties => ({\n\tdisplayName: 'Input Schema',\n\tname: 'inputSchema',\n\ttype: 'json',\n\tdefault: `{\n\"type\": \"object\",\n\"properties\": {\n\t\"some_input\": {\n\t\t\"type\": \"string\",\n\t\t\"description\": \"Some input to the function\"\n\t\t}\n\t}\n}`,\n\tnoDataExpression: true,\n\ttypeOptions: {\n\t\trows: 10,\n\t},\n\tdisplayOptions: {\n\t\tshow: {\n\t\t\t...props?.showExtraProps,\n\t\t\tschemaType: ['manual'],\n\t\t},\n\t},\n\tdescription: 'Schema to use for the function',\n});\n\nexport const inputSchemaField = buildInputSchemaField();\n\nexport const promptTypeOptions: INodeProperties = {\n\tdisplayName: 'Source for Prompt (User Message)',\n\tname: 'promptType',\n\ttype: 'options',\n\toptions: [\n\t\t{\n\t\t\tname: 'Connected Chat Trigger Node',\n\t\t\tvalue: 'auto',\n\t\t\tdescription:\n\t\t\t\t\"Looks for an input field called 'chatInput' that is coming from a directly connected Chat Trigger\",\n\t\t},\n\t\t{\n\t\t\tname: 'Define below',\n\t\t\tvalue: 'define',\n\t\t\tdescription: 'Use an expression to reference data in previous nodes or enter static text',\n\t\t},\n\t],\n\tdefault: 'auto',\n};\n\nexport const textInput: INodeProperties = {\n\tdisplayName: 'Prompt (User Message)',\n\tname: 'text',\n\ttype: 'string',\n\trequired: true,\n\tdefault: '',\n\tplaceholder: 'e.g. Hello, how can you help me?',\n\ttypeOptions: {\n\t\trows: 2,\n\t},\n};\n\nexport const textFromPreviousNode: INodeProperties = {\n\tdisplayName: 'Prompt (User Message)',\n\tname: 'text',\n\ttype: 'string',\n\trequired: true,\n\tdefault: '={{ $json.chatInput }}',\n\ttypeOptions: {\n\t\trows: 2,\n\t},\n\tdisabledOptions: { show: { promptType: ['auto'] } },\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,kBAAmC;AAAA,EAC/C,aAAa;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,kBAAkB;AAAA,EAClB,SAAS;AAAA,IACR;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IACd;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IACd;AAAA,EACD;AAAA,EACA,SAAS;AAAA,EACT,aAAa;AACd;AAEO,MAAM,8BAA8B,CAAC,WAEpB;AAAA,EACvB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA;AAAA;AAAA,EAGT,kBAAkB;AAAA,EAClB,aAAa;AAAA,IACZ,MAAM;AAAA,EACP;AAAA,EACA,gBAAgB;AAAA,IACf,MAAM;AAAA,MACL,GAAG,OAAO;AAAA,MACV,YAAY,CAAC,UAAU;AAAA,IACxB;AAAA,EACD;AAAA,EACA,aAAa;AACd;AAEO,MAAM,yBAAyB,4BAA4B;AAE3D,MAAM,wBAAwB,CAAC,WAEd;AAAA,EACvB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAST,kBAAkB;AAAA,EAClB,aAAa;AAAA,IACZ,MAAM;AAAA,EACP;AAAA,EACA,gBAAgB;AAAA,IACf,MAAM;AAAA,MACL,GAAG,OAAO;AAAA,MACV,YAAY,CAAC,QAAQ;AAAA,IACtB;AAAA,EACD;AAAA,EACA,aAAa;AACd;AAEO,MAAM,mBAAmB,sBAAsB;AAE/C,MAAM,oBAAqC;AAAA,EACjD,aAAa;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,IACR;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aACC;AAAA,IACF;AAAA,IACA;AAAA,MACC,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IACd;AAAA,EACD;AAAA,EACA,SAAS;AACV;AAEO,MAAM,YAA6B;AAAA,EACzC,aAAa;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,aAAa;AAAA,EACb,aAAa;AAAA,IACZ,MAAM;AAAA,EACP;AACD;AAEO,MAAM,uBAAwC;AAAA,EACpD,aAAa;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AAAA,EACT,aAAa;AAAA,IACZ,MAAM;AAAA,EACP;AAAA,EACA,iBAAiB,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,EAAE;AACnD;","names":[]}
|
package/dist/utils/helpers.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../utils/helpers.ts"],"sourcesContent":["import type { BaseChatMessageHistory } from '@langchain/core/chat_history';\nimport type { BaseChatModel } from '@langchain/core/language_models/chat_models';\nimport type { BaseLLM } from '@langchain/core/language_models/llms';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport type { Tool } from '@langchain/core/tools';\nimport type { BaseChatMemory } from 'langchain/memory';\nimport { NodeConnectionTypes, NodeOperationError, jsonStringify } from 'n8n-workflow';\nimport type {\n\tAiEvent,\n\tIDataObject,\n\tIExecuteFunctions,\n\tISupplyDataFunctions,\n\tIWebhookFunctions,\n} from 'n8n-workflow';\n\nimport { N8nTool } from './N8nTool';\n\nfunction hasMethods<T>(obj: unknown, ...methodNames: Array<string | symbol>): obj is T {\n\treturn methodNames.every(\n\t\t(methodName) =>\n\t\t\ttypeof obj === 'object' &&\n\t\t\tobj !== null &&\n\t\t\tmethodName in obj &&\n\t\t\ttypeof (obj as Record<string | symbol, unknown>)[methodName] === 'function',\n\t);\n}\n\nexport function getMetadataFiltersValues(\n\tctx: IExecuteFunctions | ISupplyDataFunctions,\n\titemIndex: number,\n): Record<string, never> | undefined {\n\tconst options = ctx.getNodeParameter('options', itemIndex, {});\n\n\tif (options.metadata) {\n\t\tconst { metadataValues: metadata } = options.metadata as {\n\t\t\tmetadataValues: Array<{\n\t\t\t\tname: string;\n\t\t\t\tvalue: string;\n\t\t\t}>;\n\t\t};\n\t\tif (metadata.length > 0) {\n\t\t\treturn metadata.reduce((acc, { name, value }) => ({ ...acc, [name]: value }), {});\n\t\t}\n\t}\n\n\tif (options.searchFilterJson) {\n\t\treturn ctx.getNodeParameter('options.searchFilterJson', itemIndex, '', {\n\t\t\tensureType: 'object',\n\t\t}) as Record<string, never>;\n\t}\n\n\treturn undefined;\n}\n\nexport function isBaseChatMemory(obj: unknown) {\n\treturn hasMethods<BaseChatMemory>(obj, 'loadMemoryVariables', 'saveContext');\n}\n\nexport function isBaseChatMessageHistory(obj: unknown) {\n\treturn hasMethods<BaseChatMessageHistory>(obj, 'getMessages', 'addMessage');\n}\n\nexport function isChatInstance(model: unknown): model is BaseChatModel {\n\tconst namespace = (model as BaseLLM)?.lc_namespace ?? [];\n\n\treturn namespace.includes('chat_models');\n}\n\nexport function isToolsInstance(model: unknown): model is Tool {\n\tconst namespace = (model as Tool)?.lc_namespace ?? [];\n\n\treturn namespace.includes('tools');\n}\n\nexport function getPromptInputByType(options: {\n\tctx: IExecuteFunctions;\n\ti: number;\n\tpromptTypeKey: string;\n\tinputKey: string;\n}) {\n\tconst { ctx, i, promptTypeKey, inputKey } = options;\n\tconst prompt = ctx.getNodeParameter(promptTypeKey, i) as string;\n\n\tlet input;\n\tif (prompt === 'auto') {\n\t\tinput = ctx.evaluateExpression('{{ $json[\"chatInput\"] }}', i) as string;\n\t} else {\n\t\tinput = ctx.getNodeParameter(inputKey, i) as string;\n\t}\n\n\tif (input === undefined) {\n\t\tthrow new NodeOperationError(ctx.getNode(), 'No prompt specified', {\n\t\t\tdescription:\n\t\t\t\t\"Expected to find the prompt in an input field called 'chatInput' (this is what the chat trigger node outputs). To use something else, change the 'Prompt' parameter\",\n\t\t});\n\t}\n\n\treturn input;\n}\n\nexport function getSessionId(\n\tctx: ISupplyDataFunctions | IWebhookFunctions,\n\titemIndex: number,\n\tselectorKey = 'sessionIdType',\n\tautoSelect = 'fromInput',\n\tcustomKey = 'sessionKey',\n) {\n\tlet sessionId = '';\n\tconst selectorType = ctx.getNodeParameter(selectorKey, itemIndex) as string;\n\n\tif (selectorType === autoSelect) {\n\t\t// If memory node is used in webhook like node(like chat trigger node), it doesn't have access to evaluateExpression\n\t\t// so we try to extract sessionId from the bodyData\n\t\tif ('getBodyData' in ctx) {\n\t\t\tconst bodyData = ctx.getBodyData() ?? {};\n\t\t\tsessionId = bodyData.sessionId as string;\n\t\t} else {\n\t\t\tsessionId = ctx.evaluateExpression('{{ $json.sessionId }}', itemIndex) as string;\n\t\t}\n\n\t\tif (sessionId === '' || sessionId === undefined) {\n\t\t\tthrow new NodeOperationError(ctx.getNode(), 'No session ID found', {\n\t\t\t\tdescription:\n\t\t\t\t\t\"Expected to find the session ID in an input field called 'sessionId' (this is what the chat trigger node outputs). To use something else, change the 'Session ID' parameter\",\n\t\t\t\titemIndex,\n\t\t\t});\n\t\t}\n\t} else {\n\t\tsessionId = ctx.getNodeParameter(customKey, itemIndex, '') as string;\n\t\tif (sessionId === '' || sessionId === undefined) {\n\t\t\tthrow new NodeOperationError(ctx.getNode(), 'Key parameter is empty', {\n\t\t\t\tdescription:\n\t\t\t\t\t\"Provide a key to use as session ID in the 'Key' parameter or use the 'Connected Chat Trigger Node' option to use the session ID from your Chat Trigger\",\n\t\t\t\titemIndex,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn sessionId;\n}\n\nexport function logAiEvent(\n\texecuteFunctions: IExecuteFunctions | ISupplyDataFunctions,\n\tevent: AiEvent,\n\tdata?: IDataObject,\n) {\n\ttry {\n\t\texecuteFunctions.logAiEvent(event, data ? jsonStringify(data) : undefined);\n\t} catch (error) {\n\t\texecuteFunctions.logger.debug(`Error logging AI event: ${event}`);\n\t}\n}\n\nexport function serializeChatHistory(chatHistory: BaseMessage[]): string {\n\treturn chatHistory\n\t\t.map((chatMessage) => {\n\t\t\tif (chatMessage._getType() === 'human') {\n\t\t\t\treturn `Human: ${chatMessage.content}`;\n\t\t\t} else if (chatMessage._getType() === 'ai') {\n\t\t\t\treturn `Assistant: ${chatMessage.content}`;\n\t\t\t} else {\n\t\t\t\treturn `${chatMessage.content}`;\n\t\t\t}\n\t\t})\n\t\t.join('\\n');\n}\n\nexport function escapeSingleCurlyBrackets(text?: string): string | undefined {\n\tif (text === undefined) return undefined;\n\n\tlet result = text;\n\n\tresult = result\n\t\t// First handle triple brackets to avoid interference with double brackets\n\t\t.replace(/(?<!{){{{(?!{)/g, '{{{{')\n\t\t.replace(/(?<!})}}}(?!})/g, '}}}}')\n\t\t// Then handle single brackets, but only if they're not part of double brackets\n\t\t// Convert single { to {{ if it's not already part of {{ or {{{\n\t\t.replace(/(?<!{){(?!{)/g, '{{')\n\t\t// Convert single } to }} if it's not already part of }} or }}}\n\t\t.replace(/(?<!})}(?!})/g, '}}');\n\n\treturn result;\n}\n\nexport const getConnectedTools = async (\n\tctx: IExecuteFunctions,\n\tenforceUniqueNames: boolean,\n\tconvertStructuredTool: boolean = true,\n\tescapeCurlyBrackets: boolean = false,\n) => {\n\tconst connectedTools =\n\t\t((await ctx.getInputConnectionData(NodeConnectionTypes.AiTool, 0)) as Tool[]) || [];\n\n\tif (!enforceUniqueNames) return connectedTools;\n\n\tconst seenNames = new Set<string>();\n\n\tconst finalTools = [];\n\n\tfor (const tool of connectedTools) {\n\t\tconst { name } = tool;\n\t\tif (seenNames.has(name)) {\n\t\t\tthrow new NodeOperationError(\n\t\t\t\tctx.getNode(),\n\t\t\t\t`You have multiple tools with the same name: '${name}', please rename them to avoid conflicts`,\n\t\t\t);\n\t\t}\n\t\tseenNames.add(name);\n\n\t\tif (escapeCurlyBrackets) {\n\t\t\ttool.description = escapeSingleCurlyBrackets(tool.description) ?? tool.description;\n\t\t}\n\n\t\tif (convertStructuredTool && tool instanceof N8nTool) {\n\t\t\tfinalTools.push(tool.asDynamicTool());\n\t\t} else {\n\t\t\tfinalTools.push(tool);\n\t\t}\n\t}\n\n\treturn finalTools;\n};\n\n/**\n * Sometimes model output is wrapped in an additional object property.\n * This function unwraps the output if it is in the format { output: { output: { ... } } }\n */\nexport function unwrapNestedOutput(output: Record<string, unknown>): Record<string, unknown> {\n\tif (\n\t\t'output' in output &&\n\t\tObject.keys(output).length === 1 &&\n\t\ttypeof output.output === 'object' &&\n\t\toutput.output !== null &&\n\t\t'output' in output.output &&\n\t\tObject.keys(output.output).length === 1\n\t) {\n\t\treturn output.output as Record<string, unknown>;\n\t}\n\n\treturn output;\n}\n"],"mappings":"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","names":[]}
|
package/dist/utils/logWrapper.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../utils/logWrapper.ts"],"sourcesContent":["import type { BaseChatMemory } from '@langchain/community/memory/chat_memory';\nimport type { BaseCallbackConfig, Callbacks } from '@langchain/core/callbacks/manager';\nimport type { BaseChatMessageHistory } from '@langchain/core/chat_history';\nimport type { Document } from '@langchain/core/documents';\nimport { Embeddings } from '@langchain/core/embeddings';\nimport type { InputValues, MemoryVariables, OutputValues } from '@langchain/core/memory';\nimport type { BaseMessage } from '@langchain/core/messages';\nimport { BaseRetriever } from '@langchain/core/retrievers';\nimport type { Tool } from '@langchain/core/tools';\nimport { VectorStore } from '@langchain/core/vectorstores';\nimport { TextSplitter } from '@langchain/textsplitters';\nimport type { BaseDocumentLoader } from 'langchain/dist/document_loaders/base';\nimport type {\n\tIExecuteFunctions,\n\tINodeExecutionData,\n\tISupplyDataFunctions,\n\tITaskMetadata,\n\tNodeConnectionType,\n} from 'n8n-workflow';\nimport { NodeOperationError, NodeConnectionTypes, parseErrorMetadata } from 'n8n-workflow';\n\nimport { logAiEvent, isToolsInstance, isBaseChatMemory, isBaseChatMessageHistory } from './helpers';\nimport { N8nBinaryLoader } from './N8nBinaryLoader';\nimport { N8nJsonLoader } from './N8nJsonLoader';\n\nexport async function callMethodAsync<T>(\n\tthis: T,\n\tparameters: {\n\t\texecuteFunctions: IExecuteFunctions | ISupplyDataFunctions;\n\t\tconnectionType: NodeConnectionType;\n\t\tcurrentNodeRunIndex: number;\n\t\tmethod: (...args: any[]) => Promise<unknown>;\n\t\targuments: unknown[];\n\t},\n): Promise<unknown> {\n\ttry {\n\t\treturn await parameters.method.call(this, ...parameters.arguments);\n\t} catch (e) {\n\t\tconst connectedNode = parameters.executeFunctions.getNode();\n\n\t\tconst error = new NodeOperationError(connectedNode, e, {\n\t\t\tfunctionality: 'configuration-node',\n\t\t});\n\n\t\tconst metadata = parseErrorMetadata(error);\n\t\tparameters.executeFunctions.addOutputData(\n\t\t\tparameters.connectionType,\n\t\t\tparameters.currentNodeRunIndex,\n\t\t\terror,\n\t\t\tmetadata,\n\t\t);\n\n\t\tif (error.message) {\n\t\t\tif (!error.description) {\n\t\t\t\terror.description = error.message;\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\n\t\tthrow new NodeOperationError(\n\t\t\tconnectedNode,\n\t\t\t`Error on node \"${connectedNode.name}\" which is connected via input \"${parameters.connectionType}\"`,\n\t\t\t{ functionality: 'configuration-node' },\n\t\t);\n\t}\n}\n\nexport function callMethodSync<T>(\n\tthis: T,\n\tparameters: {\n\t\texecuteFunctions: IExecuteFunctions;\n\t\tconnectionType: NodeConnectionType;\n\t\tcurrentNodeRunIndex: number;\n\t\tmethod: (...args: any[]) => T;\n\t\targuments: unknown[];\n\t},\n): unknown {\n\ttry {\n\t\treturn parameters.method.call(this, ...parameters.arguments);\n\t} catch (e) {\n\t\tconst connectedNode = parameters.executeFunctions.getNode();\n\t\tconst error = new NodeOperationError(connectedNode, e);\n\t\tparameters.executeFunctions.addOutputData(\n\t\t\tparameters.connectionType,\n\t\t\tparameters.currentNodeRunIndex,\n\t\t\terror,\n\t\t);\n\n\t\tthrow new NodeOperationError(\n\t\t\tconnectedNode,\n\t\t\t`Error on node \"${connectedNode.name}\" which is connected via input \"${parameters.connectionType}\"`,\n\t\t\t{ functionality: 'configuration-node' },\n\t\t);\n\t}\n}\n\nexport function logWrapper(\n\toriginalInstance:\n\t\t| Tool\n\t\t| BaseChatMemory\n\t\t| BaseChatMessageHistory\n\t\t| BaseRetriever\n\t\t| Embeddings\n\t\t| Document[]\n\t\t| Document\n\t\t| BaseDocumentLoader\n\t\t| TextSplitter\n\t\t| VectorStore\n\t\t| N8nBinaryLoader\n\t\t| N8nJsonLoader,\n\texecuteFunctions: IExecuteFunctions | ISupplyDataFunctions,\n) {\n\treturn new Proxy(originalInstance, {\n\t\tget: (target, prop) => {\n\t\t\tlet connectionType: NodeConnectionType | undefined;\n\t\t\t// ========== BaseChatMemory ==========\n\t\t\tif (isBaseChatMemory(originalInstance)) {\n\t\t\t\tif (prop === 'loadMemoryVariables' && 'loadMemoryVariables' in target) {\n\t\t\t\t\treturn async (values: InputValues): Promise<MemoryVariables> => {\n\t\t\t\t\t\tconnectionType = NodeConnectionTypes.AiMemory;\n\n\t\t\t\t\t\tconst { index } = executeFunctions.addInputData(connectionType, [\n\t\t\t\t\t\t\t[{ json: { action: 'loadMemoryVariables', values } }],\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\tconst response = (await callMethodAsync.call(target, {\n\t\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t\tconnectionType,\n\t\t\t\t\t\t\tcurrentNodeRunIndex: index,\n\t\t\t\t\t\t\tmethod: target[prop],\n\t\t\t\t\t\t\targuments: [values],\n\t\t\t\t\t\t})) as MemoryVariables;\n\n\t\t\t\t\t\tconst chatHistory = (response?.chat_history as BaseMessage[]) ?? response;\n\n\t\t\t\t\t\texecuteFunctions.addOutputData(connectionType, index, [\n\t\t\t\t\t\t\t[{ json: { action: 'loadMemoryVariables', chatHistory } }],\n\t\t\t\t\t\t]);\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t};\n\t\t\t\t} else if (prop === 'saveContext' && 'saveContext' in target) {\n\t\t\t\t\treturn async (input: InputValues, output: OutputValues): Promise<MemoryVariables> => {\n\t\t\t\t\t\tconnectionType = NodeConnectionTypes.AiMemory;\n\n\t\t\t\t\t\tconst { index } = executeFunctions.addInputData(connectionType, [\n\t\t\t\t\t\t\t[{ json: { action: 'saveContext', input, output } }],\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\tconst response = (await callMethodAsync.call(target, {\n\t\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t\tconnectionType,\n\t\t\t\t\t\t\tcurrentNodeRunIndex: index,\n\t\t\t\t\t\t\tmethod: target[prop],\n\t\t\t\t\t\t\targuments: [input, output],\n\t\t\t\t\t\t})) as MemoryVariables;\n\n\t\t\t\t\t\tconst chatHistory = await target.chatHistory.getMessages();\n\n\t\t\t\t\t\texecuteFunctions.addOutputData(connectionType, index, [\n\t\t\t\t\t\t\t[{ json: { action: 'saveContext', chatHistory } }],\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// ========== BaseChatMessageHistory ==========\n\t\t\tif (isBaseChatMessageHistory(originalInstance)) {\n\t\t\t\tif (prop === 'getMessages' && 'getMessages' in target) {\n\t\t\t\t\treturn async (): Promise<BaseMessage[]> => {\n\t\t\t\t\t\tconnectionType = NodeConnectionTypes.AiMemory;\n\t\t\t\t\t\tconst { index } = executeFunctions.addInputData(connectionType, [\n\t\t\t\t\t\t\t[{ json: { action: 'getMessages' } }],\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\tconst response = (await callMethodAsync.call(target, {\n\t\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t\tconnectionType,\n\t\t\t\t\t\t\tcurrentNodeRunIndex: index,\n\t\t\t\t\t\t\tmethod: target[prop],\n\t\t\t\t\t\t\targuments: [],\n\t\t\t\t\t\t})) as BaseMessage[];\n\n\t\t\t\t\t\tconst payload = { action: 'getMessages', response };\n\t\t\t\t\t\texecuteFunctions.addOutputData(connectionType, index, [[{ json: payload }]]);\n\n\t\t\t\t\t\tlogAiEvent(executeFunctions, 'ai-messages-retrieved-from-memory', { response });\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t};\n\t\t\t\t} else if (prop === 'addMessage' && 'addMessage' in target) {\n\t\t\t\t\treturn async (message: BaseMessage): Promise<void> => {\n\t\t\t\t\t\tconnectionType = NodeConnectionTypes.AiMemory;\n\t\t\t\t\t\tconst payload = { action: 'addMessage', message };\n\t\t\t\t\t\tconst { index } = executeFunctions.addInputData(connectionType, [[{ json: payload }]]);\n\n\t\t\t\t\t\tawait callMethodAsync.call(target, {\n\t\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t\tconnectionType,\n\t\t\t\t\t\t\tcurrentNodeRunIndex: index,\n\t\t\t\t\t\t\tmethod: target[prop],\n\t\t\t\t\t\t\targuments: [message],\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tlogAiEvent(executeFunctions, 'ai-message-added-to-memory', { message });\n\t\t\t\t\t\texecuteFunctions.addOutputData(connectionType, index, [[{ json: payload }]]);\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// ========== BaseRetriever ==========\n\t\t\tif (originalInstance instanceof BaseRetriever) {\n\t\t\t\tif (prop === 'getRelevantDocuments' && 'getRelevantDocuments' in target) {\n\t\t\t\t\treturn async (\n\t\t\t\t\t\tquery: string,\n\t\t\t\t\t\tconfig?: Callbacks | BaseCallbackConfig,\n\t\t\t\t\t): Promise<Document[]> => {\n\t\t\t\t\t\tconnectionType = NodeConnectionTypes.AiRetriever;\n\t\t\t\t\t\tconst { index } = executeFunctions.addInputData(connectionType, [\n\t\t\t\t\t\t\t[{ json: { query, config } }],\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\tconst response = (await callMethodAsync.call(target, {\n\t\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t\tconnectionType,\n\t\t\t\t\t\t\tcurrentNodeRunIndex: index,\n\t\t\t\t\t\t\tmethod: target[prop],\n\t\t\t\t\t\t\targuments: [query, config],\n\t\t\t\t\t\t})) as Array<Document<Record<string, any>>>;\n\n\t\t\t\t\t\tconst executionId: string | undefined = response[0]?.metadata?.executionId as string;\n\t\t\t\t\t\tconst workflowId: string | undefined = response[0]?.metadata?.workflowId as string;\n\n\t\t\t\t\t\tconst metadata: ITaskMetadata = {};\n\t\t\t\t\t\tif (executionId && workflowId) {\n\t\t\t\t\t\t\tmetadata.subExecution = {\n\t\t\t\t\t\t\t\texecutionId,\n\t\t\t\t\t\t\t\tworkflowId,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tlogAiEvent(executeFunctions, 'ai-documents-retrieved', { query });\n\t\t\t\t\t\texecuteFunctions.addOutputData(\n\t\t\t\t\t\t\tconnectionType,\n\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t[[{ json: { response } }]],\n\t\t\t\t\t\t\tmetadata,\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// ========== Embeddings ==========\n\t\t\tif (originalInstance instanceof Embeddings) {\n\t\t\t\t// Docs -> Embeddings\n\t\t\t\tif (prop === 'embedDocuments' && 'embedDocuments' in target) {\n\t\t\t\t\treturn async (documents: string[]): Promise<number[][]> => {\n\t\t\t\t\t\tconnectionType = NodeConnectionTypes.AiEmbedding;\n\t\t\t\t\t\tconst { index } = executeFunctions.addInputData(connectionType, [\n\t\t\t\t\t\t\t[{ json: { documents } }],\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\tconst response = (await callMethodAsync.call(target, {\n\t\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t\tconnectionType,\n\t\t\t\t\t\t\tcurrentNodeRunIndex: index,\n\t\t\t\t\t\t\tmethod: target[prop],\n\t\t\t\t\t\t\targuments: [documents],\n\t\t\t\t\t\t})) as number[][];\n\n\t\t\t\t\t\tlogAiEvent(executeFunctions, 'ai-document-embedded');\n\t\t\t\t\t\texecuteFunctions.addOutputData(connectionType, index, [[{ json: { response } }]]);\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\t// Query -> Embeddings\n\t\t\t\tif (prop === 'embedQuery' && 'embedQuery' in target) {\n\t\t\t\t\treturn async (query: string): Promise<number[]> => {\n\t\t\t\t\t\tconnectionType = NodeConnectionTypes.AiEmbedding;\n\t\t\t\t\t\tconst { index } = executeFunctions.addInputData(connectionType, [\n\t\t\t\t\t\t\t[{ json: { query } }],\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\tconst response = (await callMethodAsync.call(target, {\n\t\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t\tconnectionType,\n\t\t\t\t\t\t\tcurrentNodeRunIndex: index,\n\t\t\t\t\t\t\tmethod: target[prop],\n\t\t\t\t\t\t\targuments: [query],\n\t\t\t\t\t\t})) as number[];\n\t\t\t\t\t\tlogAiEvent(executeFunctions, 'ai-query-embedded');\n\t\t\t\t\t\texecuteFunctions.addOutputData(connectionType, index, [[{ json: { response } }]]);\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// ========== N8n Loaders Process All ==========\n\t\t\tif (\n\t\t\t\toriginalInstance instanceof N8nJsonLoader ||\n\t\t\t\toriginalInstance instanceof N8nBinaryLoader\n\t\t\t) {\n\t\t\t\t// Process All\n\t\t\t\tif (prop === 'processAll' && 'processAll' in target) {\n\t\t\t\t\treturn async (items: INodeExecutionData[]): Promise<number[]> => {\n\t\t\t\t\t\tconnectionType = NodeConnectionTypes.AiDocument;\n\t\t\t\t\t\tconst { index } = executeFunctions.addInputData(connectionType, [items]);\n\n\t\t\t\t\t\tconst response = (await callMethodAsync.call(target, {\n\t\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t\tconnectionType,\n\t\t\t\t\t\t\tcurrentNodeRunIndex: index,\n\t\t\t\t\t\t\tmethod: target[prop],\n\t\t\t\t\t\t\targuments: [items],\n\t\t\t\t\t\t})) as number[];\n\n\t\t\t\t\t\texecuteFunctions.addOutputData(connectionType, index, [[{ json: { response } }]]);\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Process Each\n\t\t\t\tif (prop === 'processItem' && 'processItem' in target) {\n\t\t\t\t\treturn async (item: INodeExecutionData, itemIndex: number): Promise<number[]> => {\n\t\t\t\t\t\tconnectionType = NodeConnectionTypes.AiDocument;\n\t\t\t\t\t\tconst { index } = executeFunctions.addInputData(connectionType, [[item]]);\n\n\t\t\t\t\t\tconst response = (await callMethodAsync.call(target, {\n\t\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t\tconnectionType,\n\t\t\t\t\t\t\tcurrentNodeRunIndex: index,\n\t\t\t\t\t\t\tmethod: target[prop],\n\t\t\t\t\t\t\targuments: [item, itemIndex],\n\t\t\t\t\t\t})) as number[];\n\n\t\t\t\t\t\tlogAiEvent(executeFunctions, 'ai-document-processed');\n\t\t\t\t\t\texecuteFunctions.addOutputData(connectionType, index, [\n\t\t\t\t\t\t\t[{ json: { response }, pairedItem: { item: itemIndex } }],\n\t\t\t\t\t\t]);\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// ========== TextSplitter ==========\n\t\t\tif (originalInstance instanceof TextSplitter) {\n\t\t\t\tif (prop === 'splitText' && 'splitText' in target) {\n\t\t\t\t\treturn async (text: string): Promise<string[]> => {\n\t\t\t\t\t\tconnectionType = NodeConnectionTypes.AiTextSplitter;\n\t\t\t\t\t\tconst { index } = executeFunctions.addInputData(connectionType, [\n\t\t\t\t\t\t\t[{ json: { textSplitter: text } }],\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\tconst response = (await callMethodAsync.call(target, {\n\t\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t\tconnectionType,\n\t\t\t\t\t\t\tcurrentNodeRunIndex: index,\n\t\t\t\t\t\t\tmethod: target[prop],\n\t\t\t\t\t\t\targuments: [text],\n\t\t\t\t\t\t})) as string[];\n\n\t\t\t\t\t\tlogAiEvent(executeFunctions, 'ai-text-split');\n\t\t\t\t\t\texecuteFunctions.addOutputData(connectionType, index, [[{ json: { response } }]]);\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// ========== Tool ==========\n\t\t\tif (isToolsInstance(originalInstance)) {\n\t\t\t\tif (prop === '_call' && '_call' in target) {\n\t\t\t\t\treturn async (query: string): Promise<string> => {\n\t\t\t\t\t\tconnectionType = NodeConnectionTypes.AiTool;\n\t\t\t\t\t\tconst { index } = executeFunctions.addInputData(connectionType, [\n\t\t\t\t\t\t\t[{ json: { query } }],\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\tconst response = (await callMethodAsync.call(target, {\n\t\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t\tconnectionType,\n\t\t\t\t\t\t\tcurrentNodeRunIndex: index,\n\t\t\t\t\t\t\tmethod: target[prop],\n\t\t\t\t\t\t\targuments: [query],\n\t\t\t\t\t\t})) as string;\n\n\t\t\t\t\t\tlogAiEvent(executeFunctions, 'ai-tool-called', { query, response });\n\t\t\t\t\t\texecuteFunctions.addOutputData(connectionType, index, [[{ json: { response } }]]);\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// ========== VectorStore ==========\n\t\t\tif (originalInstance instanceof VectorStore) {\n\t\t\t\tif (prop === 'similaritySearch' && 'similaritySearch' in target) {\n\t\t\t\t\treturn async (\n\t\t\t\t\t\tquery: string,\n\t\t\t\t\t\tk?: number,\n\t\t\t\t\t\tfilter?: BiquadFilterType | undefined,\n\t\t\t\t\t\t_callbacks?: Callbacks | undefined,\n\t\t\t\t\t): Promise<Document[]> => {\n\t\t\t\t\t\tconnectionType = NodeConnectionTypes.AiVectorStore;\n\t\t\t\t\t\tconst { index } = executeFunctions.addInputData(connectionType, [\n\t\t\t\t\t\t\t[{ json: { query, k, filter } }],\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\tconst response = (await callMethodAsync.call(target, {\n\t\t\t\t\t\t\texecuteFunctions,\n\t\t\t\t\t\t\tconnectionType,\n\t\t\t\t\t\t\tcurrentNodeRunIndex: index,\n\t\t\t\t\t\t\tmethod: target[prop],\n\t\t\t\t\t\t\targuments: [query, k, filter, _callbacks],\n\t\t\t\t\t\t})) as Array<Document<Record<string, any>>>;\n\n\t\t\t\t\t\tlogAiEvent(executeFunctions, 'ai-vector-store-searched', { query });\n\t\t\t\t\t\texecuteFunctions.addOutputData(connectionType, index, [[{ json: { response } }]]);\n\n\t\t\t\t\t\treturn response;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return\n\t\t\treturn (target as any)[prop];\n\t\t},\n\t});\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../utils/output_parsers/N8nItemListOutputParser.ts"],"sourcesContent":["import { BaseOutputParser, OutputParserException } from '@langchain/core/output_parsers';\n\nexport class N8nItemListOutputParser extends BaseOutputParser<string[]> {\n\tlc_namespace = ['n8n-nodes-langchain', 'output_parsers', 'list_items'];\n\n\tprivate numberOfItems: number | undefined;\n\n\tprivate separator: string;\n\n\tconstructor(options: { numberOfItems?: number; separator?: string }) {\n\t\tsuper();\n\n\t\tconst { numberOfItems = 3, separator = '\\n' } = options;\n\n\t\tif (numberOfItems && numberOfItems > 0) {\n\t\t\tthis.numberOfItems = numberOfItems;\n\t\t}\n\n\t\tthis.separator = separator;\n\n\t\tif (this.separator === '\\\\n') {\n\t\t\tthis.separator = '\\n';\n\t\t}\n\t}\n\n\tasync parse(text: string): Promise<string[]> {\n\t\tconst response = text\n\t\t\t.split(this.separator)\n\t\t\t.map((item) => item.trim())\n\t\t\t.filter((item) => item);\n\n\t\tif (this.numberOfItems && response.length < this.numberOfItems) {\n\t\t\t// Only error if to few items got returned, if there are to many we can autofix it\n\t\t\tthrow new OutputParserException(\n\t\t\t\t`Wrong number of items returned. Expected ${this.numberOfItems} items but got ${response.length} items instead.`,\n\t\t\t);\n\t\t}\n\n\t\treturn response.slice(0, this.numberOfItems);\n\t}\n\n\tgetFormatInstructions(): string {\n\t\tconst instructions = `Your response should be a list of ${\n\t\t\tthis.numberOfItems ? this.numberOfItems + ' ' : ''\n\t\t}items separated by`;\n\n\t\tconst numberOfExamples = this.numberOfItems ?? 3; // Default number of examples in case numberOfItems is not set\n\n\t\tconst examples: string[] = [];\n\t\tfor (let i = 1; i <= numberOfExamples; i++) {\n\t\t\texamples.push(`item${i}`);\n\t\t}\n\n\t\treturn `${instructions} \"${this.separator}\" (for example: \"${examples.join(this.separator)}\")`;\n\t}\n\n\tgetSchema() {\n\t\treturn;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAwD;AAEjD,MAAM,gCAAgC,uCAA2B;AAAA,EAOvE,YAAY,SAAyD;AACpE,UAAM;AAPP,wBAAe,CAAC,uBAAuB,kBAAkB,YAAY;AASpE,UAAM,EAAE,gBAAgB,GAAG,YAAY,KAAK,IAAI;AAEhD,QAAI,iBAAiB,gBAAgB,GAAG;AACvC,WAAK,gBAAgB;AAAA,IACtB;AAEA,SAAK,YAAY;AAEjB,QAAI,KAAK,cAAc,OAAO;AAC7B,WAAK,YAAY;AAAA,IAClB;AAAA,EACD;AAAA,EAEA,MAAM,MAAM,MAAiC;AAC5C,UAAM,WAAW,KACf,MAAM,KAAK,SAAS,EACpB,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,EACzB,OAAO,CAAC,SAAS,IAAI;AAEvB,QAAI,KAAK,iBAAiB,SAAS,SAAS,KAAK,eAAe;AAE/D,YAAM,IAAI;AAAA,QACT,4CAA4C,KAAK,aAAa,kBAAkB,SAAS,MAAM;AAAA,MAChG;AAAA,IACD;AAEA,WAAO,SAAS,MAAM,GAAG,KAAK,aAAa;AAAA,EAC5C;AAAA,EAEA,wBAAgC;AAC/B,UAAM,eAAe,qCACpB,KAAK,gBAAgB,KAAK,gBAAgB,MAAM,EACjD;AAEA,UAAM,mBAAmB,KAAK,iBAAiB;AAE/C,UAAM,WAAqB,CAAC;AAC5B,aAAS,IAAI,GAAG,KAAK,kBAAkB,KAAK;AAC3C,eAAS,KAAK,OAAO,CAAC,EAAE;AAAA,IACzB;AAEA,WAAO,GAAG,YAAY,KAAK,KAAK,SAAS,oBAAoB,SAAS,KAAK,KAAK,SAAS,CAAC;AAAA,EAC3F;AAAA,EAEA,YAAY;AACX;AAAA,EACD;AACD;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../utils/output_parsers/N8nOutputFixingParser.ts"],"sourcesContent":["import type { Callbacks } from '@langchain/core/callbacks/manager';\nimport type { BaseLanguageModel } from '@langchain/core/language_models/base';\nimport type { AIMessage } from '@langchain/core/messages';\nimport { BaseOutputParser, OutputParserException } from '@langchain/core/output_parsers';\nimport type { PromptTemplate } from '@langchain/core/prompts';\nimport type { ISupplyDataFunctions } from 'n8n-workflow';\nimport { NodeConnectionTypes } from 'n8n-workflow';\n\nimport type { N8nStructuredOutputParser } from './N8nStructuredOutputParser';\nimport { logAiEvent } from '../helpers';\n\nexport class N8nOutputFixingParser extends BaseOutputParser {\n\tlc_namespace = ['langchain', 'output_parsers', 'fix'];\n\n\tconstructor(\n\t\tprivate context: ISupplyDataFunctions,\n\t\tprivate model: BaseLanguageModel,\n\t\tprivate outputParser: N8nStructuredOutputParser,\n\t\tprivate fixPromptTemplate: PromptTemplate,\n\t) {\n\t\tsuper();\n\t}\n\n\tgetRetryChain() {\n\t\treturn this.fixPromptTemplate.pipe(this.model);\n\t}\n\n\t/**\n\t * Attempts to parse the completion string using the output parser.\n\t * If the initial parse fails, it tries to fix the output using a retry chain.\n\t * @param completion The string to be parsed\n\t * @returns The parsed response\n\t * @throws Error if both parsing attempts fail\n\t */\n\tasync parse(completion: string, callbacks?: Callbacks) {\n\t\tconst { index } = this.context.addInputData(NodeConnectionTypes.AiOutputParser, [\n\t\t\t[{ json: { action: 'parse', text: completion } }],\n\t\t]);\n\n\t\ttry {\n\t\t\t// First attempt to parse the completion\n\t\t\tconst response = await this.outputParser.parse(completion, callbacks, (e) => {\n\t\t\t\tif (e instanceof OutputParserException) {\n\t\t\t\t\treturn e;\n\t\t\t\t}\n\t\t\t\treturn new OutputParserException(e.message, completion);\n\t\t\t});\n\t\t\tlogAiEvent(this.context, 'ai-output-parsed', { text: completion, response });\n\n\t\t\tthis.context.addOutputData(NodeConnectionTypes.AiOutputParser, index, [\n\t\t\t\t[{ json: { action: 'parse', response } }],\n\t\t\t]);\n\n\t\t\treturn response;\n\t\t} catch (error) {\n\t\t\tif (!(error instanceof OutputParserException)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\t// Second attempt: use retry chain to fix the output\n\t\t\t\tconst result = (await this.getRetryChain().invoke({\n\t\t\t\t\tcompletion,\n\t\t\t\t\terror: error.message,\n\t\t\t\t\tinstructions: this.getFormatInstructions(),\n\t\t\t\t})) as AIMessage;\n\n\t\t\t\tconst resultText = result.content.toString();\n\t\t\t\tconst parsed = await this.outputParser.parse(resultText, callbacks);\n\n\t\t\t\t// Add the successfully parsed output to the context\n\t\t\t\tthis.context.addOutputData(NodeConnectionTypes.AiOutputParser, index, [\n\t\t\t\t\t[{ json: { action: 'parse', response: parsed } }],\n\t\t\t\t]);\n\n\t\t\t\treturn parsed;\n\t\t\t} catch (autoParseError) {\n\t\t\t\t// If both attempts fail, add the error to the output and throw\n\t\t\t\tthis.context.addOutputData(NodeConnectionTypes.AiOutputParser, index, autoParseError);\n\t\t\t\tthrow autoParseError;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Method to get the format instructions for the parser.\n\t * @returns The format instructions for the parser.\n\t */\n\tgetFormatInstructions() {\n\t\treturn this.outputParser.getFormatInstructions();\n\t}\n\n\tgetSchema() {\n\t\treturn this.outputParser.schema;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,4BAAwD;AAGxD,0BAAoC;AAGpC,qBAA2B;AAEpB,MAAM,8BAA8B,uCAAiB;AAAA,EAG3D,YACS,SACA,OACA,cACA,mBACP;AACD,UAAM;AALE;AACA;AACA;AACA;AANT,wBAAe,CAAC,aAAa,kBAAkB,KAAK;AAAA,EASpD;AAAA,EAEA,gBAAgB;AACf,WAAO,KAAK,kBAAkB,KAAK,KAAK,KAAK;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,MAAM,YAAoB,WAAuB;AACtD,UAAM,EAAE,MAAM,IAAI,KAAK,QAAQ,aAAa,wCAAoB,gBAAgB;AAAA,MAC/E,CAAC,EAAE,MAAM,EAAE,QAAQ,SAAS,MAAM,WAAW,EAAE,CAAC;AAAA,IACjD,CAAC;AAED,QAAI;AAEH,YAAM,WAAW,MAAM,KAAK,aAAa,MAAM,YAAY,WAAW,CAAC,MAAM;AAC5E,YAAI,aAAa,6CAAuB;AACvC,iBAAO;AAAA,QACR;AACA,eAAO,IAAI,4CAAsB,EAAE,SAAS,UAAU;AAAA,MACvD,CAAC;AACD,qCAAW,KAAK,SAAS,oBAAoB,EAAE,MAAM,YAAY,SAAS,CAAC;AAE3E,WAAK,QAAQ,cAAc,wCAAoB,gBAAgB,OAAO;AAAA,QACrE,CAAC,EAAE,MAAM,EAAE,QAAQ,SAAS,SAAS,EAAE,CAAC;AAAA,MACzC,CAAC;AAED,aAAO;AAAA,IACR,SAAS,OAAO;AACf,UAAI,EAAE,iBAAiB,8CAAwB;AAC9C,cAAM;AAAA,MACP;AACA,UAAI;AAEH,cAAM,SAAU,MAAM,KAAK,cAAc,EAAE,OAAO;AAAA,UACjD;AAAA,UACA,OAAO,MAAM;AAAA,UACb,cAAc,KAAK,sBAAsB;AAAA,QAC1C,CAAC;AAED,cAAM,aAAa,OAAO,QAAQ,SAAS;AAC3C,cAAM,SAAS,MAAM,KAAK,aAAa,MAAM,YAAY,SAAS;AAGlE,aAAK,QAAQ,cAAc,wCAAoB,gBAAgB,OAAO;AAAA,UACrE,CAAC,EAAE,MAAM,EAAE,QAAQ,SAAS,UAAU,OAAO,EAAE,CAAC;AAAA,QACjD,CAAC;AAED,eAAO;AAAA,MACR,SAAS,gBAAgB;AAExB,aAAK,QAAQ,cAAc,wCAAoB,gBAAgB,OAAO,cAAc;AACpF,cAAM;AAAA,MACP;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,wBAAwB;AACvB,WAAO,KAAK,aAAa,sBAAsB;AAAA,EAChD;AAAA,EAEA,YAAY;AACX,WAAO,KAAK,aAAa;AAAA,EAC1B;AACD;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../utils/output_parsers/N8nOutputParser.ts"],"sourcesContent":["import type { IExecuteFunctions } from 'n8n-workflow';\nimport { NodeConnectionTypes } from 'n8n-workflow';\n\nimport { N8nItemListOutputParser } from './N8nItemListOutputParser';\nimport { N8nOutputFixingParser } from './N8nOutputFixingParser';\nimport { N8nStructuredOutputParser } from './N8nStructuredOutputParser';\n\nexport type N8nOutputParser =\n\t| N8nOutputFixingParser\n\t| N8nStructuredOutputParser\n\t| N8nItemListOutputParser;\n\nexport { N8nOutputFixingParser, N8nItemListOutputParser, N8nStructuredOutputParser };\n\nexport async function getOptionalOutputParser(\n\tctx: IExecuteFunctions,\n): Promise<N8nOutputParser | undefined> {\n\tlet outputParser: N8nOutputParser | undefined;\n\n\tif (ctx.getNodeParameter('hasOutputParser', 0, true) === true) {\n\t\toutputParser = (await ctx.getInputConnectionData(\n\t\t\tNodeConnectionTypes.AiOutputParser,\n\t\t\t0,\n\t\t)) as N8nOutputParser;\n\t}\n\n\treturn outputParser;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,0BAAoC;AAEpC,qCAAwC;AACxC,mCAAsC;AACtC,uCAA0C;AAS1C,eAAsB,wBACrB,KACuC;AACvC,MAAI;AAEJ,MAAI,IAAI,iBAAiB,mBAAmB,GAAG,IAAI,MAAM,MAAM;AAC9D,mBAAgB,MAAM,IAAI;AAAA,MACzB,wCAAoB;AAAA,MACpB;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../utils/output_parsers/N8nStructuredOutputParser.ts"],"sourcesContent":["import type { Callbacks } from '@langchain/core/callbacks/manager';\nimport { StructuredOutputParser } from 'langchain/output_parsers';\nimport get from 'lodash/get';\nimport type { ISupplyDataFunctions } from 'n8n-workflow';\nimport { NodeConnectionTypes, NodeOperationError } from 'n8n-workflow';\nimport { z } from 'zod';\n\nimport { logAiEvent, unwrapNestedOutput } from '../helpers';\n\nconst STRUCTURED_OUTPUT_KEY = '__structured__output';\nconst STRUCTURED_OUTPUT_OBJECT_KEY = '__structured__output__object';\nconst STRUCTURED_OUTPUT_ARRAY_KEY = '__structured__output__array';\n\nexport class N8nStructuredOutputParser extends StructuredOutputParser<\n\tz.ZodType<object, z.ZodTypeDef, object>\n> {\n\tconstructor(\n\t\tprivate context: ISupplyDataFunctions,\n\t\tzodSchema: z.ZodSchema<object>,\n\t) {\n\t\tsuper(zodSchema);\n\t}\n\n\tlc_namespace = ['langchain', 'output_parsers', 'structured'];\n\n\tasync parse(\n\t\ttext: string,\n\t\t_callbacks?: Callbacks,\n\t\terrorMapper?: (error: Error) => Error,\n\t): Promise<object> {\n\t\tconst { index } = this.context.addInputData(NodeConnectionTypes.AiOutputParser, [\n\t\t\t[{ json: { action: 'parse', text } }],\n\t\t]);\n\t\ttry {\n\t\t\tconst jsonString = text.includes('```') ? text.split(/```(?:json)?/)[1] : text;\n\t\t\tconst json = JSON.parse(jsonString.trim());\n\t\t\tconst parsed = await this.schema.parseAsync(json);\n\n\t\t\tlet result = (get(parsed, [STRUCTURED_OUTPUT_KEY, STRUCTURED_OUTPUT_OBJECT_KEY]) ??\n\t\t\t\tget(parsed, [STRUCTURED_OUTPUT_KEY, STRUCTURED_OUTPUT_ARRAY_KEY]) ??\n\t\t\t\tget(parsed, STRUCTURED_OUTPUT_KEY) ??\n\t\t\t\tparsed) as Record<string, unknown>;\n\n\t\t\t// Unwrap any doubly-nested output structures (e.g., {output: {output: {...}}})\n\t\t\tresult = unwrapNestedOutput(result);\n\n\t\t\tlogAiEvent(this.context, 'ai-output-parsed', { text, response: result });\n\n\t\t\tthis.context.addOutputData(NodeConnectionTypes.AiOutputParser, index, [\n\t\t\t\t[{ json: { action: 'parse', response: result } }],\n\t\t\t]);\n\n\t\t\treturn result;\n\t\t} catch (e) {\n\t\t\tconst nodeError = new NodeOperationError(\n\t\t\t\tthis.context.getNode(),\n\t\t\t\t\"Model output doesn't fit required format\",\n\t\t\t\t{\n\t\t\t\t\tdescription:\n\t\t\t\t\t\t\"To continue the execution when this happens, change the 'On Error' parameter in the root node's settings\",\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tlogAiEvent(this.context, 'ai-output-parsed', {\n\t\t\t\ttext,\n\t\t\t\tresponse: e.message ?? e,\n\t\t\t});\n\n\t\t\tthis.context.addOutputData(NodeConnectionTypes.AiOutputParser, index, nodeError);\n\t\t\tif (errorMapper) {\n\t\t\t\tthrow errorMapper(e);\n\t\t\t}\n\n\t\t\tthrow nodeError;\n\t\t}\n\t}\n\n\tstatic async fromZodJsonSchema(\n\t\tzodSchema: z.ZodSchema<object>,\n\t\tnodeVersion: number,\n\t\tcontext: ISupplyDataFunctions,\n\t): Promise<N8nStructuredOutputParser> {\n\t\tlet returnSchema: z.ZodType<object, z.ZodTypeDef, object>;\n\t\tif (nodeVersion === 1) {\n\t\t\treturnSchema = z.object({\n\t\t\t\t[STRUCTURED_OUTPUT_KEY]: z\n\t\t\t\t\t.object({\n\t\t\t\t\t\t[STRUCTURED_OUTPUT_OBJECT_KEY]: zodSchema.optional(),\n\t\t\t\t\t\t[STRUCTURED_OUTPUT_ARRAY_KEY]: z.array(zodSchema).optional(),\n\t\t\t\t\t})\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t`Wrapper around the output data. It can only contain ${STRUCTURED_OUTPUT_OBJECT_KEY} or ${STRUCTURED_OUTPUT_ARRAY_KEY} but never both.`,\n\t\t\t\t\t)\n\t\t\t\t\t.refine(\n\t\t\t\t\t\t(data) => {\n\t\t\t\t\t\t\t// Validate that one and only one of the properties exists\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\tBoolean(data[STRUCTURED_OUTPUT_OBJECT_KEY]) !==\n\t\t\t\t\t\t\t\tBoolean(data[STRUCTURED_OUTPUT_ARRAY_KEY])\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\t'One and only one of __structured__output__object and __structured__output__array should be present.',\n\t\t\t\t\t\t\tpath: [STRUCTURED_OUTPUT_KEY],\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t});\n\t\t} else {\n\t\t\treturnSchema = z.object({\n\t\t\t\toutput: zodSchema.optional(),\n\t\t\t});\n\t\t}\n\n\t\treturn new N8nStructuredOutputParser(context, returnSchema);\n\t}\n\n\tgetSchema() {\n\t\treturn this.schema;\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,4BAAuC;AACvC,iBAAgB;AAEhB,0BAAwD;AACxD,iBAAkB;AAElB,qBAA+C;AAE/C,MAAM,wBAAwB;AAC9B,MAAM,+BAA+B;AACrC,MAAM,8BAA8B;AAE7B,MAAM,kCAAkC,6CAE7C;AAAA,EACD,YACS,SACR,WACC;AACD,UAAM,SAAS;AAHP;AAMT,wBAAe,CAAC,aAAa,kBAAkB,YAAY;AAAA,EAF3D;AAAA,EAIA,MAAM,MACL,MACA,YACA,aACkB;AAClB,UAAM,EAAE,MAAM,IAAI,KAAK,QAAQ,aAAa,wCAAoB,gBAAgB;AAAA,MAC/E,CAAC,EAAE,MAAM,EAAE,QAAQ,SAAS,KAAK,EAAE,CAAC;AAAA,IACrC,CAAC;AACD,QAAI;AACH,YAAM,aAAa,KAAK,SAAS,KAAK,IAAI,KAAK,MAAM,cAAc,EAAE,CAAC,IAAI;AAC1E,YAAM,OAAO,KAAK,MAAM,WAAW,KAAK,CAAC;AACzC,YAAM,SAAS,MAAM,KAAK,OAAO,WAAW,IAAI;AAEhD,UAAI,aAAU,WAAAA,SAAI,QAAQ,CAAC,uBAAuB,4BAA4B,CAAC,SAC9E,WAAAA,SAAI,QAAQ,CAAC,uBAAuB,2BAA2B,CAAC,SAChE,WAAAA,SAAI,QAAQ,qBAAqB,KACjC;AAGD,mBAAS,mCAAmB,MAAM;AAElC,qCAAW,KAAK,SAAS,oBAAoB,EAAE,MAAM,UAAU,OAAO,CAAC;AAEvE,WAAK,QAAQ,cAAc,wCAAoB,gBAAgB,OAAO;AAAA,QACrE,CAAC,EAAE,MAAM,EAAE,QAAQ,SAAS,UAAU,OAAO,EAAE,CAAC;AAAA,MACjD,CAAC;AAED,aAAO;AAAA,IACR,SAAS,GAAG;AACX,YAAM,YAAY,IAAI;AAAA,QACrB,KAAK,QAAQ,QAAQ;AAAA,QACrB;AAAA,QACA;AAAA,UACC,aACC;AAAA,QACF;AAAA,MACD;AAEA,qCAAW,KAAK,SAAS,oBAAoB;AAAA,QAC5C;AAAA,QACA,UAAU,EAAE,WAAW;AAAA,MACxB,CAAC;AAED,WAAK,QAAQ,cAAc,wCAAoB,gBAAgB,OAAO,SAAS;AAC/E,UAAI,aAAa;AAChB,cAAM,YAAY,CAAC;AAAA,MACpB;AAEA,YAAM;AAAA,IACP;AAAA,EACD;AAAA,EAEA,aAAa,kBACZ,WACA,aACA,SACqC;AACrC,QAAI;AACJ,QAAI,gBAAgB,GAAG;AACtB,qBAAe,aAAE,OAAO;AAAA,QACvB,CAAC,qBAAqB,GAAG,aACvB,OAAO;AAAA,UACP,CAAC,4BAA4B,GAAG,UAAU,SAAS;AAAA,UACnD,CAAC,2BAA2B,GAAG,aAAE,MAAM,SAAS,EAAE,SAAS;AAAA,QAC5D,CAAC,EACA;AAAA,UACA,uDAAuD,4BAA4B,OAAO,2BAA2B;AAAA,QACtH,EACC;AAAA,UACA,CAAC,SAAS;AAET,mBACC,QAAQ,KAAK,4BAA4B,CAAC,MAC1C,QAAQ,KAAK,2BAA2B,CAAC;AAAA,UAE3C;AAAA,UACA;AAAA,YACC,SACC;AAAA,YACD,MAAM,CAAC,qBAAqB;AAAA,UAC7B;AAAA,QACD;AAAA,MACF,CAAC;AAAA,IACF,OAAO;AACN,qBAAe,aAAE,OAAO;AAAA,QACvB,QAAQ,UAAU,SAAS;AAAA,MAC5B,CAAC;AAAA,IACF;AAEA,WAAO,IAAI,0BAA0B,SAAS,YAAY;AAAA,EAC3D;AAAA,EAEA,YAAY;AACX,WAAO,KAAK;AAAA,EACb;AACD;","names":["get"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../utils/output_parsers/prompt.ts"],"sourcesContent":["import { PromptTemplate } from '@langchain/core/prompts';\n\nexport const NAIVE_FIX_TEMPLATE = `Instructions:\n--------------\n{instructions}\n--------------\nCompletion:\n--------------\n{completion}\n--------------\n\nAbove, the Completion did not satisfy the constraints given in the Instructions.\nError:\n--------------\n{error}\n--------------\n\nPlease try again. Please only respond with an answer that satisfies the constraints laid out in the Instructions:`;\n\nexport const NAIVE_FIX_PROMPT = PromptTemplate.fromTemplate(NAIVE_FIX_TEMPLATE);\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAA+B;AAExB,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiB3B,MAAM,mBAAmB,8BAAe,aAAa,kBAAkB;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../utils/schemaParsing.ts"],"sourcesContent":["import { jsonSchemaToZod } from '@n8n/json-schema-to-zod';\nimport { json as generateJsonSchema } from 'generate-schema';\nimport type { SchemaObject } from 'generate-schema';\nimport type { JSONSchema7 } from 'json-schema';\nimport type { IExecuteFunctions } from 'n8n-workflow';\nimport { NodeOperationError, jsonParse } from 'n8n-workflow';\nimport type { z } from 'zod';\n\nexport function generateSchema(schemaString: string): JSONSchema7 {\n\tconst parsedSchema = jsonParse<SchemaObject>(schemaString);\n\n\treturn generateJsonSchema(parsedSchema) as JSONSchema7;\n}\n\nexport function convertJsonSchemaToZod<T extends z.ZodTypeAny = z.ZodTypeAny>(schema: JSONSchema7) {\n\treturn jsonSchemaToZod<T>(schema);\n}\n\nexport function throwIfToolSchema(ctx: IExecuteFunctions, error: Error) {\n\tif (error?.message?.includes('tool input did not match expected schema')) {\n\t\tthrow new NodeOperationError(\n\t\t\tctx.getNode(),\n\t\t\t`${error.message}.\n\t\t\tThis is most likely because some of your tools are configured to require a specific schema. This is not supported by Conversational Agent. Remove the schema from the tool configuration or use Tools agent instead.`,\n\t\t);\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAgC;AAChC,6BAA2C;AAI3C,0BAA8C;AAGvC,SAAS,eAAe,cAAmC;AACjE,QAAM,mBAAe,+BAAwB,YAAY;AAEzD,aAAO,uBAAAA,MAAmB,YAAY;AACvC;AAEO,SAAS,uBAA8D,QAAqB;AAClG,aAAO,2CAAmB,MAAM;AACjC;AAEO,SAAS,kBAAkB,KAAwB,OAAc;AACvE,MAAI,OAAO,SAAS,SAAS,0CAA0C,GAAG;AACzE,UAAM,IAAI;AAAA,MACT,IAAI,QAAQ;AAAA,MACZ,GAAG,MAAM,OAAO;AAAA;AAAA,IAEjB;AAAA,EACD;AACD;","names":["generateJsonSchema"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../utils/sharedFields.ts"],"sourcesContent":["import { NodeConnectionTypes, type INodeProperties } from 'n8n-workflow';\n\nexport const metadataFilterField: INodeProperties = {\n\tdisplayName: 'Metadata Filter',\n\tname: 'metadata',\n\ttype: 'fixedCollection',\n\tdescription: 'Metadata to filter the document by',\n\ttypeOptions: {\n\t\tmultipleValues: true,\n\t},\n\tdefault: {},\n\tplaceholder: 'Add filter field',\n\toptions: [\n\t\t{\n\t\t\tname: 'metadataValues',\n\t\t\tdisplayName: 'Fields to Set',\n\t\t\tvalues: [\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Name',\n\t\t\t\t\tname: 'name',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdefault: '',\n\t\t\t\t\trequired: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdisplayName: 'Value',\n\t\t\t\t\tname: 'value',\n\t\t\t\t\ttype: 'string',\n\t\t\t\t\tdefault: '',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n};\n\nexport function getTemplateNoticeField(templateId: number): INodeProperties {\n\treturn {\n\t\tdisplayName: `Save time with an <a href=\"/templates/${templateId}\" target=\"_blank\">example</a> of how this node works`,\n\t\tname: 'notice',\n\t\ttype: 'notice',\n\t\tdefault: '',\n\t};\n}\n\nconst connectionsString = {\n\t[NodeConnectionTypes.AiAgent]: {\n\t\t// Root AI view\n\t\tconnection: '',\n\t\tlocale: 'AI Agent',\n\t},\n\t[NodeConnectionTypes.AiChain]: {\n\t\t// Root AI view\n\t\tconnection: '',\n\t\tlocale: 'AI Chain',\n\t},\n\t[NodeConnectionTypes.AiDocument]: {\n\t\tconnection: NodeConnectionTypes.AiDocument,\n\t\tlocale: 'Document Loader',\n\t},\n\t[NodeConnectionTypes.AiVectorStore]: {\n\t\tconnection: NodeConnectionTypes.AiVectorStore,\n\t\tlocale: 'Vector Store',\n\t},\n\t[NodeConnectionTypes.AiRetriever]: {\n\t\tconnection: NodeConnectionTypes.AiRetriever,\n\t\tlocale: 'Vector Store Retriever',\n\t},\n};\n\ntype AllowedConnectionTypes =\n\t| typeof NodeConnectionTypes.AiAgent\n\t| typeof NodeConnectionTypes.AiChain\n\t| typeof NodeConnectionTypes.AiDocument\n\t| typeof NodeConnectionTypes.AiVectorStore\n\t| typeof NodeConnectionTypes.AiRetriever;\n\nfunction determineArticle(nextWord: string): string {\n\t// check if the next word starts with a vowel sound\n\tconst vowels = /^[aeiouAEIOU]/;\n\treturn vowels.test(nextWord) ? 'an' : 'a';\n}\nconst getConnectionParameterString = (connectionType: string) => {\n\tif (connectionType === '') return \"data-action-parameter-creatorview='AI'\";\n\n\treturn `data-action-parameter-connectiontype='${connectionType}'`;\n};\nconst getAhref = (connectionType: { connection: string; locale: string }) =>\n\t`<a class=\"test\" data-action='openSelectiveNodeCreator'${getConnectionParameterString(\n\t\tconnectionType.connection,\n\t)}'>${connectionType.locale}</a>`;\n\nexport function getConnectionHintNoticeField(\n\tconnectionTypes: AllowedConnectionTypes[],\n): INodeProperties {\n\tconst groupedConnections = new Map<string, string[]>();\n\n\t// group connection types by their 'connection' value\n\t// to not create multiple links\n\tconnectionTypes.forEach((connectionType) => {\n\t\tconst connectionString = connectionsString[connectionType].connection;\n\t\tconst localeString = connectionsString[connectionType].locale;\n\n\t\tif (!groupedConnections.has(connectionString)) {\n\t\t\tgroupedConnections.set(connectionString, [localeString]);\n\t\t\treturn;\n\t\t}\n\n\t\tgroupedConnections.get(connectionString)?.push(localeString);\n\t});\n\n\tlet displayName;\n\n\tif (groupedConnections.size === 1) {\n\t\tconst [[connection, locales]] = Array.from(groupedConnections);\n\n\t\tdisplayName = `This node must be connected to ${determineArticle(locales[0])} ${locales[0]\n\t\t\t.toLowerCase()\n\t\t\t.replace(\n\t\t\t\t/^ai /,\n\t\t\t\t'AI ',\n\t\t\t)}. <a data-action='openSelectiveNodeCreator' ${getConnectionParameterString(\n\t\t\tconnection,\n\t\t)}>Insert one</a>`;\n\t} else {\n\t\tconst ahrefs = Array.from(groupedConnections, ([connection, locales]) => {\n\t\t\t// If there are multiple locales, join them with ' or '\n\t\t\t// use determineArticle to insert the correct article\n\t\t\tconst locale =\n\t\t\t\tlocales.length > 1\n\t\t\t\t\t? locales\n\t\t\t\t\t\t\t.map((localeString, index, { length }) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t(index === 0 ? `${determineArticle(localeString)} ` : '') +\n\t\t\t\t\t\t\t\t\t(index < length - 1 ? `${localeString} or ` : localeString)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.join('')\n\t\t\t\t\t: `${determineArticle(locales[0])} ${locales[0]}`;\n\t\t\treturn getAhref({ connection, locale });\n\t\t});\n\n\t\tdisplayName = `This node needs to be connected to ${ahrefs.join(' or ')}.`;\n\t}\n\n\treturn {\n\t\tdisplayName,\n\t\tname: 'notice',\n\t\ttype: 'notice',\n\t\tdefault: '',\n\t\ttypeOptions: {\n\t\t\tcontainerClass: 'ndv-connection-hint-notice',\n\t\t},\n\t};\n}\n"],"mappings":"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","names":[]}
|
package/dist/utils/tracing.js
CHANGED