yarn lint

This commit is contained in:
Henry 2023-07-22 02:27:52 +01:00
parent 49c7ae718f
commit d4d4f0c8c2
3 changed files with 30 additions and 18 deletions

View File

@ -1,9 +1,10 @@
import { INode, INodeData, INodeParams, PromptTemplate } from '../../../src/Interface'
import { ICommonObject, INode, INodeData, INodeParams, PromptTemplate } from '../../../src/Interface'
import { AgentExecutor } from 'langchain/agents'
import { getBaseClasses } from '../../../src/utils'
import { LoadPyodide, finalSystemPrompt, systemPrompt } from './core'
import { LLMChain } from 'langchain/chains'
import { BaseLanguageModel } from 'langchain/base_language'
import { ConsoleCallbackHandler, CustomChainHandler } from '../../../src/handler'
class CSV_Agents implements INode {
label: string
@ -17,7 +18,7 @@ class CSV_Agents implements INode {
constructor() {
this.label = 'CSV Agent'
this.name = 'csvAgentLLM'
this.name = 'csvAgent'
this.type = 'AgentExecutor'
this.category = 'Agents'
this.icon = 'csvagent.png'
@ -43,10 +44,13 @@ class CSV_Agents implements INode {
return undefined
}
async run(nodeData: INodeData, input: string): Promise<string> {
async run(nodeData: INodeData, input: string, options: ICommonObject): Promise<string> {
const csvFileBase64 = nodeData.inputs?.csvFile as string
const model = nodeData.inputs?.model as BaseLanguageModel
const loggerHandler = new ConsoleCallbackHandler(options.logger)
const handler = new CustomChainHandler(options.socketIO, options.socketIOClientId)
let files: string[] = []
if (csvFileBase64.startsWith('[') && csvFileBase64.endsWith(']')) {
@ -67,7 +71,7 @@ class CSV_Agents implements INode {
// First load the csv file and get the dataframe dictionary of column types
// For example using titanic.csv: {'PassengerId': 'int64', 'Survived': 'int64', 'Pclass': 'int64', 'Name': 'object', 'Sex': 'object', 'Age': 'float64', 'SibSp': 'int64', 'Parch': 'int64', 'Ticket': 'object', 'Fare': 'float64', 'Cabin': 'object', 'Embarked': 'object'}
let executionResult = ''
let dataframeColDict = ''
try {
const code = `import pandas as pd
import base64
@ -84,29 +88,29 @@ df = pd.read_csv(csv_data)
my_dict = df.dtypes.astype(str).to_dict()
print(my_dict)
json.dumps(my_dict)`
executionResult = await pyodide.runPythonAsync(code)
dataframeColDict = await pyodide.runPythonAsync(code)
} catch (error) {
throw new Error(error)
}
console.log('executionResult= ', executionResult)
options.logger.debug('[components/CSVAgent] [1] DataframeColDict =>', dataframeColDict)
// Then tell GPT to come out with ONLY python code
// For example: len(df), df[df['SibSp'] > 3]['PassengerId'].count()
let pythonCode = ''
if (executionResult) {
if (dataframeColDict) {
const chain = new LLMChain({
llm: model,
prompt: PromptTemplate.fromTemplate(systemPrompt),
verbose: process.env.DEBUG === 'true' ? true : false
})
const inputs = {
dict: executionResult,
dict: dataframeColDict,
question: input
}
const res = await chain.call(inputs)
const res = await chain.call(inputs, [loggerHandler])
pythonCode = res?.text
}
console.log('pythonCode= ', pythonCode)
options.logger.debug('[components/CSVAgent] [2] Generated Python Code =>', pythonCode)
// Then run the code using Pyodide
let finalResult = ''
@ -115,10 +119,10 @@ json.dumps(my_dict)`
const code = `import pandas as pd\n${pythonCode}`
finalResult = await pyodide.runPythonAsync(code)
} catch (error) {
throw new Error(error)
throw new Error(pythonCode)
}
}
console.log('finalResult= ', finalResult)
options.logger.debug('[components/CSVAgent] [3] Pyodide Result =>', finalResult)
// Finally, return a complete answer
if (finalResult) {
@ -131,11 +135,19 @@ json.dumps(my_dict)`
question: input,
answer: finalResult
}
const res = await chain.call(inputs)
return res?.text
if (options.socketIO && options.socketIOClientId) {
const result = await chain.call(inputs, [loggerHandler, handler])
options.logger.debug('[components/CSVAgent] [4] Final Result =>', result?.text)
return result?.text
} else {
const result = await chain.call(inputs, [loggerHandler])
options.logger.debug('[components/CSVAgent] [4] Final Result =>', result?.text)
return result?.text
}
}
return executionResult
return pythonCode
}
}

View File

@ -31,5 +31,5 @@ I will ask question, and you will output the Python code using pandas dataframe
Question: {question}
Output Code:`
export const finalSystemPrompt = `You are given the question: {question}. You have an answer to the question: {answer}. Rephrase the answer with more details.
Helpful Answer:`
export const finalSystemPrompt = `You are given the question: {question}. You have an answer to the question: {answer}. Rephrase the answer into a standalone answer.
Standalone Answer:`

View File

@ -728,7 +728,7 @@ export const isFlowValidForStream = (reactFlowNodes: IReactFlowNode[], endingNod
isValidChainOrAgent = !blacklistChains.includes(endingNodeData.name)
} else if (endingNodeData.category === 'Agents') {
// Agent that are available to stream
const whitelistAgents = ['openAIFunctionAgent']
const whitelistAgents = ['openAIFunctionAgent', 'csvAgent']
isValidChainOrAgent = whitelistAgents.includes(endingNodeData.name)
}