Ë
    uPêjz¬  ã                   ó:  — U d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
mZmZ ddlZddlmZ ddlZddlmZ ddlmZ dd	l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" ddl#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;  e$«       Z<e
e=d<    e«       Z>e
e=d<    e&d¬«      Z?e
e=d<    e«       Z@e
e=d<    e"«       ZA	 dCde/deBeCe	f   deCdeDd eDf
d!„ZEe8	 	 	 	 	 dDd"ed#   d$ed%   d&eCded'   d(eBeCeCf   dz  d)eBeCeCf   dz  d*eBeCeCf   dz  d+eBeCe	f   dz  d e4fd,„«       ZFe8	 	 	 	 	 dDd"ed#   d$ed%   d&eCded'   d(eBeCeCf   dz  d)eBeCeCf   dz  d*eBeCeCf   dz  d+eBeCe	f   dz  d e4ee	e	e4f   z  fd-„«       ZGe8	 	 	 	 dEd.eCded/   d(eBeCeCf   dz  d)eBeCeCf   dz  d*eBeCeCf   dz  d e4fd0„«       ZH	 	 dFd.eCde/d1eDej’                  z  d2eBd3e-d4eJded/   d5edz  fd6„ZKe8	 	 	 	 dEd.eCded/   d(eBeCeCf   dz  d)eBeCeCf   dz  d*eBeCeCf   dz  d e4ee	e	e4f   z  fd7„«       ZLe8	 	 	 	 	 	 dGd8eCdz  d9eMdz  de3d(eBeCeCf   dz  d)eBeCeCf   dz  d*eBeCeCf   dz  fd:„«       ZNe8	 	 	 	 	 dHd8eCdz  d9eMdz  de3d)eBeCeCf   dz  d*eBeCeCf   dz  f
d;„«       ZO	 	 	 	 	 dId.eCd<eCdz  ded=   d(eBeCeCf   dz  d)eBeCeCf   dz  d*eBeCeCf   dz  d e4fd>„ZP	 	 	 	 	 dId.eCd<eCdz  ded=   eCz  d(eBeCeCf   dz  d)eBeCeCf   dz  d*eBeCeCf   dz  d e4ee	e	e4f   z  fd?„ZQdJd.eCd@eCd dAfdB„ZRy)Kz¦
Main File for Batches API implementation

https://platform.openai.com/docs/api-reference/batch

- create_batch()
- retrieve_batch()
- cancel_batch()
- list_batch()

é    N)Ú	Coroutine)Úpartial)ÚAnyÚFinalÚLiteralÚcast)ÚBatchRequestCounts)Úverbose_logger)Ú/add_trusted_model_credentials_to_litellm_params)ÚLogging)ÚAnthropicBatchesHandler)ÚAzureBatchesAPI)ÚBedrockBatchesHandler)ÚAsyncHTTPHandlerÚHTTPHandler)ÚBaseLLMHTTPHandler)ÚOpenAIBatchesAPI)ÚVertexAIBatchPrediction)Úget_secret_str)ÚCancelBatchRequestÚCreateBatchRequestÚFileExpiresAfterÚRetrieveBatchRequest)ÚGenericLiteLLMParams)Ú LIST_BATCHES_SUPPORTED_PROVIDERSÚ+OPENAI_COMPATIBLE_BATCH_AND_FILES_PROVIDERSÚListBatchesSupportedProviderÚLiteLLMBatchÚLlmProviders)ÚProviderConfigManagerÚclientÚget_litellm_paramsÚget_llm_providerÚsupports_httpx_timeoutÚopenai_batches_instanceÚazure_batches_instanceÚ )Úgcs_bucket_nameÚvertex_ai_batches_instanceÚanthropic_batches_instanceÚoptional_paramsÚkwargsÚcustom_llm_providerÚdefault_timeoutÚreturnc                 ó0  — | j                   xs |j                  d|«      xs |}t        |t        j                  «      rAt        |«      du r|j                  xs |}t        |«      S t        |j                  xs |«      S |€t        |«      S t        |«      S )a�  
    Resolve timeout value from various sources and handle httpx.Timeout objects.

    Args:
        optional_params: GenericLiteLLMParams object containing timeout
        kwargs: Additional kwargs that may contain request_timeout
        custom_llm_provider: Provider name for httpx timeout support check
        default_timeout: Default timeout value to use

    Returns:
        Resolved timeout as float
    Úrequest_timeoutF)ÚtimeoutÚgetÚ
isinstanceÚhttpxÚTimeoutr$   ÚreadÚfloat)r+   r,   r-   r.   r2   Úread_timeouts         úY/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/batches/main.pyÚ_resolve_timeoutr;   B   s‘   € ð$ %×,Ñ,Òq°·
±
Ð;LÈoÓ0^ÒqÐbq€Gô �'œ5Ÿ=™=Ô)Ü!Ð"5Ó6¸%Ñ?à")§,¡,Ò"A°/ˆLÜ˜Ó&Ð&ô ˜Ÿ™Ò8¨Ó9Ð9ð €Ü�_Ó%Ð%ô �‹>Ðó    Úcompletion_windowÚ24hÚendpoint)z/v1/chat/completionsú/v1/embeddingsz/v1/completionsz/v1/responsesÚinput_file_id)ÚopenaiÚazureÚ	vertex_aiÚbedrockÚhosted_vllmÚlitellm_proxyÚmetadataÚextra_headersÚ
extra_bodyÚoutput_expires_afterc              ‹   ón  K  — 	 t        j                  «       }	d|d<   t        t        | |||||||f	i |¤Ž}
t	        j
                  «       }t        |j                  |
«      }|	j                  d|«      ƒ d{  –—† }t        j                  |«      r|ƒ d{  –—† }|S |}|S 7 Œ)7 Œ# t        $ r}|‚d}~ww xY w­w)z‘
    Async: Creates and executes a batch from an uploaded file of request

    LiteLLM Equivalent of POST: https://api.openai.com/v1/batches
    TÚacreate_batchN)
