Free, decentralized, OpenAI-compatible AI inference.
The Grid API speaks the OpenAI protocol, so this SDK is a thin layer over the
official openai package: it points at the Grid, reads your key from the
environment, and adds Grid-specific conveniences. Everything you know from the
OpenAI SDK works unchanged.
pip install grid-sdkSign in at the Grid developer console,
create an API key, then set it as AIPG_API_KEY:
from grid_sdk import Grid
client = Grid() # reads AIPG_API_KEY from the environment
stream = client.chat.completions.create(
model="gpt-oss-120b",
messages=[{"role": "user", "content": "Explain AI Power Grid in one line."}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)The Grid's available models change as workers connect and disconnect. Don't hardcode a model blindly — ask which ones are servable right now:
client = Grid()
print(client.online_models())
# ['gpt-oss-120b', 'qwen3-27b', ...]An empty list means no workers are connected — requests will 503 until one is.
import asyncio
from grid_sdk import AsyncGrid
async def main():
client = AsyncGrid()
resp = await client.chat.completions.create(
model="gpt-oss-120b",
messages=[{"role": "user", "content": "Hi"}],
)
print(resp.choices[0].message.content)
asyncio.run(main())The OpenAI-compatible surface covers text and basic txt2img. For the full media
parameter surface, use client.grid, which calls the synchronous /v1 image
and video endpoints:
client = Grid()
# Video:
result = client.grid.video(
prompt="a timelapse of a city at night",
model="LTX-2.3",
width=768, height=512, seconds=4, fps=24,
)
# img2img / ControlNet / LoRAs — anything the workers support:
result = client.grid.image(
prompt="make it watercolor",
models=["FLUX.2 Klein 4B FP8"],
source_image="<base64>",
loras=[{"name": "watercolor", "model": 1.0}],
)
# Or full control with a raw payload:
result = client.grid.generate({"prompt": "...", "models": [...], "params": {...}})client.grid waits for the synchronous Grid response and returns the finished
OpenAI-shaped result. Use timeout for long media jobs; there is no SDK
submit/poll mode on this /v1 client.
Grid subclasses openai.OpenAI, so anything the OpenAI SDK does — images,
tool calling, structured output, the full .chat/.images/.models surface —
works here too. You can also point existing OpenAI code at the Grid by setting
base_url="https://api.aipowergrid.io/v1" if you'd rather not switch packages.
Grid(api_key=...) |
Explicit key (overrides env) |
AIPG_API_KEY |
Env var read when no key is passed |
Grid(base_url=...) |
Override the endpoint (default https://api.aipowergrid.io/v1) |
MIT