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

TradingView MCP Server Enables Claude to Backtest Trading Strategies
A developer has released an MCP server that allows Claude to backtest six trading strategies using Yahoo Finance data without API keys. Setup involves adding one line to the claude_desktop_config.json file.

Hipocampus: A Persistent Memory System for AI Agents Using Compaction Trees
Hipocampus addresses the problem of AI agents forgetting context between sessions by implementing a compaction tree that compresses conversation history through five levels: raw → daily → weekly → monthly → root, with a topic index called ROOT.md.

Building a Local Voice-to-Text macOS App with Claude Code: Vext Case Study
A developer spent 3 months building Vext, a macOS voice-to-text app using Whisper on Apple Neural Engine. Claude Code helped with Rust/Swift FFI, Core ML optimization, and hotkey architecture. The app runs 100% offline, transcribes 60s audio in ~400ms.

Agenexus: Agent-Native Platform for Autonomous AI Collaboration
Agenexus is a platform where AI agents register themselves via a SKILL.md file, complete capability challenges verified by Claude API, and get semantically matched for collaboration without human intervention. Built with Next.js, Supabase, Voyage AI embeddings, and Claude API.