ÚasyncioÚget_event_loopr   Úcreate_batchÚcontextvarsÚcopy_contextÚrunÚrun_in_executorÚiscoroutineÚ	Exception)r=   r?   rA   r-   rH   rI   rJ   rK   r,   ÚloopÚfuncÚctxÚfunc_with_contextÚinit_responseÚresponseÚes                   r:   rM   rM   i   sÖ   è ø€ ð"Ü×,Ñ,Ó.ˆØ"&ˆˆÑô ÜØØØØØØØØ ñ
ð ñ
ˆô !×-Ñ-Ó/ˆÜ#*¨3¯7©7°DÓ#9ÐØ%)×%9Ñ%9¸$Ð@QÓ%R×Rˆä×Ñ˜}Ô-Ø*×*ˆHð ˆð %ˆHàˆð  Søð +ùô
 ò ØˆûðüsY   ‚B5„A0B" Á4BÁ5B" ÂB ÂB" ÂB5ÂB" ÂB5ÂB" Â B" Â"	B2Â+B-Â-B2Â2B5c                 óÖ	  — 	 t        d2i |¤Ž}	|j                  dd«      }
|j                  dd«      }|j                  dd«      }|j                  dd«      }	 |�t        |d¬«      \  }}}}|j                  dd	«      d
u }t        t        d2i |¤Ž«      }t        t        |j                  dd«      «      }t        |	||«      }|j                  ||d|	j                  «       |
||di dœ|	j                  d
¬«      ¥|¬«       t        | |||||¬«      }|�t        t        |«      |d<   |�!t        j                   |t#        |«      ¬«      }nd}|�`t$        j'                  ||||xs i |	j(                  |	j*                  ||t,        � t/        t,        t0        t2        f«      rt,        nd||¬«      }|S d}|t4        v rù|	j(                  xsB t6        j(                  xs0 t9        j:                  d«      xs t9        j:                  d«      xs d}|	j<                  xs, t6        j<                  xs t9        j:                  dd«      xs d}|	j*                  xs9 t6        j*                  xs' t6        j>                  xs t9        j:                  d«      }t@        j'                  ||||||	jB                  |¬«      }|S |dk(  rû|	j(                  xs t6        j(                  xs tE        d«      }|	jF                  xs t6        jF                  xs tE        d«      }|	j*                  xs< t6        j*                  xs* t6        jH                  xs tE        d«      xs tE        d«      }|	j                  di «      }|�|j                  dd«       ntE        d «       tJ        j'                  ||||||	jB                  ||¬!«      }|S |d"k(  r¨|	j(                  xs d#}|	jL                  xs t6        jL                  xs tE        d$«      }|	jN                  xs t6        jN                  xs tE        d%«      }|	jP                  xs tE        d&«      }tR        j'                  |||||||	jB                  |¬'«      }|S t6        jT                  jW                  d(|› d)�d*|tY        jZ                  d+d,tY        j\                  d-d.¬/«      ¬0«      ¬1«      ‚# t        $ r!}t	        j
                  d|«       Y d}~�Œfd}~ww xY w# t        $ r}|‚d}~ww xY w)3zŠ
    Creates and executes a batch from an uploaded file of request

    LiteLLM Equivalent of POST: https://api.openai.com/v1/batches
    Úlitellm_call_idNÚproxy_server_requestÚ
model_infoÚmodel©rb   r-   zRlitellm.batches.main.py::create_batch() - Error inferring custom_llm_provider - %srM   FTÚlitellm_logging_obj)r_   r`   ra   Úpreset_cache_keyÚstream_response)Úexclude_unset©r,   rb   Úuserr+   Úlitellm_paramsr-   )r=   r?   rA   rH   rI   rJ   rK   ©rb   Úprovider)Úprovider_configrj   Úcreate_batch_dataÚheadersÚapi_baseÚapi_keyÚlogging_objÚ	_is_asyncr!   r2   rb   ÚOPENAI_BASE_URLÚOPENAI_API_BASEúhttps://api.openai.com/v1ÚOPENAI_ORGANIZATIONÚOPENAI_API_KEY)rp   rq   Úorganizationrn   r2   Úmax_retriesrs   rC   ÚAZURE_API_BASEÚAZURE_API_VERSIONÚAZURE_OPENAI_API_KEYÚAZURE_API_KEYrJ   Úazure_ad_tokenÚAZURE_AD_TOKEN)rs   rp   rq   Úapi_versionr2   rz   rn   rj   rD   r'   ÚVERTEXAI_PROJECTÚVERTEXAI_LOCATIONÚVERTEXAI_CREDENTIALS)rs   rp   Úvertex_projectÚvertex_locationÚvertex_credentialsr2   rz   rn   ú,LiteLLM doesn't support custom_llm_provider=z for 'create_batch'ún/aé�  úUnsupported providerrP   ú"https://github.com/BerriAI/litellm©ÚmethodÚurl©Ústatus_codeÚcontentÚrequest©Úmessagerb   Úllm_providerr\   © )/r   r3   r#   rV   r
   Ú	exceptionÚpopÚdictr   ÚLiteLLMLoggingObjr;   Úupdate_from_kwargsÚ
model_dumpr   r   r    Úget_provider_batches_configr   Úbase_llm_http_handlerrP   rp   rq   r!   r4   r   r   r   ÚlitellmÚosÚgetenvry   Ú
openai_keyr%   rz   r   r�   Ú	azure_keyr&   r…   r†   r‡   r)   Ú
exceptionsÚBadRequestErrorr5   ÚResponseÚRequest)r=   r?   rA   r-   rH   rI   rJ   rK   r,   r+   r_   r`   ra   rb   Ú_r]   rs   rj   rd   r2   Ú_create_batch_requestrm   r\   rp   ry   rq   r�   Úvertex_ai_projectÚvertex_ai_locationr‡   s                                 r:   rP   rP   ›   s_  € ð"dÜ!5Ñ!?¸Ñ!?ˆØ!'§¡Ð,=¸tÓ!DˆØ&,§j¡jÐ1GÈÓ&NÐØ"ŸJ™J |°TÓ:ˆ
Ø"ŸJ™J w°Ó5ˆð		ØÐ Ü!1ØØ(,ô"‘��q˜!˜Qð "Ÿ:™: o°uÓ=ÀÐEˆ	Ü $Ô%9Ñ%C¸FÑ%CÓ DˆÜ8<Ô=NÐPV×PZÑPZÐ[pÐrvÓPwÓ8xÐä)¨/¸6ÐCVÓWˆØ×.Ñ.ØØØØ+×6Ñ6Ó8à#2Ø(<Ø(Ø$(Ø#%ñð "×,Ñ,¸4Ð,Ó@ðð !4ð 	/ô 	
ô  (:Ø/ØØ'ØØ'Ø!ô(
Ðð  Ð+Ü<@ÔAQÐSgÓ<hÐ!Ð"8Ñ9ØÐÜ3×OÑOØÜ%Ð&9Ó:ô‰Oð
 #ˆOØÐ&Ü,×9Ñ9Ø /Ø-Ø"7Ø%Ò+¨Ø(×1Ñ1Ø'×/Ñ/Ø/Ø#Ü"(Ð"4¼ÄFÌ[ÔZjÐLkÔ9l�ÐrvØØð :ó ˆHð ˆOØ#ˆØÔ"MÑMð  ×(Ñ(ò /Ü×#Ñ#ò/ä—9‘9Ð.Ó/ò/ô —9‘9Ð.Ó/ò/ð /ð ð  ×,Ñ,ò Ü×'Ñ'òä—9‘9Ð2°DÓ9òð ð	 ð  ×'Ñ'ò /Ü—?‘?ò/ä×%Ñ%ò/ô —9‘9Ð-Ó.ð	 ô /×;Ñ;Ø!ØØ)Ø"7ØØ+×7Ñ7Ø#ð <ó ˆHðH ˆðw ! GÒ+Ø&×/Ñ/Òg´7×3CÑ3CÒgÄ~ÐVfÓGgˆHØ)×5Ñ5Òs¼×9LÑ9LÒsÔP^Ð_rÓPsˆKð  ×'Ñ'ò 3Ü—?‘?ò3ä×$Ñ$ò3ô "Ð"8Ó9ò3ô " /Ó2ð ð )×,Ñ,¨\¸2Ó>ˆJØÐ%Ø—‘Ð/°Õ6äÐ/Ô0ä-×:Ñ:Ø#Ø!ØØ'ØØ+×7Ñ7Ø"7Ø-ð ;ó 	ˆHðR ˆð? ! KÒ/Ø&×/Ñ/Ò5°2ˆHà×.Ñ.Òn´'×2HÑ2HÒnÌNÐ[mÓLnð ð  ×/Ñ/Òq´7×3JÑ3JÒqÌnÐ]pÓNqð ð )8×(JÑ(JÒ(tÌnÐ]sÓNtÐä1×>Ñ>Ø#Ø!Ø0Ø 2Ø#5ØØ+×7Ñ7Ø"7ð ?ó 	ˆHð* ˆô ×$Ñ$×4Ñ4ØFÐGZÐF[Ð[nÐoØØ0ÜŸ™Ø #Ø2Ü!ŸM™M°ÐEiÔjôð	 5ó 	ð 	øôY ò 	Ü×$Ñ$ØdÐfg÷ò ûð	ûôn ò Øˆûðús_   ‚AS ÁR+ Á*D>S Æ)DS Ê,C?S Î,B,S ÑAS Ò+	SÒ4SÓ
S ÓSÓS Ó	S(Ó!S#Ó#S(Úbatch_id)rB   rC   rD   rE   rF   rG   Ú	anthropicc              ‹   óh  K  — 	 t        j                  «       }d|d<   t        t        | ||||fi |¤Ž}t	        j
                  «       }t        |j                  |«      }	|j                  d|	«      ƒ d{  –—† }
t        j                  |
«      r|
ƒ d{  –—† }|S |
}|S 7 Œ)7 Œ# t        $ r}|‚d}~ww xY w­w)zo
    Async: Retrieves a batch.

    LiteLLM Equivalent of GET https://api.openai.com/v1/batches/{batch_id}
    TÚaretrieve_batchN)
