Async Rust library for OpenAI
async-openai
is an unofficial Rust library for OpenAI REST API.
- It's based on OpenAI OpenAPI spec
- Non-streaming requests are retried with exponential backoff when rate limited by the API server.
- Current features:
- Completions (including SSE streaming)
- Edits
- Embeddings
- Files (List, Upload, Delete, Retrieve, Retrieve Content)
- Fine-tunes
- Images (Generation, Edit, Variation)
- Microsoft Azure Endpoints / AD Authentication
- Models
- Moderations
Being a young project there are rough edges
The library reads API key from the environment variable OPENAI_API_KEY
.
# On macOS/Linux
export OPENAI_API_KEY='sk-...'
# On Windows Powershell
$Env:OPENAI_API_KEY='sk-...'
- Visit examples directory on how to use
async-openai
. - Visit docs.rs/async-openai for docs.
use std::error::Error;
use async_openai as openai;
use openai::{
types::{CreateImageRequest, ImageSize, ResponseFormat},
Client, Image,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
// create client, reads OPENAI_API_KEY environment variable for API key.
let client = Client::new();
let request = CreateImageRequest {
prompt: "cats on sofa and carpet in living room".to_owned(),
n: Some(2),
response_format: Some(ResponseFormat::Url),
size: Some(ImageSize::S256x256),
user: Some("async-openai".to_owned()),
};
let response = Image::create(&client, request).await?;
// Download and save images to ./data directory
// Each url download and save happens in dedicated Tokio task
// (creates directory when it doesn't exist)
response.save("./data").await?;
Ok(())
}
Thank you for your time to contribute and improve the project, I'd be happy to have you!
This project is licensed under MIT license.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in async-openai by you, shall be licensed as MIT, without any additional terms or conditions.