Skip to main content
Image

r/ruby


liter-llm: unified access to 142 LLM providers, Rust core, Ruby bindings liter-llm: unified access to 142 LLM providers, Rust core, Ruby bindings

We built this partly in response to what happened to LiteLLM this week https://www.xda-developers.com/popular-python-library-backdoor-machine/. A supply chain attack that turned a trusted Python library into a machine-wide backdoor is a good reminder that the Python packaging ecosystem has structural risks that other languages don't.

liter-llm (https://github.com/kreuzberg-dev/liter-llm) provides the same provider coverage (142 LLMs) with a Rust core. No interpreter-startup side effects, .pth files, or telemetry. API keys are stored as SecretString (zeroed on drop, redacted in debug output), so the credential harvesting that made the LiteLLM incident so damaging is structurally not possible here. For anyone asking ‘who built this’- we're the team behind Kreuzberg, a polyglot open-source Rust document intelligence framework available for 91+ doc formats.

Bindings exist for 11 languages, including Python, but also ones that had nothing like this before: Rust, Ruby, Java, Go, PHP, Elixir, C#, C, TypeScript/Node.js, and WASM. Every binding exposes the full API surface: chat, streaming, embeddings, images, speech, transcription, tool calling, and more. Caching is powered by OpenDAL (40+ backends), cost calculation uses an embedded pricing registry derived from the same source as LiteLLM, and streaming supports both SSE and AWS EventStream binary framing.

liter-llm is a client library, not a proxy- it does not include a proxy server, admin dashboard, or team management. If that's what you need, LiteLLM's proxy is still the reference there.
And of course, full credit and thank you to LiteLLM for the provider configurations we derived from their work.

GitHub: https://github.com/kreuzberg-dev/liter-llm 
Part of the Kreuzberg org https://kreuzberg.dev/
Join our Discord and let us know what you think: https://discord.com/invite/xt9WY3GnKR


The apps you know go further with Copilot.
media poster



Docscribe for Ruby: auto-generate inline YARD docs from AST (Ruby 2.7+, Prism, RBS/Sorbet, Struct.new) Docscribe for Ruby: auto-generate inline YARD docs from AST (Ruby 2.7+, Prism, RBS/Sorbet, Struct.new)

I've been building a Ruby tool called Docscribe that generates inline YARD-style docs above methods by parsing Ruby code and rewriting source in place.

The goal is basically "RuboCop-style automation, but for method docs": run it once, get consistent doc headers/tags, then edit the generated text however you want.

What it does:

  • generates inline docs for instance and class methods

  • infers param/return types from AST heuristics

  • respects Ruby visibility (private, protected, class << self, etc.)

  • supports rescue-aware docs: @raise from raise/fail and rescue exception lists and conditional @return for rescue branches

  • supports external type info: RBS (--rbs, --sig-dir)

  • Sorbet inline sig + RBI (--sorbet, --rbi-dir)

  • can generate @!attribute docs for: attr_reader / attr_writer / attr_accessor and Struct.new declarations

Current CLI:

  • docscribe lib -> inspect mode (safe changes only)

  • docscribe -a lib -> apply safe updates

  • docscribe -A lib -> apply aggressive updates

  • docscribe --stdin -> rewrite from stdin to stdout

Ruby 3.4+ support works through Prism translated into parser-compatible nodes, so formatting is preserved and the tool still uses source-range rewriting instead of reprinting ASTs.

A few things I'd especially love feedback on:

  • edge cases around Ruby syntax / visibility semantics

  • what "safe mode" should and shouldn’t merge into existing docs

  • whether JSON output / dump-config would be useful for CI/editor tooling

GitHub link: https://github.com/unurgunite/docscribe