rN   rO   r   Úretrieve_batchrQ   rR   rS   rT   rU   rV   )r­   r-   rH   rI   rJ   r,   rW   rX   rY   rZ   r[   r\   r]   s                r:   r°   r°   S  sÌ   è ø€ ð Ü×,Ñ,Ó.ˆØ$(ˆÐ Ñ!ô ÜØØØØØñ
ð ñ
ˆô !×-Ñ-Ó/ˆÜ#*¨3¯7©7°DÓ#9ÐØ%)×%9Ñ%9¸$Ð@QÓ%R×RˆÜ×Ñ˜}Ô-Ø*×*ˆHð ˆð %ˆHàˆð  Søà*ùô
 ò ØˆûðüóY   ‚B2„A-B Á1BÁ2B ÂBÂB ÂB2ÂB ÂB2ÂB ÂB Â	B/Â(B*Â*B/Â/B2r2   rj   Ú_retrieve_batch_requestrs   rr   c                 óJ  — d }|t         v rù|j                  xsB t        j                  xs0 t        j                  d«      xs t        j                  d«      xs d}|j
                  xs, t        j
                  xs t        j                  dd «      xs d }	|j                  xs9 t        j                  xs' t        j                  xs t        j                  d«      }
t        j                  ||||
|	||j                  ¬«      }|S |dk(  rû|j                  xs t        j                  xs t        d«      }|j                  xs t        j                  xs t        d	«      }|j                  xs< t        j                  xs* t        j                  xs t        d
«      xs t        d«      }
|j                  di «      }|�|j                  dd «       nt        d«       t         j                  |||
|||j                  ||¬«      }|S |dk(  r©|j                  xs d}|j"                  xs t        j"                  xs t        d«      }|j$                  xs t        j$                  xs t        d«      }|j&                  xs t        d«      }t(        j                  || ||||||j                  |¬«	      }|S |dk(  rœ|j                  xs* t        j                  xs t        d«      xs t        d«      }|j                  xs/ t        j                  xs t        j                  xs t        d«      }
t*        j                  || ||
||j                  ¬«      }|S t        j,                  j/                  d|› d�d|t1        j2                  ddt1        j4                  d d!¬"«      ¬#«      ¬$«      ‚)%Nrt   ru   rv   rw   rx   )rs   Úretrieve_batch_datarp   rq   ry   r2   rz   rC   r{   r|   r}   r~   rJ   r   r€   )rs   rp   rq   r�   r2   rz   rµ   rj   rD   r'   r‚   rƒ   r„   )	rs   r­   rp   r…   r†   r‡   r2   rz   rr   r®   ÚANTHROPIC_API_BASEÚANTHROPIC_BASE_URLÚANTHROPIC_API_KEY)rs   r­   rp   rq   r2   rz   rˆ   zÓ for 'retrieve_batch' without a `model` kwarg. Supported via this path: 'openai', 'azure', 'vertex_ai', 'anthropic'. 'bedrock' is supported but requires `model` to be passed so the provider config can be loaded.r‰   rŠ   r‹   r±   rŒ   r�   r�   r”   )r   rp   r    r¡   r¢   ry   rq   r£   r%   r±   rz   r   r�   r¤   r3   r™   r&   r…   r†   r‡   r)   r*   r¥   r¦   r5   r§   r¨   )r­   r+   r2   rj   r³   rs   r-   rr   rp   ry   rq   r\   r�   rJ   r«   r¬   r‡   s                    r:   Ú8_handle_retrieve_batch_providers_without_provider_configr¹     sÚ  € ð  €HØÔIÑIð ×$Ñ$ò +Ü×Ñò+ä�y‰yÐ*Ó+ò+ô �y‰yÐ*Ó+ò+ð +ð 	ð ×(Ñ(ò Ü×#Ñ#òä�y‰yÐ.°Ó5òð ð	 	ð ×#Ñ#ò +Ü�‰ò+ä×!Ñ!ò+ô �y‰yÐ)Ó*ð	 	ô +×9Ñ9ØØ 7ØØØ%ØØ'×3Ñ3ð :ó 
ˆðt €Oðc 
 Ò	'Ø"×+Ñ+Òc¬w×/?Ñ/?ÒcÄ>ÐRbÓCcˆØ,×8Ñ8Òv¼G×<OÑ<OÒvÔSaÐbuÓSvˆð ×#Ñ#ò /Ü�‰ò/ä× Ñ ò/ô Ð4Ó5ò/ô ˜oÓ.ð 	ð ,×/Ñ/°¸bÓAˆ
