FluxTokens Ruby SDK
Official Ruby SDK for the FluxTokens API
Access GPT-4.1, Gemini 2.5 Flash and more at 30% lower cost than competitors.
Installation
Add to your Gemfile:
gem 'fluxtokens'Or install directly:
gem install fluxtokensQuick Start
require 'fluxtokens'
client = FluxTokens::Client.new(api_key: 'sk-flux-your-api-key')
response = client.chat.completions.create(
model: 'gpt-4.1-mini',
messages: [
{ role: 'system', content: 'You are a helpful assistant.' },
{ role: 'user', content: 'Hello!' }
]
)
puts response.choices[0].message.contentAvailable 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 |
$0.21/1M | $1.75/1M | 65,536 | ✅ | ✅ | ✅ |
Usage Examples
Basic Chat Completion
response = client.chat.completions.create(
model: 'gpt-4.1-mini',
messages: [{ role: 'user', content: 'What is the capital of France?' }],
temperature: 0.7,
max_tokens: 256
)
puts response.choices[0].message.content
# Output: "The capital of France is Paris."Streaming Responses
stream = client.chat.completions.create(
model: 'gemini-2.5-flash',
messages: [{ role: 'user', content: 'Write a haiku about programming.' }],
stream: true
)
stream.each do |chunk|
content = chunk.choices[0].delta.content
print content if content
endVision (Image Analysis)
response = client.chat.completions.create(
model: 'gpt-4.1-mini',
messages: [
{
role: 'user',
content: [
{ type: 'text', text: 'What is in this image?' },
{
type: 'image_url',
image_url: {
url: 'https://example.com/image.jpg',
detail: 'high'
}
}
]
}
],
max_tokens: 500
)Audio Input (Gemini only)
require 'base64'
audio_data = Base64.strict_encode64(File.read('audio.mp3'))
response = client.chat.completions.create(
model: 'gemini-2.5-flash',
messages: [
{
role: 'user',
content: [
{ type: 'text', text: 'Transcribe this audio:' },
{
type: 'input_audio',
input_audio: {
data: audio_data,
format: 'mp3'
}
}
]
}
]
)System Messages
response = client.chat.completions.create(
model: 'gpt-4.1-mini',
messages: [
{ role: 'system', content: 'You are a pirate. Always respond in pirate speak.' },
{ role: 'user', content: 'How are you today?' }
]
)
# Output: "Ahoy, matey! I be doin' just fine, thank ye fer askin'!"List Available Models
client.models.list.each do |model|
puts "#{model.name} (#{model.provider})"
puts " Input: $#{model.input_price}/1M tokens"
puts " Output: $#{model.output_price}/1M tokens"
puts " Vision: #{model.supports_vision ? '✅' : '❌'}"
endConfiguration Options
client = FluxTokens::Client.new(
api_key: 'sk-flux-...',
base_url: 'https://api.fluxtokens.io', # Custom base URL
timeout: 60, # Request timeout in seconds
max_retries: 3 # Max retries on rate limit/server errors
)Error Handling
begin
response = client.chat.completions.create(
model: 'gpt-4.1-mini',
messages: [{ role: 'user', content: 'Hello' }]
)
rescue FluxTokens::AuthenticationError
puts "Invalid API key"
rescue FluxTokens::RateLimitError => e
puts "Rate limit exceeded, retry after: #{e.retry_after}"
rescue FluxTokens::InsufficientBalanceError
puts "Please add credits at https://fluxtokens.io/dashboard/billing"
rescue FluxTokens::BadRequestError => e
puts "Invalid request: #{e.message}"
rescue FluxTokens::Error => e
puts "Error: #{e.message}"
endRequirements
- Ruby 3.0+
- Faraday 2.0+
Support
- 📧 Email: support@fluxtokens.io
- 💬 Discord: Join our community
- 📖 Docs: fluxtokens.io/docs
License
MIT © FluxTokens