Skip to content

Commit cb3b76f

Browse files
committed
feat(cli): add --auto_create_session flag to api_server command
1 parent 65cbf4b commit cb3b76f

3 files changed

Lines changed: 100 additions & 0 deletions

File tree

src/google/adk/cli/adk_web_server.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,7 @@ def __init__(
492492
logo_text: Optional[str] = None,
493493
logo_image_url: Optional[str] = None,
494494
url_prefix: Optional[str] = None,
495+
auto_create_session: bool = False,
495496
):
496497
self.agent_loader = agent_loader
497498
self.session_service = session_service
@@ -509,6 +510,7 @@ def __init__(
509510
self.current_app_name_ref: SharedValue[str] = SharedValue(value="")
510511
self.runner_dict = {}
511512
self.url_prefix = url_prefix
513+
self.auto_create_session = auto_create_session
512514

513515
async def get_runner_async(self, app_name: str) -> Runner:
514516
"""Returns the cached runner for the given app."""
@@ -558,6 +560,7 @@ def _create_runner(self, agentic_app: App) -> Runner:
558560
session_service=self.session_service,
559561
memory_service=self.memory_service,
560562
credential_service=self.credential_service,
563+
auto_create_session=self.auto_create_session,
561564
)
562565

563566
def _instantiate_extra_plugins(self) -> list[BasePlugin]:
@@ -946,6 +949,27 @@ async def create_eval_set(
946949
detail=str(ve),
947950
) from ve
948951

