
    hd;                     n   d dl Z d dlZd dlZd dl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mZmZmZmZ d dlmZ d dlmZ d d	lmZmZmZ d
dl m!Z!m"Z" er	d dl#m$Z% e%Z&neZ&dZ' G d de      Z( G d de      Z)dddddddddddddddZ*dee   fdZ+dee   fdZ,dee-   fdZ.y)    N)TYPE_CHECKINGAnyDictListOptionalUnion)exception_type)track_llm_api_timing)
BaseConfigBaseLLMException)AsyncHTTPHandlerHTTPHandler_get_httpx_clientget_async_httpx_clientversion)AllMessageValues)LlmProviders)CustomStreamWrapperModelResponseUsage   )API_BASE
BytezError)Loggingi,  c                   `   e Zd ZdZ	 	 d%dZdedee   fdZdededed	e	def
d
Z
	 	 d&dededee   dededee   dee   defdZ	 d'dee   dee   dededede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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 e       	 	 	 d(dedededededededeeeef      dee	   dee   ddfd        Z e       	 	 	 d(dedededededededeeeef      dee	   dee   ddfd!       Zd"ed#edeeej>                  f   de fd$Z!y))BytezChatConfigz8
    Configuration class for Bytez's API interface.
    returnNc           
      \   t               j                         }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' t        | j                  dd       i ddddddddd	d	d
dddddddddddddddddddddddddddddddd| _        y )Nselfhas_custom_stream_wrapperTstream
max_tokensmax_new_tokensmax_completion_tokenstemperaturetop_pnnum_return_sequencesmax_retriesseedFstop
logit_biaslogprobsfrequency_penaltypresence_penaltytop_logprobs
modalities
predictionstream_options)toolstool_choicefunction_call	functionsextra_headersparallel_tool_callsaudioweb_search_options)localscopyitemssetattr	__class__openai_to_bytez_param_map)r   locals_keyvalues       b/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/bytez/chat/transformation.py__init__zBytezChatConfig.__init__)   sH    (--/!--/JCf}!2U3 * 	 ;TB*
h*
**
 $%5*
 =	*

 W*
 '*
 =*
 E*
 E*
 %*
 *
  *
 *
 E*
 %*
  %!*
" e#*
$  ""#("'3*
&    modelc                 v    g }| j                   j                         D ]  \  }}|s	|j                  |        |S N)rA   r>   append)r   rH   supported_paramsrC   rD   s        rE   get_supported_openai_paramsz+BytezChatConfig.get_supported_openai_paramsO   s?    88>>@JC '', A  rG   non_default_paramsoptional_paramsdrop_paramsc                     i }i ||}|j                         D ]C  \  }}| j                  j                  |      }	|	du r|r(t        d| d      |	|||<   ?|||	<   E |S )NFzparam `z` is not supported on Bytez)r>   rA   get	Exception)
r   rN   rO   rH   rP   adapted_params
all_paramsrC   rD   aliass
             rE   map_openai_paramsz!BytezChatConfig.map_openai_paramsW   s     >*>o>
$**,JC2266s;E~'#.I JKK}&+s#$)N5! -  rG   headersmessageslitellm_paramsapi_keyapi_basec                 x    |j                  dd| dt         d       |st        d      |st        d      |S )Nzapplication/jsonzKey zlitellm/)zcontent-typeAuthorizationz
user-agentzRkwarg `messages` must be an array of messages that follow the openai chat standardz3Missing api_key, make sure you pass in your api key)updater   rS   )r   rX   rH   rY   rO   rZ   r[   r\   s           rE   validate_environmentz$BytezChatConfig.validate_environmentu   sY     	 2#'y!1 (	2	
 d  QRR rG   r!   c                     t          d| S )N/)r   )r   r\   r[   rH   rO   rZ   r!   s          rE   get_complete_urlz BytezChatConfig.get_complete_url   s     1UG$$rG   c                 v    |j                  dd      }|j                  d      r|d= t        |      }|||d}|S )Nr!   FrY   )rY   r!   params)rR    adapt_messages_to_bytez_standard)r   rH   rY   rO   rZ   rX   r!   datas           rE   transform_requestz!BytezChatConfig.transform_request   sQ     !$$Xu5 x()3XF !%
 rG   raw_responsemodel_responselogging_objrequest_dataencoding	json_modec                 4   |j                         } |j                  d      }|#t        t        |d         |j                        t        t        j                               |_        ||_         |j                  d      }|j                  d   j                  }|d   d   d   |_        t        |      }t        |      }t        |g      }t        |      }||z   }t        |||      }||_        |j                   |j"                  d	<   |j                   j                  d
      |j                   j                  d      |j                   j                  d      |j                   j                  d      |j                   j                  d      d|_        |S )Nerror)messagestatus_codeoutputr   contenttextre   )prompt_tokenscompletion_tokenstotal_tokensadditional_headersratelimit-limitratelimit-remainingratelimit-resetinference-meterinference-time)r{   r|   r}   r~   r   )jsonrR   r   strrs   inttimecreatedrH   choicesrr   ru   rg   get_tokens_from_messagesr   usagerX   _hidden_paramsprovider_specific_fields)r   rH   rj   rk   rl   rm   rY   rO   rZ   rn   r[   ro   r   rq   rt   rr   rw   output_messagesrx   ry   r   s                        rE   transform_responsez"BytezChatConfig.transform_response   s      "!DM*(44  "%TYY[!1$ (# ((+33 +A.v63XF 1::VHM4_E$'88'/%
  %>J>R>R%%&:;+33778IJ#/#7#7#;#;<Q#R+33778IJ+33778IJ*22667GH,
( rG   custom_llm_providerrh   clientsigned_json_bodyBytezCustomStreamWrapperc                    |t        |t              rt        i       }	 |j                  ||t	        j
                  |      d|t              }|j                  dk7  r!t        |j                  |j                        |j                         }t        ||||      }|S # t        j                  $ r:}t        |j                  j                  |j                  j                        d }~ww xY w)N)rf   TrX   rh   r!   rl   timeoutrs   rr      completion_streamrH   r   rl   )
isinstancer   r   postr   dumpsSTREAMING_TIMEOUThttpxHTTPStatusErrorr   responsers   rv   	iter_textr   r   rH   r   rl   r\   rX   rh   rY   r   ro   r   r   er   streaming_responses                  rE   get_sync_custom_stream_wrapperz.BytezChatConfig.get_sync_custom_stream_wrapper   s     >Z0@A&b1F	{{ZZ%') # H 3&)=)=x}}UU$..05/ 3#	
 "!! $$ 	JJ22AJJOO 	s   .B C,25C''C,c                   K   |t        |t              rt        t        j                  i       }	 |j                  ||t        j                  |      d|t               d {   }|j                  dk7  r!t        |j                  |j                        |j                         }t!        ||||      }|S 7 U# t        j                  $ r:}t        |j                  j                  |j                  j                        d }~ww xY ww)N)llm_providerrf   Tr   r   r   r   )r   r   r   r   BYTEZr   r   r   r   r   r   r   r   rs   rv   
aiter_textr   r   s                  rE   get_async_custom_stream_wrapperz/BytezChatConfig.get_async_custom_stream_wrapper(  s      >Z<+9K9KTVWF	#[[ZZ%') )  H 3&)=)=x}}UU$//15/ 3#	
 "!1 $$ 	JJ22AJJOO 	s;   .D
1B: "B8#B: 'AD
8B: :D5DDD
error_messagers   c                     t        ||      S )Nr   )r   )r   r   rs   rX   s       rE   get_error_classzBytezChatConfig.get_error_classT  s     k=IIrG   )r   N)NNrJ   )NNN)"__name__
__module____qualname____doc__rF   r   r   rM   dictboolrW   r   r   r`   rc   ri   r   Responser   LiteLLMLoggingObjr   r   r
   listr   r   r   bytesr   r   r   Headersr   r    rG   rE   r   r   $   s   $
	$
