RubyLLM::Agents: Production Engine Killing Ad-Hoc LLM Jobs
RubyLLM::Agents mounts as a Rails engine to define AI agents via DSL instead of wiring custom Active Jobs for every LLM call. It targets the mess of scattered OpenAI/Anthropic wrappers in Rails apps, where devs hack retries and logging per endpoint. One engine handles agent orchestration, tracking, and dashboards out of the box.
Under the Hood: Rails Engine with RubyLLM Protocol
Core is a Rails engine mounting models like ApplicationAgent < RubyLLM::Agents::Agent, using RubyLLM's adapter protocol for providers (OpenAI GPT-4o, Anthropic Claude 3.5 Sonnet, Google Gemini). Agents define model, system, user prompts, and returns schema for structured output via JSON mode. Instrumentation middleware captures tokens, costs, duration per call, stored in Postgres tables with Hotwire for real-time dashboard updates. Supports fallbacks (model_fallbacks), circuit breakers, and budget limits via cascading pricing adapters (7 providers). Version 3.7.1 drops Ruby 3.1, uses standardrb for linting, RSpec+VCR for specs.
The Good & The Bad
Pros:
- Clean DSL cuts boilerplate: define agent once, call
.call(params)or.ask(message)with auto-tracking. - Full observability: per-execution costs/tokens/errors in dashboard with Highcharts, mobile-responsive.
- Rails-native: jobs, caching, Hotwire integration without glue code.
- Multi-provider: zero lock-in, swaps GPT-4o for Claude via RubyLLM adapters.
- Production guards: retries, fallbacks, budgets prevent runaway bills.
- Evaluation framework: built-in examples for agent testing.
Cons:
- Engine overhead: adds migrations, models to your app—avoid if you want lightweight scripts.
- RubyLLM dependency: ties you to its adapter ecosystem; no direct Llama.cpp support yet.
- Dashboard bloat: Hotwire/Highcharts load might irk minimalists on low-traffic apps.
- Schema enforcement:
returnsDSL assumes JSON output, flakes on creative models. - Cost tracking precision: aggregates provider pricing, misses nuanced tiers.
Quickstart
gem 'ruby_llm-agents'
rails generate ruby_llm:install
rails db:migrate
This installs the engine, runs migrations for agents/executions tables, and mounts /agents dashboard. Define your first agent in app/agents/my_agent.rb, then result = MyAgent.call(query: 'test')—expect structured output, tracked metrics in dashboard at localhost:3000/agents.
Who Should Use This (and Who Shouldn't)
Use it if: You're a Rails dev building agent-heavy apps like search analyzers or code assistants needing observability. Fits SaaS with 100+ LLM calls/day where cost leaks kill margins. Perfect for teams wanting Hotwire dashboards without Grafana hacks.
Skip it if: You run one-off scripts or non-Rails Ruby—stick to raw RubyLLM. Avoid if your stack shuns engines (lightweight APIs) or you prefer JS agent frameworks like Vercel AI SDK. Wrong for local-only LLMs without RubyLLM adapters.
Alternatives & When to Switch
LangChain.rb: Pick it for complex chains/multi-step reasoning if simple agents lack sequencing depth.
Vercel AI SDK: Switch for Next.js apps needing streaming UI over Rails dashboards.
CrewAI: Use if Python ecosystem fits better and you need hierarchical agent swarms beyond DSL prompts.



