RubyLLM: One Ruby Framework for All Major AI Providers

RubyLLM 1.16.0 is a Ruby framework that provides a unified interface for all major AI providers, including OpenAI, xAI, Anthropic, Gemini, VertexAI, Bedrock, DeepSeek, Mistral, Ollama, OpenRouter, Perplexity, GPUStack, and any OpenAI-compatible API. It supports chat, vision, audio, documents, image generation, embeddings, moderation, tools, agents, structured output, streaming, and Rails integration.
Quick Start
Add to Gemfile: gem 'ruby_llm', then bundle install.
Configure API keys:
RubyLLM.configure do |config|
config.openai_api_key = ENV['OPENAI_API_KEY']
end
Key Features
- Chat:
RubyLLM.chat.ask('question') - Vision: Analyze images and videos —
chat.ask('Describe', with: 'photo.jpg') - Audio: Transcribe and understand speech —
RubyLLM.transcribe('meeting.wav') - Documents: Extract from PDFs, CSVs, JSON, any file type
- Image generation:
RubyLLM.paint('prompt') - Embeddings:
RubyLLM.embed('text') - Moderation:
RubyLLM.moderate('text') - Tools: Let AI call your Ruby methods by subclassing
RubyLLM::Tool - Agents: Reusable assistants with
RubyLLM::Agent - Structured output: JSON schemas with
RubyLLM::Schema - Streaming: Real-time responses with blocks
- Rails: ActiveRecord integration with
acts_as_chatand optional Chat UI - Async: Fiber-based concurrency
- Model registry: 800+ models with capability detection and pricing
Code Examples
Chat with vision:
chat = RubyLLM.chat
chat.ask('What is in this image?', with: 'ruby_conf.jpg')
chat.ask('Summarize this document', with: 'contract.pdf')
Using tools:
class Weather < RubyLLM::Tool
desc 'Get current weather'
def execute(latitude:, longitude:)
JSON.parse(Faraday.get('https://api.open-meteo.com/...').body)
end
end
chat.with_tool(Weather).ask('What is the weather in Berlin?')
Structured output:
class ProductSchema < RubyLLM::Schema
string :name
number :price
array :features do
string
end
end
response = chat.with_schema(ProductSchema).ask('Analyze', with: 'product.txt')
Rails Integration
bin/rails generate ruby_llm:install
bin/rails db:migrate
bin/rails generate ruby_llm:chat_ui
Then create a Chat model with acts_as_chat and visit /chats for a ready-to-use UI.
RubyLLM has only three dependencies: Faraday, Zeitwerk, and Marcel.
📖 Read the full source: HN AI Agents
👀 See Also

DreamScape: Browser-Based 3D World Builder Powered by Claude Code and MCP
DreamScape is a browser-based 3D world builder where Claude Code controls 30 MCP tools to generate terrain, models, weather, and behaviors in real time through natural language commands.

SprintiQ: Open-Source Sprint Planning for Claude Code
SprintiQ is an open-source agile platform that acts as an orchestration layer for Claude Code, offering AI-powered user story generation, sprint planning, velocity tracking, and a CLI that syncs git activity to sprints in real time.

SIDJUA V1.0: Self-Hosted Governance Platform for AI Agents
SIDJUA V1.0 is a free, self-hosted governance platform for AI agents that runs on Docker, including Raspberry Pi. It provides mandatory checkpoints for agent tasks, encrypted credential storage, network isolation, and granular budget controls.

Four Claude Code Hooks Enforce Voice and Tone Consistency in AI-Written Copy
A developer built a system using four Claude Code hooks to prevent AI-generated copy from drifting off-brand. The system gates editing of copy files (.tsx, .md) until a reviewer agent validates content against a VOICE-AND-TONE.md guide.