ØÐ!Ø�N‰NÐ+¨TÕ2äÐ+Ô,ä)×8Ñ8ØØØØ#ØØ'×3Ñ3Ø 7Ø)ð 9ó 	
ˆð~ €Oðk 
 Ò	+Ø"×+Ñ+Ò1¨rˆà×*Ñ*Òj¬g×.DÑ.DÒjÌÐWiÓHjð 	ð ×+Ñ+Òm¬w×/FÑ/FÒmÌ.ÐYlÓJmð 	ð %4×$FÑ$FÒ$pÌ.ÐYoÓJpÐä-×<Ñ<ØØØØ,Ø.Ø1ØØ'×3Ñ3Ø#ð =ó 

ˆðV €OðA 
 Ò	+à×$Ñ$ò 4Ü×Ñò4äÐ2Ó3ò4ô Ð2Ó3ð	 	ð "×)Ñ)Òx¬W¯_©_ÒxÄ×@QÑ@QÒxÔUcÐdwÓUxˆä-×<Ñ<ØØØØØØ'×3Ñ3ð =ó 
ˆð. €Oô × Ñ ×0Ñ0à>Ð?RÐ>Sð Tqð qð Ø,Ü—^‘^ØØ.ÜŸ™Ð-=ÐCgÔhôð 1ó 
ð 	
r<   c                 óD  — 	 t        di |¤Ž}|j                  dd«      }|j                  xs |j                  dd«      xs d}t        dd|i|¤Ž}	t	        |	|«       |�%|j                  |dd|j                  «       |	|¬«       |�:t        |t        j                  «      r t        |«      du r|j                  xs d}
|
}n,|�&t        |t        j                  «      st        |«      }n|€d}t        | ||¬	«      }|j                  d
d«      du }|j                  dd«      }| j                  d«      r¡d| v r�d| v rK|j!                  «       }|j                  dd«       t#        j$                  d| |j                  dd«      |dœ|¤ŽS d| v rJ|j!                  «       }|j                  dd«       t#        j&                  d| |j                  d«      |dœ|¤ŽS |j                  dd«      }|�!t)        j*                  |t-        |«      ¬«      }nd}|�rt.        j1                  | ||	|xs i |j2                  |j4                  |xs t7        |xs |› d�g dddd| z   d¬«      ||�t        |t8        t:        f«      r|nd||¬«      }|S t=        | |||	||||¬«      S # t>        $ r}|‚d}~ww xY w)zh
    Retrieves a batch.

    LiteLLM Equivalent of GET https://api.openai.com/v1/batches/{batch_id}
    rd   Nr1   éX  r-   rh   Fç     À‚@©r­   rI   rJ   r°   Tr!   zarn:awsz	:bedrock:z:async-invoke/Úaws_region_namez	us-east-1)r­   r¾   rr   z:model-invocation-job/rb   rk   z/unknownÚbatch_retrieveÚbatch_retrieve_)rb   ÚmessagesÚstreamÚ	call_typeÚ
start_timer_   Úfunction_id)r­   rm   rj   ro   rp   rq   rr   rs   r!   r2   rb   )r­   r-   r+   rj   r³   rs   r2   rr   r—   ) r   r3   r2   r"   r   rœ   r�   r4   r5   r6   r$   r7   r8   r   r™   Ú
startswithÚcopyr   Ú_handle_async_invoke_statusÚ#_handle_model_invocation_job_statusr    rž   r   rŸ   r±   rp   rq   r›   r   r   r¹   rV   )r­   r-   rH   rI   rJ   r,   r+   rd   r2   rj   r9   r³   rs   r!   Úasync_kwargsÚ
mij_kwargsrb   rm   r\   r]   s                       r:   r±   r±      s%  € ð yÜ!5Ñ!?¸Ñ!?ˆØ?E¿z¹zÐJ_ÐaeÓ?fÐà!×)Ñ)ÒV¨V¯Z©ZÐ8IÈ3Ó-OÒVÐSVˆÜ 2ñ !
Ø 3ð!
àñ!
ˆô 	8¸ÈÔOØÐ*Ø×2Ñ2ØØØØ /× :Ñ :Ó <Ø-Ø$7ð 3ô ð ÐÜ˜7¤E§M¡MÔ2Ü&Ð':Ó;¸uÑDà")§,¡,Ò"5°#ˆLØ"‰GØÐ ¬°G¼U¿]¹]Ô)KÜ˜G“n‰GØˆ_ØˆGä)=ØØ'Ø!ô*
Ðð "Ÿ:™:Ð&7¸Ó?À4ÐGˆ	ØŸ
™
 8¨TÓ2ˆð ×Ñ˜yÔ)¨k¸XÑ.EØ 8Ñ+à&,§k¡k£m�Ø× Ñ Ð!2°DÔ9ä,×HÑHð Ø%Ø$*§J¡JÐ/@À+Ó$NØ 3ñð #ñ	ð ð (¨8Ñ3Ø$*§K¡K£M�
