Files

1 line
3.8 KiB
JSON

{"repo": "1zero224/autolettering", "files": {"experiments/phase6_nonbubble_gpt_replace.py": {"4ec999e46916ed012bc8d66cca9ee03f1a9698d7": {"t": 1785595217.1544855, "n": 3552, "h": "4730373556287b93", "c": "from __future__ import annotations\n\nimport argparse\nimport os\nimport sys\nfrom pathlib import Path\n\nPROJECT_ROOT = Path(__file__).resolve().parents[1]\nif str(PROJECT_ROOT) not in sys.path:\n sys.path.insert(0, str(PROJECT_ROOT))\n\nfrom autolettering.models.gpt_image import GptImageConfig\nfrom autolettering.models.mimo import MimoVisionClient, MimoVisionConfig\nfrom autolettering.phase6_nonbubble_gpt_replace import run_phase6_nonbubble_gpt_replace\n\n\ndef build_parser() -> argparse.ArgumentParser:\n parser = argparse.ArgumentParser(description=\"Run Phase 6 non-bubble GPT Chinese replacement and BT repair comparison.\")\n parser.add_argument(\"--detection-run-dir\", required=True)\n parser.add_argument(\"--output-root\", default=\"outputs/runs\")\n parser.add_argument(\"--run-id\", default=None)\n parser.add_argument(\"--sample-limit\", type=int, default=5)\n parser.add_argument(\"--record-id\", action=\"append\", dest=\"record_ids\", default=None)\n parser.add_argument(\"--bt-method\", action=\"append\", dest=\"bt_methods\", default=None)\n parser.add_argument(\"--call-gpt-image\", action=\"store_true\")\n parser.add_argument(\"--skip-mimo\", action=\"store_true\")\n parser.add_argument(\"--context-padding\", type=int, default=16)\n parser.add_argument(\"--rect-mask-expand-px\", type=int, default=2)\n parser.add_argument(\"--env-file\", default=\".env\")\n return parser\n\n\ndef main() -> None:\n args = build_parser().parse_args()\n\n _load_env_file(Path(args.env_file))\n run_dir = run_phase6_nonbubble_gpt_replace(\n detection_run_dir=Path(args.detection_run_dir),\n output_root=Path(args.output_root),\n run_id=args.run_id,\n sample_limit=args.sample_limit,\n record_ids=args.record_ids,\n gpt_config=_gpt_config_from_env() if args.call_gpt_image else None,\n call_gpt_image=args.call_gpt_image,\n bt_methods=args.bt_methods,\n mimo_client=None if args.skip_mimo else MimoVisionClient(_mimo_config_from_env()),\n context_padding=args.context_padding,\n rect_mask_expand_px=args.rect_mask_expand_px,\n )\n print(run_dir)\n\n\ndef _load_env_file(path: Path) -> None:\n if not path.exists():\n return\n for line in path.read_text(encoding=\"utf-8\").splitlines():\n stripped = line.strip()\n if not stripped or stripped.startswith(\"#\") or \"=\" not in stripped:\n continue\n name, value = stripped.split(\"=\", 1)\n os.environ.setdefault(name.strip(), value.strip().strip('\"').strip(\"'\"))\n\n\ndef _gpt_config_from_env() -> GptImageConfig:\n required = [\"GPT_IMAGE_API_KEY\", \"GPT_IMAGE_MODEL\"]\n missing = [name for name in required if not os.environ.get(name)]\n if missing:\n raise SystemExit(f\"Missing required environment variables: {', '.join(missing)}\")\n return GptImageConfig(\n base_url=os.environ.get(\"GPT_IMAGE_BASE_URL\") or None,\n api_key=os.environ[\"GPT_IMAGE_API_KEY\"],\n model=os.environ[\"GPT_IMAGE_MODEL\"],\n )\n\n\ndef _mimo_config_from_env() -> MimoVisionConfig:\n required = [\"MIMO_BASE_URL\", \"MIMO_API_KEY\", \"MIMO_VISION_MODEL\"]\n missing = [name for name in required if not os.environ.get(name)]\n if missing:\n raise SystemExit(f\"Missing required environment variables: {', '.join(missing)}\")\n return MimoVisionConfig(\n base_url=os.environ[\"MIMO_BASE_URL\"],\n api_key=os.environ[\"MIMO_API_KEY\"],\n model=os.environ[\"MIMO_VISION_MODEL\"],\n max_completion_tokens=1600,\n thinking_type=\"disabled\",\n )\n\n\nif __name__ == \"__main__\":\n main()\n"}}}}