Class: RubyLLM::ResponsesSession

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_llm/responses_session.rb

Overview

Manages state for OpenAI Responses API stateful conversations. Tracks response IDs, session validity, and failure recovery.

Constant Summary collapse

RESPONSE_ID_TTL =

5 minutes

300
MAX_FAILURES =
2

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(response_id: nil, last_activity: nil, failure_count: 0, disabled: false) ⇒ ResponsesSession

Returns a new instance of ResponsesSession.



12
13
14
15
16
17
# File 'lib/ruby_llm/responses_session.rb', line 12

def initialize(response_id: nil, last_activity: nil, failure_count: 0, disabled: false)
  @response_id = response_id
  @last_activity = last_activity
  @failure_count = failure_count
  @disabled = disabled
end

Instance Attribute Details

#failure_count ⇒ Object (readonly)

Returns the value of attribute failure_count.



10
11
12
# File 'lib/ruby_llm/responses_session.rb', line 10

def failure_count
  @failure_count
end

#last_activity ⇒ Object (readonly)

Returns the value of attribute last_activity.



10
11
12
# File 'lib/ruby_llm/responses_session.rb', line 10

def last_activity
  @last_activity
end

#response_id ⇒ Object (readonly)

Returns the value of attribute response_id.



10
11
12
# File 'lib/ruby_llm/responses_session.rb', line 10

def response_id
  @response_id
end

Class Method Details

.from_h(hash) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
# File 'lib/ruby_llm/responses_session.rb', line 65

def self.from_h(hash)
  hash = hash.transform_keys(&:to_sym)
  last_activity = hash[:last_activity] ? Time.parse(hash[:last_activity]) : nil

  new(
    response_id: hash[:response_id],
    last_activity: last_activity,
    failure_count: hash[:failure_count] || 0,
    disabled: hash[:disabled] || false
  )
end

Instance Method Details

#disabled? ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/ruby_llm/responses_session.rb', line 52

def disabled?
  @disabled
end

#record_failure! ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/ruby_llm/responses_session.rb', line 40

def record_failure!
  @failure_count += 1

  if @failure_count >= MAX_FAILURES
    @disabled = true
  else
    # Reset response_id and last_activity but preserve failure_count
    @response_id = nil
    @last_activity = nil
  end
end

#reset! ⇒ Object



19
20
21
22
23
24
# File 'lib/ruby_llm/responses_session.rb', line 19

def reset!
  @response_id = nil
  @last_activity = nil
  @failure_count = 0
  @disabled = false
end

#to_h ⇒ Object



56
57
58
59
60
61
62
63
# File 'lib/ruby_llm/responses_session.rb', line 56

def to_h
  {
    response_id: @response_id,
    last_activity: @last_activity&.iso8601,
    failure_count: @failure_count,
    disabled: @disabled
  }
end

#update(new_response_id) ⇒ Object



26
27
28
29
30
# File 'lib/ruby_llm/responses_session.rb', line 26

def update(new_response_id)
  @response_id = new_response_id
  @last_activity = Time.now
  @failure_count = 0
end

#valid? ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
35
36
37
38
# File 'lib/ruby_llm/responses_session.rb', line 32

def valid?
  return false if @disabled
  return false unless @response_id
  return false unless @last_activity

  (Time.now - @last_activity) < RESPONSE_ID_TTL
end