Ø—‘Ð0°$Ô7ä,×PÑPð Ø%Ø$*§J¡JÐ/@Ó$AØ 3ñð !ñ	ð ð $*§:¡:¨g°tÓ#<ˆØÐÜ3×OÑOØÜ%Ð&9Ó:ô‰Oð
 #ˆOàÐ&Ü3×BÑBØ!Ø /Ø-Ø%Ò+¨Ø(×1Ñ1Ø'×/Ñ/Ø/ò 	Ü$ØÒCÐ&9Ð%:¸(Ð#CØØ Ø.Ø#Ø$5¸Ñ$@Ø 0ôð $Ø"(Ð"4¼ÀFÌ[ÔZjÐLkÔ9l™ÐrvØØð) Có ˆHð, ˆOô
 HØØ 3Ø+Ø)Ø$;ØØØ+ô	
ð 		
øô ò Øˆûðús,   ‚F J ÆAJ ÇB*J É<J Ê	JÊJÊJÚafterÚlimitc              ‹   óh  K  — 	 t        j                  «       }d|d<   t        t        | ||||fi |¤Ž}t	        j
                  «       }	t        |	j                  |«      }
|j                  d|
«      ƒ d{  –—† }t        j                  |«      r|ƒ d{  –—† }|S |}|S 7 Œ)7 Œ# t        $ r}|‚d}~ww xY w­w)z2
    Async: List your organization's batches.
    TÚalist_batchesN)
rN   rO   r   Úlist_batchesrQ   rR   rS   rT   rU   rV   )rÌ   rÍ   r-   rH   rI   rJ   r,   rW   rX   rY   rZ   r[   r\   r]   s                 r:   rÏ   rÏ   Œ  sË   è ø€ ðÜ×,Ñ,Ó.ˆØ"&ˆˆÑô ÜØØØØØñ
ð ñ
ˆô !×-Ñ-Ó/ˆÜ#*¨3¯7©7°DÓ#9ÐØ%)×%9Ñ%9¸$Ð@QÓ%R×RˆÜ×Ñ˜}Ô-Ø*×*ˆHð ˆð %ˆHàˆð  Søà*ùô
 ò Øˆûðür²   c                 óì  — 	 t        d(i |¤Ž}t        d(d|i|¤Ž}|j                  xs9 t        j                  xs' t        j                  xs t        j                  d«      }|j                  xs |j                  dd«      xs d}	|	�:t        |	t        j                  «      r t        |«      du r|	j                  xs d}
|
}	n,|	�&t        |	t        j                  «      st        |	«      }	n|	€d}	|j                  dd«      d	u }|t         v r³|j"                  xsB t        j"                  xs0 t        j                  d
«      xs t        j                  d«      xs d}|j$                  xs, t        j$                  xs t        j                  dd«      xs d}t&        j)                  || |||||	|j*                  ¬«      }|S |dk(  rú|j"                  xs t        j"                  xs t-        d«      }|j.                  xs t        j.                  xs t-        d«      }|j                  xs< t        j                  xs* t        j0                  xs t-        d«      xs t-        d«      }|j                  di «      }|�|j                  dd«       nt-        d«       t2        j)                  |||||	|j*                  |¬«      }|S |dk(  r©|j"                  xs d}|j4                  xs t        j4                  xs t-        d«      }|j6                  xs t        j6                  xs t-        d«      }|j8                  xs t-        d«      }t:        j)                  || ||||||	|j*                  ¬«	      }|S t        j<                  j?                  djA                  |djC                  tE        tF        «      «      «      d |t        jH                  d!d"t        jJ                  d#d$¬%«      ¬&«      ¬'«      ‚# tL        $ r}|‚d}~ww xY w))z>
    Lists batches

    List your organization's batches.
    r-   rx   r1   r»   NFr¼   rÏ   Trt   ru   rv   rw   )rs   rÌ   rÍ   rp   rq   ry   r2   rz   rC   r{   r|   r}   r~   rJ   r   r€   )rs   rp   rq   r�   r2   rz   rj   rD   r'   r‚   rƒ   r„   )	rs   rÌ   rÍ   rp   r…   r†   r‡   r2   rz   zELiteLLM doesn't support {} for 'list_batch'. Supported providers: {}.z, r‰   rŠ   r‹   Úcreate_threadrŒ   r�   r�   r”   r—   )'r   r"   rq   r    r£   r¡   r¢   r2   r3   r4   r5   r6   r$   r7   r8   r™   r   rp   ry   r%   rÐ   rz   r   r�   r¤   r&   r…   r†   r‡   r)   r¥   r¦   ÚformatÚjoinÚsortedr   r§   r¨   rV   )rÌ   rÍ   r-   rI   rJ   r,   r+   rj   rq   r2   r9   rs   rp   ry   r\   r�   r«   r¬   r‡   r]   s                       r:   rÐ   rÐ   ·  s  € ðxä!5Ñ!?¸Ñ!?ˆÜ 2ñ !
Ø 3ð!
àñ!
ˆð
 ×#Ñ#ò +Ü�‰ò+ä×!Ñ!ò+ô �y‰yÐ)Ó*ð	 	ð "×)Ñ)ÒV¨V¯Z©ZÐ8IÈ3Ó-OÒVÐSVˆð ÐÜ˜7¤E§M¡MÔ2Ü&Ð':Ó;¸uÑDà")§,¡,Ò"5°#ˆLØ"‰GØÐ ¬°G¼U¿]¹]Ô)KÜ˜G“n‰GØˆ_ØˆGà!Ÿ:™: o°uÓ=ÀÐEˆ	ØÔ"MÑMð  ×(Ñ(ò /Ü×#Ñ#ò/ä—9‘9Ð.Ó/ò/ô —9‘9Ð.Ó/ò/ð /ð ð  ×,Ñ,ò Ü×'Ñ'òä—9‘9Ð2°DÓ9òð ð	 ô /×;Ñ;Ø#ØØØ!ØØ)ØØ+×7Ñ7ð <ó 	ˆHðP ˆð} ! GÒ+Ø&×/Ñ/Òg´7×3CÑ3CÒgÄ~ÐVfÓGgˆHØ)×5Ñ5Òs¼×9LÑ9LÒsÔP^Ð_rÓPsˆKð  ×'Ñ'ò 3Ü—?‘?ò3ä×$Ñ$ò3ô "Ð"8Ó9ò3ô " /Ó2ð ð )×,Ñ,¨\¸2Ó>ˆJØÐ%Ø—‘Ð/°Õ6äÐ/Ô0ä-×:Ñ:Ø#Ø!ØØ'ØØ+×7Ñ7Ø-ð ;ó ˆHðX ˆðG ! KÒ/Ø&×/Ñ/Ò5°2ˆHà×.Ñ.Òn´'×2HÑ2HÒnÌNÐ[mÓLnð ð  ×/Ñ/Òq´7×3JÑ3JÒqÌnÐ]pÓNqð ð )8×(JÑ(JÒ(tÌnÐ]sÓNtÐä1×>Ñ>Ø#ØØØ!Ø0Ø 2Ø#5ØØ+×7Ñ7ð ?ó 
