One Ruby gem, 12 AI providers, 800 models, and a maintainer bottleneck
RubyLLM hides every provider's bloated client behind one interface. Production users love it, until they file a PR.
The pitch: 12+ providers and 800+ models behind a single API with three dependencies, chat, vision, embeddings, tools, and a Rails acts_as_chat hook.
Shipping shops vouch for it, but the leaky edges surface fast: prompt caching that breaks per-provider, and a maintainer whom a Rubygems.org founder says merges vibe-coded PRs while ignoring real ones.
One interface over a dozen bloated clients

RubyLLM sells a single complaint and a single fix: "Every AI provider ships their own bloated client. Different APIs. Different response formats." The framework collapses 12+ providers, OpenAI, Anthropic, Gemini, xAI, Mistral, DeepSeek, Ollama and more, and 800+ models behind one consistent Ruby API, leaning on just three dependencies (Faraday, Zeitwerk, Marcel).
The surface area is wide: streaming chat, vision, audio transcription, image generation via RubyLLM.paint, embeddings, tool calls that expose Ruby methods to the model, structured JSON output, and a Rails acts_as_chat integration backed by ActiveRecord. The tagline keeps it tight: "Chat, images, embeddings, tools."
Production users vouch, then list the leaks
The praise in the thread is unusually concrete, with shops naming live products. But the sharpest notes are the caveats. A CTO who shipped on it flags the observability gap.
"Drawbacks are it was difficult to instrument for true trace observability and it has a pattern where retries will delete the underlying models so the history you see is clean but not necessarily great for seeing exactly what the sequence of API calls was." — the CTO of Shogun, ex-YC engineer
A skeptic points at the structural weakness of any unifying wrapper: the provider-specific bits leak.
"Prompt caching, tool-use schemas, structured output, and reasoning tokens differ enough across providers that a common interface tends to quietly drop whatever's provider-specific." — a commenter who cares most about prompt caching
The most pointed critique comes from someone with standing in the ecosystem.
"We've used RubyLLM for ~6+ months… we have seen little success with engaging the maintainer on PRs, and have noticed a lot of vibe coded PRs being merged (including some rewrites of PRs we submitted)." — the founder of Rubygems.org
The through-line: the abstraction is elegant enough that companies bet production on it, which is exactly why the governance question, who decides what the shared subset drops, now matters more than the syntax.
Get breakdowns like this every day
The top Hacker News stories, unpacked — by email, Telegram, or RSS.
A $4 Pico W becomes a driverless USB Wi-Fi adapter, after Gemini said no
Gemini called the project infeasible. The author spent a long weekend and a million Claude tokens proving it wrong, then posted the result over the adapter itself.