Ë
    uPêj€7  ã                   óÔ   — d Z ddlmZmZmZ ddlZddlZddlmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZmZ dd	lmZmZmZmZmZmZ dd
lmZ ddlmZ er	ddlmZ eZ neZ  G d„ de«      Z!y)a‡  
Google AI Studio Interactions API configuration.

Per OpenAPI spec (https://ai.google.dev/static/api/interactions.openapi.json):
- Create: POST https://generativelanguage.googleapis.com/{api_version}/interactions
- Get: GET https://generativelanguage.googleapis.com/{api_version}/interactions/{interaction_id}
- Delete: DELETE https://generativelanguage.googleapis.com/{api_version}/interactions/{interaction_id}

Schema versioning:
- Default (Api-Revision: 2026-05-20): new `steps` schema.
- Legacy (Api-Revision: 2026-05-07): old `outputs` schema, controlled via
  litellm.use_legacy_interactions_schema = True. Remove flag after June 8, 2026.
é    )ÚTYPE_CHECKINGÚAnyÚFinalN)Úverbose_logger)Úprocess_response_headers)Úencode_url_path_segment)ÚBaseInteractionsAPIConfig)ÚGeminiErrorÚGeminiModelInfo)ÚCancelInteractionResultÚDeleteInteractionResultÚInteractionInputÚ$InteractionsAPIOptionalRequestParamsÚInteractionsAPIResponseÚ InteractionsAPIStreamingResponse)ÚGenericLiteLLMParams)ÚLlmProviders)ÚLoggingc                   ó*  — e Zd ZdZedefd„«       Zedefd„«       Zdede	e   fd„Z
dededed	z  defd
„Z	 	 	 dded	z  ded	z  ded	z  ded	z  ded	z  defd„Zded	z  ded	z  ded	z  dedededefd„Zded	z  dej(                  dedefd„Zded	z  dededefd„Zdededededeeef   f
d„Zdej(                  dedefd„Zdededededeeef   f
d„Zdej(                  dededefd„Zdededededeeef   f
d„Z dej(                  dede!fd„Z"y	)Ú GoogleAIStudioInteractionsConfigz�
    Configuration for Google AI Studio Interactions API.

    Minimal config - we follow the OpenAPI spec directly with no transformation.
    Úreturnc                 ó"   — t         j                  S )N)r   ÚGEMINI©Úselfs    út/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/gemini/interactions/transformation.pyÚcustom_llm_providerz4GoogleAIStudioInteractionsConfig.custom_llm_provider3   s   € ä×"Ñ"Ð"ó    c                  ó   — y)NÚv1beta© r   s    r   Úapi_versionz,GoogleAIStudioInteractionsConfig.api_version7   s   € àr   Úmodelc                 ó
   — g d¢S )z.Per OpenAPI spec CreateModelInteractionParams.)r#   ÚagentÚinputÚtoolsÚsystem_instructionÚgeneration_configÚstreamÚstoreÚ
backgroundÚenvironmentÚresponse_modalitiesÚresponse_formatÚresponse_mime_typeÚprevious_interaction_idr!   )r   r#   s     r   Úget_supported_paramsz5GoogleAIStudioInteractionsConfig.get_supported_params;   s   € ò
ð 	
r   ÚheadersÚlitellm_paramsNc                 ó®   — |xs i }d|d<   |r+t        j                  |j                  d«      «      }|r||d<   t        j                  rd|d<   |S d|d<   |S )z?Google AI Studio uses x-goog-api-key header for authentication.zapplication/jsonzContent-TypeÚapi_keyzx-goog-api-keyz
2026-05-07zApi-Revisionz
2026-05-20)r   Úget_api_keyÚgetÚlitellmÚuse_legacy_interactions_schema)r   r3   r#   r4   r6   s        r   Úvalidate_environmentz5GoogleAIStudioInteractionsConfig.validate_environmentN   sp   € ð ’-˜RˆØ"4ˆ�ÑÙÜ,×8Ñ8¸×9KÑ9KÈIÓ9VÓWˆGÙØ,3�Ð(Ñ)ô
 ×1Ò1Ø&2ˆG�NÑ#ð ˆð '3ˆG�NÑ#àˆr   Úapi_baser%   r*   c                 óæ   — |xs i }t        j                  |«      }t        j                  |j                  d«      «      }|st	        d«      ‚|r|› d| j
                  › d�S |› d| j
                  › d�S )z POST /{api_version}/interactionsr6   zVGoogle API key is required. Set GOOGLE_API_KEY or GEMINI_API_KEY environment variable.ú/z/interactions?alt=ssez/interactions)r   Úget_api_baser7   r8   Ú