ˆHð2 ˆô ×$Ñ$×4Ñ4Ø_×fÑfØ'Ø—I‘IœfÔ%EÓFÓGóð Ø0ÜŸ™Ø #Ø2Ü!ŸM™M°ÐFjÔkôð 5ó ð øô ò Øˆûðús-   ‚F9O# Æ<C>O# Ê;B-O# Í)A:O# Ï#	O3Ï,O.Ï.O3rb   )rB   rC   rD   rE   rG   c           	   ‹   ó–  K  — 	 t        j                  «       }d|d<   |j                  dd«      xs |}t        t        | |||||fi |¤Ž}t        j                  «       }	t        |	j                  |«      }
|j                  d|
«      ƒ d{  –—† }t        j                  |«      r|ƒ d{  –—† }|S |}|S 7 Œ)7 Œ# t        $ r}|‚d}~ww xY w­w)zu
    Async: Cancels a batch.

    LiteLLM Equivalent of POST https://api.openai.com/v1/batches/{batch_id}/cancel
    TÚacancel_batchrb   N)rN   rO   r™   r   Úcancel_batchrQ   rR   rS   rT   rU   rV   )r­   rb   r-   rH   rI   rJ   r,   rW   rX   rY   rZ   r[   r\   r]   s                 r:   r×   r×   @  så   è ø€ ðÜ×,Ñ,Ó.ˆØ"&ˆˆÑð —
‘
˜7 DÓ)Ò2¨Uˆô ÜØØØØØØñ	
ð ñ	
ˆô !×-Ñ-Ó/ˆÜ#*¨3¯7©7°DÓ#9ÐØ%)×%9Ñ%9¸$Ð@QÓ%R×RˆÜ×Ñ˜}Ô-Ø*×*ˆHð ˆð %ˆHàˆð  Søà*ùô
 ò ØˆûðüsY   ‚C	„BB6 ÂB2Â	B6 Â'B4Â(B6 Â-C	Â.B6 Â1C	Â2B6 Â4B6 Â6	CÂ?CÃCÃC	c                 óz  — 	 	 |�t        ||¬«      \  }}}}t	        d,i |¤Ž}	t        d,d|i|¤Ž}
|	j                  xs |j                  dd«      xs d}|�:t        |t        j                  «      r t        |«      du r|j                  xs d}|}n,|�&t        |t        j                  «      st        |«      }n|€d}t        | ||¬	«      }|j                  d
d«      du }d}|t         v rù|	j"                  xsB t$        j"                  xs0 t'        j(                  d«      xs t'        j(                  d«      xs d}|	j*                  xs, t$        j*                  xs t'        j(                  dd«      xs d}|	j,                  xs9 t$        j,                  xs' t$        j.                  xs t'        j(                  d«      }t0        j3                  |||||||	j4                  ¬«      }|S |dk(  rû|	j"                  xs t$        j"                  xs t7        d«      }|	j8                  xs t$        j8                  xs t7        d«      }|	j,                  xs< t$        j,                  xs* t$        j:                  xs t7        d«      xs t7        d«      }|	j                  di «      }|�|j                  dd«       nt7        d«       t<        j3                  ||||||	j4                  ||
¬«      }|S |dk(  r¨|	j"                  xs d}|	j>                  xs t$        j>                  xs t7        d«      }|	j@                  xs t$        j@                  xs t7        d«      }|	jB                  xs t7        d«      }tD        j3                  || ||||||	j4                  ¬«      }|S |d k(  rtG        j2                  d,d!| i|¤Ž}|S t$        jH                  jK                  d"|› d#�d$|t        jL                  d%d&t        jN                  d'd(¬)«      ¬*«      ¬+«      ‚# t        $ r!}t        j                  d|«       Y d}~�Œd}~ww xY w# t        $ r}|‚d}~ww xY w)-zn
    Cancels a batch.

    LiteLLM Equivalent of POST https://api.openai.com/v1/batches/{batch_id}/cancel
    Nrc   zRlitellm.batches.main.py::cancel_batch() - Error inferring custom_llm_provider - %sr-   r1   r»   Fr¼   r½   r×   Trt   ru   rv   rw   rx   )rs   Úcancel_batch_datarp   rq   ry   r2   rz   rC   r{   r|   r}   r~   rJ   r   r€   )rs   rp   rq   r�   r2   rz   rÚ   rj   rD   r‚   rƒ   r„   )rs   r­   rp   r…   r†   r‡   r2   rz   rE   r­   zLiteLLM doesn't support zV for 'cancel_batch'. Only 'openai', 'azure', 'vertex_ai', and 'bedrock' are supported.r‰   rŠ   r‹   rØ   rŒ   r�   r�   r”   r—   )(r#   rV   r
   r˜   r   r"   r2   r3   r4   r5   r6   r$   r7   r8   r   r™   r   rp   r    r¡   r¢   ry   rq   r£   r%   rØ   rz   r   r�   r¤   r&   r…   r†   r‡   r)   r   r¥   r¦   r§   r¨   )r­   rb   r-   rH   rI   rJ   r,   r©   r]   r+   rj   r2   r9   Ú_cancel_batch_requestrs   rp   ry   rq   r\   r�   r«   r¬   r‡   s                          r:   rØ   rØ   n  s‡  € ð@ð		ØÐ Ü/?ØØ(;ô0Ñ,�Ð&¨¨1ô "6Ñ!?¸Ñ!?ˆÜ 2ñ !
