import gradio as gr from duckduckgo_search import DDGS def news( keywords: str, region: str = "wt-wt", safesearch: str = "moderate", timelimit: str | None = None, max_results: int | None = None, ) -> list[dict[str, str]]: """DuckDuckGo news search. Query params: https://duckduckgo.com/params. Args: keywords: keywords for query. region: wt-wt, us-en, uk-en, ru-ru, etc. Defaults to "wt-wt". safesearch: on, moderate, off. Defaults to "moderate". timelimit: d, w, m. Defaults to None. max_results: max number of results. If None, returns results only from the first response. Defaults to None. Returns: List of dictionaries with news search results. """ # Fix: Use the keywords parameter instead of hardcoded "sun" results = DDGS().news(keywords=keywords, region=region, safesearch=safesearch, timelimit=timelimit, max_results=max_results) return list(results) # Convert generator to list and return it # Create a Gradio interface for the news function demo = gr.Interface( fn=news, inputs=[ gr.Textbox(label="Keywords"), gr.Dropdown(["wt-wt", "us-en", "uk-en"], label="Region", value="wt-wt"), gr.Dropdown(["on", "moderate", "off"], label="Safe Search", value="moderate"), gr.Dropdown([None, "d", "w", "m"], label="Time Limit", value=None), gr.Number(label="Max Results", value=10) ], outputs=gr.JSON(), title="News Search", description="Search for news using DuckDuckGo" ) demo.launch(mcp_server=True)