Thanks to visit codestin.com
Credit goes to lib.rs

#openai #llm #gpt #api-bindings

fluxtokens

Official FluxTokens Rust SDK - Access GPT-4.1, Gemini 2.5 and more at 30% lower cost

1 stable release

new 1.0.0 Jan 11, 2026

#2285 in Web programming

MIT license

24KB
446 lines

FluxTokens Rust SDK

Crates.io Documentation License: MIT

Official Rust SDK for the FluxTokens API

Access GPT-4.1, Gemini 2.5 Flash and more at 30% lower cost than competitors.

Website · Documentation · Dashboard


Installation

Add to your Cargo.toml:

[dependencies]
fluxtokens = "1.0"
tokio = { version = "1", features = ["full"] }

Quick Start

use fluxtokens::{Client, ChatCompletionRequest, Message};

#[tokio::main]
async fn main() -> Result<(), fluxtokens::Error> {
    let client = Client::new("sk-flux-your-api-key");

    let response = client.chat().completions().create(
        ChatCompletionRequest::new("gpt-4.1-mini")
            .messages(vec![
                Message::system("You are a helpful assistant."),
                Message::user("Hello!"),
            ])
    ).await?;

    println!("{}", response.choices[0].message.content.as_ref().unwrap());
    Ok(())
}

Available Models

Model Provider Input Price Output Price Max Tokens Vision Audio Video
gpt-4.1-mini OpenAI $0.28/1M $1.12/1M 16,384
gpt-4.1-nano OpenAI $0.07/1M $0.28/1M 16,384
gemini-2.5-flash Google $0.21/1M $1.75/1M 65,536

Usage Examples

Basic Chat Completion

let response = client.chat().completions().create(
    ChatCompletionRequest::new("gpt-4.1-mini")
        .messages(vec![
            Message::user("What is the capital of France?"),
        ])
        .temperature(0.7)
        .max_tokens(256)
).await?;

println!("{}", response.choices[0].message.content.as_ref().unwrap());
// Output: "The capital of France is Paris."

System Messages

let response = client.chat().completions().create(
    ChatCompletionRequest::new("gpt-4.1-mini")
        .messages(vec![
            Message::system("You are a pirate. Always respond in pirate speak."),
            Message::user("How are you today?"),
        ])
).await?;
// Output: "Ahoy, matey! I be doin' just fine, thank ye fer askin'!"

List Available Models

use fluxtokens::Models;

for model in Models::list() {
    println!("{} ({})", model.name, model.provider);
    println!("  Input: ${}/1M tokens", model.input_price);
    println!("  Output: ${}/1M tokens", model.output_price);
    println!("  Vision: {}", if model.supports_vision { "" } else { "" });
}

Configuration Options

use fluxtokens::{Client, ClientConfig};

let client = Client::with_config(
    "sk-flux-...",
    ClientConfig::default()
        .base_url("https://api.fluxtokens.io")
        .timeout(60)
        .max_retries(3)
);

Error Handling

use fluxtokens::Error;

match client.chat().completions().create(request).await {
    Ok(response) => {
        println!("{}", response.choices[0].message.content.as_ref().unwrap());
    }
    Err(Error::Authentication(msg)) => {
        eprintln!("Invalid API key: {}", msg);
    }
    Err(Error::RateLimit(msg)) => {
        eprintln!("Rate limit exceeded: {}", msg);
    }
    Err(Error::InsufficientBalance(msg)) => {
        eprintln!("Please add credits: {}", msg);
    }
    Err(Error::BadRequest(msg)) => {
        eprintln!("Invalid request: {}", msg);
    }
    Err(e) => {
        eprintln!("Error: {}", e);
    }
}

Error Type Checking

if error.is_retryable() {
    // Retry the request
}

if error.is_authentication() {
    // Handle auth error
}

Requirements

  • Rust 1.70+
  • Tokio runtime

Support

License

MIT © FluxTokens

Dependencies

~7–22MB
~255K SLoC