Class: Google::ADK::InMemorySessionService

Inherits:
BaseSessionService show all
Defined in:
lib/google/adk/session.rb

Overview

In-memory session service for development/testing

Instance Method Summary collapse

Constructor Details

#initializeInMemorySessionService



125
126
127
128
129
130
# File 'lib/google/adk/session.rb', line 125

def initialize
  # Structure: { app_name => { user_id => { session_id => session } } }
  @sessions = {}
  @user_state = {}
  @app_state = {}
end

Instance Method Details

#append_event(app_name:, user_id:, session_id:, event:) ⇒ Session?

Append event to session



187
188
189
190
191
192
193
194
# File 'lib/google/adk/session.rb', line 187

def append_event(app_name:, user_id:, session_id:, event:)
  session = get_session(app_name: app_name, user_id: user_id, session_id: session_id)
  return nil unless session

  session.events << event
  session.last_update_time = Time.now
  session
end

#create_session(app_name:, user_id:, initial_state: nil) ⇒ Session

Create a new session



138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# File 'lib/google/adk/session.rb', line 138

def create_session(app_name:, user_id:, initial_state: nil)
  session = Session.new(
    id: "session-#{SecureRandom.uuid}",
    app_name: app_name,
    user_id: user_id,
    state: initial_state || {}
  )

  # Ensure nested structure exists
  @sessions[app_name] ||= {}
  @sessions[app_name][user_id] ||= {}
  @sessions[app_name][user_id][session.id] = session

  session
end

#delete_session(app_name:, user_id:, session_id:) ⇒ Boolean

Delete a session



202
203
204
205
206
207
# File 'lib/google/adk/session.rb', line 202

def delete_session(app_name:, user_id:, session_id:)
  return false unless @sessions.dig(app_name, user_id, session_id)

  @sessions[app_name][user_id].delete(session_id)
  true
end

#get_app_state(app_name:) ⇒ Hash

Get app state



246
247
248
# File 'lib/google/adk/session.rb', line 246

def get_app_state(app_name:)
  @app_state[app_name] || {}
end

#get_session(app_name:, user_id:, session_id:) ⇒ Session?

Get a session



160
161
162
# File 'lib/google/adk/session.rb', line 160

def get_session(app_name:, user_id:, session_id:)
  @sessions.dig(app_name, user_id, session_id)
end

#get_user_state(app_name:, user_id:) ⇒ Hash

Get user state



226
227
228
# File 'lib/google/adk/session.rb', line 226

def get_user_state(app_name:, user_id:)
  @user_state.dig(app_name, user_id) || {}
end

#list_sessions(app_name:, user_id:) ⇒ Array<Session>

List sessions for a user



214
215
216
217
218
219
# File 'lib/google/adk/session.rb', line 214

def list_sessions(app_name:, user_id:)
  sessions_hash = @sessions.dig(app_name, user_id)
  return [] unless sessions_hash

  sessions_hash.values
end

#update_app_state(app_name:, state_updates:) ⇒ Hash

Update app state



255
256
257
258
# File 'lib/google/adk/session.rb', line 255

def update_app_state(app_name:, state_updates:)
  @app_state[app_name] ||= {}
  @app_state[app_name].merge!(state_updates)
end

#update_session(app_name:, user_id:, session_id:, state_updates:) ⇒ Session?

Update session state



171
172
173
174
175
176
177
178
# File 'lib/google/adk/session.rb', line 171

def update_session(app_name:, user_id:, session_id:, state_updates:)
  session = get_session(app_name: app_name, user_id: user_id, session_id: session_id)
  return nil unless session

  session.state.merge!(state_updates)
  session.last_update_time = Time.now
  session
end

#update_user_state(app_name:, user_id:, state_updates:) ⇒ Hash

Update user state



236
237
238
239
240
# File 'lib/google/adk/session.rb', line 236

def update_user_state(app_name:, user_id:, state_updates:)
  @user_state[app_name] ||= {}
  @user_state[app_name][user_id] ||= {}
  @user_state[app_name][user_id].merge!(state_updates)
end