Class: Rubino::Context::MessageBoundary
- Inherits:
-
Object
- Object
- Rubino::Context::MessageBoundary
- Defined in:
- lib/rubino/context/message_boundary.rb
Overview
Splits messages into head (protected), middle (compressible), tail (protected).
Instance Method Summary collapse
-
#has_compressible_middle? ⇒ Boolean
Returns true if there are enough messages to have a middle section.
-
#head ⇒ Object
Returns the protected head messages (system prompt + first N).
-
#initialize(messages:, config: nil) ⇒ MessageBoundary
constructor
A new instance of MessageBoundary.
-
#middle ⇒ Object
Returns the compressible middle messages.
-
#tail ⇒ Object
Returns the protected tail messages (recent context).
Constructor Details
#initialize(messages:, config: nil) ⇒ MessageBoundary
Returns a new instance of MessageBoundary.
7 8 9 10 11 12 |
# File 'lib/rubino/context/message_boundary.rb', line 7 def initialize(messages:, config: nil) @messages = @config = config || Rubino.configuration @protect_first = @config.compression_protect_first_n @protect_last = @config.compression_protect_last_n end |
Instance Method Details
#has_compressible_middle? ⇒ Boolean
Returns true if there are enough messages to have a middle section
34 35 36 |
# File 'lib/rubino/context/message_boundary.rb', line 34 def has_compressible_middle? !middle.empty? end |
#head ⇒ Object
Returns the protected head messages (system prompt + first N)
15 16 17 |
# File 'lib/rubino/context/message_boundary.rb', line 15 def head @messages.first(@protect_first) end |
#middle ⇒ Object
Returns the compressible middle messages
20 21 22 23 24 |
# File 'lib/rubino/context/message_boundary.rb', line 20 def middle return [] if @messages.size <= (@protect_first + @protect_last) @messages[@protect_first...-@protect_last] end |
#tail ⇒ Object
Returns the protected tail messages (recent context)
27 28 29 30 31 |
# File 'lib/rubino/context/message_boundary.rb', line 27 def tail return [] if @messages.size <= @protect_last @messages.last(@protect_last) end |