@@ -459,6 +459,38 @@ def _require_generation_readiness(data: dict) -> None:
459459 )
460460
461461
462+ def _require_v1_root_endpoints (data : dict ) -> None :
463+ """校验 /v1 能力摘要列出主要外部调用入口,方便客户端和网关自发现。"""
464+ endpoints = data .get ("endpoints" )
465+ _require (isinstance (endpoints , dict ), "/v1 missing endpoints" )
466+ expected = {
467+ "models" : "/v1/models" ,
468+ "chat_completions" : "/v1/chat/completions" ,
469+ "completions" : "/v1/completions" ,
470+ "responses" : "/v1/responses" ,
471+ "images" : "/v1/images/generations" ,
472+ "image_generations" : "/v1/images/generations" ,
473+ "image_edits" : "/v1/images/edits" ,
474+ "image_variations" : "/v1/images/variations" ,
475+ "audio_transcriptions" : "/v1/audio/transcriptions" ,
476+ "audio_translations" : "/v1/audio/translations" ,
477+ "files" : "/v1/files" ,
478+ "generation_readiness" : "/v1/generation-readiness" ,
479+ "media_cooldowns" : "/v1/media-cooldowns" ,
480+ "gemini_generate" : "/v1/gemini/generate" ,
481+ "gemini_stream" : "/v1/gemini/stream" ,
482+ "gemini_media" : "/v1/gemini/media" ,
483+ "gemini_files" : "/v1/gemini/files" ,
484+ "gemini_gems" : "/v1/gemini/gems" ,
485+ "gemini_jobs" : "/v1/gemini/jobs" ,
486+ "gemini_deep_research_plan" : "/v1/gemini/deep-research/plan" ,
487+ "gemini_deep_research_start" : "/v1/gemini/deep-research/start" ,
488+ "gemini_deep_research_wait" : "/v1/gemini/deep-research/wait" ,
489+ }
490+ for name , path in expected .items ():
491+ _require (endpoints .get (name ) == path , f"/v1 endpoints.{ name } mismatch" )
492+
493+
462494def _require_admin_ui (body : str ) -> None :
463495 """校验管理端首页包含关键诊断入口,避免线上部署后页面仍是旧版本。"""
464496 _require ("<title>Gemini API 管理端</title>" in body , "admin UI title is missing" )
@@ -1136,7 +1168,7 @@ def _run_smoke_impl(
11361168 else :
11371169 _require (root_status == 200 , f"/v1 returned { root_status } " )
11381170 _require (root .get ("object" ) == "api.root" , "/v1 did not return api.root" )
1139- _require ( isinstance ( root . get ( "endpoints" ), dict ), "/v1 missing endpoints" )
1171+ _require_v1_root_endpoints ( root )
11401172 _require ("x-request-id" in {key .lower (): value for key , value in root_headers .items ()}, "/v1 response missing X-Request-ID" )
11411173 root_head_status , root_head_body , root_head_headers = _raw_request (
11421174 base_url ,
0 commit comments