from __future__ import annotations import argparse import sys from pathlib import Path REPO_ROOT = Path(__file__).resolve().parents[1] SRC_ROOT = REPO_ROOT / "src" if str(SRC_ROOT) not in sys.path: sys.path.insert(0, str(SRC_ROOT)) from summary_mcp.core.summary_loop import run_loop def main() -> None: parser = argparse.ArgumentParser(description="Run the minimal extraction -> LLM summary -> validation loop.") parser.add_argument("--extracted", type=Path, required=True, help="Extracted article JSON file") parser.add_argument("--prompt", type=Path, required=True, help="LLM prompt template file") parser.add_argument("--output", type=Path, required=True, help="Target path for the final summary JSON") parser.add_argument("--max-retries", type=int, default=2, help="Number of repair retries after the initial attempt") parser.add_argument("--timeout", type=float, default=60.0, help="LLM request timeout in seconds") parser.add_argument("--api-key", type=str, default=None, help="LLM API key") parser.add_argument("--model", type=str, default=None, help="LLM model name") parser.add_argument("--api-url", type=str, default=None, help="LLM chat completions API URL or base URL") args = parser.parse_args() raise SystemExit( run_loop( extracted_path=args.extracted, prompt_path=args.prompt, output_path=args.output, max_retries=args.max_retries, timeout_seconds=args.timeout, api_key=args.api_key, model=args.model, api_url=args.api_url, ) ) if __name__ == "__main__": main()