Project7 / app.py
Krithikesh77's picture
Update app.py
fd204d9 verified
import gradio as gr
from langchain_google_genai import ChatGoogleGenerativeAI
from dotenv import load_dotenv
import os
from langchain_community.document_loaders import WebBaseLoader
from langchain.agents import AgentExecutor, create_react_agent
from langchain import hub
from langchain.tools import tool
import ast
import warnings
# Load environment variables
load_dotenv()
api_key = os.getenv("GOOGLE_API_KEY")
model = 'gemini-2.5-flash'
@tool
def web_scrap_tool(url):
''' Scrapes content from a list of URLs.
The input should be a string representation of a Python list of URLs (e.g., "['https://example.com']").
Returns the concatenated text content of all scraped pages.
'''
try:
url_list = ast.literal_eval(url)
if not isinstance(url_list, list) or not all(isinstance(url, str) for url in url_list):
raise ValueError("Input must be a list of URLs as strings. Example: ['https://example.com']")
except (ValueError, SyntaxError) as e:
raise ValueError(f"Invalid input format: {e}. Please provide a valid python list of URLs.")
combined_content = []
for url in url_list:
try:
loader = WebBaseLoader(
[url],
requests_kwargs={"headers": {"User-Agent": "caramel-AI"}}
)
documents = loader.load()
for doc in documents:
combined_content.append(doc.page_content)
except Exception as e:
combined_content.append(f"Could not scrape {url}. Error: {e}.")
return "\n".join(combined_content)
# Create a single instance of the agent executor
llm = ChatGoogleGenerativeAI(model=model, api_key=api_key)
tools = [web_scrap_tool]
prompt = hub.pull("hwchase17/react")
agent = create_react_agent(llm, tools, prompt=prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=False, handle_parsing_errors=True)
# Function for Gradio interface
def ask_agent(user_input):
try:
result = agent_executor.invoke({'input': user_input})
return result['output']
except Exception as e:
return f"Error: {str(e)}"
# Gradio UI
ui = gr.Interface(
fn=ask_agent,
inputs=gr.Textbox(label="Ask about a webpage", placeholder="e.g., What is the content of the 'About Us' page of https://example.com?"),
outputs=gr.Textbox(label="Agent Response"),
title="Web Scraping Agent",
description="Ask a question about the contents of any webpage. The agent will scrape and respond accordingly."
)
if __name__ == "__main__":
ui.launch()