mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-28 13:00:56 +03:00
Feature/Code Interpreter (#3183)
* Base changes for ServerSide Events (instead of socket.io) * lint fixes * adding of interface and separate methods for streaming events * lint * first draft, handles both internal and external prediction end points. * lint fixes * additional internal end point for streaming and associated changes * return streamresponse as true to build agent flow * 1) JSON formatting for internal events 2) other fixes * 1) convert internal event to metadata to maintain consistency with external response * fix action and metadata streaming * fix for error when agent flow is aborted * prevent subflows from streaming and other code cleanup * prevent streaming from enclosed tools * add fix for preventing chaintool streaming * update lock file * add open when hidden to sse * Streaming errors * Streaming errors * add fix for showing error message * add code interpreter * add artifacts to view message dialog * Update pnpm-lock.yaml --------- Co-authored-by: Vinod Paidimarry <vinodkiran@outlook.in>
This commit is contained in:
@@ -12,13 +12,12 @@ import {
|
||||
import { AIMessage, AIMessageChunk, BaseMessage, ToolMessage } from '@langchain/core/messages'
|
||||
import { StructuredTool } from '@langchain/core/tools'
|
||||
import { RunnableConfig } from '@langchain/core/runnables'
|
||||
import { SOURCE_DOCUMENTS_PREFIX } from '../../../src/agents'
|
||||
import { ARTIFACTS_PREFIX, SOURCE_DOCUMENTS_PREFIX } from '../../../src/agents'
|
||||
import { Document } from '@langchain/core/documents'
|
||||
import { DataSource } from 'typeorm'
|
||||
import { MessagesState, RunnableCallable, customGet, getVM } from '../commonUtils'
|
||||
import { getVars, prepareSandboxVars } from '../../../src/utils'
|
||||
import { ChatPromptTemplate } from '@langchain/core/prompts'
|
||||
import { DynamicStructuredTool } from '../../tools/CustomTool/core'
|
||||
|
||||
const defaultApprovalPrompt = `You are about to execute tool: {tools}. Ask if user want to proceed`
|
||||
|
||||
@@ -408,6 +407,9 @@ class ToolNode<T extends IStateWithMessages | BaseMessage[] | MessagesState> ext
|
||||
// Extract all properties except messages for IStateWithMessages
|
||||
const { messages: _, ...inputWithoutMessages } = Array.isArray(input) ? { messages: input } : input
|
||||
const ChannelsWithoutMessages = {
|
||||
chatId: this.options.chatId,
|
||||
sessionId: this.options.sessionId,
|
||||
input: this.inputQuery,
|
||||
state: inputWithoutMessages
|
||||
}
|
||||
|
||||
@@ -417,12 +419,13 @@ class ToolNode<T extends IStateWithMessages | BaseMessage[] | MessagesState> ext
|
||||
if (tool === undefined) {
|
||||
throw new Error(`Tool ${call.name} not found.`)
|
||||
}
|
||||
if (tool && tool instanceof DynamicStructuredTool) {
|
||||
if (tool && (tool as any).setFlowObject) {
|
||||
// @ts-ignore
|
||||
tool.setFlowObject(ChannelsWithoutMessages)
|
||||
}
|
||||
let output = await tool.invoke(call.args, config)
|
||||
let sourceDocuments: Document[] = []
|
||||
let artifacts = []
|
||||
if (output?.includes(SOURCE_DOCUMENTS_PREFIX)) {
|
||||
const outputArray = output.split(SOURCE_DOCUMENTS_PREFIX)
|
||||
output = outputArray[0]
|
||||
@@ -433,12 +436,23 @@ class ToolNode<T extends IStateWithMessages | BaseMessage[] | MessagesState> ext
|
||||
console.error('Error parsing source documents from tool')
|
||||
}
|
||||
}
|
||||
if (output?.includes(ARTIFACTS_PREFIX)) {
|
||||
const outputArray = output.split(ARTIFACTS_PREFIX)
|
||||
output = outputArray[0]
|
||||
try {
|
||||
artifacts = JSON.parse(outputArray[1])
|
||||
} catch (e) {
|
||||
console.error('Error parsing artifacts from tool')
|
||||
}
|
||||
}
|
||||
|
||||
return new ToolMessage({
|
||||
name: tool.name,
|
||||
content: typeof output === 'string' ? output : JSON.stringify(output),
|
||||
tool_call_id: call.id!,
|
||||
additional_kwargs: {
|
||||
sourceDocuments,
|
||||
artifacts,
|
||||
args: call.args,
|
||||
usedTools: [
|
||||
{
|
||||
@@ -489,7 +503,8 @@ const getReturnOutput = async (
|
||||
tool: output.name,
|
||||
toolInput: output.additional_kwargs.args,
|
||||
toolOutput: output.content,
|
||||
sourceDocuments: output.additional_kwargs.sourceDocuments
|
||||
sourceDocuments: output.additional_kwargs.sourceDocuments,
|
||||
artifacts: output.additional_kwargs.artifacts
|
||||
} as IUsedTool
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user