Spaces:
Sleeping
Sleeping
Download scripts/accept_codex_image.py from fitzpatrick9/jade-meadow-5791: direct link, hf CLI and curl.
- Browser
- Download file 11.3 kB
-
https://huggingface.co/spaces/fitzpatrick9/jade-meadow-5791/resolve/main/scripts/accept_codex_image.py
- Command line
-
hf download hf://spaces/fitzpatrick9/jade-meadow-5791/scripts/accept_codex_image.py
-
curl -L -o accept_codex_image.py https://huggingface.co/spaces/fitzpatrick9/jade-meadow-5791/resolve/main/scripts/accept_codex_image.py
11.3 kB
| """Opt-in live acceptance of the normal Codex image material path. | |
| Requires an existing application Codex sign-in. One image is requested using the | |
| explicit model; the same PNG is rendered twice. No model fallback is attempted. | |
| """ | |
| import argparse | |
| from datetime import datetime, timezone | |
| import hashlib | |
| from importlib.metadata import PackageNotFoundError, version | |
| import json | |
| import math | |
| from pathlib import Path | |
| import platform | |
| import re | |
| import subprocess | |
| import sys | |
| ROOT = Path(__file__).resolve().parents[1] | |
| sys.path.insert(0, str(ROOT)) | |
| from loguru import logger # noqa: E402 | |
| from moviepy import VideoFileClip # noqa: E402 | |
| from PIL import Image # noqa: E402 | |
| from app.services import codex_image, codex_oauth, material # noqa: E402 | |
| from app.utils import utils # noqa: E402 | |
| from app.utils.logging_utils import set_logging_options # noqa: E402 | |
| PROMPT = "An ancient Egyptian limestone pyramid in a desert at sunrise, documentary illustration, no text" | |
| PLANS = ("unknown", "free", "plus", "pro", "business", "enterprise", "edu") | |
| TRACE_FIELDS = { | |
| "http": {"kind", "status", "request_id", "requested_model", "attempt"}, | |
| "response": {"kind", "event", "status", "response_id", "response_model"}, | |
| "image_tool": {"kind", "event", "tool_id", "status", "result_bytes"}, | |
| "provider_error": {"kind", "error_type", "error_code", "error_param", "reason"}, | |
| } | |
| class AcceptanceFailure(Exception): | |
| """A fixed diagnostic code, never a remote body or arbitrary error text.""" | |
| def _revision(): | |
| try: | |
| commit = subprocess.run( | |
| ["git", "rev-parse", "HEAD"], | |
| cwd=ROOT, | |
| capture_output=True, | |
| text=True, | |
| check=True, | |
| timeout=5, | |
| ).stdout.strip() | |
| dirty = bool( | |
| subprocess.run( | |
| ["git", "status", "--porcelain"], | |
| cwd=ROOT, | |
| capture_output=True, | |
| text=True, | |
| check=True, | |
| timeout=5, | |
| ).stdout | |
| ) | |
| return {"commit": commit, "dirty": dirty} | |
| except (OSError, subprocess.SubprocessError): | |
| return {"commit": None, "dirty": None} | |
| def _package_version(name): | |
| try: | |
| return version(name) | |
| except PackageNotFoundError: | |
| return None | |
| def _ffmpeg_version(): | |
| try: | |
| output = subprocess.run( | |
| [utils.get_ffmpeg_binary(), "-version"], | |
| capture_output=True, | |
| text=True, | |
| encoding="utf-8", | |
| errors="replace", | |
| timeout=5, | |
| check=True, | |
| ).stdout | |
| match = re.match(r"ffmpeg version ([A-Za-z0-9._+-]{1,100})(?:\s|$)", output) | |
| return match[1] if match else None | |
| except (OSError, subprocess.SubprocessError): | |
| return None | |
| def _trace(records): | |
| # The service already sanitizes values. Copy only its documented diagnostic | |
| # schema so future debug fields cannot silently enter an acceptance report. | |
| return [ | |
| {key: value for key, value in record.items() if key in TRACE_FIELDS[kind]} | |
| for record in records | |
| if isinstance(record, dict) and (kind := record.get("kind")) in TRACE_FIELDS | |
| ] | |
| def _file_evidence(path): | |
| path = Path(path) | |
| return { | |
| "file": path.name, | |
| "bytes": path.stat().st_size, | |
| "sha256": hashlib.sha256(path.read_bytes()).hexdigest(), | |
| } | |
| def _probe_video(path): | |
| with VideoFileClip(str(path), audio=False) as clip: | |
| frame = clip.get_frame(0) | |
| duration = float(clip.duration) | |
| if ( | |
| not math.isfinite(duration) | |
| or not 1.5 <= duration <= 2.5 | |
| or frame.ndim != 3 | |
| or min(frame.shape[:2]) < 1 | |
| ): | |
| raise AcceptanceFailure("invalid_rendered_video") | |
| return { | |
| **_file_evidence(path), | |
| "duration_seconds": round(duration, 4), | |
| "width": int(frame.shape[1]), | |
| "height": int(frame.shape[0]), | |
| "first_frame_decoded": True, | |
| } | |
| def _render_probe_worker(): | |
| """Internal subprocess entry: no credentials and no generation request.""" | |
| set_logging_options("ERROR", False) | |
| logger.remove() | |
| path = material._render_openai_image_video(sys.argv[1], 2, image_motion=sys.argv[2]) | |
| if not path: | |
| raise SystemExit(1) | |
| print(json.dumps(_probe_video(path))) | |
| def _render_and_probe(image_path, motion): | |
| # MoviePy rendering and its decoding probe run in a bounded child. Timeout | |
| # stops this acceptance run; it never triggers another remote image order. | |
| try: | |
| completed = subprocess.run( | |
| [ | |
| sys.executable, | |
| "-c", | |
| "from scripts.accept_codex_image import _render_probe_worker; _render_probe_worker()", | |
| str(image_path), | |
| motion, | |
| ], | |
| cwd=ROOT, | |
| capture_output=True, | |
| text=True, | |
| encoding="utf-8", | |
| timeout=120, | |
| check=True, | |
| ) | |
| except subprocess.TimeoutExpired: | |
| raise AcceptanceFailure("render_timeout") from None | |
| except (OSError, subprocess.SubprocessError): | |
| raise AcceptanceFailure("render_failed") from None | |
| try: | |
| result = json.loads(completed.stdout) | |
| if not isinstance(result, dict) or not result.get("first_frame_decoded"): | |
| raise ValueError() | |
| return result | |
| except (ValueError, TypeError): | |
| raise AcceptanceFailure("invalid_rendered_video") from None | |
| def run_acceptance( | |
| *, model, output_dir, confirm_image_generation=False, plan="unknown", timeout=300 | |
| ): | |
| """Return a sanitized report; never fall back, log in, or regenerate.""" | |
| report = { | |
| "timestamp_utc": datetime.now(timezone.utc).isoformat(), | |
| "environment": { | |
| "os": platform.system(), | |
| "release": platform.release(), | |
| "architecture": platform.machine(), | |
| "python": platform.python_version(), | |
| "ffmpeg": _ffmpeg_version(), | |
| "packages": { | |
| name: _package_version(name) | |
| for name in ("requests", "Pillow", "moviepy", "imageio-ffmpeg") | |
| }, | |
| **_revision(), | |
| }, | |
| "provider": "codex_image", | |
| "endpoint": codex_oauth.RESPONSES_URL, | |
| "requested_model": None, | |
| "self_reported_plan": plan if plan in PLANS else "unknown", | |
| "account_access_verified": False, | |
| "normal_material_path": "capture_context -> generate_images_codex -> request_image", | |
| "trace": [], | |
| "status": "failed", | |
| } | |
| records = [] | |
| try: | |
| if not confirm_image_generation: | |
| raise AcceptanceFailure("explicit_generation_confirmation_required") | |
| if ( | |
| not isinstance(model, str) | |
| or not re.fullmatch(r"[A-Za-z0-9._-]{1,160}", model) | |
| or model.lower().startswith("sk-") | |
| or model.startswith("eyJ") | |
| ): | |
| raise AcceptanceFailure("explicit_responses_model_required") | |
| report["requested_model"] = model | |
| context = codex_image.capture_context( | |
| {"codex_image_model_name": model, "codex_image_timeout": timeout} | |
| ) | |
| report["timeout_seconds"] = context.timeout | |
| output_dir = Path(output_dir) | |
| output_dir.mkdir(parents=True, exist_ok=True) | |
| with codex_oauth.capture_image_diagnostics() as records: | |
| items = material.generate_images_codex( | |
| PROMPT, 2, "16:9", str(output_dir), context=context | |
| ) | |
| report["trace"] = _trace(records) | |
| if len(items) != 1: | |
| raise AcceptanceFailure("expected_one_material") | |
| completed = any( | |
| record.get("kind") == "response" | |
| and record.get("event") == "response.completed" | |
| and record.get("status") == "completed" | |
| for record in report["trace"] | |
| ) | |
| tool_completed = any( | |
| record.get("kind") == "image_tool" | |
| and record.get("status") == "completed" | |
| and isinstance(record.get("result_bytes"), int) | |
| and record["result_bytes"] > 0 | |
| for record in report["trace"] | |
| ) | |
| if not completed or not tool_completed: | |
| raise AcceptanceFailure("completed_image_evidence_missing") | |
| png = Path(items[0].url) | |
| with Image.open(png) as image: | |
| image.load() | |
| if image.format != "PNG": | |
| raise AcceptanceFailure("expected_png_material") | |
| report["image"] = { | |
| **_file_evidence(png), | |
| "format": image.format, | |
| "width": image.width, | |
| "height": image.height, | |
| "decoded": True, | |
| } | |
| report["account_access_verified"] = True | |
| report["renders"] = {} | |
| for motion in ("static", "zoom"): | |
| codex_image.assert_current(context) | |
| report["renders"][motion] = _render_and_probe(png, motion) | |
| codex_image.assert_current(context) | |
| report["status"] = "passed" | |
| except codex_oauth.CodexError as error: | |
| report["error"] = {"code": error.key} | |
| if isinstance(error.params.get("status"), int): | |
| report["error"]["http_status"] = error.params["status"] | |
| except material.CodexImageMaterialError as error: | |
| report["error"] = {"code": error.key} | |
| if isinstance(error.params.get("status"), int): | |
| report["error"]["http_status"] = error.params["status"] | |
| except AcceptanceFailure as error: | |
| report["error"] = {"code": str(error)} | |
| except Exception as error: | |
| report["error"] = {"code": "unexpected_error", "type": type(error).__name__} | |
| finally: | |
| report["trace"] = _trace(records) | |
| return report | |
| def main(argv=None): | |
| parser = argparse.ArgumentParser(description=__doc__) | |
| parser.add_argument( | |
| "--model", required=True, help="Exact Responses model ID; no fallback" | |
| ) | |
| parser.add_argument( | |
| "--output", required=True, type=Path, help="Sanitized JSON report" | |
| ) | |
| parser.add_argument( | |
| "--plan", | |
| choices=PLANS, | |
| default="unknown", | |
| help="Self-reported plan, not verified entitlement", | |
| ) | |
| parser.add_argument("--timeout", type=float, default=300) | |
| parser.add_argument( | |
| "--confirm-image-generation", | |
| action="store_true", | |
| help="Explicitly request one image using the account allowance", | |
| ) | |
| args = parser.parse_args(argv) | |
| if not args.confirm_image_generation: | |
| parser.error( | |
| "--confirm-image-generation is required; this run requests a real image" | |
| ) | |
| set_logging_options("ERROR", False) | |
| logger.remove() | |
| report = run_acceptance( | |
| model=args.model, | |
| output_dir=args.output.parent / (args.output.stem + "-assets"), | |
| confirm_image_generation=True, | |
| plan=args.plan, | |
| timeout=args.timeout, | |
| ) | |
| args.output.parent.mkdir(parents=True, exist_ok=True) | |
| args.output.write_text( | |
| json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8" | |
| ) | |
| print(f"Acceptance: {report['status']}; report: {args.output.resolve()}") | |
| return 0 if report["status"] == "passed" else 1 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |