31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
"""Glue between the pipeline and the LLM layer."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
from us2kr.config import Settings
|
|
from us2kr.llm.base import LLMProvider
|
|
from us2kr.llm.minimax import MiniMaxProvider
|
|
from us2kr.models import MarketPayload, Report
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
def build_provider(settings: Settings) -> LLMProvider:
|
|
"""Construct the configured LLM provider (MiniMax only for now)."""
|
|
return MiniMaxProvider(settings)
|
|
|
|
|
|
def summarize_payload(payload: MarketPayload, provider: LLMProvider) -> tuple[Report, str]:
|
|
"""Summarise via the provider and guarantee `report.data_gaps` includes every payload gap."""
|
|
report, model_used = provider.summarize(payload)
|
|
merged: list[str] = []
|
|
for gap in [*payload.data_gaps, *report.data_gaps]:
|
|
if gap and gap not in merged:
|
|
merged.append(gap)
|
|
if merged != list(report.data_gaps):
|
|
report = report.model_copy(update={"data_gaps": merged})
|
|
log.info("summary produced by %s (%d data gaps)", model_used, len(merged))
|
|
return report, model_used
|