952+
@deprecated(
953+
"Please use create_eval_set instead. This will be removed in future"
954+
" releases."
955+
)
956+
@app.post(
957+
"/apps/{app_name}/eval_sets/{eval_set_id}",
958+
response_model_exclude_none=True,
959+
tags=[TAG_EVALUATION],
960+
)
961+
async def create_eval_set_legacy(
962+
app_name: str,
963+
eval_set_id: str,
964+
):
965+
"""Creates an eval set, given the id."""
966+
await create_eval_set(
967+
app_name=app_name,
968+
create_eval_set_request=CreateEvalSetRequest(
969+
eval_set=EvalSet(eval_set_id=eval_set_id, eval_cases=[])
970+
),
971+
)
972+
949973
@app.get(
950974
"/apps/{app_name}/eval-sets",
951975
response_model_exclude_none=True,
@@ -961,6 +985,19 @@ async def list_eval_sets(app_name: str) -> ListEvalSetsResponse:
961985

962986
return ListEvalSetsResponse(eval_set_ids=eval_sets)
963987

988+
@deprecated(
989+
"Please use list_eval_sets instead. This will be removed in future"
990+
" releases."
991+
)
992+
@app.get(
993+
"/apps/{app_name}/eval_sets",
994+
response_model_exclude_none=True,
995+
tags=[TAG_EVALUATION],
996+
)
997+
async def list_eval_sets_legacy(app_name: str) -> list[str]:
998+
list_eval_sets_response = await list_eval_sets(app_name)
999+
return list_eval_sets_response.eval_set_ids
1000+
9641001
@app.post(
9651002
"/apps/{app_name}/eval-sets/{eval_set_id}/add-session",
9661003
response_model_exclude_none=True,
@@ -1108,6 +1145,22 @@ async def delete_eval(
11081145
except NotFoundError as nfe:
11091146
raise HTTPException(status_code=404, detail=str(nfe)) from nfe
11101147

1148+
@deprecated(
1149+
"Please use run_eval instead. This will be removed in future releases."
1150+
)
1151+
@app.post(
1152+
"/apps/{app_name}/eval_sets/{eval_set_id}/run_eval",
1153+
response_model_exclude_none=True,
1154+
tags=[TAG_EVALUATION],
1155+
)
1156+
async def run_eval_legacy(
1157+
app_name: str, eval_set_id: str, req: RunEvalRequest
1158+
) -> list[RunEvalResult]:
1159+
run_eval_response = await run_eval(
1160+
app_name=app_name, eval_set_id=eval_set_id, req=req
1161+
)
1162+
return run_eval_response.run_eval_results
1163+
11111164
@app.post(
11121165
"/apps/{app_name}/eval-sets/{eval_set_id}/run",
11131166
response_model_exclude_none=True,
@@ -1201,6 +1254,28 @@ async def get_eval_result(
12011254
except ValidationError as ve:
12021255
raise HTTPException(status_code=500, detail=str(ve)) from ve
12031256

1257+
@deprecated(
1258+
"Please use get_eval_result instead. This will be removed in future"
1259+
" releases."
1260+
)
1261+
@app.get(
1262+
"/apps/{app_name}/eval_results/{eval_result_id}",
1263+
response_model_exclude_none=True,
1264+
tags=[TAG_EVALUATION],
1265+
)
1266+
async def get_eval_result_legacy(
1267+
app_name: str,
1268+
eval_result_id: str,
1269+
) -> EvalSetResult:
1270+
try:
1271+
return self.eval_set_results_manager.get_eval_set_result(
1272+
app_name, eval_result_id
1273+
)
1274+
except ValueError as ve:
1275+
raise HTTPException(status_code=404, detail=str(ve)) from ve
1276+
except ValidationError as ve:
1277+
raise HTTPException(status_code=500, detail=str(ve)) from ve
1278+
12041279
@app.get(
12051280
"/apps/{app_name}/eval-results",
12061281
response_model_exclude_none=True,
@@ -1213,6 +1288,19 @@ async def list_eval_results(app_name: str) -> ListEvalResultsResponse:
12131288
)
12141289
return ListEvalResultsResponse(eval_result_ids=eval_result_ids)
12151290

1291+
@deprecated(
1292+
"Please use list_eval_results instead. This will be removed in future"
1293+
" releases."
1294+
)
1295+
@app.get(
1296+
"/apps/{app_name}/eval_results",
1297+
response_model_exclude_none=True,
1298+
tags=[TAG_EVALUATION],
1299+
)
1300+
async def list_eval_results_legacy(app_name: str) -> list[str]:
1301+
list_eval_results_response = await list_eval_results(app_name)
1302+
return list_eval_results_response.eval_result_ids
1303+
12161304
@app.get(
12171305
"/apps/{app_name}/metrics-info",
12181306
response_model_exclude_none=True,

src/google/adk/cli/cli_tools_click.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1378,6 +1378,14 @@ async def _lifespan(app: FastAPI):
13781378
@fast_api_common_options()
13791379
@adk_services_options(default_use_local_storage=True)
13801380
@deprecated_adk_services_options()
1381+
@click.option(
1382+
"--auto_create_session",
1383+
is_flag=True,
1384+
default=False,
1385+
help=(
1386+
"Automatically create a session if it doesn't exist when calling /run."
1387+
),
1388+
)
13811389
def cli_api_server(
13821390
agents_dir: str,
13831391
eval_storage_uri: Optional[str] = None,
@@ -1398,6 +1406,7 @@ def cli_api_server(
13981406
a2a: bool = False,
13991407
reload_agents: bool = False,
14001408
extra_plugins: Optional[list[str]] = None,
1409+
auto_create_session: bool = False,
14011410
):
14021411
"""Starts a FastAPI server for agents.
14031412
@@ -1430,6 +1439,7 @@ def cli_api_server(
14301439
url_prefix=url_prefix,
14311440
reload_agents=reload_agents,
14321441
extra_plugins=extra_plugins,
1442+
auto_create_session=auto_create_session,
14331443
),
14341444
host=host,
14351445
port=port,

src/google/adk/cli/fast_api.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ def get_fast_api_app(
9191
extra_plugins: Optional[list[str]] = None,
9292
logo_text: Optional[str] = None,
9393
logo_image_url: Optional[str] = None,
94+
auto_create_session: bool = False,
9495
) -> FastAPI:
9596

9697
# Set up eval managers.
@@ -153,6 +154,7 @@ def get_fast_api_app(
153154
logo_text=logo_text,
154155
logo_image_url=logo_image_url,
155156
url_prefix=url_prefix,
157+
auto_create_session=auto_create_session,
156158
)
157159

158160
# Callbacks & other optional args for when constructing the FastAPI instance

0 commit comments

Comments
 (0)