Skip to content

Full and recent reads

For the complete documentation index see: llms.txt

All documentation pages available in markdown.

On the previous page, you appended 20,000 events to one ADK session, spread across many segment records. The same script then runs a read phase automatically.

Keep the terminal open if infinite-chat-history-demo.py is still running from the previous page.

Review the read phase output

  1. Find the read section in your terminal output:

    After append_event x20000, the script calls get_session three ways on the same session:

    infinite-chat-history-demo.py
    full = await session_service.get_session(
    app_name=APP, user_id=USER, session_id=SID
    )
    print(f"full history: {len(full.events)} events")
    recent5 = await session_service.get_session(
    app_name=APP, user_id=USER, session_id=SID,
    config=GetSessionConfig(num_recent_events=5),
    )
    print(f"num_recent_events=5: {texts5}")
    after = await session_service.get_session(
    app_name=APP, user_id=USER, session_id=SID,
    config=GetSessionConfig(after_timestamp=t0 + 19_990 * 0.001),
    )
    print(f"after_timestamp (last ~10 turns): {len(after.events)} events")
    full history: 20000 events
    first: turn 0 from user: context line for a long-running agent session.
    last: turn 19999 from assistant: context line for a long-running agent session.
    merged state keys: ['app:tenant', 'user:locale', 'step']
    num_recent_events=5: ['turn 19995 from assistant: context line for a long-running agent session. ', 'turn 19996 from user: context line for a long-running agent session. ', 'turn 19997 from assistant: context line for a long-running agent session. ', 'turn 19998 from user: context line for a long-running agent session. ', 'turn 19999 from assistant: context line for a long-running agent session. ']
    after_timestamp (last ~10 turns): 10 events
  2. Confirm the read results:

    Twenty thousand events now span many segment records. The demo called get_session three ways on the same session without appending anything else.

    • full history: 20000 events with correct first and last turn text.
    • Its merged state includes app:tenant, step, and user:locale from the three state scopes.
    • num_recent_events=5 returns five recent event texts without loading the full history.
    • after_timestamp returns about 10 events for the last turns.

Why partial reads matter

The demo called get_session without a config to prove all 20,000 events are stored and ordered correctly. That full read walks every segment record.

For a running agent, you rarely need the full transcript on every turn. GetSessionConfig limits what Aerospike returns:

Read modeWhat you ask for
No configAll 20,000 events
num_recent_events=5Last 5 turns
num_recent_events=50Last 50 turns
num_recent_events=100Last 100 turns
num_recent_events=500Last 500 turns
after_timestampEvents after a cutoff (demo: ~10 for the last turns)

Fetch cost grows with how many events you return, not with total session length. A session can hold millions of turns. Fetching the last five for model context stays fast because Aerospike reads only the relevant segment tail.

In production: use num_recent_events when you only need recent turns for the LLM context window. Use after_timestamp when you need everything after a known point (for example, resuming mid-conversation). Use a full get_session read when the UI needs the complete transcript, or for export and debugging.

On the next page, you inspect how those 20,000 events are distributed across segment records.

Feedback

Was this page helpful?

What type of feedback are you giving?

What would you like us to know?

+Capture screenshot

Can we reach out to you?