This commit is contained in:
Octopus 2026-04-18 05:44:59 +00:00 committed by GitHub
commit d8d50ec7db
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 34 additions and 12 deletions

View File

@ -23,16 +23,18 @@ def get_news(
@tool @tool
def get_global_news( def get_global_news(
curr_date: Annotated[str, "Current date in yyyy-mm-dd format"], curr_date: Annotated[str, "Current date in yyyy-mm-dd format"],
look_back_days: Annotated[int, "Number of days to look back"] = 7, look_back_days: Annotated[int | None, "Number of days to look back (defaults to global_news_lookback_days config)"] = None,
limit: Annotated[int, "Maximum number of articles to return"] = 5, limit: Annotated[int | None, "Maximum number of articles to return (defaults to global_news_article_limit config)"] = None,
) -> str: ) -> str:
""" """
Retrieve global news data. Retrieve global news data.
Uses the configured news_data vendor. Uses the configured news_data vendor.
Args: Args:
curr_date (str): Current date in yyyy-mm-dd format curr_date (str): Current date in yyyy-mm-dd format
look_back_days (int): Number of days to look back (default 7) look_back_days (int | None): Number of days to look back. If None, uses
limit (int): Maximum number of articles to return (default 5) the global_news_lookback_days value from DEFAULT_CONFIG (7).
limit (int | None): Maximum number of articles to return. If None, uses
the global_news_article_limit value from DEFAULT_CONFIG (10).
Returns: Returns:
str: A formatted string containing global news data str: A formatted string containing global news data
""" """

View File

@ -1,4 +1,5 @@
from .alpha_vantage_common import _make_api_request, format_datetime_for_api from .alpha_vantage_common import _make_api_request, format_datetime_for_api
from .config import get_config
def get_news(ticker, start_date, end_date) -> dict[str, str] | str: def get_news(ticker, start_date, end_date) -> dict[str, str] | str:
"""Returns live and historical market news & sentiment data from premier news outlets worldwide. """Returns live and historical market news & sentiment data from premier news outlets worldwide.
@ -14,29 +15,37 @@ def get_news(ticker, start_date, end_date) -> dict[str, str] | str:
Dictionary containing news sentiment data or JSON string. Dictionary containing news sentiment data or JSON string.
""" """
limit = get_config().get("news_article_limit", 20)
params = { params = {
"tickers": ticker, "tickers": ticker,
"time_from": format_datetime_for_api(start_date), "time_from": format_datetime_for_api(start_date),
"time_to": format_datetime_for_api(end_date), "time_to": format_datetime_for_api(end_date),
"limit": str(limit),
} }
return _make_api_request("NEWS_SENTIMENT", params) return _make_api_request("NEWS_SENTIMENT", params)
def get_global_news(curr_date, look_back_days: int = 7, limit: int = 50) -> dict[str, str] | str: def get_global_news(curr_date: str, look_back_days: int | None = None, limit: int | None = None) -> dict[str, str] | str:
"""Returns global market news & sentiment data without ticker-specific filtering. """Returns global market news & sentiment data without ticker-specific filtering.
Covers broad market topics like financial markets, economy, and more. Covers broad market topics like financial markets, economy, and more.
Args: Args:
curr_date: Current date in yyyy-mm-dd format. curr_date: Current date in yyyy-mm-dd format.
look_back_days: Number of days to look back (default 7). look_back_days: Number of days to look back (defaults to global_news_lookback_days config).
limit: Maximum number of articles (default 50). limit: Maximum number of articles (defaults to global_news_article_limit config).
Returns: Returns:
Dictionary containing global news sentiment data or JSON string. Dictionary containing global news sentiment data or JSON string.
""" """
from datetime import datetime, timedelta from datetime import datetime, timedelta
config = get_config()
if look_back_days is None:
look_back_days = config.get("global_news_lookback_days", 7)
if limit is None:
limit = config.get("global_news_article_limit", 10)
# Calculate start date # Calculate start date
curr_dt = datetime.strptime(curr_date, "%Y-%m-%d") curr_dt = datetime.strptime(curr_date, "%Y-%m-%d")
start_dt = curr_dt - timedelta(days=look_back_days) start_dt = curr_dt - timedelta(days=look_back_days)

View File

@ -5,6 +5,7 @@ from datetime import datetime
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from .stockstats_utils import yf_retry from .stockstats_utils import yf_retry
from .config import get_config
def _extract_article_data(article: dict) -> dict: def _extract_article_data(article: dict) -> dict:
@ -66,7 +67,8 @@ def get_news_yfinance(
""" """
try: try:
stock = yf.Ticker(ticker) stock = yf.Ticker(ticker)
news = yf_retry(lambda: stock.get_news(count=20)) count = get_config().get("news_article_limit", 20)
news = yf_retry(lambda: stock.get_news(count=count))
if not news: if not news:
return f"No news found for {ticker}" return f"No news found for {ticker}"
@ -106,20 +108,25 @@ def get_news_yfinance(
def get_global_news_yfinance( def get_global_news_yfinance(
curr_date: str, curr_date: str,
look_back_days: int = 7, look_back_days: int | None = None,
limit: int = 10, limit: int | None = None,
) -> str: ) -> str:
""" """
Retrieve global/macro economic news using yfinance Search. Retrieve global/macro economic news using yfinance Search.
Args: Args:
curr_date: Current date in yyyy-mm-dd format curr_date: Current date in yyyy-mm-dd format
look_back_days: Number of days to look back look_back_days: Number of days to look back (defaults to global_news_lookback_days config)
limit: Maximum number of articles to return limit: Maximum number of articles to return (defaults to global_news_article_limit config)
Returns: Returns:
Formatted string containing global news articles Formatted string containing global news articles
""" """
config = get_config()
if look_back_days is None:
look_back_days = config.get("global_news_lookback_days", 7)
if limit is None:
limit = config.get("global_news_article_limit", 10)
# Search queries for macro/global news # Search queries for macro/global news
search_queries = [ search_queries = [
"stock market economy", "stock market economy",

View File

@ -22,6 +22,10 @@ DEFAULT_CONFIG = {
"max_debate_rounds": 1, "max_debate_rounds": 1,
"max_risk_discuss_rounds": 1, "max_risk_discuss_rounds": 1,
"max_recur_limit": 100, "max_recur_limit": 100,
# News fetching configuration
"news_article_limit": 20, # max articles per ticker for get_news
"global_news_lookback_days": 7, # lookback window (days) for get_global_news
"global_news_article_limit": 10, # max articles returned by get_global_news
# Data vendor configuration # Data vendor configuration
# Category-level configuration (default for all tools in category) # Category-level configuration (default for all tools in category)
"data_vendors": { "data_vendors": {