ReasoningChat / app.py
raghavrastogi75's picture
Upload app.py
fdbbf88 verified
import streamlit as st
from langchain.callbacks import StreamlitCallbackHandler
from langchain.agents import AgentType, Tool
from typing import Literal
from langchain.agents import initialize_agent, load_tools, AgentType
from langchain.chains.base import Chain
from langchain.chat_models import ChatOpenAI
from langchain_experimental.plan_and_execute import (
load_chat_planner, load_agent_executor, PlanAndExecute
)
from langchain.utilities import PythonREPL
ReasoningStrategies = Literal["zero-shot-react", "plan-and-solve"]
def load_agent(
tool_names: list[str],
strategy: ReasoningStrategies = "zero-shot-react",
custom_tools: list = [],
openai_key:str = ''
) -> Chain:
llm = ChatOpenAI(temperature=0.5, streaming=True,openai_api_key = openai_key ,model = 'gpt-3.5-turbo-0125')
tools = load_tools(
tool_names=tool_names,
llm = llm)
tools = tools + custom_tools
if strategy == "plan-and-solve":
planner = load_chat_planner(llm)
executor = load_agent_executor(llm, tools, verbose=True)
return PlanAndExecute(planner=planner, executor=executor,
verbose=True)
return initialize_agent(tools=tools, llm=llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True)
python_repl = PythonREPL()
repl_tool = Tool(
"python_repl",
func = python_repl.run,
description="A Python command shell. Do not add markdown text. Do not use recursion and print every step"
)
strategy = st.radio("Reasoning strategy",("plan-and-solve", "zero-shot-react"))
tool_names = st.multiselect('Which tools do you want to use?',["google-search", "ddg-search", "arxiv","wikipedia", "python_repl", "pal-math", "llm-math"],
["ddg-search", "wikipedia"])
def run_agent(prompt,st_callback, openai_key):
agent_chain = load_agent(tool_names=tool_names, strategy=strategy,custom_tools = [repl_tool], openai_key = openai_key )
agent_chain.run(prompt, callbacks=[st_callback])
st_callback = StreamlitCallbackHandler(st.container())
openai_key = st.text_input(label="Your OpenAI API key", type="password", placeholder="Enter API Key Here")
if prompt := st.chat_input():
st.chat_message("user").write(prompt)
with st.chat_message("assistant"):
st_callback = StreamlitCallbackHandler(st.container())
response = run_agent(prompt, st_callback, openai_key)
st.write(response)