AiNewsV2 / ui /web_ui.py
Phoenix21's picture
Modular code
7516245
import gradio as gr
from datetime import datetime
from core import generate_ai_news_blog
def create_gradio_interface():
"""
Create a Gradio interface for the AI News Blog Generator
Returns:
gr.Blocks: Gradio interface
"""
def run_generation(groq_key, tavily_key, selected_date):
if not groq_key or not tavily_key:
return "Please provide both API keys."
try:
result = generate_ai_news_blog(groq_key, tavily_key, selected_date)
return result
except Exception as e:
return f"Error generating blog: {str(e)}"
# Create the interface
with gr.Blocks(title="AI News Blog Generator") as demo:
gr.Markdown("# AI News Blog Generator")
gr.Markdown("Generate a daily roundup of AI news articles, categorized by topic.")
with gr.Row():
with gr.Column():
groq_key = gr.Textbox(label="Groq API Key", placeholder="Enter your Groq API key", type="password")
tavily_key = gr.Textbox(label="Tavily API Key", placeholder="Enter your Tavily API key", type="password")
date_picker = gr.Textbox(label="Date (YYYY-MM-DD)", placeholder="Leave empty for today's date",
value=datetime.now().strftime("%Y-%m-%d"))
with gr.Row():
generate_button = gr.Button("Generate AI News Blog", variant="primary")
clear_button = gr.Button("Clear Output")
with gr.Column():
status_text = gr.Textbox(label="Status", placeholder="Ready to generate", interactive=False)
output_md = gr.Markdown("Your AI News Blog will appear here.")
# Add loading state and status updates
generate_button.click(
fn=lambda: "Generating AI News Blog... This may take several minutes.",
inputs=None,
outputs=status_text,
queue=False
).then(
fn=run_generation,
inputs=[groq_key, tavily_key, date_picker],
outputs=output_md
).then(
fn=lambda: "Blog generation complete!",
inputs=None,
outputs=status_text
)
# Clear output
clear_button.click(
fn=lambda: ("Ready to generate", ""),
inputs=None,
outputs=[status_text, output_md]
)
return demo
def launch_ui():
"""Launch the Gradio web UI"""
demo = create_gradio_interface()
demo.launch()