
    g                          d dl Z d dlmZmZmZmZmZmZmZ d dl	Z	d dl
mZ d dlmZ d dlmZmZ d dlmZ d dlmZ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# G d de      Z$y)    N)TYPE_CHECKINGAnyAsyncIteratorIteratorListOptionalUnionconvert_content_list_to_str)FakeStreamResponseIterator)
BaseConfigBaseLLMException)AllMessageValues)ChatCompletionToolCallChunkChatCompletionUsageBlockChoicesGenericStreamingChunkMessageModelResponseUsage)token_counter   ClarifaiError)Loggingc                   "    e Zd ZU dZdZee   ed<   dZee   ed<   dZ	ee   ed<   	 	 	 d&dee   dee   dee   ddfdZ
e fd       Zd	edefd
Zdeded	ededef
dZdededefdZd	edefdZd	edee   dedededefdZ	 	 d'ded	edee   dedee   dee   defdZdededeeej6                  f   defdZ	 	 d'd	edej<                  dede dedee   deded edee   d!ee   defd"Z!	 d(d#ee"e   e#e   ef   d$ed!ee   de$fd%Z% xZ&S ))ClarifaiConfigzM
    Reference: https://clarifai.com/meta/Llama-2/models/llama2-70b-chat
    N
max_tokenstemperaturetop_kreturnc                     t               }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y )Nself)localsitemssetattr	__class__)r#   r   r   r    locals_keyvalues          ^/var/www/openai/venv/lib/python3.12/site-packages/litellm/llms/clarifai/chat/transformation.py__init__zClarifaiConfig.__init__*   s;     (!--/JCf}!2U3 *    c                      t         |          S N)super
get_config)clsr'   s    r+   r1   zClarifaiConfig.get_config5   s    w!##r-   modelc                 
    ddgS Nr   r    )r#   r3   s     r+   get_supported_openai_paramsz*ClarifaiConfig.get_supported_openai_params9   s    
 	
r-   non_default_paramsoptional_paramsdrop_paramsc                 b    |j                         D ]  \  }}|dk(  r||d<   |dk(  s||d<    |S r5   )r%   )r#   r8   r9   r3   r:   paramr*   s          r+   map_openai_paramsz ClarifaiConfig.map_openai_params?   sG     /446LE5%16.,&05-	 7 r-   promptc                     i }|j                  d      x}r||d<   |j                  d      x}r||d<   ddd|iiigdd|iidS )	Nr   r   datatextrawoutput_infoparams)inputsr3   )get)r#   r>   r9   rD   r   r   s         r+   _completions_to_modelz$ClarifaiConfig._completions_to_modelN   sr    )--m<<;<$/F=!(,,\::::#-F< % 9:;#h%78
 	
r-   api_basec                 H    |j                  d      \  }}}| d| d| d| dS )N.z/users/z/apps/z/models/z/outputs)split)r#   r3   rH   user_idapp_idmodel_ids         r+   _convert_model_to_urlz$ClarifaiConfig._convert_model_to_urlY   s6    $)KK$4!77)6&(8TTr-   messageslitellm_paramsheadersc                     dj                  d |D              }| j                         }|j                         D ]  \  }}	||vs|	||<    | j                  ||      }
|
S )N c              3   2   K   | ]  }t        |        y wr/   r
   ).0messages     r+   	<genexpr>z3ClarifaiConfig.transform_request.<locals>.<genexpr>e   s     Wh75g>hs   )r>   r9   )joinr1   r%   rG   )r#   r3   rP   r9   rQ   rR   r>   configkvr@   s              r+   transform_requestz ClarifaiConfig.transform_request]   so     WhWW "LLNDAq'%&" # ))? * 
 r-   api_keyc                 $    ddd}|rd| |d<   |S )Nzapplication/json)acceptzcontent-typezBearer Authorizationr6   )r#   rR   r3   rP   r9   r^   rH   s          r+   validate_environmentz#ClarifaiConfig.validate_environments   s,     ).

 )0	':GO$r-   error_messagestatus_codec                     t        ||      S )NrW   rd   r   )r#   rc   rd   rR   s       r+   get_error_classzClarifaiConfig.get_error_class   s     ]LLr-   raw_responsemodel_responselogging_objrequest_dataencoding	json_modec           
      ,   |j                  ||
