
    yj
                    4   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
 d dlmZ  ed           G d d	                      Z ed           G d
 d                      Z ed           G d d                      Ze
 G d de	                      ZdS )    )annotations)AsyncIterator)	dataclassfield)AnyProtocolruntime_checkable)	BaseModelT)slotsc                  @    e Zd ZU dZded<   ded<   ded<   dZded	<   dS )
ToolCallResultz'Normalized tool call from any provider.stridnamezdict[str, Any]inputN
str | Nonethought_signature)__name__
__module____qualname____doc____annotations__r        7/DATA/AppData/hermes/projects/honcho/src/llm/backend.pyr   r   
   sH         11GGGIII$(((((((r   r   c                      e Zd ZU dZdZded<   dZded<   dZded<   dZded	<   dZ	ded
<   dZ
ded<    ee          Zded<   dZded<    ee          Zded<    ee          Zded<   dZded<   dS )CompletionResultz;Normalized completion result returned by provider backends. r   contentr   intinput_tokensoutput_tokenscache_creation_input_tokenscache_read_input_tokensstopr   finish_reason)default_factoryzlist[ToolCallResult]
tool_callsNr   thinking_contentlist[dict[str, Any]]thinking_blocksreasoning_detailsraw_response)r   r   r   r   r   r   r!   r"   r#   r$   r&   r   listr(   r)   r+   r,   r-   r   r   r   r   r      s         EEGLM'(((((#$$$$$M',uT'B'B'BJBBBB#''''',1E$,G,G,GOGGGG.3eD.I.I.IIIIILr   r   c                  L    e Zd ZU dZdZded<   dZded<   dZd	ed
<   dZded<   dS )StreamChunkz'A single chunk in a streaming response.r   r   r   Fboolis_doneNr   r&   
int | Noner"   )	r   r   r   r   r   r   r2   r&   r"   r   r   r   r0   r0   %   s\         11GG $M$$$$ $M$$$$$$r   r0   c            
      N    e Zd ZdZdddddddddd	d dZdddddddddd	d!dZdS )"ProviderBackendzTransport-agnostic interface for LLM providers.

    Credentials are baked into the underlying SDK client at backend construction
    time (see src/llm/registry.py), so these method signatures deliberately do
    not accept api_key / api_base.
    N)	temperaturer%   toolstool_choiceresponse_formatthinking_budget_tokensthinking_effortmax_output_tokensextra_paramsmodelr   messagesr*   
max_tokensr    r6   float | Noner%   list[str] | Noner7   list[dict[str, Any]] | Noner8   str | dict[str, Any] | Noner9   'type[BaseModel] | dict[str, Any] | Noner:   r3   r;   r   r<   r=   dict[str, Any] | Nonereturnr   c               
   K   d S Nr   selfr>   r?   r@   r6   r%   r7   r8   r9   r:   r;   r<   r=   s                r   completezProviderBackend.complete8   s       3r   AsyncIterator[StreamChunk]c                   d S rI   r   rJ   s                r   streamzProviderBackend.streamI   s	     &)Sr   )r>   r   r?   r*   r@   r    r6   rA   r%   rB   r7   rC   r8   rD   r9   rE   r:   r3   r;   r   r<   r3   r=   rF   rG   r   )r>   r   r?   r*   r@   r    r6   rA   r%   rB   r7   rC   r8   rD   r9   rE   r:   r3   r;   r   r<   r3   r=   rF   rG   rM   )r   r   r   r   rL   rO   r   r   r   r5   r5   /   s          %)!%-137CG-1&*(,.2     . %)!%-137CG-1&*(,.2) ) ) ) ) ) ) )r   r5   N)
__future__r   collections.abcr   dataclassesr   r   typingr   r   r	   pydanticr
   r   r   r0   r5   r   r   r   <module>rU      sx   " " " " " " ) ) ) ) ) ) ( ( ( ( ( ( ( ( 3 3 3 3 3 3 3 3 3 3       ) ) ) ) ) ) ) )          % % % % % % % % () () () () ()h () () () () ()r   