import os, dotenv dotenv.load_dotenv() import streamlit as st from langchain_groq import ChatGroq from langchain_community.utilities import ArxivAPIWrapper, WikipediaAPIWrapper from langchain_community.tools import ArxivQueryRun, WikipediaQueryRun, DuckDuckGoSearchRun from langchain.agents import initialize_agent, AgentType from langchain.callbacks import StreamlitCallbackHandler # Wikipedia Tool wiki_wrapper = WikipediaAPIWrapper(top_k_results=1, doc_content_chars_max=300) wiki_tool = WikipediaQueryRun(api_wrapper=wiki_wrapper) # Arxiv Tool arxiv_wrapper = ArxivAPIWrapper(top_k_results=1, doc_content_chars_max=300) arxiv_tool = ArxivQueryRun(api_wrapper=arxiv_wrapper) # DuckDuckGo Search Tool search = DuckDuckGoSearchRun(name="Internet Search") # Streamlit Code st.set_page_config(page_icon=":mag:", page_title="Tools & Agent") st.title(":green[Langchain] Search Agent") with st.sidebar: api_key = st.text_input("Enter Your Groq API Key:", type="password") if "messages" not in st.session_state: st.session_state["messages"] = [ {"role": "assistant", "content": "Hi there! How can I help you today?"} ] for message in st.session_state.messages: st.chat_message(message['role']).write(message['content']) if api_key: if prompt := st.chat_input("What is Generative AI?"): st.session_state.messages.append({"role": "user", "content": prompt}) st.chat_message("user").write(prompt) llm = ChatGroq(model="llama-3.1-70b-versatile", api_key=api_key, streaming=True) tools = [wiki_tool, arxiv_tool, search] search_agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, handling_parsing_errors=True) with st.chat_message("assistant"): st_callback = StreamlitCallbackHandler(st.container(), expand_new_thoughts=True) response = search_agent.run(st.session_state.messages, callbacks=[st_callback]) st.write(response) st.session_state.messages.append({"role": "assistant", "content": response}) else: st.info("Please enter your API Key to proceed")