51 lines
1.6 KiB
Python
51 lines
1.6 KiB
Python
"""新闻采集与催化归因流水线。"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
from app.config import settings
|
|
from app.catalyst.service import analyze_pending_news, ingest_news_items
|
|
from app.news.collector import collect_news_sources
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
async def refresh_news_catalysts(
|
|
lookback_hours: int | None = None,
|
|
limit_per_source: int | None = None,
|
|
analyze_limit: int | None = None,
|
|
use_llm: bool = True,
|
|
) -> dict:
|
|
if not settings.news_collection_enabled:
|
|
return {
|
|
"enabled": False,
|
|
"fetched": 0,
|
|
"inserted": 0,
|
|
"duplicates": 0,
|
|
"analyzed": 0,
|
|
"skipped": 0,
|
|
"failed": 0,
|
|
}
|
|
|
|
items = await collect_news_sources(
|
|
lookback_hours=lookback_hours or settings.news_fetch_lookback_hours,
|
|
limit_per_source=limit_per_source or settings.news_fetch_limit_per_source,
|
|
)
|
|
ingest_result = await ingest_news_items(items)
|
|
remaining_result = await analyze_pending_news(
|
|
limit=analyze_limit or settings.news_analyze_limit_per_run,
|
|
use_llm=use_llm,
|
|
)
|
|
result = {
|
|
"enabled": True,
|
|
"fetched": len(items),
|
|
"inserted": ingest_result.get("inserted", 0),
|
|
"duplicates": ingest_result.get("duplicates", 0),
|
|
"analyzed": ingest_result.get("analyzed", 0) + remaining_result.get("analyzed", 0),
|
|
"skipped": remaining_result.get("skipped", 0),
|
|
"failed": ingest_result.get("failed", 0) + remaining_result.get("failed", 0),
|
|
}
|
|
logger.info("新闻催化刷新完成: %s", result)
|
|
return result
|