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

GLM 5 on Mac M3: Performance Observations for Agentic Coding
A user reports running GLM 5 via MLX 4-bit quantization on a Mac M3 with 512GB RAM, finding it usable for agentic coding with context under 50k tokens but noting significant slowdowns beyond that threshold.

Claude Code Undocumented Features: Hooks, Memory, YOLO Classifier & More
The Claude Code source reveals hidden configs: YOLO Classifier for auto-permission, hooks that rewrite commands, persistent agent memory, auto-mode rules in plain English, and dream loops.

OpenPlawd: OpenClaw Skill for Automated Plaud Meeting Notes
OpenPlawd is an OpenClaw skill that automatically processes Plaud recordings into structured HTML meeting notes. It polls Plaud accounts hourly, transcribes with Whisper or OpenAI, chunks large files, and generates notes with action items via an OpenClaw agent.

Claude Code v2.1.139 Adds /goal Command for Async Long-Running Tasks
Claude Code v2.1.139 introduces the /goal command, enabling fire-and-forget sessions that run until a completion condition is met, plus a new agents view to monitor active sessions.