From 1219c2ff12769a4fa3636b154bd68e1156260005 Mon Sep 17 00:00:00 2001 From: Henry Heng Date: Thu, 19 Sep 2024 14:56:13 +0100 Subject: [PATCH] Bugfix/remove invalid markdown (#3219) remove invalid markdown --- packages/components/nodes/agents/ToolAgent/ToolAgent.ts | 4 +++- packages/components/nodes/sequentialagents/Agent/Agent.ts | 6 ++---- packages/components/src/utils.ts | 5 +++++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/components/nodes/agents/ToolAgent/ToolAgent.ts b/packages/components/nodes/agents/ToolAgent/ToolAgent.ts index 598ed17e..4f64027e 100644 --- a/packages/components/nodes/agents/ToolAgent/ToolAgent.ts +++ b/packages/components/nodes/agents/ToolAgent/ToolAgent.ts @@ -7,7 +7,7 @@ import { BaseChatModel } from '@langchain/core/language_models/chat_models' import { ChatPromptTemplate, MessagesPlaceholder, HumanMessagePromptTemplate, PromptTemplate } from '@langchain/core/prompts' import { formatToOpenAIToolMessages } from 'langchain/agents/format_scratchpad/openai_tools' import { type ToolsAgentStep } from 'langchain/agents/openai/output_parser' -import { getBaseClasses, handleEscapeCharacters } from '../../../src/utils' +import { getBaseClasses, handleEscapeCharacters, removeInvalidImageMarkdown } from '../../../src/utils' import { FlowiseMemory, ICommonObject, @@ -188,6 +188,8 @@ class ToolAgent_Agents implements INode { output = output?.text || '' } + output = removeInvalidImageMarkdown(output) + // Claude 3 Opus tends to spit out .. as well, discard that in final output const regexPattern: RegExp = /[\s\S]*?<\/thinking>/ const matches: RegExpMatchArray | null = output.match(regexPattern) diff --git a/packages/components/nodes/sequentialagents/Agent/Agent.ts b/packages/components/nodes/sequentialagents/Agent/Agent.ts index ff1525d1..8153595c 100644 --- a/packages/components/nodes/sequentialagents/Agent/Agent.ts +++ b/packages/components/nodes/sequentialagents/Agent/Agent.ts @@ -22,7 +22,7 @@ import { IStateWithMessages } from '../../../src/Interface' import { ToolCallingAgentOutputParser, AgentExecutor, SOURCE_DOCUMENTS_PREFIX, ARTIFACTS_PREFIX } from '../../../src/agents' -import { getInputVariables, getVars, handleEscapeCharacters, prepareSandboxVars } from '../../../src/utils' +import { getInputVariables, getVars, handleEscapeCharacters, prepareSandboxVars, removeInvalidImageMarkdown } from '../../../src/utils' import { customGet, getVM, @@ -781,9 +781,7 @@ async function agentNode( } let outputContent = typeof result === 'string' ? result : result.content || result.output - - // remove invalid markdown image pattern: ![]() - outputContent = typeof outputContent === 'string' ? outputContent.replace(/!\[.*?\]\(.*?\)/g, '') : outputContent + outputContent = removeInvalidImageMarkdown(outputContent) if (nodeData.inputs?.updateStateMemoryUI || nodeData.inputs?.updateStateMemoryCode) { let formattedOutput = { diff --git a/packages/components/src/utils.ts b/packages/components/src/utils.ts index 7b3390f7..3604e384 100644 --- a/packages/components/src/utils.ts +++ b/packages/components/src/utils.ts @@ -926,3 +926,8 @@ export const mapMimeTypeToExt = (mimeType: string) => { return '' } } + +// remove invalid markdown image pattern: ![]() +export const removeInvalidImageMarkdown = (output: string): string => { + return typeof output === 'string' ? output.replace(/!\[.*?\]\((?!https?:\/\/).*?\)/g, '') : output +}