6 releases

0.1.11 Dec 16, 2024
0.1.10 Dec 8, 2024
0.1.9 Sep 22, 2024
0.1.5 Aug 8, 2024

#589 in Web programming

Download history 267/week @ 2024-09-16 50/week @ 2024-09-23 31/week @ 2024-09-30 92/week @ 2024-12-02 56/week @ 2024-12-09 130/week @ 2024-12-16

278 downloads per month

Custom license

79KB
1K SLoC

OpenAI Rust SDK

Crates.io docs.rs License

[!NOTE] This is an unofficial OpenAI SDK for Rust, providing a convenient abstraction over OpenAI's API. It enables you to easily perform tasks such as generating completions, creating and editing images, moderating text, fine-tuning models, and more.

Table of Contents

Installation

[!TIP] Make sure you have Rust and Cargo installed on your system before proceeding. Visit rust-lang.org for installation instructions.

To use this SDK, add the following dependencies to your Cargo.toml file:

[dependencies]
rusty-openai = "0.1.11"
serde_json = "1.0"
tokio = { version = "1", features = ["full"] }
reqwest = { version = "0.12.5", features = ["json", "multipart"] }

Getting Started

To get started with the OpenAI Rust SDK, follow these steps:

Initialize OpenAI Client

[!IMPORTANT] You'll need an OpenAI API key to use this SDK. Get your API key from the OpenAI dashboard.

First, create an instance of the OpenAI struct with your API key:

use rusty_openai::openai::OpenAI;

#[tokio::main]
async fn main() {
    let openai = OpenAI::new("YOUR_API_KEY", "https://api.openai.com/v1");
}

Generate Chat Completions

[!NOTE] The SDK now supports structured outputs with JSON Schema validation, allowing for more controlled and predictable responses.

Here's an example of generating chat completions with structured output:

use rusty_openai::openai::OpenAI;
use rusty_openai::openai_api::completion::ChatCompletionRequest;
use serde_json::json;
use std::env;

#[tokio::main]
async fn main() {
    let api_key = env::var("OPENAI_API_KEY").expect("API key not set");
    let openai = OpenAI::new(&api_key, "https://api.openai.com/v1");

    // Example with structured outputs using JSON Schema
    let schema = json!({
        "type": "object",
        "properties": {
            "steps": {
                "type": "array",
                "items": {
                    "type": "object",
                    "properties": {
                        "explanation": {"type": "string"},
                        "output": {"type": "string"}
                    },
                    "required": ["explanation", "output"]
                }
            },
            "final_answer": {"type": "string"}
        },
        "required": ["steps", "final_answer"]
    });

    let messages = vec![
        json!({
            "role": "user",
            "content": "Solve this equation: 2x + 5 = 13"
        })
    ];

    let request = ChatCompletionRequest::new_json_schema(
        "gpt-4-0125-preview".to_string(),
        messages,
        "math_reasoning".to_string(),
        schema
    )
    .temperature(0.7);

    let chat_response = openai.completions().create(request).await;

    match chat_response {
        Ok(chat) => println!("{}", json!(chat).to_string()),
        Err(err) => eprintln!("Error: {}", err),
    }
}

Features

[!TIP] The SDK supports all major OpenAI API endpoints and features:

  • πŸ€– Chat Completions with GPT-4 and GPT-3.5
  • 🎨 Image Generation and Editing (DALLΒ·E)
  • πŸ“ Text Moderation
  • πŸ”„ Fine-tuning Models
  • πŸ” Embeddings Generation
  • πŸ“Š Structured Outputs with JSON Schema
  • 🌐 Custom Base URL Support
  • ⚑ Async/Await Support
  • πŸ”’ Type-safe API

Documentation

[!NOTE] For detailed information on all available endpoints and their respective methods, please refer to the SDK Documentation.

License

[!IMPORTANT] This SDK is licensed under the MIT License. See the LICENSE file for details.

Dependencies

~7–18MB
~241K SLoC