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

Returns a new instance of InMemorySessionService.



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

Parameters:

  • app_name (String)

    Application name

  • user_id (String)

    User ID

  • session_id (String)

    Session ID

  • event (Event)

    Event to append

Returns:

  • (Session, nil)

    Updated session or nil if not found



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

Parameters:

  • app_name (String)

    Application name

  • user_id (String)

    User ID

  • initial_state (Hash) (defaults to: nil)

    Initial state (optional)

Returns:



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

Parameters:

  • app_name (String)

    Application name

  • user_id (String)

    User ID

  • session_id (String)

    Session ID

Returns:

  • (Boolean)

    True if deleted, false otherwise



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

Parameters:

  • app_name (String)

    Application name

Returns:

  • (Hash)

    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

Parameters:

  • app_name (String)

    Application name

  • user_id (String)

    User ID

  • session_id (String)

    Session ID

Returns:

  • (Session, nil)

    Session or nil if not found



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

Parameters:

  • app_name (String)

    Application name

  • user_id (String)

    User ID

Returns:

  • (Hash)

    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

Parameters:

  • app_name (String)

    Application name

  • user_id (String)

    User ID

Returns:

  • (Array<Session>)

    List of sessions



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

Parameters:

  • app_name (String)

    Application name

  • state_updates (Hash)

    State updates

Returns:

  • (Hash)

    Updated 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

Parameters:

  • app_name (String)

    Application name

  • user_id (String)

    User ID

  • session_id (String)

    Session ID

  • state_updates (Hash)

    State updates

Returns:

  • (Session, nil)

    Updated session or nil if not found



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

Parameters:

  • app_name (String)

    Application name

  • user_id (String)

    User ID

  • state_updates (Hash)

    State updates

Returns:

  • (Hash)

    Updated 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