Python 88.3%
TypeScript 7.6%
Shell 4.1%
1#!/usr/bin/env python32"""Inline Batch API job with google-genai: batches.create → poll batches.get → read inlined responses → batches.delete.34STATUS: UNVERIFIED (ACCOUNT_RESTRICTED): on 2026-09-18 the REST create returned 400 FAILED_PRECONDITION "Precondition check5 failed." for every payload (Batch API has no free tier). Paid key: state BATCH_STATE_PENDING → RUNNING → SUCCEEDED,6 50 % of interactive price, 24 h target.7Run: .venv/bin/python examples/gemini/batch/batch_inline.py8"""9from __future__ import annotations1011import sys12import time13from pathlib import Path1415ROOT = Path(__file__).resolve().parents[3]16sys.path.insert(0, str(ROOT))17from scripts import live # noqa: E4021819from google import genai # noqa: E4022021MODEL = "gemini-3.5-flash-lite"22client = genai.Client()23src = [{"contents": [{"parts": [{"text": "Reply with OK."}], "role": "user"}], "config": {"max_output_tokens": 8}} for _ in range(2)]24try:25 job = client.batches.create(model=MODEL, src=src, config={"display_name": "atlas-example"})26except Exception as e: # noqa: BLE00127 live.log_request("gemini", "POST", "/v1beta/models/{model}:batchGenerateContent", getattr(e, "code", 0), 0, "example batch_inline.py error")28 print("create failed:", live.mask(str(e))[:300]); sys.exit(1)29live.log_request("gemini", "POST", "/v1beta/models/{model}:batchGenerateContent", 200, 0.0001, "example batch_inline.py create")30print("created", job.name, job.state)31t0 = time.time()32while job.state.name not in ("JOB_STATE_SUCCEEDED", "JOB_STATE_FAILED", "JOB_STATE_CANCELLED", "JOB_STATE_EXPIRED") and time.time() - t0 < 300:33 time.sleep(20)34 job = client.batches.get(name=job.name)35 live.log_request("gemini", "GET", "/v1beta/batches/{id}", 200, 0, "example batch poll")36 print(f"t+{int(time.time() - t0)}s", job.state.name)37if job.dest and job.dest.inlined_responses:38 for r in job.dest.inlined_responses:39 print(r.metadata, r.response.text if r.response else r.error)40elif job.dest and job.dest.file_name:41 print("responses file:", job.dest.file_name)42client.batches.delete(name=job.name)43live.log_request("gemini", "DELETE", "/v1beta/batches/{id}", 200, 0, "example batch delete")44