@@ -945,7 +945,9 @@ class Model(BaseModel):
945945 ],
946946 )
947947 @mock .patch ("time.time" , mock .MagicMock (return_value = 1696004797 ))
948- def test_parse_retry_after_header (self , remaining_retries : int , retry_after : str , timeout : float ) -> None :
948+ def test_parse_retry_after_header (
949+ self , remaining_retries : int , retry_after : str , timeout : float
950+ ) -> None :
949951 client = Gradient (
950952 base_url = base_url ,
951953 access_token = access_token ,
@@ -956,7 +958,9 @@ def test_parse_retry_after_header(self, remaining_retries: int, retry_after: str
956958
957959 headers = httpx .Headers ({"retry-after" : retry_after })
958960 options = FinalRequestOptions (method = "get" , url = "/foo" , max_retries = 3 )
959- calculated = client ._calculate_retry_timeout (remaining_retries , options , headers )
961+ calculated = client ._calculate_retry_timeout (
962+ remaining_retries , options , headers
963+ )
960964 assert calculated == pytest .approx (timeout , rel = 0.5 * 0.875 ) # type: ignore[misc]
961965
962966 @mock .patch (
@@ -1180,6 +1184,40 @@ def test_follow_redirects_disabled(
11801184 assert exc_info .value .response .status_code == 302
11811185 assert exc_info .value .response .headers ["Location" ] == f"{ base_url } /redirected"
11821186
1187+ def test_user_agent_includes_adk_agent_when_env_var_set (self ) -> None :
1188+ # Test that user agent includes GRADIENT_ADK_AGENT when AGENT_WORKSPACE_DEPLOYMENT_UUID is set
1189+ test_uuid = "test-deployment-uuid-12345"
1190+
1191+ with update_env (AGENT_WORKSPACE_DEPLOYMENT_UUID = test_uuid ):
1192+ client = Gradient (
1193+ base_url = base_url ,
1194+ access_token = access_token ,
1195+ model_access_key = model_access_key ,
1196+ agent_access_key = agent_access_key ,
1197+ _strict_response_validation = True ,
1198+ )
1199+ user_agent = client .user_agent
1200+ assert "GRADIENT_ADK_AGENT" in user_agent
1201+ assert test_uuid in user_agent
1202+ assert user_agent .endswith (f"/GRADIENT_ADK_AGENT/{ test_uuid } " )
1203+ client .close ()
1204+
1205+ def test_user_agent_excludes_adk_agent_when_env_var_not_set (self ) -> None :
1206+ # Test that user agent does not include GRADIENT_ADK_AGENT when env var is not set
1207+ from gradient ._types import Omit
1208+
1209+ with update_env (AGENT_WORKSPACE_DEPLOYMENT_UUID = Omit ()):
1210+ client = Gradient (
1211+ base_url = base_url ,
1212+ access_token = access_token ,
1213+ model_access_key = model_access_key ,
1214+ agent_access_key = agent_access_key ,
1215+ _strict_response_validation = True ,
1216+ )
1217+ user_agent = client .user_agent
1218+ assert "GRADIENT_ADK_AGENT" not in user_agent
1219+ client .close ()
1220+
11831221
11841222class TestAsyncGradient :
11851223 @pytest .mark .respx (base_url = base_url )
@@ -2081,7 +2119,9 @@ class Model(BaseModel):
20812119 )
20822120 @mock .patch ("time.time" , mock .MagicMock (return_value = 1696004797 ))
20832121 @pytest .mark .asyncio
2084- async def test_parse_retry_after_header (self , remaining_retries : int , retry_after : str , timeout : float ) -> None :
2122+ async def test_parse_retry_after_header (
2123+ self , remaining_retries : int , retry_after : str , timeout : float
2124+ ) -> None :
20852125 async_client = AsyncGradient (
20862126 base_url = base_url ,
20872127 access_token = access_token ,
@@ -2092,7 +2132,9 @@ async def test_parse_retry_after_header(self, remaining_retries: int, retry_afte
20922132
20932133 headers = httpx .Headers ({"retry-after" : retry_after })
20942134 options = FinalRequestOptions (method = "get" , url = "/foo" , max_retries = 3 )
2095- calculated = async_client ._calculate_retry_timeout (remaining_retries , options , headers )
2135+ calculated = async_client ._calculate_retry_timeout (
2136+ remaining_retries , options , headers
2137+ )
20962138 assert calculated == pytest .approx (timeout , rel = 0.5 * 0.875 ) # type: ignore[misc]
20972139
20982140 @mock .patch (
0 commit comments