Skip to content
MrJev

ruby_llm-typesafe

TypeSafe provider for RubyLLM 2.

View on GitHub →

Hands-on review

A clean provider that registers Jev with RubyLLM and leaves the thresholds to you. Two commits old, and already behind the gem it plugs into.

Good for

  • Ruby apps already using RubyLLM that want typed answers alongside chat
  • A small, readable provider: schema in, probabilities out, decisions yours
  • Tests that replay recorded traffic, so contributors need no key

Watch out for

  • It pins a pre-release of RubyLLM; with 2.0.0 a spec fails on a renamed method
  • Debug logging prints the whole state, unredacted
  • A user message that happens to be valid JSON is silently sent as structured state

Tested Sep 20, 2026 at 33e680115a43 · Ruby 3.4 in Docker, offline; 115 specs including twelve recorded-HTTP replays

How we reviewed this: we ran its specs in Docker on Ruby 3.4 with no network, replaying its recorded HTTP cassettes. We made no Jev calls.

What it does

ruby_llm-typesafe, by Kieran Klaassen, registers Jev as a provider for RubyLLM 2, so a Ruby app can ask typed questions the same way it asks for chat:

schema = RubyLLM::Schema.new do |s|
  s.noul :is_urgent, instructions: 'Does this convey urgency?'
  s.choice :department, instructions: 'Which team should handle this?'
end

All three question types are supported, and a whole schema goes out in one request. The README is explicit that thresholds, escalation and business rules stay in your code — the provider hands back probabilities and stops.

115 specs run offline, twelve of them replaying recorded traffic so no key is needed.

One failing spec, and why

A single spec fails at HEAD: it expects a specific error when server tools are requested, and gets a NoMethodError instead. The cause is timing — RubyLLM 2.0.0 was released two days after this repository’s last commit and renamed the method the spec calls, while the gemspec allows that version and the lock file is gitignored. So a fresh bundle install today gets 2.0.0 and a red suite.

The safety property itself still holds: we checked, and a request that asks for server tools is still refused before anything is sent. It’s the spec and a README line that are stale, not the behaviour.

What it sends

Exactly {model, state, questions}. The key goes only into the Authorization header; nothing is written to disk and there’s no telemetry.

Two behaviours worth knowing. With debug logging on, the whole state is printed — we saw a test identifier we’d planted appear in the log — with no truncation or redaction. And a user message that begins with { or [ and parses as JSON is silently treated as structured state rather than text, which changes the wire format for, say, a support ticket that happens to be JSON. The README mentions it; there’s no way to switch it off.

Smaller: choice option keys given as both a symbol and a string silently collapse into one option.

Verdict

A tidy, well-tested provider that does one thing and leaves the judgment calls where they belong. It needs one commit to catch up with RubyLLM 2.0.0.

For other language clients, see the Community SDKs.

See how it compares with other tools in Best Jev tools, tested hands-on.

Review updated Sep 20, 2026. Numbers quoted from the project are its author's own; we don't publish our own measurements of Jev.

More in Libraries & Integrations

agentrun

★ 423▲ 13

Parcha-ai/agentrun

A workflow DSL for agents with a Jev package for the steps that are decisions rather than generation.

TypeScript

switch

★ 420▲ 170

osolmaz/switch

TypeScript framework for decision-model harnesses: your program offers a short list of next steps and the model picks one at a time until it can answer, with chess, wikirace and rubric-judge examples run on Jev.

TypeScript

Ten Levels of Jev

★ 264▲ 10

disler/ten-levels-of-jev

Thirty worked uses arranged in ten levels, from one if statement to an agent that reaches for Jev itself, with a video walkthrough.

TypeScriptReviewed

Get new Jev projects every week

New Jev releases, pricing changes, and the best new projects, once a week. No spam; unsubscribe anytime.

Powered by Buttondown. See our privacy policy.