SmartWebAnalyzerPlus / Gradio_UI.py
MHamdan's picture
Initial commit with full functionality extend app req tools
265b6a6
raw
history blame
3.73 kB
# Gradio_UI.py
import gradio as gr
from smolagents import CodeAgent
from typing import Optional
class GradioUI:
def __init__(self, agent: CodeAgent):
self.agent = agent
def process_query(self, query: str) -> str:
try:
response = self.agent.run(query)
return response
except Exception as e:
return f"Error processing query: {str(e)}"
def launch(self,
server_name: Optional[str] = None,
server_port: Optional[int] = None,
share: bool = False):
# Create the interface
with gr.Blocks(title="Smart Web Analyzer Plus") as demo:
gr.Markdown("# 🌐 Smart Web Analyzer Plus")
gr.Markdown("Analyze web content using AI to extract summaries, determine sentiment, and identify topics.")
with gr.Row():
with gr.Column(scale=3):
url_input = gr.Textbox(
label="Enter URL",
placeholder="https://example.com",
show_label=True
)
with gr.Column(scale=2):
analysis_types = gr.CheckboxGroup(
choices=["summarize", "sentiment", "topics"],
label="Analysis Types",
value=["summarize"],
show_label=True
)
with gr.Column(scale=1):
analyze_btn = gr.Button(
"Analyze",
variant="primary"
)
# Output display
with gr.Tabs() as tabs:
with gr.Tab("πŸ“„ Clean Text"):
clean_text_output = gr.Markdown()
with gr.Tab("πŸ“ Summary"):
summary_output = gr.Markdown()
with gr.Tab("🎭 Sentiment"):
sentiment_output = gr.Markdown()
with gr.Tab("πŸ“Š Topics"):
topics_output = gr.Markdown()
# Loading indicator
status = gr.Markdown(visible=False)
# Examples
gr.Examples(
examples=[
["https://www.bbc.com/news/technology-67881954", ["summarize", "sentiment"]],
["https://arxiv.org/html/2312.17296v1", ["topics", "summarize"]]
],
inputs=[url_input, analysis_types],
label="Try these examples"
)
def create_analysis_prompt(url: str, types: list) -> str:
type_str = ", ".join(types)
return f"Analyze the content at {url} and provide {type_str} analysis."
def on_analyze_start():
return gr.update(value="⏳ Analysis in progress...", visible=True)
def on_analyze_end():
return gr.update(value="", visible=False)
# Event handlers
analyze_btn.click(
fn=on_analyze_start,
outputs=[status]
).then(
fn=lambda url, types: self.process_query(create_analysis_prompt(url, types)),
inputs=[url_input, analysis_types],
outputs=[clean_text_output] # The agent will format the output appropriately
).then(
fn=on_analyze_end,
outputs=[status]
)
# Launch the interface
demo.launch(
server_name=server_name,
server_port=server_port,
share=share
)