Ë
    uPêjO-  ã                   óÈ   — d dl Z d dlZd dlmZmZmZmZmZ d dlZd dlm	Z	m
Z
 d dlm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 erd dlZd d	lmZ eZneZ G d
„ de«      Zy)é    N)ÚTYPE_CHECKINGÚAnyÚFinalÚLiteralÚcast)ÚHeadersÚResponse)Úencode_url_path_segment)ÚBaseBatchesConfig)ÚBaseLLMException)ÚAllMessageValuesÚCreateBatchRequest)ÚLiteLLMBatchÚLlmProvidersÚModelResponse)ÚLoggingc                   óô  — e Zd Zd„ Zedefd„«       Z	 	 d"dedede	e
   ded	ed
edz  dedz  defd„Zdedz  d
edz  deded	ededefd„Zdededed	edeez  eeef   z  f
d„Zdedz  dej$                  ded	edef
d„Zdedz  deded	edef
d„Zdeded	edeez  eeef   z  fd„Zdedz  dej$                  ded	edef
d„Zdededeez  ddfd„Z	 	 d"dededededede	e
   ded	eddd
edz  d edz  defd!„Zy)#ÚAnthropicBatchesConfigc                 óL   — ddl m} ddlm}  |«       | _         |«       | _        y )Né   )ÚAnthropicConfig)ÚAnthropicModelInfo)Úchat.transformationr   Úcommon_utilsr   Úanthropic_chat_configÚanthropic_model_info)Úselfr   r   s      úr/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/anthropic/batches/transformation.pyÚ__init__zAnthropicBatchesConfig.__init__   s   € Ý9Ý5á%4Ó%6ˆÔ"Ù$6Ó$8ˆÕ!ó    Úreturnc                 ó"   — t         j                  S )z4Return the LLM provider type for this configuration.)r   Ú	ANTHROPIC)r   s    r   Úcustom_llm_providerz*AnthropicBatchesConfig.custom_llm_provider    s   € ô ×%Ñ%Ð%r    NÚheadersÚmodelÚmessagesÚoptional_paramsÚlitellm_paramsÚapi_keyÚapi_basec                 ó   — |€!t        |t        «      r|j                  d«      }| j                  j	                  ||«      }|€t        d«      ‚ddddœ}	|	j                  |«       d|vrd|d<   |j                  |	«       |S )zAValidate and prepare environment-specific headers and parameters.r+   z�Missing Anthropic API Key - A call is being made to anthropic but no key is set either in the environment variables or via paramszapplication/jsonz
2023-06-01)Úacceptzanthropic-versionzcontent-typezanthropic-betazmessage-batches-2024-09-24)Ú
isinstanceÚdictÚgetr   Úget_auth_headerÚ
ValueErrorÚupdate)
r   r%   r&   r'   r(   r)   r*   r+   Úauth_headerÚ_headerss
             r   Úvalidate_environmentz+AnthropicBatchesConfig.validate_environment%   s™   € ð Ð¤