L   c     	
  
J "&"&  '(	
   # 3- 
J "&	%3-	% #	% 		%
 	% 	% 	% 
	% '( 	
   
F "&$(DD nnD &	D
 'D D '(D D D D #D D>D 
DL  BF$(,0)")" !)" '	)"
 )" )" )" )" {,<<=>)" D>)" #5/)" 
$)" )"V  BF$(,0)")" !)" '	)"
 )" )" )" )" {,<<=>)" D>)" #5/)" 
$)" )"VJ J/2J=B4CV=WJ	JrG   r   c                       e Zd ZdefdZy)r   chunkc                 :   	 | j                         }i }|ddd}d|i}| j                  |||      S # t        $ r t        t        $ rQ}t	        j
                          t        |dt        |             t        | j                  | j                  |      d }~ww xY w)NF )rv   is_finishedfinish_reasonru   )completion_objrk   response_objrr   )rH   r   original_exception)model_response_creatorreturn_processed_chunk_logicStopIterationrS   	traceback
format_excr?   r   r	   rH   r   )r   r   rk   r   r   r   s         rE   chunk_creatorz&BytezCustomStreamWrapper.chunk_creator[  s    	!88:N+-L $!#L /8-?N44--) 5    	  	  "Ay#a&) jj$($<$<#$ 	s   /2 B	ABBN)r   r   r   r   r   r   rG   rE   r   r   Z  s    3 rG   r   rv   )type
value_nameimageurlr:   video)rv   	image_urlinput_audio	video_urldocumentfilerY   c                 n   t        |       } g }| D ]  }|d   }|d   }g }|D ]{  }|j                  d      }|st        d      t        |   }|st        d| d      |d   }	|d   }
|j                  |
      }|st        d|
 d      |j	                  d|	|