Ø 3ð!
àñ!
ˆð
 "×)Ñ)ÒV¨V¯Z©ZÐ8IÈ3Ó-OÒVÐSVˆð ÐÜ˜7¤E§M¡MÔ2Ü&Ð':Ó;¸uÑDà")§,¡,Ò"5°#ˆLØ"‰GØÐ ¬°G¼U¿]¹]Ô)KÜ˜G“n‰GØˆ_ØˆGä'9ØØ'Ø!ô(
Ðð "Ÿ:™: o°uÓ=ÀÐEˆ	Ø#ˆØÔ"MÑMà×(Ñ(ò /Ü×#Ñ#ò/ä—9‘9Ð.Ó/ò/ô —9‘9Ð.Ó/ò/ð /ð ð  ×,Ñ,Òv´×0DÑ0DÒvÌÏ	É	ÐRgÐimÓHnÒvÐrvð ð &×-Ñ-Òu´·±ÒuÄG×DVÑDVÒuÔZ\×ZcÑZcÐdtÓZuˆGä.×;Ñ;Ø#Ø"7Ø!ØØ)ØØ+×7Ñ7ð <ó ˆHðR ˆðA ! GÒ+Ø&×/Ñ/Òg´7×3CÑ3CÒgÄ~ÐVfÓGgˆHØ)×5Ñ5Òs¼×9LÑ9LÒsÔP^Ð_rÓPsˆKð  ×'Ñ'ò 3Ü—?‘?ò3ä×$Ñ$ò3ô "Ð"8Ó9ò3ô " /Ó2ð ð )×,Ñ,¨\¸2Ó>ˆJØÐ%Ø—‘Ð/°Õ6äÐ/Ô0ä-×:Ñ:Ø#Ø!ØØ'ØØ+×7Ñ7Ø"7Ø-ð ;ó 	ˆHð\ ˆðI ! KÒ/Ø&×/Ñ/Ò7°4ˆHà×.Ñ.Òn´'×2HÑ2HÒnÌNÐ[mÓLnð ð  ×/Ñ/Òq´7×3JÑ3JÒqÌnÐ]pÓNqð ð )8×(JÑ(JÒ(tÌnÐ]sÓNtÐä1×>Ñ>Ø#Ø!Ø!Ø0Ø 2Ø#5ØØ+×7Ñ7ð ?ó 	ˆHð4 ˆð! ! IÒ-Ü,×9Ñ9ñ Ø!ðàñˆHð ˆô ×$Ñ$×4Ñ4Ø2Ð3FÐ2Gð  H^ð  _ØØ0ÜŸ™Ø #Ø2Ü!ŸM™M°ÐEiÔjôð	 5ó 	ð 	øô[ ò 	Ü×$Ñ$ØdÐfg÷ò ûð	ûôp ò ØˆûðúsV   ƒO= —GP* Ç C?P* Ë B,P* ÎP* Î+AP* Ï=	P'ÐP"ÐP* Ð"P'Ð'P* Ð*	P:Ð3P5Ð5P:r¾   r   c                 óì   ‡ ‡‡‡‡‡	‡
— ddl Š
ddlmŠ ˆˆˆ ˆˆfd„Š	ddl}ˆ	ˆ
fd„}|j                  j                  «       5 }|j                  |«      }|j                  «       cddd«       S # 1 sw Y   yxY w)a  
    Handle async invoke status check for AWS Bedrock.

    Args:
        batch_id: The async invoke ARN
        aws_region_name: AWS region name
        **kwargs: Additional parameters

    Returns:
        dict: Status information including status, output_file_id (S3 URL), etc.
    r   N)ÚBedrockEmbeddingc               “   ó`  •K  —  ‰«       }  | j                   d‰‰‰dœ‰¤Žƒ d {  –—† }ddlm} ddlm} |j                  dd«      }|j                  «       }ddd	d	d
œ}|j                  |d«      }d}	 |d   d   d   }dd l	}	ddl
m}
  |
«       j                  ||«      \  }}}}}} ||d   d||xs t        |	j                  «       «      |||t        d|dk(  rdnd|dk(  rdnd¬«      t        di ||j                  d«      xs d|d   dœ¤Žddd¬«      }|S 7 Œò# t        t        f$ r Y Œ¬w xY w­w)N)Úinvocation_arnr¾   rr   r   )ÚBatchJobStatus)r   Ústatusr'   Ú	completedÚfailedÚin_progress)râ   rã   Ú
inprogressrä   ÚoutputDataConfigÚs3OutputDataConfigÚs3Uri)ÚBedrockBatchesConfigÚinvocationArnÚbatché   )Útotalrâ   rã   ÚfailureMessageÚmodelArn)Úoutput_file_idÚfailure_messageÚ	model_arnr>   r@   )ÚidÚobjectrá   Ú
created_atÚin_progress_atÚcompleted_atÚ	failed_atÚrequest_countsrH   r=   r?   rA   r—   )Ú_get_async_invoke_statusÚlitellm.types.llms.openairà   Úlitellm.types.utilsr   r3   ÚlowerÚKeyErrorÚ	TypeErrorÚtimeÚ+litellm.llms.bedrock.batches.transformationré   Ú_parse_timestamps_and_statusÚintr	   rš   )Úembedding_handlerÚstatus_responserà   r   Úaws_status_rawÚaws_status_lowerÚstatus_mappingÚnormalized_statusÚoutput_s3_urir   ré   rõ   rö   r÷   rø   r©   ÚresultrÝ   r¾   r­   r,   rr   s                    €€€€€r:   Ú_async_get_statusz6_handle_async_invoke_status.<locals>._async_get_status  s¯  øè ø€ á#3Ó#5Ðð (RÐ'8×'QÑ'Qð (
Ø#Ø+Ø#ñ(
ð ñ	(
÷ "
ˆõ 	=Ý4ð !0× 3Ñ 3°H¸bÓ AˆØ"0×"6Ñ"6Ó"8Ðð %ØØ'Ø(ñ	<
ˆð 4B×3EÑ3EØ˜hó4
Ðð
 ˆð	Ø+Ð,>Ñ?Ð@TÑUÐV]Ñ^ˆMó
 	åTñ !Ó"×?Ñ?ÀÐQ_Ó`ñ	
ØØØØØØá$Ø˜Ñ/ØØ$Ø!Ò5¤S¨¯©«Ó%5Ø)Ø%ØÜ-ØØ0°KÒ?™!ÀQØ-°Ò9‘q¸qôô
 ñ à&3Ø'6×':Ñ':Ð;KÓ'LÒ'RÐPRØ!0°Ñ!<ññð $Ø%Øô-
