Thanks for considering contributing! Here's what you need to know.
RubyLLM does one thing well: LLM communication in Ruby.
- LLM provider integrations and new provider features
- Convenience that benefits most users (Rails generators, etc.)
- Performance and API consistency improvements
- Application architecture (testing, persistence, error tracking)
- One-off solutions you can build in your app
- Auxiliary features unrelated to LLM communication
- RAG support → Use dedicated libraries
- Prompt templates → Use ERB/Mustache in your app
- Model data fixes → File with Parsera
- Auto-failover → Use
.with_model()(works mid-conversation, even across providers) - Tool interface changes → Handle in your tool's initializer
- Testing helpers → Use dependency injection
The rule: If you can solve it in application code, you should.
This is unpaid work I do between other priorities. I respond when I can.
Need something fast? Email carmine@paolino.work for paid development. $200/hour, 10-hour minimum ($2000).
gh repo fork crmne/ruby_llm --clone && cd ruby_llm
bundle install
overcommit --install
gh issue develop 123 --checkout # or create your own branch
# make changes, add tests
gh pr create --web- Run
overcommit --installbefore doing anything - it auto-fixes style, runs tests, and updates model files on commit - Don't edit
models.jsonoraliases.json- overcommit regenerates them automatically - Write clear PR descriptions - explain what and why
The git hooks handle style, tests, and file generation for you. No excuses for broken commits.
Run linting: bundle exec rubocop
Run tests: bundle exec rspec
Re-recording VCR cassettes? Set API keys and run:
bundle exec rake vcr:record[openai,anthropic] # specific providers
bundle exec rake vcr:record[all] # everythingThen inspect the YAML files - make sure no API keys leaked.
Don't touch these files directly:
models.json- auto-generated from provider APIs + Parseraaliases.json- auto-generated from models.json
To update model info:
- Public model issues → File with Parsera
Consider sponsoring RubyLLM to help with ongoing costs. Sponsorship supports general maintenance - for priority features, use paid development above.
That's it. Let's make Ruby the best AI development experience possible.
— Carmine