Files

1 line
6.2 KiB
JSON

{"repo": "25955a0512/langchainagent", "files": {"App.py": {"3cb79afc24aa4b61068e3849108ce53202f3f6c8": {"t": 1785674397.248314, "n": 5780, "h": "c32d9e1fe009c23d", "c": "import warnings\nwarnings.filterwarnings(\"ignore\")\n\nimport streamlit as st\nfrom dotenv import load_dotenv\n\nfrom langchain_groq import ChatGroq\n\nfrom langchain.agents import create_react_agent, AgentExecutor\n\nfrom langchain import hub\n\nfrom langchain_community.agent_toolkits.load_tools import load_tools\n\nfrom langchain.tools import Tool\n\nfrom duckduckgo_search import DDGS\n\nimport requests\n\n# ---------------------------------------------------\n# Load Environment Variables\n# ---------------------------------------------------\n\nload_dotenv()\n\n# ---------------------------------------------------\n# Streamlit Config\n# ---------------------------------------------------\n\nst.set_page_config(\n page_title=\"AI Agent\",\n page_icon=\"🤖\"\n)\n\nst.title(\"🤖 AI Agent\")\n\nst.caption(\"Powered by Groq + DuckDuckGo + Tavily + Math\")\n\n# ---------------------------------------------------\n# Sidebar\n# ---------------------------------------------------\n\nwith st.sidebar:\n\n st.header(\"🔑 API Keys\")\n\n groq_key = st.text_input(\n \"Groq API Key\",\n type=\"password\",\n placeholder=\"gsk_...\"\n )\n\n tavily_key = st.text_input(\n \"Tavily API Key\",\n type=\"password\",\n placeholder=\"tvly-...\"\n )\n\n st.markdown(\"---\")\n\n st.caption(\n \"Get free keys at:\\n\\n\"\n \"console.groq.com\\n\\n\"\n \"app.tavily.com\"\n )\n\n# ---------------------------------------------------\n# Require Groq Key\n# ---------------------------------------------------\n\nif not groq_key:\n\n st.info(\"👈 Enter your Groq API Key in the sidebar.\")\n\n st.stop()\n\n# ---------------------------------------------------\n# Load Agent\n# ---------------------------------------------------\n\n@st.cache_resource\ndef load_agent(groq_api_key, tavily_api_key):\n\n # LLM\n llm = ChatGroq(\n model=\"llama-3.3-70b-versatile\",\n api_key=groq_api_key,\n temperature=0\n )\n\n # ------------------------------------------------\n # Search Function\n # ------------------------------------------------\n\n def search(query):\n\n # Tavily Search\n if tavily_api_key:\n\n try:\n\n response = requests.post(\n \"https://api.tavily.com/search\",\n json={\n \"api_key\": tavily_api_key,\n \"query\": query,\n \"max_results\": 5\n },\n timeout=10\n )\n\n data = response.json()\n\n results = data.get(\"results\", [])\n\n if results:\n\n return \"\\n\\n\".join(\n f\"{r.get('title', '')}\\n{r.get('content', '')}\"\n for r in results\n )\n\n except Exception:\n pass\n\n # DuckDuckGo Fallback\n try:\n\n with DDGS() as ddgs:\n\n results = list(\n ddgs.text(query, max_results=5)\n )\n\n if results:\n\n return \"\\n\\n\".join(\n f\"{r.get('title', '')}\\n{r.get('body', '')}\"\n for r in results\n )\n\n except Exception:\n pass\n\n return \"No results found.\"\n\n # ------------------------------------------------\n # Tools\n # ------------------------------------------------\n\n search_tool = Tool(\n name=\"Search\",\n func=search,\n description=(\n \"Useful for searching current events, news, facts, \"\n \"people, and real-time information from the internet.\"\n )\n )\n\n math_tool = load_tools(\n [\"llm-math\"],\n llm=llm\n )[0]\n\n tools = [\n search_tool,\n math_tool\n ]\n\n # ------------------------------------------------\n # Prompt\n # ------------------------------------------------\n\n prompt = hub.pull(\"hwchase17/react\")\n\n # ------------------------------------------------\n # Agent\n # ------------------------------------------------\n\n agent = create_react_agent(\n llm=llm,\n tools=tools,\n prompt=prompt\n )\n\n # ------------------------------------------------\n # Agent Executor\n # ------------------------------------------------\n\n agent_executor = AgentExecutor(\n agent=agent,\n tools=tools,\n verbose=False,\n handle_parsing_errors=True,\n max_iterations=5\n )\n\n return agent_executor\n\n# Initialize Agent\nagent_executor = load_agent(groq_key, tavily_key)\n\n# ---------------------------------------------------\n# Chat History\n# ---------------------------------------------------\n\nif \"messages\" not in st.session_state:\n\n st.session_state.messages = []\n\n# Display Previous Messages\nfor msg in st.session_state.messages:\n\n with st.chat_message(msg[\"role\"]):\n\n st.markdown(msg[\"content\"])\n\n# ---------------------------------------------------\n# Chat Input\n# ---------------------------------------------------\n\nif prompt := st.chat_input(\"Ask me anything...\"):\n\n # Save User Message\n st.session_state.messages.append({\n \"role\": \"user\",\n \"content\": prompt\n })\n\n # Display User Message\n with st.chat_message(\"user\"):\n\n st.markdown(prompt)\n\n # Assistant Response\n with st.chat_message(\"assistant\"):\n\n with st.spinner(\"Thinking...\"):\n\n try:\n\n result = agent_executor.invoke({\n \"input\": prompt\n })\n\n response = result[\"output\"]\n\n except Exception as e:\n\n response = f\"❌ Error: {str(e)}\"\n\n st.markdown(response)\n\n # Save Assistant Response\n st.session_state.messages.append({\n \"role\": \"assistant\",\n \"content\": response\n })\n"}}}}