ˆð2 ˆðM"
ùô: œ)Ð$ò 	Ùð	üs5   ƒ!D.¤D¥AD.Á3D Á>BD.ÄD+Ä(D.Ä*D+Ä+D.c                  óÂ   •—  ‰j                   «       }  ‰j                  | «       	 | j                   ‰«       «      | j                  «        S # | j                  «        w xY w©N)Únew_event_loopÚset_event_loopÚrun_until_completeÚclose)Únew_loopr  rN   s    €€r:   Úrun_in_threadz2_handle_async_invoke_status.<locals>.run_in_thread`  sO   ø€ Ø0˜'×0Ñ0Ó2ˆØˆ×Ñ˜xÔ(ð	Ø×.Ñ.Ñ/@Ó/BÓCà�N‰NÕøˆH�N‰NÕús   ¦A ÁA)rN   Ú$litellm.llms.bedrock.embed.embeddingrÝ   Úconcurrent.futuresÚfuturesÚThreadPoolExecutorÚsubmitr  )r­   r¾   rr   r,   Ú
concurrentr  ÚexecutorÚfuturerÝ   r  rN   s   ````    @@@r:   rÈ   rÈ   ÿ  sd   þ€ ó åE÷Kð Kó^ õð 
×	Ñ	×	.Ñ	.Ó	0ð °HØ Ÿ™¨Ó6ˆØ�}‰}‹÷÷ ò ús   ¿!A*Á*A3)r¼   )rB   NNNN)rB   NNN)rB   N)NNrB   NNN)NNrB   NN)NrB   NNNr  )SÚ__doc__rN   rQ   r¡   Úcollections.abcr   Ú	functoolsr   Útypingr   r   r   r   r5   Úopenai.types.batchr	   r    Úlitellm._loggingr
   Ú-litellm.litellm_core_utils.get_litellm_paramsr   Ú*litellm.litellm_core_utils.litellm_loggingr   r›   Ú&litellm.llms.anthropic.batches.handlerr   Ú"litellm.llms.azure.batches.handlerr   Ú$litellm.llms.bedrock.batches.handlerr   Ú&litellm.llms.custom_httpx.http_handlerr   r   Ú*litellm.llms.custom_httpx.llm_http_handlerr   Úlitellm.llms.openai.openair   Ú&litellm.llms.vertex_ai.batches.handlerr   Úlitellm.secret_managers.mainr   rû   r   r   r   r   Úlitellm.types.routerr   rü   r   r   r   r   r   Úlitellm.utilsr    r!   r"   r#   r$   r%   Ú__annotations__r&   r)   r*   rŸ   rš   Ústrr8   r;   rM   rP   r°   r6   Úboolr¹   r±   r  rÏ   rÐ   r×   rØ   rÈ   r—   r<   r:   ú<module>r2     s•  ðò
ó Û Û 	Ý %Ý ß ,Ó ,ã Ý 1ã Ý +Ý iÝ SÝ JÝ >Ý Fß PÝ IÝ 7Ý JÝ 7÷ó õ 6÷õ ÷õ ñ "2Ó!3Ð ˜Ó 3Ù /Ó 1Ð ˜Ó 1Ù$;ÈBÔ$OÐ ˜EÓ OÙ$;Ó$=Ð ˜EÓ =Ù*Ó,Ð ð #ñ	$Ø)ð$à��c�‰Nð$ð ð$ð ð	$ð
 ó$ðN ð
 owØ&*Ø+/Ø(,Ø26ñ.Ø˜u‘~ð.àÐbÑcð.ð ð.ð !Ð!jÑkð	.ð
 �3˜�8‰n˜tÑ#ð.ð ˜˜S˜‘> DÑ(ð.ð �S˜#�X‘ Ñ%ð.ð ˜s C˜x™.¨4Ñ/ð.ð ò.ó ð.ðb ð
 owØ&*Ø+/Ø(,Ø26ñtØ˜u‘~ðtàÐbÑcðtð ðtð !Ð!jÑkð	tð
 �3˜�8‰n˜tÑ#ðtð ˜˜S˜‘> DÑ(ðtð �S˜#�X‘ Ñ%ðtð ˜s C˜x™.¨4Ñ/ðtð �I˜c 3¨Ð4Ñ5Ñ5òtó ðtðn ð
 	Ø&*Ø+/Ø(,ñ(Øð(à Ø^ñð(ð
 �3˜�8‰n˜tÑ#ð(ð ˜˜S˜‘> DÑ(ð(ð �S˜#�X‘ Ñ%ð(ð ò(ó ð(ðh 	Ø,0ñ~Øð~à)ð~ð �U—]‘]Ñ"ð~ð ð	~ð
 2ð~ð ð~ð !Ø^ñð~ð # TÑ)ó~ðB ð
 	Ø&*Ø+/Ø(,ñHØðHà Ø^ñðHð
 �3˜�8‰n˜tÑ#ðHð ˜˜S˜‘> DÑ(ðHð �S˜#�X‘ Ñ%ðHð �I˜c 3¨Ð4Ñ5Ñ5òHó ðHðV àØØ8@Ø&*Ø+/Ø(,ñ'Ø�‰:ð'à�‰:ð'ð 6ð'ð �3˜�8‰n˜tÑ#ð	'ð
 ˜˜S˜‘> DÑ(ð'ð �S˜#�X‘ Ñ%ò'ó ð'ðT àØØ8@Ø+/Ø(,ñEØ�‰:ðEà�‰:ðEð 6ðEð ˜˜S˜‘> DÑ(ð	Eð
 �S˜#�X‘ Ñ%òEó ðEðT Ø_gØ&*Ø+/Ø(,ñ+Øð+à�‰:ð+ð !Ð![Ñ\ð+ð �3˜�8‰n˜tÑ#ð	+ð
 ˜˜S˜‘> DÑ(ð+ð �S˜#�X‘ Ñ%ð+ð ó+ð` ØemØ&*Ø+/Ø(,ñNØðNà�‰:ðNð !Ð![Ñ\Ð_bÑbðNð �3˜�8‰n˜tÑ#ð	Nð
 ˜˜S˜‘> DÑ(ðNð �S˜#�X‘ Ñ%ðNð �I˜c 3¨Ð4Ñ5Ñ5óNñbk¨#ð kÀð kÐdrô kr<   