mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-23 03:00:22 +03:00
5a37227d14
* markdown files and env examples cleanup * components update * update jsonlines description * server refractor * update telemetry * add execute custom node * add ui refractor * add username and password authenticate * correctly retrieve past images in agentflowv2 * disable e2e temporarily * add existing username and password authenticate * update migration to default workspace * update todo * blob storage migrating * throw error on agent tool call error * add missing execution import * add referral * chore: add error message when importData is undefined * migrate api keys to db * fix: data too long for column executionData * migrate api keys from json to db at init * add info on account setup * update docstore missing fields --------- Co-authored-by: chungyau97 <chungyau97@gmail.com>
58 lines
2.4 KiB
TypeScript
58 lines
2.4 KiB
TypeScript
import { DynamicTool, DynamicToolInput } from '@langchain/core/tools'
|
|
import { BaseChain } from 'langchain/chains'
|
|
import { handleEscapeCharacters } from '../../../src/utils'
|
|
import { CustomChainHandler } from '../../../src'
|
|
|
|
export interface ChainToolInput extends Omit<DynamicToolInput, 'func'> {
|
|
chain: BaseChain
|
|
}
|
|
|
|
export class ChainTool extends DynamicTool {
|
|
chain: BaseChain
|
|
|
|
constructor({ chain, ...rest }: ChainToolInput) {
|
|
super({
|
|
...rest,
|
|
func: async (input, runManager) => {
|
|
// prevent sending SSE events of the sub-chain
|
|
const sseStreamer = runManager?.handlers.find((handler) => handler instanceof CustomChainHandler)?.sseStreamer
|
|
if (runManager) {
|
|
const callbacks = runManager.handlers
|
|
for (let i = 0; i < callbacks.length; i += 1) {
|
|
if (callbacks[i] instanceof CustomChainHandler) {
|
|
;(callbacks[i] as any).sseStreamer = undefined
|
|
}
|
|
}
|
|
}
|
|
|
|
if ((chain as any).prompt && (chain as any).prompt.promptValues) {
|
|
const promptValues = handleEscapeCharacters((chain as any).prompt.promptValues, true)
|
|
|
|
const values = await chain.call(promptValues, runManager?.getChild())
|
|
if (runManager && sseStreamer) {
|
|
const callbacks = runManager.handlers
|
|
for (let i = 0; i < callbacks.length; i += 1) {
|
|
if (callbacks[i] instanceof CustomChainHandler) {
|
|
;(callbacks[i] as any).sseStreamer = sseStreamer
|
|
}
|
|
}
|
|
}
|
|
return values?.text
|
|
}
|
|
|
|
const values = chain.run(input, runManager?.getChild())
|
|
if (runManager && sseStreamer) {
|
|
const callbacks = runManager.handlers
|
|
for (let i = 0; i < callbacks.length; i += 1) {
|
|
if (callbacks[i] instanceof CustomChainHandler) {
|
|
;(callbacks[i] as any).sseStreamer = sseStreamer
|
|
}
|
|
}
|
|
}
|
|
return values
|
|
}
|
|
})
|
|
this.chain = chain
|
|
}
|
|
}
|