Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: crmne/ruby_llm
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 1.13.1
Choose a base ref
...
head repository: crmne/ruby_llm
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 1.13.2
Choose a head ref
  • 7 commits
  • 487 files changed
  • 4 contributors

Commits on Mar 4, 2026

  1. Fix missing models.dev date handling for created_at metadata (#652)

    ## What this does
    
    Fixes an edge case in `Models.models_dev_model_to_info` where
    `created_at` was built from a blank date when both `release_date` and
    `last_updated` were missing.
    
    Before this fix, it could build `" 00:00:00 UTC"`, which later parsed to
    the current date, causing incorrect and non-deterministic `created_at`
    values in model metadata.
    
    This PR:
    - Sets `created_at` only when a non-blank date is present.
    - Keeps `created_at` as `nil` when both source dates are missing.
    - Adds a regression test covering this nil-date case.
    
    ## Type of change
    
    - [x] Bug fix
    - [ ] New feature
    - [ ] Breaking change
    - [ ] Documentation
    - [ ] Performance improvement
    
    ## Scope check
    
    - [x] I read the [Contributing
    Guide](https://github.com/crmne/ruby_llm/blob/main/CONTRIBUTING.md)
    - [x] This aligns with RubyLLM's focus on **LLM communication**
    - [x] This isn't application-specific logic that belongs in user code
    - [x] This benefits most users, not just my specific use case
    
    ## Required for new features
    
    <!-- Skip this section for bug fixes and documentation -->
    
    - [ ] I opened an issue **before** writing code and received maintainer
    approval
    - [ ] Linked issue: #___
    
    **PRs for new features or enhancements without a prior approved issue
    will be closed.**
    
    ## Quality check
    
    - [x] I ran `overcommit --install` and all hooks pass
    - [x] I tested my changes thoroughly
    - [ ] For provider changes: Re-recorded VCR cassettes with `bundle exec
    rake vcr:record[provider_name]`
    - [ ] All tests pass: `bundle exec rspec`
    - [ ] I updated documentation if needed
    - [x] I didn't modify auto-generated files manually (`models.json`,
    `aliases.json`)
    
    ## AI-generated code
    
    - [x] I used AI tools to help write this code
    - [x] I have reviewed and understand all generated code (required if
    above is checked)
    
    ## API changes
    
    - [ ] Breaking change
    - [ ] New public methods/classes
    - [ ] Changed method signatures
    - [x] No API changes
    afurm authored Mar 4, 2026
    Configuration menu
    Copy the full SHA
    d940984 View commit details
    Browse the repository at this point in the history
  2. Updated models

    crmne committed Mar 4, 2026
    Configuration menu
    Copy the full SHA
    48bf6f6 View commit details
    Browse the repository at this point in the history
  3. Updated models

    crmne committed Mar 4, 2026
    Configuration menu
    Copy the full SHA
    fe8994d View commit details
    Browse the repository at this point in the history

Commits on Mar 5, 2026

  1. [BUG] Fix schema name sanitization for OpenAI API compatibility (#655)

    ## What this does
    
    Sanitizes schema names in `build_schema_payload` by replacing characters
    that don't match `[a-zA-Z0-9_-]` with `_`.
    
    Since v1.13.0, `normalize_schema_payload` preserves the `:name` key from
    `to_json_schema`. When using `ruby_llm-schema`, the schema name defaults
    to the full Ruby class name (e.g. `MyApp::Nested::Schema`) which
    contains `::`. OpenAI requires `response_format.json_schema.name` to
    match `^[a-zA-Z0-9_-]+$`, so the request is rejected with a
    `BadRequestError`.
    
    ## Type of change
    
    - [x] Bug fix
    - [ ] New feature
    - [ ] Breaking change
    - [ ] Documentation
    - [ ] Performance improvement
    
    ## Scope check
    
    - [x] I read the [Contributing
    Guide](https://github.com/crmne/ruby_llm/blob/main/CONTRIBUTING.md)
    - [x] This aligns with RubyLLM's focus on **LLM communication**
    - [x] This isn't application-specific logic that belongs in user code
    - [x] This benefits most users, not just my specific use case
    
    ## Quality check
    
    - [x] I ran `overcommit --install` and all hooks pass
    - [x] I tested my changes thoroughly
    - [ ] For provider changes: Re-recorded VCR cassettes with `bundle exec
    rake vcr:record[provider_name]`
      - [x] All tests pass: `bundle exec rspec`
    - [ ] I updated documentation if needed
    - [x] I didn't modify auto-generated files manually (`models.json`,
    `aliases.json`)
    
    ## AI-generated code
    
    - [x] I used AI tools to help write this code
    - [x] I have reviewed and understand all generated code (required if
    above is checked)
    
    ## API changes
    
    - [ ] Breaking change
    - [ ] New public methods/classes
    - [ ] Changed method signatures
    - [x] No API changes
    
    Fixes #654
    
    ---------
    
    Co-authored-by: Alexey Ivanov <[email protected]>
    Co-authored-by: Carmine Paolino <[email protected]>
    3 people authored Mar 5, 2026
    Configuration menu
    Copy the full SHA
    afe7d04 View commit details
    Browse the repository at this point in the history
  2. Fix Anthropic streaming crash on non-hash SSE payloads (#657)

    ## What this does
    
    Prevents streaming parsers from passing non-Hash SSE payloads into
    provider `build_chunk` methods.
    
    `handle_data` can parse valid JSON scalars (like `true`) from `data:`
    frames. Those values are truthy and previously passed `if data`, which
    crashes provider chunk builders that assume a Hash and call `dig`.
    
    This change narrows the guard in `handle_stream` to `data.is_a?(Hash)`.
    
    ## Why this is minimal
    
    - One-line runtime behavior change in shared streaming handler
    - No provider-specific branching
    - Keeps existing behavior for all normal Hash event payloads
    
    ## Tests
    
    - Added `spec/ruby_llm/streaming_spec.rb`
    - Verifies non-Hash SSE payloads are ignored without raising
    - Verifies Hash SSE payloads still flow to `build_chunk`
    
    Fixes #656
    crmne authored Mar 5, 2026
    Configuration menu
    Copy the full SHA
    67c4148 View commit details
    Browse the repository at this point in the history
  3. Bump to 1.13.2

    crmne committed Mar 5, 2026
    Configuration menu
    Copy the full SHA
    b6e62a6 View commit details
    Browse the repository at this point in the history
  4. Updated cassettes

    crmne committed Mar 5, 2026
    Configuration menu
    Copy the full SHA
    0950693 View commit details
    Browse the repository at this point in the history
Loading