article_writer / app.py
Manasa1's picture
Update app.py
d47a636 verified
import gradio as gr
from phi.agent import Agent
from phi.model.groq import Groq
from phi.tools.duckduckgo import DuckDuckGo
from phi.tools.newspaper4k import Newspaper4k
import os
from dotenv import load_dotenv
# Load environment variables
load_dotenv()
# Access the Groq API key
groq_api_key = os.getenv("GROQ_API_KEY")
# Initialize the agent
try:
agent = Agent(
model=Groq(id="llama-3.3-70b-versatile", api_key=groq_api_key),
tools=[DuckDuckGo(), Newspaper4k()],
description="You are a senior NYT researcher writing an article on a topic.",
instructions=[
"For a given topic, search for the top 5 links.",
"Then read each URL and extract the article text, if a URL isn't available, ignore it.",
"Analyse and prepare an NYT-worthy article based on the information.",
],
markdown=True,
show_tool_calls=True,
add_datetime_to_instructions=True,
)
except Exception as e:
# Print error if the agent initialization fails
raise RuntimeError(f"Error initializing the agent: {e}")
# Function to process input and generate an article
def generate_article(topic):
if not topic.strip():
return "Please enter a valid topic."
try:
response = agent.run(topic) # Use `run` for robustness
# Handle different response types
if isinstance(response, str):
return response # Direct string output
elif isinstance(response, list):
return "\n".join(response) # List of strings
elif hasattr(response, 'content'): # Response object with `content` attribute
return response.content
else:
return f"Unexpected response type: {type(response)}. Raw output: {response}"
except Exception as e:
return f"Error generating the article: {e}"
# Gradio interface
with gr.Blocks() as app:
gr.Markdown("# πŸ“° NYT-Style Article Generator")
gr.Markdown(
"Enter a topic below, and the app will generate an NYT-style article by searching, extracting, and summarizing information from the web."
)
with gr.Row():
topic_input = gr.Textbox(
label="Enter Topic", placeholder="e.g., Simulation Theory", lines=1
)
generate_button = gr.Button("Generate Article")
output_text = gr.Markdown(label="Generated Article")
generate_button.click(fn=generate_article, inputs=topic_input, outputs=output_text)
# Run the app
if __name__ == "__main__":
app.launch()