Spaces:
Sleeping
Sleeping
File size: 6,081 Bytes
f01d87d 7287745 f01d87d 7287745 f01d87d 7287745 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
import gradio as gr
from duckduckgo_search import DDGS
from datetime import datetime
import os
import asyncio
from openai import OpenAI # Using standard OpenAI client
from agents import Agent, Runner, function_tool # Assuming agents package is installed
# Set up environment variables
# For Hugging Face Spaces, set these in the Settings > Repository secrets
OPENAI_API_KEY = os.environ.get("OPENAI_API_KEY") # You'll need to add this to HF Spaces secrets
# Get current date for default value
default_date = datetime.now().strftime("%Y-%m-%d")
# Configure OpenAI client to use HuggingFace or OpenAI API
client = OpenAI(
api_key=OPENAI_API_KEY,
# If using OpenAI directly
# If using a different API endpoint (e.g., HF Inference API), uncomment and adjust:
# base_url="https://api-inference.huggingface.co/models/meta-llama/Llama-3.2-70b-instruct"
)
# Define the model - assuming the agents library supports standard OpenAI client
from agents import OpenAIChatCompletionsModel # Adjust import if needed
model = OpenAIChatCompletionsModel(
model="gpt-4o-mini", # Using GPT-4o-mini for better performance at a lower cost
openai_client=client
)
# News search tool
@function_tool
def get_news_articles(topic, language="English", search_date=None):
# Use provided date or default to current date
if not search_date:
search_date = datetime.now().strftime("%Y-%m")
else:
# Convert from date picker format (YYYY-MM-DD) to YYYY-MM format
search_date = search_date[:7] # Just get YYYY-MM portion
print(f"Running DuckDuckGo news search for {topic} in {language} for date {search_date}...")
# Map common languages to their search keywords
language_keywords = {
"English": "", # Default, no special keyword needed
"Hindi": "हिंदी",
"Spanish": "español",
"French": "français",
"German": "deutsch",
"Japanese": "日本語",
"Chinese": "中文",
"Russian": "русский",
"Arabic": "العربية",
"Portuguese": "português",
"Italian": "italiano",
"Dutch": "nederlands",
"Korean": "한국어",
"Turkish": "türkçe",
"Kannada": "ಕನ್ನಡ",
"Tamil": "தமிழ்",
"Telugu": "తెలుగు",
"Bengali": "বাংলা",
"Marathi": "मराठी"
}
# Get language keyword if available
lang_keyword = language_keywords.get(language, language)
# Add language to search query if it's not English
search_query = f"{topic} {lang_keyword} {search_date}" if language != "English" else f"{topic} {search_date}"
# DuckDuckGo search
ddg_api = DDGS()
results = ddg_api.text(search_query, max_results=5)
if results:
news_results = "\n\n".join([f"Title: {result['title']}\nURL: {result['href']}\nDescription: {result['body']}" for result in results])
return news_results
else:
return f"Could not find news results for {topic} in {language} for {search_date}."
# Create agents
news_agent = Agent(
name="News Agent",
instructions="You provide the latest news articles for a given topic using DuckDuckGo search. You can search for news in different languages when specified.",
tools=[get_news_articles],
model=model
)
editor_agent = Agent(
name="Editor Assistant",
instructions="Rewrite and give me a news article ready for publishing. Each news story should be in a separate section. Maintain the original language of the news stories. If the content is in a language other than English, edit and format in that same language.",
model=model
)
# Workflow function for Gradio
def fetch_and_edit_news(topic, language, search_date):
try:
# Create a new event loop for this thread
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
# Step 1: Run the news agent
news_result = Runner.run_sync(
news_agent,
f"Get me the news about {topic} in {language} for date {search_date}")
raw_news = news_result.final_output
# Step 2: Pass news to editor for final review
editor_news_response = Runner.run_sync(
editor_agent,
f"Please edit the following news in {language} language. Maintain the original language: \n\n{raw_news}")
edited_news = editor_news_response.final_output
return edited_news
except Exception as e:
# Return the error message for debugging
return f"Error: {str(e)}\n\nThis could be due to API key issues or problems with the openai-agents package. Please check the logs for more details."
# Create Gradio interface
with gr.Blocks(title="Multilingual AI News Generator") as demo:
gr.Markdown("# Multilingual AI News Generator")
gr.Markdown("Enter a topic, select a language, and choose a date to receive curated and edited news articles")
with gr.Row():
topic_input = gr.Textbox(label="News Topic", placeholder="Enter a topic (e.g., AI, Climate Change, Sports)")
language_dropdown = gr.Dropdown(
choices=[
"English", "Hindi", "Spanish", "French", "German",
"Japanese", "Chinese", "Russian", "Arabic", "Portuguese",
"Italian", "Dutch", "Korean", "Turkish", "Kannada",
"Tamil", "Telugu", "Bengali", "Marathi"
],
label="Language",
value="English"
)
date_picker = gr.Textbox(
label="Search Date",
placeholder="YYYY-MM-DD",
value=default_date
)
submit_btn = gr.Button("Generate News Article")
output_box = gr.Textbox(label="Generated News Article", lines=20)
submit_btn.click(
fn=fetch_and_edit_news,
inputs=[topic_input, language_dropdown, date_picker],
outputs=output_box
)
# Launch the app
if __name__ == "__main__":
demo.launch() |