Class: SmartBrain::EventStore::InMemory
- Inherits:
-
Object
- Object
- SmartBrain::EventStore::InMemory
- Defined in:
- lib/smart_brain/event_store/in_memory.rb
Instance Method Summary collapse
- #all_turns(session_id:) ⇒ Object
- #append_turn(session_id:, turn_events:, created_at:, domain_id: 'legacy') ⇒ Object
- #entity_frequencies(session_id:, window_turns:) ⇒ Object
-
#initialize ⇒ InMemory
constructor
A new instance of InMemory.
- #recent_refs(session_id:, limit:) ⇒ Object
- #recent_turns(session_id:, limit:) ⇒ Object
- #turns_count(session_id:) ⇒ Object
Constructor Details
#initialize ⇒ InMemory
Returns a new instance of InMemory.
8 9 10 |
# File 'lib/smart_brain/event_store/in_memory.rb', line 8 def initialize @sessions = {} end |
Instance Method Details
#all_turns(session_id:) ⇒ Object
75 76 77 78 79 |
# File 'lib/smart_brain/event_store/in_memory.rb', line 75 def all_turns(session_id:) return sessions.values.flat_map { |s| s[:turns] } if session_id.nil? (sessions[session_id] || { turns: [] })[:turns] end |
#append_turn(session_id:, turn_events:, created_at:, domain_id: 'legacy') ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/smart_brain/event_store/in_memory.rb', line 12 def append_turn(session_id:, turn_events:, created_at:, domain_id: 'legacy') session = sessions[session_id] if session && session[:domain_id] != domain_id raise ArgumentError, "session #{session_id} belongs to domain #{session[:domain_id]}" end session ||= sessions[session_id] = { domain_id: domain_id, seq: 0, turns: [] } session[:seq] += 1 turn_id = SecureRandom.uuid = (turn_id: turn_id, messages: turn_events[:messages] || [], created_at: created_at) refs = normalize_refs(turn_id: turn_id, refs: turn_events[:refs] || [], created_at: created_at) turn = { id: turn_id, session_id: session_id, seq: session[:seq], created_at: created_at.iso8601, turn_events: turn_events.merge(messages: , refs: refs) } session[:turns] << turn turn end |
#entity_frequencies(session_id:, window_turns:) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/smart_brain/event_store/in_memory.rb', line 61 def entity_frequencies(session_id:, window_turns:) session = sessions[session_id] return Hash.new(0) unless session freq = Hash.new(0) session[:turns].last(window_turns).each do |turn| Array(turn.dig(:turn_events, :entities)).each do |entity| canonical = entity[:canonical] || entity[:name] freq[canonical.to_s.downcase] += 1 end end freq end |
#recent_refs(session_id:, limit:) ⇒ Object
54 55 56 57 58 59 |
# File 'lib/smart_brain/event_store/in_memory.rb', line 54 def recent_refs(session_id:, limit:) session = sessions[session_id] return [] unless session session[:turns].last(limit).flat_map { |t| t.dig(:turn_events, :refs) || [] } end |
#recent_turns(session_id:, limit:) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/smart_brain/event_store/in_memory.rb', line 37 def recent_turns(session_id:, limit:) session = sessions[session_id] return [] unless session session[:turns].last(limit).flat_map do |turn| (turn.dig(:turn_events, :messages) || []).map do |m| { turn_id: turn[:id], message_id: m[:id], role: m[:role], content: m[:content], created_at: m[:created_at] } end end end |
#turns_count(session_id:) ⇒ Object
33 34 35 |
# File 'lib/smart_brain/event_store/in_memory.rb', line 33 def turns_count(session_id:) (sessions[session_id] || { turns: [] })[:turns].size end |