ArjunSoniK's picture
llm search agent
11acc44
Raw
History Blame Contribute Delete
4.51 kB
from langchain.agents import initialize_agent, Tool
from langchain_groq import ChatGroq
from langchain.utilities import SerpAPIWrapper, WikipediaAPIWrapper
from langchain_community.tools import WikipediaQueryRun
from langchain_experimental.tools import PythonREPLTool
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_community.tools import ArxivQueryRun
from langchain_community.tools import PubmedQueryRun
from langchain_community.tools import ShellTool
from langchain_community.utilities.requests import RequestsWrapper
from langchain.chains.conversation.memory import ConversationBufferWindowMemory
from fastapi import FastAPI
from pydantic import BaseModel
from fastapi.middleware.cors import CORSMiddleware
import uvicorn
import os
from dotenv import load_dotenv
load_dotenv()
app=FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
class Chat_input(BaseModel):
input: str
os.environ["GROQ_API_KEY"] = os.getenv("GROQ_API_KEY")
# os.environ["SERPAPI_API_KEY"] = os.getenv("SERPAPI_API_KEY")
llm = ChatGroq(model="llama3-70b-8192",
temperature=0.5,
max_tokens=None,
timeout=60,
max_retries=2,
api_key=os.getenv("GROQ_API_KEY"),)
search = SerpAPIWrapper(serpapi_api_key=os.getenv("SERPAPI_API_KEY"),search_engine="google")
youtube = SerpAPIWrapper(serpapi_api_key=os.getenv("SERPAPI_API_KEY"), search_engine="youtube")
wikipedia = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())
duckduckgo_search = DuckDuckGoSearchRun()
arxiv = ArxivQueryRun()
pubmed = PubmedQueryRun()
requests_tool = RequestsWrapper()
def calculate_bmi(input_string):
try:
height_cm, weight_kg = map(float, input_string.split(','))
height_m = height_cm / 100
bmi = weight_kg / (height_m ** 2)
return f"The BMI is {bmi:.2f}"
except ValueError:
return "Error: Please provide input in the format 'height,weight'."
tools = [
Tool(
name="BMI Calculator",
func=calculate_bmi,
description="Calculates BMI when given height in cm and weight in kg. Input should be two numbers separated by a comma: height,weight"
),
Tool(
name="Youtube",
func=youtube.run,
description="Search YouTube for videos. Input should be a query string."
),
Tool(
name="Search",
func=search.run,
description="Useful for when you need to answer questions youtube links, any usefull links."
),
Tool(
name="Wikipedia",
func=wikipedia.run,
description="Useful for when you need detailed information on a topic. Use this for historical facts, definitions, or in-depth knowledge on a subject."
),
Tool(
name="Python REPL",
func=PythonREPLTool().run,
description="Useful for when you need to execute Python code, especially for calculations or data processing."
),
Tool(
name="DuckDuckGo Search",
func=duckduckgo_search.run,
description="Useful for searching the internet for current information, used it for google search, past information and dark world or hacking related data. Ip address and other information."
),
Tool(
name="ArXiv",
func=arxiv.run,
description="Useful for searching and retrieving scientific papers from arXiv."
),
Tool(
name="PubMed",
func=pubmed.run,
description="Useful for searching and retrieving biomedical literature from PubMed."
),
Tool(
name="Requests",
func=requests_tool.get,
description="Useful for making HTTP requests to websites and APIs."
),
Tool(
name="Shell",
func=ShellTool().run,
description="Useful for running shell commands. Use with caution!"
)
]
memory=ConversationBufferWindowMemory(k=20, memory_key="chat_history", return_messages=True)
agent = initialize_agent(tools=tools,
llm=llm,
memory=memory,
max_iterations=3,
early_stopping_method="generate",
agent="zero-shot-react-description",
verbose=True,
min_tokens=1000,
handle_parsing_errors=True)
@app.post("/search")
async def search(input: Chat_input):
return agent.run(input.input)