ValueErrorr"   )r   r<   r#   r%   r4   r*   r6   s          r   Úget_complete_urlz1GoogleAIStudioInteractionsConfig.get_complete_urlf   s€   € ð (Ò-¨2ˆÜ"×/Ñ/°Ó9ˆÜ(×4Ñ4°^×5GÑ5GÈ	Ó5RÓSˆáÜÐuÓvÐváØ�Z˜q ×!1Ñ!1Ð 2Ð2GÐHÐHà�˜1˜T×-Ñ-Ð.¨mÐ<Ð<r   r&   Úoptional_paramsc                 ó  — t         j                  }i }|rt        j                  |«      xs ||d<   n|r||d<   nt	        d«      ‚|�||d<   g d¢}	|	D ]  }
|j                  |
«      €Œ||
   ||
<   Œ |r#dD ]  }
|j                  |
«      €Œ||
   ||
<   Œ |S |j                  d«      }|j                  d	«      }|r2t        |t        «      s"t        |t        «      rd
|vrd|dœ}|�||d<   |}|�||d<   |j                  d«      }|�~d}t        |t        «      r!t        |«      }|j                  dd«      }|sd}|�||d<   |�Bddi|¥}|j                  d«      }|€||d<   |S t        |t        «      rg |¢|‘|d<   |S ||g|d<   |S )aI  
        Build request body per OpenAPI spec.

        When on the new schema (use_legacy_interactions_schema=False, the default):
        - ``response_mime_type`` is folded into ``response_format`` and stripped from
          the body (the field was removed in Api-Revision 2026-05-20).
        - ``generation_config.image_config`` is moved to a ``response_format`` entry
          with ``"type": "image"`` (also removed from generation_config in 2026-05-20).

        When on the legacy schema (use_legacy_interactions_schema=True):
        - All fields are forwarded as-is.
        r#   r%   z*Either 'model' or 'agent' must be providedNr&   )r'   r(   r*   r+   r,   r-   r.   r1   )r/   r0   r)   r/   r0   Ú	mime_typeÚtext)ÚtyperD   Úschemar)   Úimage_configrF   Úimage)
