mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-28 15:00:57 +03:00
Make it a separate node instead
This commit is contained in:
+80
@@ -0,0 +1,80 @@
|
||||
import { getBaseClasses, INode, INodeData, INodeParams } from '../../../src'
|
||||
import { BaseOutputParser } from 'langchain/schema/output_parser'
|
||||
import { StructuredOutputParser as LangchainStructuredOutputParser } from 'langchain/output_parsers'
|
||||
import { CATEGORY } from '../OutputParserHelpers'
|
||||
import { z } from 'zod'
|
||||
|
||||
class AdvancedStructuredOutputParser implements INode {
|
||||
label: string
|
||||
name: string
|
||||
version: number
|
||||
description: string
|
||||
type: string
|
||||
icon: string
|
||||
category: string
|
||||
baseClasses: string[]
|
||||
inputs: INodeParams[]
|
||||
credential: INodeParams
|
||||
|
||||
constructor() {
|
||||
this.label = 'Advanced Structured Output Parser'
|
||||
this.name = 'advancedStructuredOutputParser'
|
||||
this.version = 1.0
|
||||
this.type = 'AdvancedStructuredOutputParser'
|
||||
this.description = 'Parse the output of an LLM call into a given structure by providing a Zod schema.'
|
||||
this.icon = 'structure.svg'
|
||||
this.category = CATEGORY
|
||||
this.baseClasses = [this.type, ...getBaseClasses(BaseOutputParser)]
|
||||
this.inputs = [
|
||||
{
|
||||
label: 'Autofix',
|
||||
name: 'autofixParser',
|
||||
type: 'boolean',
|
||||
optional: true,
|
||||
description: 'In the event that the first call fails, will make another call to the model to fix any errors.'
|
||||
},
|
||||
{
|
||||
label: 'Example JSON',
|
||||
name: 'exampleJson',
|
||||
type: 'string',
|
||||
description: 'Zod schema for the output of the model',
|
||||
rows: 10,
|
||||
default: `z.object({
|
||||
title: z.string(), // Title of the movie as a string
|
||||
yearOfRelease: z.number().int(), // Release year as an integer number,
|
||||
genres: z.enum([
|
||||
"Action", "Comedy", "Drama", "Fantasy", "Horror",
|
||||
"Mystery", "Romance", "Science Fiction", "Thriller", "Documentary"
|
||||
]).array().max(2), // Array of genres, max of 2 from the defined enum
|
||||
shortDescription: z.string().max(500) // Short description, max 150 characters
|
||||
})`,
|
||||
additionalParams: true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
async init(nodeData: INodeData): Promise<any> {
|
||||
const schemaString = nodeData.inputs?.exampleJson as string
|
||||
const autoFix = nodeData.inputs?.autofixParser as boolean
|
||||
|
||||
const zodSchemaFunction = new Function('z', `return ${schemaString}`)
|
||||
const zodSchema = zodSchemaFunction(z)
|
||||
|
||||
try {
|
||||
const structuredOutputParser = LangchainStructuredOutputParser.fromZodSchema(zodSchema)
|
||||
|
||||
// NOTE: When we change Flowise to return a json response, the following has to be changed to: JsonStructuredOutputParser
|
||||
Object.defineProperty(structuredOutputParser, 'autoFix', {
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true,
|
||||
value: autoFix
|
||||
})
|
||||
return structuredOutputParser
|
||||
} catch (exception) {
|
||||
throw new Error('Error parsing Zod Schema: ' + exception)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { nodeClass: AdvancedStructuredOutputParser }
|
||||
@@ -0,0 +1,8 @@
|
||||
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M16 3V13M16 3L13 6.13609M16 3L19 6.13609" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M7 15V12C7 10.8954 7.89543 10 9 10H11M25 15V12C25 10.8954 24.1046 10 23 10H21" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M12.5644 20.4399C11.6769 19.7608 9 19.6332 9 21.7961C9 24.1915 13 22.5657 13 25.0902C13 26.9875 10.33 27.5912 9 26.3537" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M24 27V20L28 27V20" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M16 23.5C16 20.7 17.6667 20 18.5 20C19.3333 20 21 20.7 21 23.5C21 26.3 19.3333 27 18.5 27C17.6667 27 16 26.3 16 23.5Z" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M6 20V25C6 26.1046 5.10457 27 4 27V27C2.89543 27 2 26.1046 2 25V25" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
Reference in New Issue
Block a user