openai-oxide
Idiomatic Rust client for the OpenAI API — 1:1 parity with the official Python SDK.
Features
- Async-first (tokio + reqwest)
- Strongly typed requests and responses (serde)
- SSE streaming for Chat Completions and Responses API
- Automatic retries with exponential backoff
- Chainable builder pattern for requests
- Responses API with tool support (WebSearch, FileSearch, MCP, etc.)
- Structured outputs (JSON Schema with strict mode)
- Reasoning model support (o-series: effort, summary)
- Realtime API session creation (ephemeral tokens)
- 100% OpenAPI field coverage for Chat Completions
- Same resource structure as Python SDK:
client.chat().completions().create()
Feature Flags
Each API resource is behind an optional Cargo feature (all enabled by default):
# All resources (default)
= "0.8"
# Only chat + embeddings
= { = "0.7", = false, = ["chat", "embeddings"] }
Available features: chat, responses, embeddings, images, audio, files, fine-tuning, models, moderations, batches, uploads, beta.
Quick Start
Add to Cargo.toml:
[]
= "0.8"
= { = "1", = ["full"] }
use ;
async
Streaming
use StreamExt;
use ;
async
BYOT (Bring Your Own Types)
Send custom fields or get raw JSON responses using create_raw():
use OpenAI;
use json;
async
Also available on client.responses().create_raw() and client.embeddings().create_raw().
Image Save Helper
Save generated images directly to disk:
let resp = client.images.generate.await?;
if let Some = &resp.data
Pagination
All list endpoints support automatic cursor-based pagination:
use StreamExt;
use ;
async
Configuration
use ;
// From environment variable OPENAI_API_KEY
let client = from_env?;
// Explicit API key
let client = new;
// Full configuration
let config = new
.base_url
.timeout_secs
.max_retries;
let client = with_config;
Implemented APIs
| API | Method | Status |
|---|---|---|
| Chat Completions | client.chat().completions().create() |
Done |
| Chat Completions (streaming) | client.chat().completions().create_stream() |
Done |
| Responses | client.responses().create() / create_stream() |
Done |
| Responses Tools | Function, WebSearch, FileSearch, CodeInterpreter, ComputerUse, Mcp | Done |
| Embeddings | client.embeddings().create() |
Done |
| Models | client.models().list() / retrieve() / delete() |
Done |
| Images | client.images().generate() / edit() / create_variation() |
Done |
| Audio Transcription | client.audio().transcriptions().create() |
Done |
| Audio Translation | client.audio().translations().create() |
Done |
| Audio Speech (TTS) | client.audio().speech().create() |
Done |
| Files | client.files().create() / list() / retrieve() / delete() / content() |
Done |
| Fine-tuning | client.fine_tuning().jobs().create() / list() / cancel() / list_events() |
Done |
| Moderations | client.moderations().create() |
Done |
| Batches | client.batches().create() / list() / retrieve() / cancel() |
Done |
| Uploads | client.uploads().create() / cancel() / complete() |
Done |
| Assistants (beta) | client.beta().assistants().create() / list() / retrieve() / delete() |
Done |
| Threads (beta) | client.beta().threads().create() / retrieve() / delete() / messages() |
Done |
| Runs (beta) | client.beta().runs(thread_id).create() / retrieve() / cancel() |
Done |
| Vector Stores (beta) | client.beta().vector_stores().create() / list() / retrieve() / delete() |
Done |
| Realtime (beta) | client.beta().realtime().sessions().create() |
Done |
Development
License
MIT