r9   r:   r   Úget_base_modelr@   r8   Ú
isinstanceÚlistÚdictÚpop)r   r#   r%   r&   rB   r4   r3   Ú
use_legacyÚrequest_bodyÚoptional_keysÚkeyr/   r0   Únew_rfr)   rH   Úimage_rfÚexisting_rfs                     r   Útransform_requestz2GoogleAIStudioInteractionsConfig.transform_request{   s5  € ô* #*×"HÑ"Hˆ
à.0ˆñ Ü$3×$BÑ$BÀ5Ó$IÒ$RÈUˆL˜Ò!ÙØ$)ˆL˜Ò!äÐIÓJÐJð ÐØ$)ˆL˜Ñ!ò	 
ˆð !ò 	9ˆCØ×"Ñ" 3Ó'Ñ3Ø$3°CÑ$8�˜SÒ!ð	9ñ àUò =�Ø"×&Ñ& sÓ+Ñ7Ø(7¸Ñ(<�L Ò%ð=ðf Ðð[ .×1Ñ1Ð2CÓDˆOØ(7×(;Ñ(;Ð<PÓ(QÐñ #Ü" ?´DÔ9Ü# O´TÔ:¸kÐQ`Ñ>`ð #Ø!3ñ1�ð #Ð.Ø'6�F˜8Ñ$Ø"(�àÐ*Ø2A�Ð.Ñ/ð 8G×7JÑ7JÐK^Ó7_ÐØ Ð,Ø#�ÜÐ/´Ô6Ü(,Ð->Ó(?Ð%Ø#4×#8Ñ#8¸ÈÓ#N�LÙ,Ø,0Ð)à$Ð0Ø8I�LÐ!4Ñ5àÐ+à7=¸wÐ6WÈ,Ð6W�HØ)5×)9Ñ)9Ð:KÓ)L�KØ"Ð*Ø:B˜Ð%6Ñ7ð Ðô $ K´Ô6Ø:R¸KÐ:RÈÐ:R˜Ð%6Ñ7ð
 Ðð <GÈÐ:Q˜Ð%6Ñ7àÐr   Úraw_responseÚlogging_objc                 óÆ  — 	 |j                  |j                  di i¬«       |j                  «       }t        j                  d|«       t        di |¤Ž}t        |j                  «      |j                  d<   t        t        |j                  «      «      |j                  d<   |S # t        $ r6 t	        |j                  |j
                  t        |j                  «      ¬«      ‚w xY w)z6Parse response - it already matches our response type.Úcomplete_input_dict)Úoriginal_responseÚadditional_args©ÚmessageÚstatus_coder3   z#Google AI Interactions response: %sr3   Úadditional_headersr!   )Ú	post_callrE   ÚjsonÚ	Exceptionr
   r_   rM   r3   r   Údebugr   Ú_hidden_paramsr   )r   r#   rW   rX   Úraw_jsonÚresponses         r   Útransform_responsez3GoogleAIStudioInteractionsConfig.transform_responseæ   sÜ   € ð	Ø×!Ñ!Ø".×"3Ñ"3Ø!6¸Ð ;ð "ô ð +×/Ñ/Ó1ˆHô 	×ÑÐBÀHÔMä1Ñ=°HÑ=ˆÜ-1°,×2FÑ2FÓ-Gˆ×Ñ 	Ñ*Ü8PÔQUÐVb×VjÑVjÓQkÓ8lˆ×ÑÐ 4Ñ5àˆøô ò 	ÜØ$×)Ñ)Ø(×4Ñ4Ü˜\×1Ñ1Ó2ôð ð	ús   ‚/B! Â!?C Úparsed_chunkc                 óD   — t        j                  d|«       t        di |¤ŽS )zParse streaming chunk.z*Google AI Interactions streaming chunk: %sr!   )r   rd   r   )r   r#   ri   rX   s       r   Útransform_streaming_responsez=GoogleAIStudioInteractionsConfig.transform_streaming_response  s#   € ô 	×ÑÐIÈ<ÔXÜ/Ñ?°,Ñ?Ð?r   Úinteraction_idc                 óÆ   — t        j                  |«      }t        j                  |j                  «      st	        d«      ‚t        |d¬«      }|› d| j                  › d|› �i fS )z0GET /{api_version}/interactions/{interaction_id}úGoogle API key is requiredrl   ©Ú
field_namer>   ú/interactions/©r   r?   r7   r6   r@   r   r"   ©r   rl   r<   r4   r3   Úresolved_api_baseÚencoded_interaction_ids          r   Ú!transform_get_interaction_requestzBGoogleAIStudioInteractionsConfig.transform_get_interaction_request  ón   € ô $3×#?Ñ#?ÀÓ#IÐÜ×*Ñ*¨>×+AÑ+AÔBÜÐ9Ó:Ð:Ü(?ÀÐ[kÔ(lÐà Ð!  4×#3Ñ#3Ð"4°NÐCYÐBZÐ[Øð
ð 	
r   c                 ó  — 	 |j                  «       }t        di |¤Ž}t        |j                  «      |j                  d<   |S # t        $ r6 t        |j                  |j                  t        |j                  «      ¬«      ‚w xY w)Nr]   r3   r!   )	rb   rc   r
   rE   r_   rM   r3   r   re   )r   rW   rX   rf   rg   s        r   Ú"transform_get_interaction_responsezCGoogleAIStudioInteractionsConfig.transform_get_interaction_response  s‚   € ð
	Ø*×/Ñ/Ó1ˆHô 2Ñ=°HÑ=ˆÜ-1°,×2FÑ2FÓ-Gˆ×Ñ 	Ñ*Øˆøô ò 	ÜØ$×)Ñ)Ø(×4Ñ4Ü˜\×1Ñ1Ó2ôð ð	ús   ‚A Á?B c                 óÆ   — t        j                  |«      }t        j                  |j                  «      st	        d«      ‚t        |d¬«      }|› d| j                  › d|› �i fS )z3DELETE /{api_version}/interactions/{interaction_id}rn   rl   ro   r>   rq   rr   rs   s          r   Ú$transform_delete_interaction_requestzEGoogleAIStudioInteractionsConfig.transform_delete_interaction_request0  rw   r   c                 ó¶   — d|j                   cxk  rdk  rn nt        d|¬«      S t        |j                  |j                   t	        |j
                  «      ¬«      ‚)NéÈ   i,  T)ÚsuccessÚidr]   )r_   r   r
   rE   rM   r3   )r   rW   rX   rl   s       r   Ú%transform_delete_interaction_responsezFGoogleAIStudioInteractionsConfig.transform_delete_interaction_responseA  sQ   € ð �,×*Ñ*Ô0¨SÕ0Ü*°4¸NÔKÐKÜØ ×%Ñ%Ø$×0Ñ0Ü˜×-Ñ-Ó.ô
