
    ^h                         S SK r S SKJrJr  S SKJr  S SKJr  S SKJ	r	J
r
Jr   " S S\5      r SS\S	\S
\\   S\S\\   S\4S jjr " S S5      rg)    N)ListOptional)BaseLLMException)AllMessageValues)ChatCompletionToolCallChunkChatCompletionUsageBlockGenericStreamingChunkc                   (   ^  \ rS rSrU 4S jrSrU =r$ )CohereError   c                     > [         TU ]  XS9  g )N)status_codemessage)super__init__)selfr   r   	__class__s      Z/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/cohere/common_utils.pyr   CohereError.__init__   s    [B     )__name__
__module____qualname____firstlineno__r   __static_attributes____classcell__)r   s   @r   r   r      s    C Cr   r   headersmodelmessagesoptional_paramsapi_keyreturnc                 N    U R                  SSSS.5        U(       a  SU 3U S'   U $ )a)  
Return headers to use for cohere chat completion request

Cohere API Ref: https://docs.cohere.com/reference/chat
Expected headers:
{
    "Request-Source": "unspecified:litellm",
    "accept": "application/json",
    "content-type": "application/json",
    "Authorization": "bearer $CO_API_KEY"
}
zunspecified:litellmzapplication/json)zRequest-Sourceacceptzcontent-typezbearer Authorization)update)r   r   r    r!   r"   s        r   validate_environmentr(      s9    & NN3(.	
 %,WI#6 Nr   c                   \    \ rS rSr SS\S\\   4S jjrS\S\4S jr	S r
S	 rS
 rS rSrg)ModelResponseIterator1   sync_stream	json_modec                 Z    Xl         U R                   U l        / U l        SU l        X0l        g )N)streaming_responseresponse_iteratorcontent_blocks
tool_indexr-   )r   r0   r,   r-   s       r   r   ModelResponseIterator.__init__2   s,     #5!%!8!8$&"r   chunkr#   c           
      "    SnS nSnSnS nS n[        UR                  SS5      5      nSU;   a  US   nOSU;   a  US   SL a
  US   nUS   nS	U;   a  S	US	   0n[        UUUUUUUS
9n	U	$ ! [        R                   a    [        SU 35      ef = f)N Findexr   textis_finishedTfinish_reason	citations)r9   tool_user:   r;   usager8   provider_specific_fieldsz"Failed to decode JSON from chunk: )intgetr	   jsonJSONDecodeError
ValueError)
r   r5   r9   r=   r:   r;   r>   r?   r8   returned_chunks
             r   chunk_parser"ModelResponseIterator.chunk_parser;   s     	KD>BHKM8<E'+$		'1-.EV}%'E-,@D,H#M2 %o 6e#,7{9K+L(2!'+)AN "!## 	KA%IJJ	Ks   A(A+ +#Bc                     U $ Nr   r   s    r   __iter__ModelResponseIterator.__iter___   s    r   c                     U R                   R                  5       n Un[        U[        5      (       a,  UR                  S5      nUR                  S5      nUS:w  a  X4S  n[        R                  " U5      nU R                  US9$ ! [         a    [        e[         a  n[	        SU 35      eS nAff = f! [         a    [        e[         a  n[	        SU SU 35      eS nAff = fNz#Error receiving chunk from stream: zutf-8zdata:r/   )r5   zError parsing chunk: z,
Received chunk: )r1   __next__StopIterationrD   RuntimeError
isinstancebytesdecodefindrB   loadsrF   r   r5   estr_liner8   	data_jsons         r   rO   ModelResponseIterator.__next__b   s    	J**335E	VH%'' <<0 g.B;'/H

8,I$$9$55  	  	J!DQCHII	J  	  	V!6qc9LUGTUU	Vs/   B A'B4 B1B,,B14C#CC#c                 D    U R                   R                  5       U l        U $ rI   )r0   	__aiter__async_response_iteratorrJ   s    r   r]   ModelResponseIterator.__aiter__y   s    '+'>'>'H'H'J$r   c                   #     U R                   R                  5       I S h  vN n Un[        U[        5      (       a,  UR                  S5      nUR                  S5      nUS:w  a  X4S  n[        R                  " U5      nU R                  US9$  Nm! [         a    [        e[         a  n[	        SU 35      eS nAff = f! [         a    [        e[         a  n[	        SU SU 35      eS nAff = f7frN   )r^   	__anext__StopAsyncIterationrD   rQ   rR   rS   rT   rU   rB   rV   rF   rW   s         r   ra   ModelResponseIterator.__anext__}   s     	J66@@BBE	VH%'' <<0 g.B;'/H

8,I$$9$55 C! 	%$$ 	J!DQCHII	J " 	%$$ 	V!6qc9LUGTUU	VsV   C2B BB A'C  C2B B=*B88B==C2 C/C**C//C2)r^   r2   r-   r1   r0   r3   N)F)r   r   r   r   boolr   r   dictr	   rF   rK   rO   r]   ra   r   r   r   r   r*   r*   1   sL    QV#/3#@H#!K$ !K+@ !KHV.Vr   r*   rI   )rB   typingr   r   )litellm.llms.base_llm.chat.transformationr   litellm.types.llms.openair   litellm.types.utilsr   r   r	   r   re   strr(   r*   r   r   r   <module>rk      s     ! F 6 C" C " #$ 	
 c] 
>aV aVr   