3030from google .genai .errors import ClientError
3131from typing_extensions import override
3232
33- from ..utils ._client_labels_utils import get_client_labels
33+ from ..utils ._google_client_headers import get_tracking_headers
34+ from ..utils ._google_client_headers import merge_tracking_headers
3435from ..utils .context_utils import Aclosing
3536from ..utils .streaming_utils import StreamingResponseAggregator
3637from ..utils .variant_utils import GoogleLLMVariant
@@ -191,7 +192,7 @@ async def generate_content_async(
191192 if llm_request .config :
192193 if not llm_request .config .http_options :
193194 llm_request .config .http_options = types .HttpOptions ()
194- llm_request .config .http_options .headers = self . _merge_tracking_headers (
195+ llm_request .config .http_options .headers = merge_tracking_headers (
195196 llm_request .config .http_options .headers
196197 )
197198
@@ -302,7 +303,7 @@ def api_client(self) -> Client:
302303
303304 return Client (
304305 http_options = types .HttpOptions (
305- headers = self . _tracking_headers (),
306+ headers = get_tracking_headers (),
306307 retry_options = self .retry_options ,
307308 )
308309 )
@@ -315,15 +316,6 @@ def _api_backend(self) -> GoogleLLMVariant:
315316 else GoogleLLMVariant .GEMINI_API
316317 )
317318
318- def _tracking_headers (self ) -> dict [str , str ]:
319- labels = get_client_labels ()
320- header_value = ' ' .join (labels )
321- tracking_headers = {
322- 'x-goog-api-client' : header_value ,
323- 'user-agent' : header_value ,
324- }
325- return tracking_headers
326-
327319 @cached_property
328320 def _live_api_version (self ) -> str :
329321 if self ._api_backend == GoogleLLMVariant .VERTEX_AI :
@@ -339,7 +331,7 @@ def _live_api_client(self) -> Client:
339331
340332 return Client (
341333 http_options = types .HttpOptions (
342- headers = self . _tracking_headers (), api_version = self ._live_api_version
334+ headers = get_tracking_headers (), api_version = self ._live_api_version
343335 )
344336 )
345337
@@ -362,8 +354,10 @@ async def connect(self, llm_request: LlmRequest) -> BaseLlmConnection:
362354 ):
363355 if not llm_request .live_connect_config .http_options .headers :
364356 llm_request .live_connect_config .http_options .headers = {}
365- llm_request .live_connect_config .http_options .headers .update (
366- self ._tracking_headers ()
357+ llm_request .live_connect_config .http_options .headers = (
358+ merge_tracking_headers (
359+ llm_request .live_connect_config .http_options .headers
360+ )
367361 )
368362 llm_request .live_connect_config .http_options .api_version = (
369363 self ._live_api_version
@@ -447,23 +441,6 @@ async def _preprocess_request(self, llm_request: LlmRequest) -> None:
447441 llm_request .config .system_instruction = None
448442 await self ._adapt_computer_use_tool (llm_request )
449443
450- def _merge_tracking_headers (self , headers : dict [str , str ]) -> dict [str , str ]:
451- """Merge tracking headers to the given headers."""
452- headers = headers or {}
453- for key , tracking_header_value in self ._tracking_headers ().items ():
454- custom_value = headers .get (key , None )
455- if not custom_value :
456- headers [key ] = tracking_header_value
457- continue
458-
459- # Merge tracking headers with existing headers and avoid duplicates.
460- value_parts = tracking_header_value .split (' ' )
461- for custom_value_part in custom_value .split (' ' ):
462- if custom_value_part not in value_parts :
463- value_parts .append (custom_value_part )
464- headers [key ] = ' ' .join (value_parts )
465- return headers
466-
467444
468445def _build_function_declaration_log (
469446 func_decl : types .FunctionDeclaration ,
0 commit comments