Skip to main content

Save 50% off GenAI costs in two lines of code

Project description

batchling logo

Save 50% off GenAI costs in two lines of code

CI PyPI version Python versions MIT license Join Discord LinkedIn


batchling is a frictionless, batteries-included plugin to convert any GenAI async function or script into half-cost batch jobs.

Key features:

  • Simple: a simple 2-liner gets you 50% off your GenAI bill instantly.
  • Transparent: Your code remains the same, no added behaviors. Track sent batches easily.
  • Global: Integrates with most providers and all frameworks.
  • Safe: Get a complete breakdown of your cost savings before launching a single batch.
  • Lightweight: Very few dependencies.
What's the catch?

The batch is the catch!

Batch APIs enable you to process large volumes of requests asynchronously (usually at 50% lower cost compared to real-time API calls). It's perfect for workloads that don't need immediate responses such as:

  • Running mass offline evaluations
  • Classifying large datasets
  • Generating large-scale embeddings
  • Offline summarization
  • Synthetic data generation
  • Structured data extraction (e.g. OCR)
  • Audio transcriptions/translations at scale

Compared to using standard endpoints directly, Batch API offers:

  • Better cost efficiency: usually 50% cost discount compared to synchronous APIs
  • Higher rate limits: Substantially more headroom with separate rate limit pools
  • Large-scale support: Process thousands of requests per batch
  • Flexible completion: Best-effort completion within 24 hours with progress tracking, batches usually complete within an hour.

Installation

batchling is available on PyPI as batchling, install using either pip:

pip install batchling

Get Started

batchling integrates smoothly with any async function doing GenAI calls or within a whole async script that you'd run with asyncio.

Let's suppose we have an existing script main.py that uses the OpenAI client to make two parallel calls using asyncio.gather:

Using the async context manager (recommended)

To selectively batchify certain pieces of your code execution, you can rely on the batchify function, which exposes an async context manager.

import asyncio
from batchling import batchify
from openai import AsyncOpenAI

async def generate():
    client = AsyncOpenAI()
    questions = [
        "Who is the best French painter? Answer in one short sentence.",
        "What is the capital of France?",
    ]
    tasks = [
        client.responses.create(input=question, model="gpt-4o-mini") for question in questions
    ]
    async with batchify(): # Runs your tasks as batches, save 50%
        responses = await asyncio.gather(*tasks)
    for response in responses:
        content = response.output[-1].content # skip reasoning output, get straight to the answer
        print(content[0].text)

if __name__ == "__main__":
    asyncio.run(generate())

Then, just run main.py like you would normally:

python main.py

Output:

The best French painter is often considered to be Claude Monet, a leading figure in the Impressionist movement.
The capital of France is Paris.

Using the CLI wrapper

For you to switch this async execution to a batched inference one, you just have to run your script using the batchling CLI and targetting the main function ran by asyncio:

import asyncio
from openai import AsyncOpenAI

async def generate():
    client = AsyncOpenAI()
    questions = [
        "Who is the best French painter? Answer in one short sentence.",
        "What is the capital of France?",
    ]
    tasks = [
        client.responses.create(input=question, model="gpt-4o-mini") for question in questions
    ]
    responses = await asyncio.gather(*tasks)
    for response in responses:
        content = response.output[-1].content # skip reasoning output, get straight to the answer
        print(content[0].text)

Output:

The best French painter is often considered to be Claude Monet, a leading figure in the Impressionist movement.
The capital of France is Paris.

Run your function in batch mode:

batchling main.py:generate

Supported providers

Name Batch API Docs URL
Anthropic https://docs.anthropic.com/en/docs/build-with-claude/batch-processing
Doubleword https://docs.doubleword.ai/batches/getting-started-with-batched-api
Gemini https://ai.google.dev/gemini-api/docs/batch-mode
Groq https://console.groq.com/docs/batch
Mistral https://docs.mistral.ai/capabilities/batch/
OpenAI https://platform.openai.com/docs/guides/batch
Together https://docs.together.ai/docs/batch-inference
XAI https://docs.x.ai/developers/advanced-api-usage/batch-api

Next Steps

To try batchling for yourself, follow this quickstart guide.

Read the docs to learn more about how you can save on your GenAI expenses with batchling.

If you have any question, file an issue on GitHub.

Connect

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

batchling-0.1.0a1.tar.gz (30.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

batchling-0.1.0a1-py3-none-any.whl (43.6 kB view details)

Uploaded Python 3

File details

Details for the file batchling-0.1.0a1.tar.gz.

File metadata

  • Download URL: batchling-0.1.0a1.tar.gz
  • Upload date:
  • Size: 30.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for batchling-0.1.0a1.tar.gz
Algorithm Hash digest
SHA256 9bf548ba6fd802b1ac67378867eb22951df11d4ba6b996d43ef1e8d5d522b7ad
MD5 1075921c41b9c7cbcdedc7ff80771afc
BLAKE2b-256 413120522cb02a4ecff0adb32ac392d23edc73137d96e332dc284f994ef710ab

See more details on using hashes here.

File details

Details for the file batchling-0.1.0a1-py3-none-any.whl.

File metadata

  • Download URL: batchling-0.1.0a1-py3-none-any.whl
  • Upload date:
  • Size: 43.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for batchling-0.1.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 ce02d77d8961f342e414500ded57efcda6222f91b03c077212e1448b7f6cfb2f
MD5 c4165cc4d87af2e10d2f6de9ef73ccb6
BLAKE2b-256 b161d2150647100dbc548f941b50e454365b1a99d446db681d3d551bdfe30366

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page