About
This project integrates the llm.rb runtime and its features into Rails.
The project extends the builtin ActiveRecord support available to the llm.rb runtime with a Rails integration that includes generators for getting set up quickly, and an engine for a stream-capable chat interface that can be extended with your own tools.
The llm.rb runtime runs on Ruby's standard library by default. loads optional pieces only when needed, and offers a single runtime for providers, agents, tools, skills, MCP, A2A (Agent2Agent), RAG (vector stores & embeddings), streaming, files, and persisted state.
Quick start
1. Add to Gemfile
Add rails-llm:
bundle add rails-llm
2. Run generator
Generate the model, migration, and routes:
rails generate rails_llm:install
3. Run migrations
Migrate the database:
rails db:migrate
4. Configure your API key
Set your API key. If you want to use a different provider,
edit set_provider in app/models/rails_llm/agent.rb.
export DEEPSEEK_API_KEY=...
5. Profit
Open your browser:
open http://localhost:3000/ai/agents
Example
acts_as_agent
class Agent < ApplicationRecord
acts_as_agent provider: :set_provider, context: :set_context
private
def set_provider
LLM.deepseek(key: ENV["DEEPSEEK_API_KEY"])
end
def set_context
{model: "deepseek-v4-flash"}
end
end
agent = Agent.create!
agent.ask("What is the capital of France?").content # => "Paris"
agent.ask("Summarize this", with: "report.pdf").content # with a file
agent.ask("Tell me a story") { |chunk| print chunk } # streaming
Engine
Generators
| Generator | What it creates |
|---|---|
rails_llm:install |
RailsLLM::Agent model, RailsLLM::KnowledgeTool, migration (rails_llm_agents), initializer, engine routes |
rails_llm:model |
RailsLLM::Agent model with acts_as_agent |
Engine routes
| Method | Path | Action |
|---|---|---|
| GET | /ai/agents |
List agents |
| GET | /ai/agents/:id |
View an agent |
| POST | /ai/agents |
Create a new agent |
| POST | /ai/agents/:id/ask |
Send a message |