5050)
5151
5252
53- def _apply_feature_overrides (enable_features : tuple [str , ...]) -> None :
53+ def _apply_feature_overrides (
54+ * ,
55+ enable_features : tuple [str , ...] = (),
56+ disable_features : tuple [str , ...] = (),
57+ ) -> None :
5458 """Apply feature overrides from CLI flags.
5559
5660 Args:
5761 enable_features: Tuple of feature names to enable.
62+ disable_features: Tuple of feature names to disable.
5863 """
64+ feature_overrides : dict [str , bool ] = {}
65+
5966 for features_str in enable_features :
6067 for feature_name_str in features_str .split ("," ):
6168 feature_name_str = feature_name_str .strip ()
62- if not feature_name_str :
63- continue
64- try :
65- feature_name = FeatureName (feature_name_str )
66- override_feature_enabled (feature_name , True )
67- except ValueError :
68- valid_names = ", " .join (f .value for f in FeatureName )
69- click .secho (
70- f"WARNING: Unknown feature name '{ feature_name_str } '. "
71- f"Valid names are: { valid_names } " ,
72- fg = "yellow" ,
73- err = True ,
74- )
69+ if feature_name_str :
70+ feature_overrides [feature_name_str ] = True
71+
72+ for features_str in disable_features :
73+ for feature_name_str in features_str .split ("," ):
74+ feature_name_str = feature_name_str .strip ()
75+ if feature_name_str :
76+ feature_overrides [feature_name_str ] = False
77+
78+ # Apply all overrides
79+ for feature_name_str , enabled in feature_overrides .items ():
80+ try :
81+ feature_name = FeatureName (feature_name_str )
82+ override_feature_enabled (feature_name , enabled )
83+ except ValueError :
84+ valid_names = ", " .join (f .value for f in FeatureName )
85+ click .secho (
86+ f"WARNING: Unknown feature name '{ feature_name_str } '. "
87+ f"Valid names are: { valid_names } " ,
88+ fg = "yellow" ,
89+ err = True ,
90+ )
7591
7692
7793def feature_options ():
@@ -88,11 +104,25 @@ def decorator(func):
88104 ),
89105 multiple = True ,
90106 )
107+ @click .option (
108+ "--disable_features" ,
109+ help = (
110+ "Optional. Comma-separated list of feature names to disable. "
111+ "This provides an alternative to environment variables for "
112+ "disabling features. Example: "
113+ "--disable_features=JSON_SCHEMA_FOR_FUNC_DECL,PROGRESSIVE_SSE_STREAMING"
114+ ),
115+ multiple = True ,
116+ )
91117 @functools .wraps (func )
92118 def wrapper (* args , ** kwargs ):
93119 enable_features = kwargs .pop ("enable_features" , ())
94- if enable_features :
95- _apply_feature_overrides (enable_features )
120+ disable_features = kwargs .pop ("disable_features" , ())
121+ if enable_features or disable_features :
122+ _apply_feature_overrides (
123+ enable_features = enable_features ,
124+ disable_features = disable_features ,
125+ )
96126 return func (* args , ** kwargs )
97127
98128 return wrapper
@@ -1751,6 +1781,14 @@ def cli_migrate_session(
17511781 default = None ,
17521782 help = "Optional. Whether to enable Cloud Trace for Agent Engine." ,
17531783)
1784+ @click .option (
1785+ "--otel_to_cloud" ,
1786+ type = bool ,
1787+ is_flag = True ,
1788+ show_default = True ,
1789+ default = None ,
1790+ help = "Optional. Whether to enable OpenTelemetry for Agent Engine." ,
1791+ )
17541792@click .option (
17551793 "--display_name" ,
17561794 type = str ,
@@ -1842,6 +1880,7 @@ def cli_deploy_agent_engine(
18421880 staging_bucket : Optional [str ],
18431881 agent_engine_id : Optional [str ],
18441882 trace_to_cloud : Optional [bool ],
1883+ otel_to_cloud : Optional [bool ],
18451884 api_key : Optional [str ],
18461885 display_name : str ,
18471886 description : str ,
@@ -1872,6 +1911,7 @@ def cli_deploy_agent_engine(
18721911 region = region ,
18731912 agent_engine_id = agent_engine_id ,
18741913 trace_to_cloud = trace_to_cloud ,
1914+ otel_to_cloud = otel_to_cloud ,
18751915 api_key = api_key ,
18761916 adk_app_object = adk_app_object ,
18771917 display_name = display_name ,
0 commit comments