ð 	
r   c                 óÈ   — t        j                  |«      }t        j                  |j                  «      st	        d«      ‚t        |d¬«      }|› d| j                  › d|› d�i fS )zGPOST /{api_version}/interactions/{interaction_id}:cancel (if supported)rn   rl   ro   r>   rq   z:cancelrr   rs   s          r   Ú$transform_cancel_interaction_requestzEGoogleAIStudioInteractionsConfig.transform_cancel_interaction_requestO  sq   € ô $3×#?Ñ#?ÀÓ#IÐÜ×*Ñ*¨>×+AÑ+AÔBÜÐ9Ó:Ð:Ü(?ÀÐ[kÔ(lÐà Ð!  4×#3Ñ#3Ð"4°NÐCYÐBZÐZaÐbØð
ð 	
r   c                 ó¾   — 	 |j                  «       }t        di |¤ŽS # t        $ r6 t        |j                  |j                  t        |j                  «      ¬«      ‚w xY w)Nr]   r!   )rb   rc   r
   rE   r_   rM   r3   r   )r   rW   rX   rf   s       r   Ú%transform_cancel_interaction_responsezFGoogleAIStudioInteractionsConfig.transform_cancel_interaction_response`  sc   € ð
	Ø*×/Ñ/Ó1ˆHô 'Ñ2¨Ñ2Ð2øô ò 	ÜØ$×)Ñ)Ø(×4Ñ4Ü˜\×1Ñ1Ó2ôð ð	ús	   ‚ �?A)NNN)#Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r   Ústrr"   rL   r2   rM   r   r;   ÚboolrA   r   r   rV   ÚhttpxÚResponseÚLiteLLMLoggingObjr   rh   r   rk   Útuplerv   ry   r{   r   r€   r‚   r   r„   r!   r   r   r   r   ,   sÛ  „ ñð ð# \ò #ó ð#ð ð˜Sò ó ðð
¨#ð 
°$°s±)ó 
ð&àðð ðð -¨tÑ3ð	ð
 
óð8 !Ø&*Ø"ñ=à˜‘*ð=ð �T‰zð=ð �T‰zð	=ð
 ˜t™ð=ð �t‘ð=ð 
ó=ð*ià�T‰zðið �T‰zðið   $Ñ&ð	ið
 >ðið -ðið ðið 
óiðVà�T‰zðð —n‘nðð 'ð	ð
 
!óð8@à�T‰zð@ð ð@ð 'ð	@ð
 
*ó@ð
àð
ð ð
ð -ð	
ð
 ð
ð 
ˆs�DˆyÑ	ó
ð"à—n‘nðð 'ðð 
!ó	ð"
àð
ð ð
ð -ð	
ð
 ð
ð 
ˆs�DˆyÑ	ó
ð"
à—n‘nð
ð 'ð
ð ð	
ð
 
!ó
ð
àð
ð ð
ð -ð	
ð
 ð
ð 
ˆs�DˆyÑ	ó
ð"3à—n‘nð3ð 'ð3ð 
!ô	3r   r   )"rˆ   Útypingr   r   r   rŒ   r9   Úlitellm._loggingr   Ú'litellm.litellm_core_utils.core_helpersr   Ú$litellm.litellm_core_utils.url_utilsr   Ú1litellm.llms.base_llm.interactions.transformationr	   Ú litellm.llms.gemini.common_utilsr
   r   Úlitellm.types.interactionsr   r   r   r   r   r   Úlitellm.types.routerr   Úlitellm.types.utilsr   Ú*litellm.litellm_core_utils.litellm_loggingr   Ú_LiteLLMLoggingObjrŽ   r   r!   r   r   ú<module>r›      sZ   ðñ÷ -Ñ ,ã ã Ý +Ý LÝ HÝ Wß I÷÷ õ 6Ý ,áÝXà*ÑàÐôA3Ð'@õ A3r   