1 line
4.5 KiB
JSON
1 line
4.5 KiB
JSON
{"repo": "ancientnerds/ancientmap", "files": {"scripts/regenerate_article_minimax.py": {"8391a8b96c6b82d82b3d711c1db5f69b4421a726": {"t": 1785674010.7067518, "n": 4173, "h": "bfc234ea054740f8", "c": "\"\"\"Regenerate the latest weekly article using MiniMax M2.7 for the entire pipeline.\n\nUsage:\n LYRA_MINIMAX_API_KEY=sk-cp-... python scripts/regenerate_article_minimax.py\n\nDeletes the existing article for the week, then runs the full article\ngeneration pipeline with LYRA_LLM_BACKEND=minimax.\n\"\"\"\n\nfrom __future__ import annotations\n\nimport os\nimport sys\n\n# ── ENV MUST BE SET BEFORE ANY PROJECT IMPORTS ──\n# pipeline.config reads POSTGRES_* at import time via pydantic-settings\nos.environ[\"POSTGRES_HOST\"] = \"127.0.0.1\"\nos.environ[\"POSTGRES_PORT\"] = \"15432\"\nos.environ.setdefault(\"POSTGRES_PASSWORD\", \"ancient_map_dev_password\")\nos.environ[\"LYRA_LLM_BACKEND\"] = \"minimax\"\nos.environ[\"LYRA_ARTICLE_WEB_BACKEND\"] = \"minimax\"\nos.environ.setdefault(\"LYRA_ANTHROPIC_API_KEY\", \"unused\")\n\nsys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\n\nimport logging\nimport time\nfrom datetime import UTC, datetime, timedelta\n\nlogging.basicConfig(\n level=logging.INFO,\n format=\"%(asctime)s %(message)s\",\n datefmt=\"%H:%M:%S\",\n)\nlogger = logging.getLogger(__name__)\n\n# Now safe to import project modules\nimport pipeline.lyra.config as cfg\n\ncfg._cached_settings = None\ncfg.LyraSettings._resolve_env_fallbacks()\n\nfrom pipeline.database import NewsArticle, get_session\nfrom pipeline.lyra.article_generator import generate_weekly_article\nfrom pipeline.lyra.config import LyraSettings\n\n\ndef main():\n import argparse\n\n parser = argparse.ArgumentParser()\n parser.add_argument(\"--week-start\", default=\"2026-03-23\")\n args = parser.parse_args()\n\n minimax_key = os.environ.get(\"LYRA_MINIMAX_API_KEY\", \"\")\n if not minimax_key:\n print(\"ERROR: Set LYRA_MINIMAX_API_KEY\")\n sys.exit(1)\n\n settings = LyraSettings()\n logger.info(f\"Backend: {settings.llm_backend}\")\n logger.info(f\"Model: MiniMax-M2.7\")\n logger.info(f\"Web backend: {settings.article_web_backend}\")\n\n week_start = datetime.fromisoformat(args.week_start).replace(tzinfo=UTC)\n week_end = week_start + timedelta(days=6, hours=23, minutes=59, seconds=59)\n logger.info(f\"Week: {week_start.date()} to {week_end.date()}\")\n\n # Delete existing article for this week\n with get_session() as session:\n existing = (\n session.query(NewsArticle)\n .filter(NewsArticle.week_start == week_start)\n .first()\n )\n if existing:\n logger.info(f\"Deleting existing article {existing.id}: {existing.title}\")\n session.delete(existing)\n else:\n logger.info(\"No existing article to delete\")\n\n # Run full pipeline\n logger.info(\"=\" * 60)\n logger.info(\"GENERATING ARTICLE WITH MINIMAX M2.7\")\n logger.info(\"=\" * 60)\n\n t0 = time.time()\n success = generate_weekly_article(settings, week_override=(week_start, week_end))\n elapsed = time.time() - t0\n\n if success:\n logger.info(f\"Article generated in {elapsed:.0f}s\")\n with get_session() as session:\n article = (\n session.query(NewsArticle)\n .filter(NewsArticle.week_start == week_start)\n .first()\n )\n if article:\n logger.info(f\"Title: {article.title}\")\n logger.info(f\"Content length: {len(article.content)} chars\")\n outfile = \"scripts/article_minimax_generated.md\"\n with open(outfile, \"w\", encoding=\"utf-8\") as f:\n f.write(f\"# {article.title}\\n\\n{article.content}\")\n logger.info(f\"Saved to {outfile}\")\n\n # Print checklist results from quality_report\n qr = article.quality_report or {}\n cl = qr.get(\"checklist\", {})\n if cl:\n logger.info(\"Checklist: %s\", cl.get(\"summary\", \"N/A\"))\n for name, check in cl.get(\"checks\", {}).items():\n status = \"PASS\" if check.get(\"passed\") else \"FAIL\"\n logger.info(\" %s %s: %s\", status, name, check.get(\"message\", \"\"))\n else:\n logger.error(f\"Article generation failed after {elapsed:.0f}s\")\n sys.exit(1)\n\n\nif __name__ == \"__main__\":\n main()\n"}}}} |