Class: Rubino::Context::MessageBoundary

Inherits:
Object
  • Object
show all
Defined in:
lib/rubino/context/message_boundary.rb

Overview

Splits messages into head (protected), middle (compressible), tail (protected).

Instance Method Summary collapse

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 = 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

Returns:

  • (Boolean)


34
35
36
# File 'lib/rubino/context/message_boundary.rb', line 34

def has_compressible_middle?
  !middle.empty?
end

#headObject

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

#middleObject

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

#tailObject

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