|
from datetime import datetime |
|
import os |
|
from LLMS import initialize_llm |
|
from graph import create_news_search_workflow,create_article_scraper_workflow,create_blog_generator_workflow |
|
|
|
|
|
def generate_ai_news_blog(groq_api_key=None, tavily_api_key=None, date=None): |
|
""" |
|
Main function to generate AI news blog |
|
|
|
Args: |
|
groq_api_key (str, optional): Groq API key |
|
tavily_api_key (str, optional): Tavily API key |
|
date (str, optional): Date to search for news (YYYY-MM-DD format) |
|
|
|
Returns: |
|
str: Generated blog content in markdown format |
|
""" |
|
|
|
if groq_api_key: |
|
os.environ["GROQ_API_KEY"] = groq_api_key |
|
if tavily_api_key: |
|
os.environ["TAVILY_API_KEY"] = tavily_api_key |
|
|
|
|
|
initialize_llm(groq_api_key) |
|
|
|
|
|
if not date: |
|
today = datetime.now().strftime("%Y-%m-%d") |
|
else: |
|
today = date |
|
|
|
|
|
news_search = create_news_search_workflow() |
|
news_results = news_search.invoke({"query": "latest artificial intelligence news", "date": today}) |
|
|
|
print(f"Found {len(news_results['news_items'])} AI news items") |
|
|
|
|
|
article_scraper = create_article_scraper_workflow() |
|
news_contents = [] |
|
|
|
for item in news_results["news_items"]: |
|
print(f"Scraping: {item['title']} from {item['source']}") |
|
result = article_scraper.invoke({"url": item['url']}) |
|
|
|
|
|
if "not in English" in result["article_content"]: |
|
print(f"Skipping non-English content: {item['title']}") |
|
continue |
|
|
|
news_contents.append({ |
|
"title": item['title'], |
|
"url": item['url'], |
|
"source": item['source'], |
|
"description": item['description'], |
|
"content": result["article_content"] |
|
}) |
|
|
|
|
|
if not news_contents: |
|
return "No English language AI news items found for the specified date. Please try a different date." |
|
|
|
|
|
formatted_content = "\n\n".join([ |
|
f"TITLE: {item['title']}\nSOURCE: {item['source']}\nURL: {item['url']}\nDESCRIPTION: {item['description']}\nCONTENT: {item['content'][:2000]}..." |
|
for item in news_contents |
|
]) |
|
|
|
|
|
blog_generator = create_blog_generator_workflow() |
|
blog_result = blog_generator.invoke({ |
|
"content": formatted_content, |
|
"completed_sections": [] |
|
}) |
|
|
|
return blog_result["final_report"] |