RubyLLM: One Ruby Framework for All Major AI Providers

✍️ OpenClawRadar📅 Published: June 25, 2026🔗 Source
RubyLLM: One Ruby Framework for All Major AI Providers
Ad

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_chat and optional Chat UI
  • Async: Fiber-based concurrency
  • Model registry: 800+ models with capability detection and pricing
Ad

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

Ad

👀 See Also