Feature request
Problem
v2.4.0 added ttl / expire_time support to VertexAiSessionService.create_session(**kwargs) (commit 49d4441). However, deployments that serve ADK through get_fast_api_app / adk api_server (e.g. a Cloud Run service with a web frontend that manages sessions over the REST endpoints) have no way to set a session TTL at all:
- The REST create-session endpoints do not accept it.
POST /apps/{app_name}/users/{user_id}/sessions/{session_id} accepts only state, and POST /apps/{app_name}/users/{user_id}/sessions accepts only state / session_id / events (cli/api_server.py — create_session_with_id / create_session). Neither forwards ttl/expire_time kwargs to the session service.
- The
--auto_create_session path creates sessions implicitly on /run without any TTL either.
- There is no service-level default to fall back on: the
VertexAiSessionService constructor takes no TTL parameter, get_fast_api_app accepts only a session_service_uri string (so a pre-configured/subclassed service instance cannot be injected), and the agentengine:// URI has no TTL query parameter.
The net effect: REST-surface users cannot adopt the new TTL capability without monkey-patching private internals (the REST handler or the service factory).
Proposed solution
Any of the following (in order of preference — they are complementary):
- Accept optional
ttl / expire_time fields in the REST create-session request bodies and forward them as kwargs to session_service.create_session(...).
- Support a default TTL at service construction — a
VertexAiSessionService constructor kwarg, surfaced through a session_service_uri query parameter (e.g. agentengine://<id>?ttl=7200s) and/or a get_fast_api_app parameter. This would also cover the --auto_create_session path, which has no request body to extend.
Alternatives considered
- Subclassing
VertexAiSessionService with a TTL default and registering it through the service registry (services.py in agents_dir + get_service_registry().register_session_service(...), which create_session_service_from_options consults first): works, but it is per-deployment custom code — a private-ish factory each deployment must maintain and re-verify on every ADK bump. First-class ttl support in the REST body and/or a construction-time default would serve every integration without that custom surface.
- Patching the REST handler: private API, breaks on every upgrade.
- Setting expiration out-of-band via the Agent Engine Sessions API after creation: races with
--auto_create_session and doubles the API surface the client must manage.
Use case
Production agent on Cloud Run (get_fast_api_app + session_service_uri="agentengine://<id>"), with a browser frontend that creates/loads sessions exclusively through the ADK REST endpoints. We want cost/privacy hygiene: sessions that auto-expire after a retention window instead of accumulating indefinitely in Agent Engine.
Related
#4594 tracks the same gap on the AdkApp.async_create_session remote surface (Vertex AI SDK proxy path). This issue covers the api_server/get_fast_api_app REST surface — together they would make the v2.4.0 TTL capability reachable from every documented integration path.
Environment
- google-adk: 2.4.0
- Python: 3.12
Feature request
Problem
v2.4.0 added
ttl/expire_timesupport toVertexAiSessionService.create_session(**kwargs)(commit 49d4441). However, deployments that serve ADK throughget_fast_api_app/adk api_server(e.g. a Cloud Run service with a web frontend that manages sessions over the REST endpoints) have no way to set a session TTL at all:POST /apps/{app_name}/users/{user_id}/sessions/{session_id}accepts onlystate, andPOST /apps/{app_name}/users/{user_id}/sessionsaccepts onlystate/session_id/events(cli/api_server.py—create_session_with_id/create_session). Neither forwardsttl/expire_timekwargs to the session service.--auto_create_sessionpath creates sessions implicitly on/runwithout any TTL either.VertexAiSessionServiceconstructor takes no TTL parameter,get_fast_api_appaccepts only asession_service_uristring (so a pre-configured/subclassed service instance cannot be injected), and theagentengine://URI has no TTL query parameter.The net effect: REST-surface users cannot adopt the new TTL capability without monkey-patching private internals (the REST handler or the service factory).
Proposed solution
Any of the following (in order of preference — they are complementary):
ttl/expire_timefields in the REST create-session request bodies and forward them as kwargs tosession_service.create_session(...).VertexAiSessionServiceconstructor kwarg, surfaced through asession_service_uriquery parameter (e.g.agentengine://<id>?ttl=7200s) and/or aget_fast_api_appparameter. This would also cover the--auto_create_sessionpath, which has no request body to extend.Alternatives considered
VertexAiSessionServicewith a TTL default and registering it through the service registry (services.pyinagents_dir+get_service_registry().register_session_service(...), whichcreate_session_service_from_optionsconsults first): works, but it is per-deployment custom code — a private-ish factory each deployment must maintain and re-verify on every ADK bump. First-classttlsupport in the REST body and/or a construction-time default would serve every integration without that custom surface.--auto_create_sessionand doubles the API surface the client must manage.Use case
Production agent on Cloud Run (
get_fast_api_app+session_service_uri="agentengine://<id>"), with a browser frontend that creates/loads sessions exclusively through the ADK REST endpoints. We want cost/privacy hygiene: sessions that auto-expire after a retention window instead of accumulating indefinitely in Agent Engine.Related
#4594 tracks the same gap on the
AdkApp.async_create_sessionremote surface (Vertex AI SDK proxy path). This issue covers theapi_server/get_fast_api_appREST surface — together they would make the v2.4.0 TTL capability reachable from every documented integration path.Environment