Class: LLM::Buffer

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/llm/buffer.rb

Overview

LLM::Buffer provides an Enumerable object that tracks messages in a conversation thread.

Instance Method Summary collapse

Constructor Details

#initialize(provider) ⇒ LLM::Buffer

Parameters:



13
14
15
16
# File 'lib/llm/buffer.rb', line 13

def initialize(provider)
  @provider = provider
  @messages = []
end

Instance Method Details

#<<(item) ⇒ void Also known as: push

This method returns an undefined value.

Parameters:



68
69
70
71
# File 'lib/llm/buffer.rb', line 68

def <<(item)
  @messages << item
  self
end

#[](index) ⇒ LLM::Message?

Returns a message, or nil

Parameters:

  • index (Integer, Range)

    The message index

Returns:



79
80
81
# File 'lib/llm/buffer.rb', line 79

def [](index)
  @messages[index]
end

#concat(ary) ⇒ Object

Append an array

Parameters:



22
23
24
# File 'lib/llm/buffer.rb', line 22

def concat(ary)
  @messages.concat(ary)
end

#each {|LLM::Message| ... } ⇒ void

This method returns an undefined value.

Yields:

  • (LLM::Message)

    Yields each message in the conversation thread



40
41
42
43
44
45
46
# File 'lib/llm/buffer.rb', line 40

def each(...)
  if block_given?
    @messages.each { yield(_1) }
  else
    enum_for(:each, ...)
  end
end

#empty?Boolean

Returns true when the buffer is empty

Returns:

  • (Boolean)


106
107
108
# File 'lib/llm/buffer.rb', line 106

def empty?
  @messages.empty?
end

#findLLM::Message?

Find a message (in descending order)

Returns:



51
52
53
# File 'lib/llm/buffer.rb', line 51

def find(...)
  reverse_each.find(...)
end

#inspectString

Returns:

  • (String)


91
92
93
94
# File 'lib/llm/buffer.rb', line 91

def inspect
  "#<#{self.class.name}:0x#{object_id.to_s(16)} " \
  "message_count=#{@messages.size}>"
end

#last(n = nil) ⇒ LLM::Message, ...

Returns the last message(s) in the buffer

Parameters:

  • n (Integer, nil) (defaults to: nil)

    The number of messages to return

Returns:



60
61
62
# File 'lib/llm/buffer.rb', line 60

def last(n = nil)
  n.nil? ? @messages.last : @messages.last(n)
end

#replace(messages) ⇒ LLM::Buffer

Replace the tracked messages

Parameters:

  • messages (Array<LLM::Message>)

    The replacement messages

Returns:



31
32
33
34
# File 'lib/llm/buffer.rb', line 31

def replace(messages)
  @messages.replace(messages)
  self
end

#sizeInteger

Returns the number of messages in the buffer

Returns:

  • (Integer)

    Returns the number of messages in the buffer



99
100
101
# File 'lib/llm/buffer.rb', line 99

def size
  @messages.size
end

#to_jsonString

Returns:

  • (String)


85
86
87
# File 'lib/llm/buffer.rb', line 85

def to_json(...)
  LLM.json.dump(@messages, ...)
end