#!/usr/bin/env python3 """Inline Batch API job with google-genai: batches.create → poll batches.get → read inlined responses → batches.delete. STATUS: UNVERIFIED (ACCOUNT_RESTRICTED): on 2026-09-18 the REST create returned 400 FAILED_PRECONDITION "Precondition check failed." for every payload (Batch API has no free tier). Paid key: state BATCH_STATE_PENDING → RUNNING → SUCCEEDED, 50 % of interactive price, 24 h target. Run: .venv/bin/python examples/gemini/batch/batch_inline.py """ from __future__ import annotations import sys import time from pathlib import Path ROOT = Path(__file__).resolve().parents[3] sys.path.insert(0, str(ROOT)) from scripts import live # noqa: E402 from google import genai # noqa: E402 MODEL = "gemini-3.5-flash-lite" client = genai.Client() src = [{"contents": [{"parts": [{"text": "Reply with OK."}], "role": "user"}], "config": {"max_output_tokens": 8}} for _ in range(2)] try: job = client.batches.create(model=MODEL, src=src, config={"display_name": "atlas-example"}) except Exception as e: # noqa: BLE001 live.log_request("gemini", "POST", "/v1beta/models/{model}:batchGenerateContent", getattr(e, "code", 0), 0, "example batch_inline.py error") print("create failed:", live.mask(str(e))[:300]); sys.exit(1) live.log_request("gemini", "POST", "/v1beta/models/{model}:batchGenerateContent", 200, 0.0001, "example batch_inline.py create") print("created", job.name, job.state) t0 = time.time() while job.state.name not in ("JOB_STATE_SUCCEEDED", "JOB_STATE_FAILED", "JOB_STATE_CANCELLED", "JOB_STATE_EXPIRED") and time.time() - t0 < 300: time.sleep(20) job = client.batches.get(name=job.name) live.log_request("gemini", "GET", "/v1beta/batches/{id}", 200, 0, "example batch poll") print(f"t+{int(time.time() - t0)}s", job.state.name) if job.dest and job.dest.inlined_responses: for r in job.dest.inlined_responses: print(r.metadata, r.response.text if r.response else r.error) elif job.dest and job.dest.file_name: print("responses file:", job.dest.file_name) client.batches.delete(name=job.name) live.log_request("gemini", "DELETE", "/v1beta/batches/{id}", 200, 0, "example batch delete")