¨>¼4Ô @Ø%×)Ñ)¨*Ó5ˆHØ!×6Ñ6×FÑFÀwÐPXÓYˆØÐÜð Tóð ð )Ø!-Ø.ñ
ˆð
 	�‰˜Ô$à 7Ñ*Ø(DˆGÐ$Ñ%Ø�‰�xÔ Øˆr    Údatac                 óŽ   — |xs | j                   j                  |«      }|j                  d«      s|j                  d«      › d�}|S )z0Get the complete URL for batch creation request.z/v1/messages/batchesú/)r   Úget_api_baseÚendswithÚrstrip)r   r+   r*   r&   r(   r)   r7   s          r   Úget_complete_batch_urlz-AnthropicBatchesConfig.get_complete_batch_urlC   sJ   € ð ÒO˜t×8Ñ8×EÑEÀhÓOˆØ× Ñ Ð!7Ô8Ø"Ÿ/™/¨#Ó.Ð/Ð/CÐDˆHØˆr    Úcreate_batch_datac                 ó   — t        d«      ‚)zœ
        Transform the batch creation request to Anthropic format.

        Not currently implemented - placeholder to satisfy abstract base class.
        ú0Batch creation not yet implemented for Anthropic©ÚNotImplementedError)r   r&   r>   r(   r)   s        r   Útransform_create_batch_requestz5AnthropicBatchesConfig.transform_create_batch_requestR   ó   € ô "Ð"TÓUÐUr    Úraw_responseÚlogging_objc                 ó   — t        d«      ‚)z¨
        Transform Anthropic MessageBatch creation response to LiteLLM format.

        Not currently implemented - placeholder to satisfy abstract base class.
        r@   rA   )r   r&   rE   rF   r)   s        r   Útransform_create_batch_responsez6AnthropicBatchesConfig.transform_create_batch_response`   rD   r    Úbatch_idc                 ó†   — |xs | j                   j                  |«      }t        |d¬«      }|j                  d«      › d|› �S )a¡  
        Get the complete URL for batch retrieval request.

        Args:
            api_base: Base API URL (optional, will use default if not provided)
            batch_id: Batch ID to retrieve
            optional_params: Optional parameters
            litellm_params: LiteLLM parameters

        Returns:
            Complete URL for Anthropic batch retrieval: {api_base}/v1/messages/batches/{batch_id}
        rI   )Ú
field_namer9   z/v1/messages/batches/)r   r:   r
   r<   )r   r+   rI   r(   r)   Úencoded_batch_ids         r   Úget_retrieve_batch_urlz-AnthropicBatchesConfig.get_retrieve_batch_urln   sJ   € ð& ÒO˜t×8Ñ8×EÑEÀhÓOˆÜ"9¸(ÈzÔ"ZÐØ—/‘/ #Ó&Ð'Ð'<Ð=MÐ<NÐOÐOr    c                 ó   — i S )zâ
        Transform batch retrieval request for Anthropic.

        For Anthropic, the URL is constructed by get_retrieve_batch_url(),
        so this method returns an empty dict (no additional request params needed).
        © )r   rI   r(   r)   s       r   Ú transform_retrieve_batch_requestz7AnthropicBatchesConfig.transform_retrieve_batch_request…   s	   € ð ˆ	r    c                 ó:  — 	 |j                  «       }|j                  dd«      }|j                  dd«      }dddd	œ}	|	j                  |d«      }
d
t        dz  dt
        dz  fd„} ||j                  d«      «      } ||j                  d«      «      } ||j                  d«      «      } ||j                  d«      «      } ||j                  d«      «      }|j                  di «      }ddlm}  |t        |j                  dd«      |j                  dd«      |j                  dd«      |j                  dd«      |j                  dd«      g«      |j                  dd«      |j                  dd«      ¬«      }t        d1i d|“dd“dd“dd“d d!“d"d#“d$|
“d%|“d&d“d|xs t        t        j                  «       «      “d'|dk(  r|nd“d|“d(d“d)|d*k(  r|nd“d+d“d,|r|nd“d-|d.k(  r|nd“d/|d.k(  r|r|nd“d|“d0i “ŽS # t        $ r}t        d|› �«      ‚d}~ww xY w)2zFTransform Anthropic MessageBatch retrieval response to LiteLLM format.z*Failed to parse Anthropic batch response: NÚidÚ Úprocessing_statusÚin_progressÚ
cancellingÚ	completed)rU   Ú	cancelingÚendedÚts_strr!   c                 ó¨   — | sy 	 ddl m } |j                  | j                  dd«      «      }t        |j	                  «       «      S # t
        $ r Y y w xY w)Nr   )ÚdatetimeÚZz+00:00)r\   ÚfromisoformatÚreplaceÚintÚ	timestampÚ	Exception)rZ   r\   Údts      r   Úparse_timestampzQAnthropicBatchesConfig.transform_retrieve_batch_response.<locals>.parse_timestampº   sN   € ÙØðÝ-à$×2Ñ2°6·>±>À#ÀxÓ3PÓQ�Ü˜2Ÿ<™<›>Ó*Ð*øÜò Ùðús   …?A Á	AÁAÚ
created_atÚended_atÚ
expires_atÚcancel_initiated_atÚarchived_atÚrequest_countsr   )ÚBatchRequestCountsÚ
processingÚ	succeededÚerroredÚcanceledÚexpired)ÚtotalrW   ÚfailedÚobjectÚbatchÚendpointz/v1/messagesÚerrorsÚinput_file_idÚNoneÚcompletion_windowÚ24hÚstatusÚoutput_file_idÚerror_file_idÚin_progress_atÚfinalizing_atÚcompleted_atrY   Ú	failed_atÚ
expired_atÚcancelling_atrX   Úcancelled_atÚmetadatarO   )Újsonrb   r2   r0   Ústrr`   Úopenai.types.batchrk   Úsumr   Útime)r   r&   rE   rF   r)   Úresponse_dataÚerI   rT   Ústatus_mappingÚopenai_statusrd   re   rf   rg   rh   ri   Úrequest_counts_datark   rj   s                       r   Ú!transform_retrieve_batch_responsez8AnthropicBatchesConfig.transform_retrieve_batch_response”   sÒ  € ð	OØ#/×#4Ñ#4Ó#6ˆMð
 (×+Ñ+¨D°"Ó5ˆØ#0×#4Ñ#4Ð5HÈ-Ó#XÐð  )Ø%Ø ñ
ð 	ð"  .×1Ñ1Ð2CÀ]ÓSˆð		¤C¨$¡Jð 		´3¸±:ó 		ñ ,¨M×,=Ñ,=¸lÓ,KÓLˆ
Ù)¨-×*;Ñ*;¸JÓ*GÓHˆÙ+¨M×,=Ñ,=¸lÓ,KÓLˆ
Ù%4°]×5FÑ5FÐG\Ó5]Ó%^ÐÙ,¨]×->Ñ->¸}Ó-MÓNˆð &3×%6Ñ%6Ð7GÈÓ%LÐÝ9á 2Üà'×+Ñ+¨L¸!Ó<Ø'×+Ñ+¨K¸Ó;Ø'×+Ñ+¨I°qÓ9Ø'×+Ñ+¨J¸Ó:Ø'×+Ñ+¨I°qÓ9ðóð *×-Ñ-¨k¸1Ó=Ø&×*Ñ*¨9°aÓ8ô!
ˆô ò 
Ùð
áð
ñ $ð
ñ ð	
ñ
 !ð
