Spaces:
Runtime error
Runtime error
| import argparse | |
| import json | |
| import time | |
| import urllib.error | |
| import urllib.request | |
| def request_json(url: str, method: str = "GET", payload: dict | None = None) -> dict: | |
| body = None | |
| headers = {} | |
| if payload is not None: | |
| body = json.dumps(payload).encode("utf-8") | |
| headers["Content-Type"] = "application/json" | |
| request = urllib.request.Request(url, data=body, headers=headers, method=method) | |
| try: | |
| with urllib.request.urlopen(request, timeout=30) as response: | |
| return json.loads(response.read().decode("utf-8")) | |
| except urllib.error.HTTPError as exc: | |
| detail = exc.read().decode("utf-8") | |
| raise RuntimeError(f"{exc.code}: {detail}") from exc | |
| def main() -> None: | |
| parser = argparse.ArgumentParser(description="Run an AI Clip Studio API benchmark.") | |
| parser.add_argument("--api", default="http://localhost:8000") | |
| parser.add_argument("--youtube-url", required=True) | |
| parser.add_argument("--language", default="Thai") | |
| parser.add_argument("--style", default="informative") | |
| parser.add_argument("--niche", default="education") | |
| parser.add_argument("--clip-length", type=int, default=60) | |
| args = parser.parse_args() | |
| payload = { | |
| "youtube_url": args.youtube_url, | |
| "profile": { | |
| "niche": args.niche, | |
| "clip_style": args.style, | |
| "clip_length_seconds": args.clip_length, | |
| "primary_language": args.language, | |
| "target_platform": "tiktok", | |
| }, | |
| } | |
| started = time.perf_counter() | |
| job = request_json(f"{args.api}/api/jobs/youtube", "POST", payload) | |
| while job["status"] in {"queued", "running"}: | |
| time.sleep(2) | |
| job = request_json(f"{args.api}/api/jobs/{job['id']}") | |
| elapsed = round(time.perf_counter() - started, 3) | |
| print( | |
| json.dumps( | |
| { | |
| "job_id": job["id"], | |
| "status": job["status"], | |
| "elapsed_wall_seconds": elapsed, | |
| "clips": len(job.get("clips", [])), | |
| "timings": job.get("timings", {}), | |
| "error": job.get("error"), | |
| }, | |
| indent=2, | |
| ) | |
| ) | |
| if __name__ == "__main__": | |
| main() | |