|j                  d|i       	 |j                         }	 g }t        |d         D ]`  \  }}t        |d   d   d         d	kD  rt        |d   d   d   
      }nt        d 
      }t        d|dz   |      }|j                  |       b ||_        t        ||      }t        |	j!                  |d   d	   d   j#                  d                  }||_        t'        |dt)        ||||z                |S # t        j                  $ r%}t        t        |      |j                        d }~wt        $ r}t        t        |      d      d }~ww xY w# t        $ r}t        t        |      d      d }~ww xY w)Ncomplete_input_dict)inputr^   original_responseadditional_argsrf   i  outputsr@   rA   rB   r   )contentstop   )finish_reasonindexrW   )r3   rP   choicesrW   rt   usage)prompt_tokenscompletion_tokenstotal_tokens)	post_callrA   jsonhttpxHTTPStatusErrorr   strrd   	Exception	enumeratelenr   r   appendry   r   encoderF   r3   r&   r   )r#   r3   rh   ri   rj   rk   rP   r9   rQ   rl   r^   rm   completion_responseechoices_listidxitemmessage_obj
choice_objr{   r|   s                        r+   transform_responsez!ClarifaiConfig.transform_response   s    	*//2LA	 	 	
	"."3"3"5	L&':9'EF	TtF|F+E23a7")$v,v2Fu2M"NK")$"7K$"(''

 ##J/ G &2N" &EHEOON95a8CGG	RS
  %+"3*->>	
 _ $$ 	A(44   	A 	*  	A 	s;   D A:E/ E,% EE,E''E,/	F8FFstreaming_responsesync_streamc                     t        ||      S N)ri   rm   )ClarifaiModelResponseIterator)r#   r   r   rm   s       r+   get_model_response_iteratorz*ClarifaiConfig.get_model_response_iterator   s     --
 	
r-   )NNN)NNF)'__name__
__module____qualname____doc__r   r   int__annotations__r   r    r,   classmethodr1   r   listr7   dictboolr=   rG   rO   r   r   r]   rb   r	   r   Headersr   rg   Responser   LoggingClassr   r   r   r   r   __classcell__r'   s   @r+   r   r   !   s    !%J$!%K#%E8C= %)%)#		4SM	4 c]	4 }		4
 
	4 $ $
 
 
   	
  
	
C 	
$ 	
4 	
U3 U# U '( 	
   
8 "&"&  '(	
  # 3- 
$M M/2M=B4CV=WM	M  "&$(FF nnF &	F
 "F F '(F F F F #F D>F 
FX %*		
!(3-s1C]"RS	
 	
 D>		

 
	
r-   r   c                   Z     e Zd Z	 ddeee   ee   ef   dee	   f fdZ
dedefdZ xZS )r   ri   rm   c                 (    t         |   ||       y r   )r0   r,   )r#   ri   rm   r'   s      r+   r,   z&ClarifaiModelResponseIterator.__init__   s    
 	) 	 	
r-   chunkr!   c           	         	 d}d }d}d}d }d }|j                  dd      d   j                  dd      j                  dd      j                  dd      }d}t        |||||||      S # t        j                  $ r t	        d	|       w xY w)
N Frs   r   r@   rA   rB   )rA   tool_useis_finishedrw   rz   rx   provider_specific_fieldsz"Failed to decode JSON from chunk: )rF   r   r   JSONDecodeError
ValueError)	r#   r   rA   r   r   rw   rz   r   rx   s	            r+   chunk_parserz*ClarifaiModelResponseIterator.chunk_parser   s    	KD>BHKM8<E'+$ 		)R(+VRVRUB	  E(!'+)A  ## 	KA%IJJ	Ks   A$A' '"B	r   )r   r   r   r	   r   r   r   r   r   r   r,   r   r   r   r   r   s   @r+   r   r      sO     %*
hsm]3-?NO
 D>
K$ K+@ Kr-   r   )%r   typingr   r   r   r   r   r   r	   r   8litellm.litellm_core_utils.prompt_templates.common_utilsr   )litellm.llms.base_llm.base_model_iteratorr   )litellm.llms.base_llm.chat.transformationr   r   litellm.types.llms.openair   litellm.types.utilsr   r   r   r   r   r   r   litellm.utilsr   common_utilsr   *litellm.litellm_core_utils.litellm_loggingr   LiteLLMLoggingObjr   r   r   r6   r-   r+   <module>r      sj     U U U  Q R 6   ( (W$LLz
Z z
z'K$> 'Kr-   