Burhan02data-sci-chatbot / Basic_Inf_Agent /Basic_Inference_Agent.py
Khaquan's picture
Upload folder using huggingface_hub
df420ed verified
raw
history blame contribute delete
No virus
4.71 kB
####################################################################################################
import os
import re
import subprocess
import sys
from langchain_experimental.utilities import PythonREPL
from langchain.agents import Tool
from langchain.agents.format_scratchpad.openai_tools import (
format_to_openai_tool_messages,
)
from langchain.agents.output_parsers.openai_tools import OpenAIToolsAgentOutputParser
from langchain.agents import AgentExecutor
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_community.chat_models import ChatAnyscale
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('ggplot')
####################################################################################################
os.environ["ANYSCALE_API_KEY"] = "esecret_8btufnh3615vnbpd924s1t3q7p"
memory_key = "history"
python_repl = PythonREPL()
repl_tool = Tool(
name="python_repl",
description="""A Python shell. Shell can dislay charts too. Use this to execute python commands.\
You have access to all libraries in python including but not limited to sklearn, pandas, numpy,\
matplotlib.pyplot, seaborn etc. Input should be a valid python command. If the user has not explicitly\
asked you to plot the results, always print the final output using print(...)""",
func=python_repl.run,
)
tools = [repl_tool]
prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"""You are Machine Learning Inference agent. Your job is to use your tools to answer a user query\
in the best manner possible.\
The user gives you two things:
1. A query, and a target task.
Your job is to extract what you need to do from this query and then accomplish that task.\
In case the user asks you to do things like regression/classification, you will need to follow this:\
IMPORT ALL NECESSARY LIBRARIES\
READ IN YOUR DATAFRAME FROM: 'df.csv'
1. Split the dataframe into X and y (y= target, X=features)
2. Perform some preprocessing on X as per user instructions.
3. Split preprocessed X and y into train and test sets.
4. If a model is specified, use that model or else pick your model of choice for the given task.
5. Run this model on train set.
6. Predict on Test Set.
5. Print accuracy score by predicting on the test.
Provide no explanation for your code. Enclose all your code between triple backticks ``` """,
),
("user", "Dataframe named df:\n{df}\nQuery: {input}\nList of Tools: {tools}"),
MessagesPlaceholder(variable_name="agent_scratchpad"),
]
)
if 'code' not in os.listdir():
os.mkdir('code')
def run_code(code):
with open(f'{os.getcwd()}/Basic_Inf_Agent/code/code.py', 'w') as file:
file.write(code)
try:
print("Running code ...\n")
result = subprocess.run([sys.executable, f'{os.getcwd()}/Basic_Inf_Agent/code/code.py'], capture_output=True, text=True, check=True, timeout=20)
return result.stdout, False
except subprocess.CalledProcessError as e:
print("Error in code!\n")
return e.stdout + e.stderr, True
except subprocess.TimeoutExpired:
return "Execution timed out.", True
def infer_basic(user_input, df, llm):
agent = (
{
"input": lambda x: x["input"],
"tools": lambda x:x['tools'],
"df": lambda x:x['df'],
"prev_error":lambda x:x['prev_error'],
"agent_scratchpad": lambda x: format_to_openai_tool_messages(
x["intermediate_steps"]
)
}
| prompt
| llm
| OpenAIToolsAgentOutputParser()
)
agent_executor = AgentExecutor(agent=agent, tools=tools, df = df, prev_error='', verbose=True)
error_flag = True
res = None
while error_flag:
result = list(agent_executor.stream({"input": user_input,
"df":pd.read_csv('df.csv'),
"prev_error": res,
"tools":tools}))
pattern = r"```python\n(.*?)\n```"
matches = re.findall(pattern, result[0]['output'], re.DOTALL)
# code = "import os\nos.chdir({os.getcwd()}/Basic_Inf_Agent)\n"
code = "\n".join(matches)
code += "\ndf.to_csv('./df.csv', index=False)"
res, error_flag = run_code(code)
print(res)
# execute the code
return res