Add with_messages for scoping chat messages #533
+114
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What this does
Adds a
with_messagesmethod toRubyLLM::Chatthat allows filtering messages before they're sent to the provider. This enables fine-grained control over which messages are included in API requests, which is particularly useful for managing context windows, implementing sliding window strategies, or selectively including only recent messages.Ref discussion: #495
I considered creating a new chat and associating them, but I ended up not wanting to mix the application chat/message data model with something only needed for the llm call. This approach keeps message scoping logic separate from the application's data model.
When called with a block, the block receives all messages and returns the filtered subset that will be sent to the provider. When called without a block, it clears any previously set scope and returns to using all messages.
Usage example:
Type of change
Scope check
Quality check
overcommit --installand all hooks passbundle exec rake vcr:record[provider_name]bundle exec rspecmodels.json,aliases.json)API changes