Ë
    áß²jY	  ã                   óR   — d Z ddlmZmZ ddlmZmZmZmZ ddl	m
Z
  G d„ de«      Zy)u  Abstract base for provider transports.
A transport owns one api_mode's data path (convert_messages -> convert_tools -> build_kwargs
-> normalize_response), NOT client construction, streaming, credentials, caching, interrupts
or retries â€” those stay on AIAgent.é    )ÚABCÚabstractmethod)ÚAnyÚDictÚListÚOptional)ÚNormalizedResponsec                   óT  — e Zd ZU dZdZeeeef      ed<   e	e
defd„«       «       Ze
deeeef      defd„«       Ze
deeeef      defd	„«       Ze
	 dd
edeeeef      deeeeef         deeef   fd„«       Ze
dedefd„«       Zdedefd„Zdedeeeef      fd„Zdedefd„Zy)ÚProviderTransportzEBase class for provider-specific format conversion and normalization.NÚ_STOP_REASON_MAPÚreturnc                  ó   — y)zGThe api_mode string this transport handles (e.g. 'anthropic_messages').N© )Úselfs    ú:/home/ubuntu/.hermes/hermes-agent/agent/transports/base.pyÚapi_modezProviderTransport.api_mode   ó   � ó    Úmessagesc                  ó   — y)zhConvert OpenAI-format messages to the provider-native structure (e.g. (system, messages) for Anthropic).Nr   )r   r   Úkwargss      r   Úconvert_messagesz"ProviderTransport.convert_messages   r   r   Útoolsc                  ó   — y)zAConvert OpenAI-format tool definitions to provider-native format.Nr   )r   r   s     r   Úconvert_toolszProviderTransport.convert_tools   r   r   Úmodelc                  ó   — y)zYPrimary entry point: convert messages/tools and return kwargs ready for the provider SDK.Nr   )r   r   r   r   Úparamss        r   Úbuild_kwargszProviderTransport.build_kwargs    r   r   Úresponsec                  ó   — y)z_Normalize a raw provider response to NormalizedResponse (the only transport-layer return type).Nr   )r   r    r   s      r   Únormalize_responsez$ProviderTransport.normalize_response'   r   r   c                  ó   — y)z?Optional structural validity check; default accepts everything.Tr   ©r   r    s     r   Úvalidate_responsez#ProviderTransport.validate_response+   ó   € àr   c                  ó   — y)zEOptional: ``{'cached_tokens', 'creation_tokens'}`` or None (default).Nr   r$   s     r   Úextract_cache_statsz%ProviderTransport.extract_cache_stats/   r&   r   Ú
raw_reasonc                 óV   — | j                   €|S | j                   j                  |d«      S )zaMap a provider stop reason via ``_STOP_REASON_MAP`` (unknown -> 'stop'); passthrough when no map.Ústop)r   Úget)r   r)   s     r   Úmap_finish_reasonz#ProviderTransport.map_finish_reason3   s-   € à!×2Ñ2Ð:ˆzÐmÀ×@UÑ@U×@YÑ@YÐZdÐflÓ@mÐmr   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   ÚstrÚ__annotations__Úpropertyr   r   r   r   r   r   r   r	   r"   Úboolr%   Úintr(   r-   r   r   r   r   r      s�  … ÙOð 26Ð�h˜t C¨ H™~Ñ.Ó5àØðV˜#ò Vó ó ðVð ðw¨¨d°3¸°8©nÑ)=ð wÈCò wó ðwð ðP 4¨¨S°#¨X©Ñ#7ð P¸Cò Pó ðPð ð 15ñhØðhØ$(¨¨c°3¨h©Ñ$8ðhà˜˜T # s (™^Ñ,Ñ-ðhð 
ˆc�3ˆh‰òhó ðhð ðn¨3ð nÐ=Oò nó ðnð¨#ð °$ó ð¨Cð °H¸TÀ#ÀsÀ(¹^Ñ4Ló ðn¨Cð n°Cô nr   r   N)r1   Úabcr   r   Útypingr   r   r   r   Úagent.transports.typesr	   r   r   r   r   ú<module>r:      s&   ðñ)÷
 $ß ,Ó ,å 5ô)n˜õ )nr   