ñ $ð
ñ !ð
ñ $ð
ñ ð
ð "Ò5¤S¬¯©«Ó%5øð
ð *;¸mÒ)K™:ÐQUøð
ñ "ð
ñ ð
ð &7¸'Ò%A™Àtøð
ñ ð
ñ  '2‘{°tøð!
ð" 3DÀ{Ò2RÑ.ÐX\øð#
ð$ '8¸;Ò&FÉ8™(ÐY]øð%
ñ& *ð'
ñ( ð)
ð 	
øô ò 	OÜÐIÈ!ÈÐMÓNÐNûð	Oús   ‚G> Ç>	HÈHÈHÚerror_messageÚstatus_coder   c                 ó„   — ddl m} t        |t        «      rt	        |«      }nt        |t        «      r|nd} ||||¬«      S )z.Get the appropriate error class for Anthropic.r   )ÚAnthropicErrorN)r’   Úmessager%   )r   r”   r.   r/   r   )r   r‘   r’   r%   r”   Úheaders_objs         r   Úget_error_classz&AnthropicBatchesConfig.get_error_classô   s;   € å1ô �gœtÔ$Ü*1°'Ó*:‰Kä%/°¼Ô%A™'ÀtˆKá¨+¸}ÐVaÔbÐbr    Úmodel_responseÚrequest_dataÚencodingztiktoken.Encoding | NoneÚ	json_modec                 ó  — ddl m} ddlm} |j                  j                  «       }g }	 |j                  d«      }|D ]{  }|j                  «       }|sŒ	 t        j                  |«      }|d   d   }| j                  j                  |||¬«      }t        |dd «      }|r|j                  t        ||«      «       Œ} |j                  |«      }t!        |d|«       |S # t        j                  $ r Y Œ³w xY w# t"        $ r}|‚d }~ww xY w)	Nr   )ÚBaseTokenUsageProcessor)ÚUsageú
Úresultr•   )Úcompletion_responserE   r˜   Úusage)Úlitellm.cost_calculatorr�   Úlitellm.types.utilsrž   ÚtextÚstripÚsplitr†   Úloadsr   Útransform_parsed_responseÚgetattrÚappendr   ÚJSONDecodeErrorÚcombine_usage_objectsÚsetattrrb   )r   r&   rE   r˜   rF   r™   r'   r(   r)   rš   r*   r›   r�   rž   Úresponse_textÚ	all_usageÚlinesÚlineÚresponse_jsonr¡   Útransformed_responseÚtransformed_response_usageÚcombined_usagerŒ   s                           r   Útransform_responsez)AnthropicBatchesConfig.transform_response   s$  € õ 	DÝ-à+×0Ñ0×6Ñ6Ó8ˆØ(*ˆ	ð	à(×.Ñ.¨tÓ4ˆEØò �Ø—z‘z“|�ÙØðÜ$(§J¡J¨tÓ$4�Mà*7¸Ñ*AÀ)Ñ*LÐ'Ø+/×+EÑ+E×+_Ñ+_Ø,?Ø%1Ø'5ð ,`ó ,Ð(ô 29Ð9MÈwÐX\Ó1]Ð.Ù1Ø!×(Ñ(¬¨eÐ5OÓ)PÔQøð!ð* %<×$QÑ$QÐR[Ó$\ˆNÜ�N G¨^Ô<à!Ð!øô ×+Ñ+ò Ùðûô ò 	ØˆGûð	ús<   ª)C4 ÁA%CÂ9!C4 ÃC1Ã.C4 Ã0C1Ã1C4 Ã4	DÃ=C?Ã?D)NN)Ú__name__Ú
__module__Ú__qualname__r   Úpropertyr   r$   r/   r‡   Úlistr   r6   r   r=   Úbytesr   rC   Úhttpxr	   ÚLoggingClassr   rH   rM   rP   r�   r`   r   r—   r   Úboolr·   rO   r    r   r   r      sç  „ ò9ð ð& \ò &ó ð&ð #Ø#ñàðð ðð Ð'Ñ(ð	ð
 ðð ðð �t‘ðð ˜‘*ðð 
óð<à˜‘*ðð �t‘ðð ð	ð
 ðð ðð !ðð 
óðVàðVð .ðVð ð	Vð
 ðVð 
�‰�t˜C ˜H‘~Ñ	%óVðVà�T‰zðVð —n‘nðVð "ð	Vð
 ðVð 
óVðPà˜‘*ðPð ðPð ð	Pð
 ðPð 
óPð.àðð ðð ð	ð
 
�‰�t˜C ˜H‘~Ñ	%óð^
à�T‰zð^
ð —n‘nð^
ð "ð	^
ð
 ð^
ð 
ó^
ð@
c¨Sð 
c¸sð 
cÈTÐT[É^ð 
cÐ`ró 
cð. #Ø!%ñ1àð1ð ð1ð &ð	1ð
 "ð1ð ð1ð Ð'Ñ(ð1ð ð1ð ð1ð -ð1ð �t‘ð1ð ˜$‘;ð1ð 
ô1r    r   )r†   rŠ   Útypingr   r   r   r   r   r¾   r   r	   Ú$litellm.litellm_core_utils.url_utilsr
   Ú,litellm.llms.base_llm.batches.transformationr   Ú)litellm.llms.base_llm.chat.transformationr   Úlitellm.types.llms.openair   r   r¤   r   r   r   ÚtiktokenÚ*litellm.litellm_core_utils.litellm_loggingr   ÚLiteLLMLoggingObjr¿   r   rO   r    r   ú<module>rÉ      sK   ðÛ Û ß ;Õ ;ã ß #å HÝ JÝ Fß Jß IÑ IáÛåWà$�Là€LôYÐ.õ Yr    