GradioAgentTest / app.py
SmokeyBandit's picture
Update app.py
6e203bf verified
import gradio as gr
import requests
from bs4 import BeautifulSoup
from duckduckgo_search import DDGS # Updated import for the new API
from transformers import pipeline
# ---- Initialize Summarization Pipeline ----
summarizer = pipeline("summarization", model="sshleifer/distilbart-cnn-12-6")
# ---- Web Scrape Agent ----
def web_scrape_agent(url):
try:
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
soup = BeautifulSoup(response.text, "html.parser")
text = soup.get_text(separator="\n")
return text.strip() or "No content found."
except Exception as e:
return f"Error during scraping: {e}"
# ---- Research Agent using DuckDuckGo Search with new API ----
def research_agent(query):
try:
with DDGS() as ddgs:
results = ddgs.text(query, max_results=5)
if results:
response = "\n\n".join(
[f"{result.get('title', 'No Title')}:\n{result.get('href', 'No URL')}" for result in results]
)
return response
else:
return "No results found."
except Exception as e:
return f"Error during research: {e}"
# ---- Report Agent using Transformers Summarization ----
def report_agent(data):
try:
if len(data.split()) < 30:
return "Input text is too short to generate a summary. Please provide more details."
summary = summarizer(data, max_length=130, min_length=30, do_sample=False)
return summary[0]['summary_text']
except Exception as e:
return f"Error during report generation: {e}"
# ---- Planning Agent ----
def planning_agent(goal):
steps = [
f"Understand the requirements of '{goal}'.",
f"Break down the goal into smaller, manageable tasks.",
f"Prioritize the tasks and assign timelines.",
f"Execute the plan and monitor progress.",
f"Review and adjust the plan as necessary."
]
return "\n".join([f"Step {i+1}: {step}" for i, step in enumerate(steps)])
# ---- Weather Report Agent using Open-Meteo and Nominatim for Geocoding ----
def get_coordinates(city):
try:
url = f"https://nominatim.openstreetmap.org/search?city={city}&format=json"
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
data = response.json()
if data:
lat = data[0]["lat"]
lon = data[0]["lon"]
return lat, lon
else:
return None, None
except Exception:
return None, None
def weather_report_agent(city):
lat, lon = get_coordinates(city)
if not lat or not lon:
return "City not found. Please check the city name."
try:
url = f"https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lon}&current_weather=true"
response = requests.get(url)
data = response.json()
if "current_weather" in data:
weather_code = data["current_weather"]["weathercode"]
temp = data["current_weather"]["temperature"]
weather_mapping = {
0: "Clear sky",
1: "Mainly clear",
2: "Partly cloudy",
3: "Overcast",
45: "Fog",
48: "Depositing rime fog",
51: "Light drizzle",
53: "Moderate drizzle",
55: "Dense drizzle",
56: "Light freezing drizzle",
57: "Dense freezing drizzle",
61: "Slight rain",
63: "Moderate rain",
65: "Heavy rain",
66: "Light freezing rain",
67: "Heavy freezing rain",
71: "Slight snowfall",
73: "Moderate snowfall",
75: "Heavy snowfall",
77: "Snow grains",
80: "Slight rain showers",
81: "Moderate rain showers",
82: "Violent rain showers",
85: "Slight snow showers",
86: "Heavy snow showers",
95: "Thunderstorm",
96: "Thunderstorm with slight hail",
99: "Thunderstorm with heavy hail"
}
description = weather_mapping.get(weather_code, f"Code {weather_code}")
return f"Current weather in {city}:\nTemperature: {temp}°C\nCondition: {description}"
else:
return "Could not fetch weather data."
except Exception as e:
return f"Error fetching weather data: {e}"
# ---- Showcase All Agents Together ----
def showcase_all(url, research_query, report_data, planning_goal, city):
scraped = web_scrape_agent(url)
research = research_agent(research_query)
report = report_agent(report_data)
planning = planning_agent(planning_goal)
weather = weather_report_agent(city)
return scraped, research, report, planning, weather
# ---- Clear function for the Showcase Magic tab (clears both inputs and outputs) ----
def clear_all():
# Returns 10 empty strings (5 inputs + 5 outputs)
return "", "", "", "", "", "", "", "", "", ""
# ---- Gradio Interface Definition ----
with gr.Blocks(title="Multi-Agent Showcase App") as demo:
gr.Markdown("# Multi-Agent Showcase App")
gr.Markdown(
"Experience the magic of multiple agents at work! "
"Explore each tool individually or try the **Showcase Magic** tab to see all in action."
)
with gr.Tabs():
# --------- Web Scrape Tab ---------
with gr.TabItem("Web Scrape"):
with gr.Row():
url_input = gr.Textbox(label="Enter URL", placeholder="https://example.com", lines=1)
scrape_button = gr.Button("Scrape")
clear_scrape = gr.Button("Clear")
scrape_output = gr.Textbox(label="Scraped Content", lines=10)
scrape_button.click(web_scrape_agent, inputs=url_input, outputs=scrape_output)
clear_scrape.click(lambda: "", None, scrape_output)
# --------- Research Tab ---------
with gr.TabItem("Research"):
with gr.Row():
research_query = gr.Textbox(label="Enter Research Query", placeholder="Latest trends in AI", lines=1)
research_button = gr.Button("Search")
clear_research = gr.Button("Clear")
research_output = gr.Textbox(label="Research Summary", lines=10)
research_button.click(research_agent, inputs=research_query, outputs=research_output)
clear_research.click(lambda: "", None, research_output)
# --------- Report Tab ---------
with gr.TabItem("Report"):
with gr.Row():
report_input = gr.Textbox(label="Enter Data for Report", placeholder="Paste your text here...", lines=10)
report_button = gr.Button("Generate Report")
clear_report = gr.Button("Clear")
report_output = gr.Textbox(label="Generated Report", lines=10)
report_button.click(report_agent, inputs=report_input, outputs=report_output)
clear_report.click(lambda: "", None, report_output)
# --------- Planning Tab ---------
with gr.TabItem("Planning"):
with gr.Row():
planning_input = gr.Textbox(label="Enter Your Goal", placeholder="E.g., Plan a trip to Paris", lines=2)
planning_button = gr.Button("Plan")
clear_planning = gr.Button("Clear")
planning_output = gr.Textbox(label="Action Plan", lines=6)
planning_button.click(planning_agent, inputs=planning_input, outputs=planning_output)
clear_planning.click(lambda: "", None, planning_output)
# --------- Weather Tab ---------
with gr.TabItem("Weather"):
with gr.Row():
city_input = gr.Textbox(label="Enter City Name", placeholder="e.g., London", lines=1)
weather_button = gr.Button("Get Weather")
clear_weather = gr.Button("Clear")
weather_output = gr.Textbox(label="Weather Report", lines=3)
weather_button.click(weather_report_agent, inputs=city_input, outputs=weather_output)
clear_weather.click(lambda: "", None, weather_output)
# --------- Showcase Magic Tab ---------
with gr.TabItem("Showcase Magic"):
gr.Markdown("Provide inputs for each tool and click **Showcase Magic** to see all agents in action!")
with gr.Row():
with gr.Column():
demo_url = gr.Textbox(label="URL for Web Scrape", placeholder="https://example.com", lines=1)
demo_research = gr.Textbox(label="Research Query", placeholder="Latest trends in AI", lines=1)
demo_report = gr.Textbox(label="Data for Report", placeholder="Paste your text here...", lines=3)
with gr.Column():
demo_planning = gr.Textbox(label="Your Goal", placeholder="Plan a trip to Paris", lines=1)
demo_city = gr.Textbox(label="City for Weather", placeholder="e.g., London", lines=1)
with gr.Row():
showcase_button = gr.Button("Showcase Magic")
clear_showcase = gr.Button("Clear All")
with gr.Row():
out_scrape = gr.Textbox(label="Scraped Content", lines=10)
out_research = gr.Textbox(label="Research Summary", lines=10)
with gr.Row():
out_report = gr.Textbox(label="Generated Report", lines=10)
out_planning = gr.Textbox(label="Action Plan", lines=6)
with gr.Row():
out_weather = gr.Textbox(label="Weather Report", lines=3)
showcase_button.click(
showcase_all,
inputs=[demo_url, demo_research, demo_report, demo_planning, demo_city],
outputs=[out_scrape, out_research, out_report, out_planning, out_weather]
)
# The clear button resets both input and output fields for this tab.
clear_showcase.click(
clear_all,
outputs=[demo_url, demo_research, demo_report, demo_planning, demo_city, out_scrape, out_research, out_report, out_planning, out_weather]
)
# Launch the app
demo.launch()