fluxtokens 1.0.0

Official FluxTokens Rust SDK - Access GPT-4.1, Gemini 2.5 and more at 30% lower cost
Documentation
use std::collections::HashMap;
use once_cell::sync::Lazy;

/// Information about a model
#[derive(Debug, Clone)]
pub struct ModelInfo {
    pub id: &'static str,
    pub name: &'static str,
    pub provider: &'static str,
    pub input_price: f64,
    pub output_price: f64,
    pub max_tokens: u32,
    pub supports_vision: bool,
    pub supports_audio: bool,
    pub supports_video: bool,
}

/// Available models
pub static MODELS: Lazy<HashMap<&'static str, ModelInfo>> = Lazy::new(|| {
    let mut m = HashMap::new();
    
    m.insert("gpt-4.1-mini", ModelInfo {
        id: "gpt-4.1-mini",
        name: "GPT-4.1 Mini",
        provider: "OpenAI",
        input_price: 0.28,
        output_price: 1.12,
        max_tokens: 16384,
        supports_vision: true,
        supports_audio: false,
        supports_video: false,
    });
    
    m.insert("gpt-4.1-nano", ModelInfo {
        id: "gpt-4.1-nano",
        name: "GPT-4.1 Nano",
        provider: "OpenAI",
        input_price: 0.07,
        output_price: 0.28,
        max_tokens: 16384,
        supports_vision: true,
        supports_audio: false,
        supports_video: false,
    });
    
    m.insert("gemini-2.5-flash", ModelInfo {
        id: "gemini-2.5-flash",
        name: "Gemini 2.5 Flash",
        provider: "Google",
        input_price: 0.21,
        output_price: 1.75,
        max_tokens: 65536,
        supports_vision: true,
        supports_audio: true,
        supports_video: true,
    });
    
    m
});

/// Models API
pub struct Models;

impl Models {
    /// List all available models
    pub fn list() -> Vec<&'static ModelInfo> {
        MODELS.values().collect()
    }

    /// Get model info by ID
    pub fn get(id: &str) -> Option<&'static ModelInfo> {
        MODELS.get(id)
    }
}