|i       } |j	                  ||d	        |S )
Nroleru   r   zProp `type` is not a stringzProp `z` is not supportedr   z` is not a stringr   ru   )#_adapt_string_only_content_to_listsrR   rS   !open_ai_to_bytez_content_item_maprK   )rY   new_messagesrr   r   ru   new_contentcontent_itemr   content_item_mapnew_typer   rD   s               rE   rg   rg     s    28<HLv	*#L%1%5%5f%=D =>>@F#&.@ ABB'/H),7J&2&6&6z&BE&4E FGG*eDE) $, 	TkBC; > rG   c                    g }| D ]  }|j                  d      }|j                  d      }g }t        |t              r|j                  d|d       nt        |t              r|j                  |       n{t        |t
              r`g }|D ]S  }t        |t              r|j                  d|d       (t        |t              r|j                  |       Jt        d       ||z  }nt        d      |j                  ||d        |S )Nr   ru   rv   )r   rv   z:`content` can only contain strings or openai content dictszContent must be a stringr   )rR   r   r   rK   r   r   rS   )rY   r   rr   r   ru   r   new_content_itemsr   s           rE   r   r     s    L{{6"++i(gs#@A&w'& " 'lC0%,,fl-STd3%,,\:#T  !( ,,K677TkBC= @ rG   c                     d}| D ]B  }|d   }|D ]6  }|d   }|dk(  r%|d   }|j                  d      }|t        |      z  }2|dz  }8 D |S )Nr   ru   r   rv       )splitlen)rY   totalrr   ru   r   r   rD   wordss           rE   r   r     so    E%i0#L'Dv~)&1C(U#QJE $  LrG   )/r   r   r   typingr   r   r   r   r   r   r   2litellm.litellm_core_utils.exception_mapping_utilsr	   (litellm.litellm_core_utils.logging_utilsr
   )litellm.llms.base_llm.chat.transformationr   r   &litellm.llms.custom_httpx.http_handlerr   r   r   r   r   litellm.types.llms.openair   litellm.types.utilsr   litellm.utilsr   r   r   common_utilsr   r   *litellm.litellm_core_utils.litellm_loggingr   _LiteLLMLoggingObjr   r   r   r   r   rg   r   r   r   r   rG   rE   <module>r      s       B B  M I R  7 , C C /X*  sJj sJl	2 D 62!7#59!7% !%tDz %V#$t* #NtDz rG   