Skip to main content

Command Palette

Search for a command to run...

Rails Gets Smarter: Adding AI the Ruby Way with RubyLLM

Updated
•5 min read
Rails Gets Smarter: Adding AI the Ruby Way with RubyLLM
S

Hi there! đź‘‹ I'm sandip parida, a passionate fullstack software developer who loves to learn and work with new technologies. #ruby #rails #nodejs #aiapps #openai #ai #iot

Ever wanted to add GenAI powers to your Rails app without learning Python or wrestling with 20 different SDKs?
Good news — RubyLLM is basically the Alfred to your Batman, the Jarvis to your Iron Man, the Chai to your Samosa.

One gem. One generator. Unlimited GenAI firepower.

From chatbots to image analysis to audio transcription to RAG pipelines, RubyLLM lets you build AI features entirely in Ruby — fast, clean, and very Rails-like.
Try the demo here: https://dub.sh/0GElkIQ


Can I actually build AI features without touching Python?

Yes. Absolutely.

RubyLLM wraps GPT, Claude, Gemini, Perplexity, Mistral, Ollama, and others behind a single, friendly API.

chat = RubyLLM.chat
response = chat.ask("Explain Ruby blocks in 3 lines")

That’s it — no JSON acrobatics, no provider quirks, and definitely no “which Python version is broken today?” debugging session.


Why Rails + AI = A Love Story

Rails is known for two things:

  • Developer happiness

  • Shipping fast

Turns out, these are the exact same traits AI thrives on.

With Rails, you already get:

  • REST APIs out of the box

  • Background jobs for long LLM calls

  • Turbo Streams for live chat

  • Predictable, readable code

  • ActiveStorage for file attachments

If AI could choose a backend framework, it would pick Rails, propose immediately, and plan the honeymoon in Goa.


What a Full-Fledged GenAI Application Really Needs ? (And Yes, RubyLLM Has All of It)

A real GenAI application is never just
send_prompt → get_response → profit.

That might work for a weekend hackathon, but production AI apps need a proper toolkit.
Here’s what a complete GenAI setup usually requires—and how RubyLLM quietly covers all of it.


1. One Way to Talk to Any Model

Today it’s GPT.
Tomorrow it’s Claude.
Next week someone will launch "UltraMegaBrain-v9 Alpha" on Twitter.

You need one API, not a suitcase of SDKs.

chat = RubyLLM.chat
answer = chat.ask("Explain polymorphism in one sentence")

Switch providers by changing the model name, not your entire codebase.


2. Multimodal Abilities (Text, Image, Audio, Documents)

Modern AI apps don’t stop at text—they need to understand files, images, PDFs, spreadsheets, and audio rants.

chat = RubyLLM.chat
response = chat.ask("What's in this image?", with: "photo.jpg")

If your users upload chaos, RubyLLM can still make sense of it.


3. Embeddings and RAG Pipelines

Smart search, semantic matching, knowledge retrieval—this is where AI apps start feeling intelligent.

vector = RubyLLM.embed("a ruby developer juggling deadlines")
similar = SearchIndex.find_similar(vector)

All in Ruby, no separate vector microservice unless you really want pain.


4. Tools / Function Calling

LLMs need to interact with your app—not just chat philosophically.
Weather fetch? Database search? Inventory lookup? Perfect.

class Search < RubyLLM::Tool
  description "Search our documents"
  param :query

  def execute(query:)
    Document.search(query).pluck(:title)
  end
end

The AI can now call your Ruby methods like a very obedient intern.


5. Streaming Responses

The real-time typing effect isn’t just pretty—it improves UX and perceived speed.

RubyLLM.chat("Give me three startup ideas") do |chunk|
  print chunk.content
end

Your user gets results instantly while the model is still thinking.


6. Memory and Context Handling

Conversations need history. Apps need context.
Rails devs need something that auto-saves so they don’t have to.

class Chat < ApplicationRecord
  acts_as_chat
end

Message persistence is handled for you—no state management drama.


7. File Attachments

Real users upload everything: PDFs, screenshots, random invoices, and occasionally their selfie by accident.

RubyLLM handles attachments through ActiveStorage:

answer = chat.ask("Summarize this document", with: params[:file])

Rails vibes all the way down.


8. Moderation & Safety

Production apps need guardrails.
One risky prompt can ruin your day.

RubyLLM.moderate("is it okay to hack my neighbor’s wifi?")

One call, instant safety filter.


9. UI for Chats and Assistants

Most AI apps need a chat interface.
You could build it yourself… or let the generator handle it.

rails generate ruby_llm:chat_ui

You now have a Turbo-powered chat UI faster than your CI pipeline.


10. Background Jobs and Long Tasks

LLM calls aren’t always instant.
Rails has jobs for a reason.

ChatJob.perform_later(chat.id, "Process this PDF")

RubyLLM plays nicely with Sidekiq, ActiveJob, and Resque.


11. Provider Abstraction

Vendor lock-in is the villain of AI development.
Switch models without rewriting logic.

chat.with_model("claude-sonnet-3.5")

Same code. Different model. Zero rewrites.


12. Rails-Friendly Conventions

No microservices.
No separate Python servers.
No "run this container and pray."

RubyLLM stays inside your Rails app, respecting MVC, ActiveRecord, and everything you already know.


Long Story Short

A real GenAI application is a stack of:

LLM messaging, File handling, Embeddings, RAG, Tools, Context, Moderation, UI, Jobs, Streaming, Storage, Provider abstraction

RubyLLM bundles all of this into one gem—with APIs that feel like they were designed by someone who actually writes Rails every day.


Getting Started (Suspiciously Simple)

Add the gem:

gem "ruby_llm"

Install:

rails generate ruby_llm:install
rails db:migrate

Optional but highly recommended:

rails generate ruby_llm:chat_ui

Congrats — you now have a Turbo-powered chat interface.
You basically built ChatGPT inside your Rails app in under two minutes.


In Practice: This Is How Simple It Feels

@chat = Chat.create!(model: "gpt-4o")
@answer = @chat.ask("Summarize the attached report.", with: params[:file])
render json: { summary: @answer.content }

RubyLLM handles:

  • File upload

  • Message saving

  • Background jobs

  • Streaming

  • Provider quirks

You handle:

  • Taking credit

  • Shipping features

  • Eating a samosa

    Quick Q&A

    Q: Can RubyLLM make my code cleaner?

    A: No — that’s still on you. But it can explain why it’s messy.

    Q: Can it summarize my entire 200-page project report?

    A: Yes. Now you can pretend you read it.

    Q: Can I replace my junior developer with RubyLLM?

    A: You can…
    But RubyLLM doesn’t bring coffee.

    Q: Can RubyLLM help me avoid Python entirely?

    A: Mostly yes. For typical Rails apps, RubyLLM is all you need.
    But for deep research or custom ML pipelines, Python still has a bigger toolbox.

Questions or Feedback?

Have questions or want to chat about Rails + AI?
Drop a comment or connect with me on my socials.

Try the demo here: https://dub.sh/0GElkIQ

More from this blog

"Devsan Blogs: Unleashing Pro Developer Insights Across Languages!"

27 posts

Hi there! I'm sandip parida an enthusiastic engineer passionate about exploring new technologies and solving challenges. With three years of experience in Ruby, Ruby on Rails, and Next.js and iot.