Ë
    uPêj_ª  ã                   ó€  — U d dl Z d dlZd dlmZ d dlmZmZm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mZ d dl­ 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$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z; d dl<m=Z=  e	«       Z>ee?d<   dddee@eAf   de@ddfd„ZBde@ddfd„ZCe>j‰                  d e
e«      gdg¬«      e>j‰                  d e
e«      gdg¬«      e>j‰                  d  e
e«      gdg¬«      d e
e«      fd!ed"ed#e@dz  d$eEfd%„«       «       «       ZFe>j�                  d& e
e«      gdg¬«      e>j�                  d' e
e«      gdg¬«      e>j�                  d( e
e«      gdg¬«       e
e«      d ed)d*¬+«      fd!ed"ed$eEd#e@dz  d,e@f
d-„«       «       «       ZHe>j�                  d e
e«      gdg¬«      e>j�                  d e
e«      gdg¬«      e>j�                  d  e
e«      gdg¬«      ddd e
e«      dfd!ed"ed#e@dz  d.eIdz  d/e@dz  d$eEd0e@dz  fd1„«       «       «       ZJe>j‰                  d2 e
e«      gdg¬«      e>j‰                  d3 e
e«      gdg¬«      e>j‰                  d4 e
e«      gdg¬«      d e
e«      fd!ed,e@d"ed#e@dz  d$eEf
d5„«       «       «       ZKy)6é    N)ÚMapping)ÚAnyÚFinalÚcast)Ú	APIRouterÚDependsÚHTTPExceptionÚPathÚRequestÚResponse)Úverbose_proxy_logger)ÚCancelBatchRequestÚRetrieveBatchRequest)Ú*)Úuser_api_key_auth)Úvalidate_batch_list_limit)ÚProxyBaseLLMRequestProcessing)Ú!sanitize_openai_provider_metadata)Ú_read_request_body)Ú,get_custom_llm_provider_from_request_headersÚ*get_custom_llm_provider_from_request_query)Ú"_is_base64_encoded_unified_file_idÚadd_internal_model_credentialsÚapply_team_provider_credentialsÚbatch_cost_poller_is_activeÚdecode_model_from_file_idÚencode_batch_response_idsÚencode_file_id_with_modelÚ&ensure_batch_response_managed_file_idsÚget_batch_from_databaseÚ"get_batch_id_from_unified_batch_idÚget_credentials_for_modelÚ"get_model_id_from_unified_batch_idÚget_models_from_unified_file_idÚget_original_file_idÚprepare_data_with_credentialsÚupdate_batch_in_databaseÚvalidate_managed_id_requirement)Ú$raise_if_required_body_param_missing)Úhandle_exception_on_proxyÚis_known_model)ÚManagedFileRepository)ÚLiteLLMBatchCreateRequestÚrouterÚrequested_providerz
str | NoneÚdataÚnot_found_messageÚreturnc                 ó´   — | �y |j                  d«      s5t        j                  s%t        j                  st	        j
                  d«      ry t        |dd d¬«      ‚)NÚapi_keyÚOPENAI_API_KEYÚinvalid_request_errori”  )ÚmessageÚtypeÚparamÚcode)ÚgetÚlitellmr4   Ú
openai_keyÚosÚgetenvÚProxyException©r/   r0   r1   s      ún/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/batches_endpoints/endpoints.pyÚ0_raise_not_found_when_openai_fallback_unservablerC   6   sO   € ð
 Ð%ØØ‡x�x�	ÔœgŸošo´×1CÒ1CÄrÇyÁyÐQaÔGbØÜ
Ø!Ø$ØØô	ð ó    Úinput_file_idc              ƒ   ó   K  — ddl m} |€y	 t        |«      j                  j	                  d| i¬«      ƒ d{  –—† }|€y|j                  xs dS 7 Œ# t
        $ r!}t        j                  d| |«       Y d}~yd}~ww xY w­w)a\  Resolve a managed (unified) input_file_id to its backend storage_url.

    Provider batch handlers (e.g. Vertex AI, which parses a `publishers/`
    segment out of the file URI) need a real storage location; the opaque
    unified token crashes them. Returns None whenever a storage_url cannot be
    produced (no database, lookup error, no managed-file row, or a row without
    a storage_url yet) so callers fall back to dispatching the original id,
    which the managed-files deployment hook still maps. This adds resolution
    without changing behavior on any path that did not resolve before.
    r   ©Úprisma_clientNÚunified_file_id)Úwherez3create_batch: managed file lookup failed for %s: %s)	Úlitellm.proxy.proxy_serverrH   r,   ÚtableÚ
find_firstÚ	Exceptionr   ÚwarningÚstorage_url)rE   rH   Údb_fileÚes       rB   Ú'_resolve_managed_input_file_storage_urlrS   G   s‰   è ø€ õ 9àÐØðÜ-¨mÓ<×BÑB×MÑMÐUfÐhuÐTvÐMÓw×wˆð €ØØ×ÑÒ& $Ð&ð xùÜò Ü×$Ñ$Ð%ZÐ\iÐklÔmÜûðüs=   ‚
A>�*A ·A¸A ¼A>ÁA Á	A;ÁA6Á1A>Á6A;Á;A>z/{provider}/v1/batchesÚbatch)ÚdependenciesÚtagsz/v1/batchesz/batchesÚrequestÚfastapi_responseÚproviderÚuser_api_key_dictc              ƒ   ó~  K  — ddl m}m}m}m}m} i }		 t        | ¬«      ƒ d{  –—† }	t        j                  dt        j                  |	d¬«      «       t        |	¬«      }
|
j                  | |||||d	¬
«      ƒ d{  –—† \  }	}t        |	j                  d«      «      |	d<   t        d	|	¬«       d}d}t         j"                  du r|	j                  dd«      }t%        ||¬«      }|xs  |	j'                  dd«      xs t)        | ¬«      }|xs d}t+        dGi |	¤Ž}|j,                  xs i }|j                  d«      }|�Id|vsd|vrt/        dddi¬«      ‚|d   dk7  rt/        ddd|d   › d�i¬«      ‚dt1        |d   «      dœ|d<   |j                  dd«      }t3        |d ||j5                  d!«      ¬"«      ƒ d{  –—†  d}d}|rt7        |«      }t9        |«      }|��|�rt;        ||d#¬$«      }t=        |«      }||d<   t?        ||¬%«       t!        j@                  dGd|d   i|¤Žƒ d{  –—† }|r¹tC        |d&«      r­|jD                  r¡|jD                  }tG        ||d'¬(«      }||_"        tC        |d)«      r(|jH                  rtG        |jH                  |¬*«      |_$        tC        |d+«      r(|jJ                  rtG        |jJ                  |¬*«      |_%        t        j                  d,|||«       ||_&        �nýt         j"                  du r1|r/|�-|€t/        ddd-i¬«      ‚ |j@                  dGi |¤Žƒ d{  –—† }�nº|r¯|r­tO        |«      }tQ        |«      d.k7  rt/        d/dd0tQ        |«      › �i¬«      ‚|d   }||d<   tS        |«      ƒ d{  –—† }|�||d<   |€t/        ddd-i¬«      ‚|jU                  d¬1«        |j@                  dGi |¤Žƒ d{  –—† }||_&        ||jV                  d2<   �n	|	j                  d«      xs8 | jX                  j                  d«      xs | jZ                  j                  d3«      }|rat;        ||d4¬$«      }t?        ||¬%«       t!        j@                  dGd|d   i|¤Žƒ d{  –—† }t]        ||¬5«       t        j                  d6|«       n[t_        ta        tb        |«      |||¬7«       te        |ta        tb        |«      d8|› �¬9«       t!        j@                  dGd|i|¤Žƒ d{  –—† }|jg                  |	||¬:«      ƒ d{  –—† }ti        jj                  |jm                  |	j                  d;d<«      d=¬>«      «       to        |d?i «      xs i }|j                  d@d«      xs d<} |j                  dAd«      xs d<}!|j                  dBd«      xs d<}"|jZ                  jU                  t        jp                  || |!|"|to        |dCd<«      |	¬D«      «       |S 7 �Œ®7 �ŒZ7 �Œ"7 �Œ¶7 �Œ´7 �Œ`7 �Œ7 �Œ€7 �Œ7 Œê# tr        $ rC}#|ju                  ||#|	¬E«      ƒ d{  –—†7   t        jv                  dF|#«       ty        |#«      ‚d}#~#ww xY w­w)Ha   
    Create large batches of API requests for asynchronous processing.
    This is the equivalent of POST https://api.openai.com/v1/batch
    Supports Identical Params as: https://platform.openai.com/docs/api-reference/batch

    Example Curl
    ```
    curl http://localhost:4000/v1/batches         -H "Authorization: Bearer sk-1234"         -H "Content-Type: application/json"         -d '{
            "input_file_id": "file-abc123",
            "endpoint": "/v1/chat/completions",
            "completion_window": "24h"
    }'
    ```
    r   ©Úgeneral_settingsÚ
llm_routerÚproxy_configÚproxy_logging_objÚversion©rW   NzRequest received by LiteLLM:
%sé   )Úindent©r0   Úacreate_batch©rW   r]   rZ   ra   r`   r_   Ú
route_typeÚmetadata)rh   r0   FTÚmodel)rj   r^   Úcustom_llm_providerÚopenaiÚ#enforced_batch_output_expires_afterÚanchorÚsecondséô  ÚerrorzÄServer configuration error: team metadata field 'enforced_batch_output_expires_after' is malformed - must contain 'anchor' and 'seconds' keys. Contact your team or proxy admin to fix this setting.©Ústatus_codeÚdetailÚ
created_atzjServer configuration error: team metadata field 'enforced_batch_output_expires_after' has invalid anchor 'zO' - must be 'created_at'. Contact your team or proxy admin to fix this setting.)rn   ro   Úoutput_expires_afterrE   ÚfileÚmanaged_files©Úresource_idÚresource_kindrZ   Úmanaged_files_objz(batch creation (file created with model)©r^   Úmodel_idÚoperation_context©r0   ÚcredentialsÚidrT   )Úfile_idrj   Úid_typeÚoutput_file_id)rƒ   rj   Úerror_file_idzACreated batch using model: %s, original_batch_id: %s, encoded: %sú9LLM Router not initialized. Ensure models added to proxy.é   é�  zExpected 1 model, got )Údisable_fallbacksrI   úx-litellm-modelzbatch creation©rj   zCreated batch using model: %s©r0   r^   rZ   rk   zNo such File object: rA   ©r0   rZ   ÚresponseÚlitellm_call_idÚ Úsuccess©r�   ÚstatusÚ_hidden_paramsr~   Ú	cache_keyÚapi_baseÚallowed_model_region©rZ   r~   r–   r—   ra   Úmodel_regionÚrequest_data©rZ   Úoriginal_exceptionr›   úAlitellm.proxy.proxy_server.create_batch(): Exception occured - %s© )=rK   r]   r^   r_   r`   ra   r   r   ÚdebugÚjsonÚdumpsr   Ú common_processing_pre_call_logicr   r;   r)   r<   Ú'enable_loadbalancing_on_batch_endpointsr+   Úpopr   r-   Úteam_metadatar	   Úintr(   Úget_proxy_hookr   r   r"   r%   r&   rf   Úhasattrr‚   r   r…   r†   rE   r$   ÚlenrS   Úupdater•   Úquery_paramsÚheadersr   r   r   ÚdictrC   Úpost_call_success_hookÚasyncioÚcreate_taskÚupdate_request_statusÚgetattrÚget_custom_headersrN   Úpost_call_failure_hookÚ	exceptionr*   )$rW   rX   rY   rZ   r]   r^   r_   r`   ra   r0   Úbase_llm_response_processorÚlitellm_logging_objÚrouter_modelÚis_router_modelr/   rk   Ú_create_batch_datar¦   Úenforced_batch_expiryrE   rI   Úmodel_from_file_idr�   Úoriginal_file_idr�   Úoriginal_batch_idÚencoded_batch_idÚtarget_model_namesrj   Úresolved_storage_urlÚmodel_paramÚhidden_paramsr~   r–   r—   rR   s$                                       rB   Úcreate_batchrÅ   `   sm  è ø€ ÷Lõ ð €Dðq+Ü'°Ô8×8ˆÜ×"Ñ"Ø.Ü�J‰J�t AˆJÓ&ô	
ô .KÐPTÔ-UÐ#ð .×NÑNØØ-Ø/ØØ/Ø%Ø&ð Oó 
÷ 
ñ	
ØØô =¸T¿X¹XÀjÓ=QÓRˆˆZÑä,¸ÈdÕSð $(ˆØˆÜ×:Ñ:¸dÑBØŸ8™8 G¨TÓ2ˆLÜ,°<ÈJÔWˆOð ò MØ�x‰xÐ-¨tÓ4òMä;ÀGÔLð 	ð
 &8Ò%C¸8ÐÜ$=Ñ$EÀÑ$EÐð  1×>Ñ>ÒDÀ"ˆØ'4×'8Ñ'8Ð9^Ó'_ÐØ Ð,ØÐ4Ñ4¸	ÐI^Ñ8^Ü#Ø #àð  "hðôð ð % XÑ.°,Ò>Ü#Ø #àð  $Nð  Odð  emñ  Onð  Noð  o~ð  "ðôð ð 'ÜÐ4°YÑ?Ó@ñ:ÐÐ5Ñ6ð
  2×5Ñ5°oÀtÓLˆÜ-Ø%Ø Ø/Ø/×>Ñ>¸ÓOô	
÷ 	
ð 	
ð 16ˆà!ÐÙÜ!:¸=Ó!IÐÜ@ÀÓOˆOð Ñ)ªmÜ3Ø%Ø+Ø"LôˆKô ';¸=Ó&IÐØ2BÐ˜Ñ/Ü)Ø'Ø'õô %×2Ñ2ñ Ø$/Ð0EÑ$Fðà$ñ÷ ˆHñ œG H¨dÔ3¸¿ºØ+3¯;©;Ð!Ü*CØ-Ø,Ø#ô+Ð ð
 /�”ä˜8Ð%5Ô6¸8×;RÒ;RÜ.GØ (× 7Ñ 7Ð?Qô/�HÔ+ô ˜8 _Ô5¸(×:PÒ:PÜ-FØ (× 6Ñ 6Ð>Pô.�HÔ*ô %×*Ñ*ØWØ&Ø%Ø$ô	ð &3ˆHÖ"ä×<Ñ<ÀÑDÉÐ]iÐ]uØÐ!Ü#Ø #Ø#Ð%`Ðaôð ð
 6˜Z×5Ñ5ÑKÐ8JÑK×KŠHá¡ä(GÈÓ(XÐäÐ%Ó&¨!Ò+Ü#Ø #Ø#Ð'=¼cÐBTÓ>UÐ=VÐ%WÐXôð ð .¨aÑ0ˆEØ*/Ð˜wÑ'ä0WÐXeÓ0f×*fÐ Ø#Ð/Ø6JÐ" ?Ñ3àÐ!Ü#Ø #Ø#Ð%`Ðaôð ð
 ×%Ñ%¸Ð%Ô=Ø5˜Z×5Ñ5ÑKÐ8JÑK×KˆHØ%2ˆHÔ"Ø9HˆH×#Ñ#Ð$5Ó6ð —‘˜Ó!Òp W×%9Ñ%9×%=Ñ%=¸gÓ%FÒpÈ'Ï/É/×J]ÑJ]Ð^oÓJpð ñ
 ä7Ø)Ø(Ø&6ô�ô .Ø+Ø +õô ")×!6Ñ!6ñ "Ø(3Ð4IÑ(Jð"à(ñ"÷ �ô
 *¨(¸+ÕFä$×*Ñ*Ð+JÈKÕXô 0ÜœdÐ$6Ó7Ø)Ø&7Ø(;õ	ô AØ'9ÜœdÐ$6Ó7Ø(=¸m¸_Ð&Mõô
 ")×!6Ñ!6ñ "Ø(;ð"à(ñ"÷ �ð +×AÑAØÐ):ÀXð Bó 
÷ 
ˆô
 	×ÑØ×3Ñ3ÀDÇHÁHÐM^Ð`bÓDcÐluÐ3Óvô	
ô
  ' xÐ1AÀ2ÓFÒLÈ"ˆØ'×+Ñ+¨J¸Ó=ÒCÀˆØ(×,Ñ,¨[¸$Ó?ÒEÀ2ˆ	Ø'×+Ñ+¨J¸Ó=ÒCÀˆà× Ñ ×'Ñ'Ü)×<Ñ<Ø"3Ø!Ø#Ø!ØÜ$Ð%6Ð8NÐPRÓSØ!ôô
	
ð ˆðU 9ùð
ùðh	
ùð:ùðR Lùð +gùð Lùð0ùð*ùð
ùô8 ò +Ø×6Ñ6Ø/ÀAÐTXð 7ó 
÷ 	
ñ 	
ô 	×&Ñ&Ð'jÐlmÔnÜ'¨Ó*Ð*ûð+üsï   ‚X=”W. £W¤AW. Á:WÁ;D:W. Æ5WÆ6A.W. È$WÈ%DW. Ì)WÌ*AW. Î W ÎAW. ÏW#ÏB!W. Ñ&W&Ñ'A>W. Ó%W)Ó&W. ÔW,ÔCW. ×X=×W. ×W. ×W. ×W. ×W. × W. ×#W. ×&W. ×)W. ×,W. ×.	X:×7X5ØXØ&X5Ø5X:Ø:X=z&/{provider}/v1/batches/{batch_id:path}z/v1/batches/{batch_id:path}z/batches/{batch_id:path}zBatch ID to retrievezThe ID of the batch to retrieve)ÚtitleÚdescriptionÚbatch_idc              ƒ   óº
  K  — ddl m}m}m}m}m}	 i }
	 t        |d||j                  d«      ¬«      ƒ d{  –—†  t        |«      }t        |¬«      }t        t        |«      }
t        |«      }t        |
¬«      }|j                  | |||	||d	¬
«      ƒ d{  –—† \  }
}|j                  d«      }ddl m} t!        ||||t"        ¬«      ƒ d{  –—† \  }}|��|j$                  dv �r|j'                  |
||¬«      ƒ d{  –—† }|rt)        |||t"        ||¬«      ƒ d{  –—†  t+        j,                  |j/                  |
j1                  dd«      d¬«      «       t3        |di «      xs i }|j1                  dd«      xs d}|j1                  dd«      xs d}|j1                  dd«      xs d}|j4                  j7                  t        j8                  |||||	t3        |dd«      |
¬«      «       |S |�!t#        j:                  d||j$                  «       t=        |«      xr
 t?        «       }|r-|
j1                  d«      }tA        |t        «      si }||
d<   d|d<   |�ˆtC        ||d¬«      }tE        |«      }tG        |
||¬ «       |
jI                  d!|«      |
d"<   ||
d#<   tK        jL                  d7d$|d$   i|
¤Žƒ d{  –—† }tO        ||¬%«       t#        j:                  d&||«       nêtJ        jP                  du s|rr|€tS        d'd(d)i¬*«      ‚|rtU        |
|tW        |«      ¬+«        |jL                  d7i |
¤Žƒ d{  –—† }||jX                  d,<   |r�tW        |«      }|rt||jX                  d<   nd|xs t[        | ¬-«      xs t]        | ¬-«      }|xs d.}t_        |
|||¬/«       ta        ||
d0|› d1�¬2«       tK        jL                  d7d$|i|
¤Žƒ d{  –—† }tc        |||||t"        |d3|¬4«	      ƒ d{  –—†  |j'                  |
||¬«      ƒ d{  –—† }|rt)        |||t"        ||¬«      ƒ d{  –—†  t+        j,                  |j/                  |
j1                  dd«      d¬«      «       t3        |di «      xs i }|j1                  dd«      xs d}|j1                  dd«      xs d}|j1                  dd«      xs d}|j4                  j7                  t        j8                  |||||	t3        |dd«      |
¬«      «       |S 7 �Œ·7 �Œ\7 �Œ)7 �Œû7 �Œß7 �ŒI7 �ŒÏ7 �Œ@7 �Œ#7 �Œ
7 Œí# td        $ rC}|jg                  |||
¬5«      ƒ d{  –—†7   t#        jh                  d6|«       tk        |«      ‚d}~ww xY w­w)8at  
    Retrieves a batch.
    This is the equivalent of GET https://api.openai.com/v1/batches/{batch_id}
    Supports Identical Params as: https://platform.openai.com/docs/api-reference/batch/retrieve

    Example Curl
    ```
    curl http://localhost:4000/v1/batches/batch_abc123     -H "Authorization: Bearer sk-1234"     -H "Content-Type: application/json" 
    ```
    r   r\   rT   rx   ry   N©rÈ   re   Úaretrieve_batchrg   rG   )rÈ   Úunified_batch_idr|   rH   r   )Ú	completedÚcompleteÚfailedÚ	cancelledÚexpiredrŽ   )r�   r|   rH   r   Údb_batch_objectrÌ   r�   r‘   r’   r“   r•   r~   r–   r—   r˜   r™   z;Batch %s is in non-terminal state %s, syncing with providerÚlitellm_metadataTÚbatch_ignore_default_loggingz*batch retrieval (batch created with model)r}   ©r0   r�   rƒ   rƒ   rÈ   rj   rk   rŒ   z0Retrieved batch using model: %s, original_id: %srp   rq   r‡   rr   )r0   r^   r~   rÌ   rb   rl   r�   úNo batch found with id 'ú'.rA   Úretrieve)	rÈ   rÌ   r�   r|   rH   r   rÒ   Ú	operationÚpoller_owns_accountingrœ   úClitellm.proxy.proxy_server.retrieve_batch(): Exception occured - %srŸ   )6rK   r]   r^   r_   r`   ra   r(   r¨   r   r   r   r®   r   r   r£   rH   r    r   r”   r¯   r   r°   r±   r²   r;   r³   r­   r«   r´   r    Úboolr   Ú
isinstancer"   r%   r&   r¥   r<   rË   r   r¤   r	   r   r#   r•   r   r   r   rC   r'   rN   rµ   r¶   r*   ) rW   rX   rZ   rY   rÈ   r]   r^   r_   r`   ra   r0   Úmodel_from_idÚ_retrieve_batch_requestrÌ   r·   r¸   r|   rH   rÒ   r�   rÄ   r~   r–   r—   rÚ   rÓ   r�   r¿   Úmodel_id_from_batchr/   rk   rR   s                                    rB   Úretrieve_batchrá   ƒ  sm  è ø€ ÷Fõ ð €Dðt+Ü-Ø Ø!Ø/Ø/×>Ñ>¸ÓOô	
÷ 	
ð 	
ô  9¸ÓBˆÜ)=Øô*
Ðô ”DÐ1Ó2ˆÜ"DÀXÓ"NÐä-JÐPTÔ-UÐ#ð .×NÑNØØ-Ø/ØØ/Ø%Ø(ð Oó 
÷ 
ñ	
ØØð $5×#CÑ#CÀOÓ#TÐÝ<ä*AØØ-Ø/Ø'Ü!5ô+
÷ %
Ñ!ˆ˜ð Ñ H§O¡Oð 8
ò %
ð /×EÑEØÐ->Èð Fó ÷ ˆHñ  Ü<Ø%Ø&7Ø"/Ü)=Ø$3Ø%5ô÷ ð ô ×ÑØ!×7Ñ7Ø$(§H¡HÐ->ÀÓ$CÈIð 8ó ôô $ HÐ.>ÀÓCÒIÀrˆMØ$×(Ñ(¨°TÓ:Ò@¸bˆHØ%×)Ñ)¨+°tÓ<ÒBÀˆIØ$×(Ñ(¨°TÓ:Ò@¸bˆHà×$Ñ$×+Ñ+Ü-×@Ñ@Ø&7Ø%Ø'Ø%Ø#Ü!(Ð):Ð<RÐTVÓ!WØ!%ôô
ð ˆOð ÐÜ ×&Ñ&ØMÈxÐYa×YhÑYhôô )-Ð-=Ó(>Ò(`ÔC^ÓC`ÐÙ!Ø#Ÿx™xÐ(:Ó;ÐÜÐ.´Ô5Ø#%Ð Ø+;�Ð'Ñ(Ø?CÐÐ;Ñ<ð Ð$Ü!:Ø%Ø&Ø"Nô"ˆKô (<¸HÓ'EÐÜ)ØØ'Ø)õð  $Ÿx™x¨	Ð3DÓEˆD�Ñð *ˆD�‰Mô %×4Ñ4ñ Ø$/Ð0EÑ$Fðàñ÷ ˆHô
 & h°mÕDä ×&Ñ&ØBÀMÐSdõô ×<Ñ<ÀÑDÑHXØÐ!Ü#Ø #Ø#Ð%`Ðaôð ñ
  Ü.ØØ)Ü?Ð@PÓQõð 8˜Z×7Ñ7Ñ?¸$Ñ?×?ˆHØ:JˆH×#Ñ#Ð$6Ñ7ÙÜ-OÐP`Ó-aÐ#Ù&Ø:M�H×+Ñ+¨JÒ7ð
 ò OÜ?ÈÔPòOä=ÀgÔNð ð
 *<Ò)G¸xÐÜ+ØØ%Ø"3Ø$7õ	ô =Ø#5ØØ$<¸X¸JÀbÐ"Iõô
 %×4Ñ4ñ Ø$7ðàñ÷ ˆHô 'ØØ-ØØ/Ø'Ü!5Ø+Ø Ø#9ô

÷ 
	
ð 
	
ð +×AÑAØÐ):ÀXð Bó 
÷ 
ˆñ Ü8Ø!Ø"3Ø+Ü%9Ø /Ø!1ô÷ ð ô 	×ÑØ×3Ñ3ÀDÇHÁHÐM^Ð`bÓDcÐluÐ3Óvô	
ô
   Ð*:¸BÓ?ÒEÀ2ˆØ ×$Ñ$ Z°Ó6Ò<¸"ˆØ!×%Ñ% k°4Ó8Ò>¸Bˆ	Ø ×$Ñ$ Z°Ó6Ò<¸"ˆà× Ñ ×'Ñ'Ü)×<Ñ<Ø"3Ø!Ø#Ø!ØÜ$Ð%6Ð8NÐPRÓSØ!ôô
	
ð ˆð[	
ùð$
ùð%
ùð$ùðùðNùð2 @ùð4ùð
	
ùð
ùðùôB ò +Ø×6Ñ6Ø/ÀAÐTXð 7ó 
÷ 	
ñ 	
ô 	×&Ñ&Ð'lÐnoÔpÜ'¨Ó*Ð*ûð+üs
  ‚U”!T µS,¶AT ÂS/Â5T Ã	S2Ã
0T Ã:S5Ã;T ÄS8ÄCT Ç(UÇ)C	T Ê2S;Ê3A<T Ì/S>Ì0BT ÏTÏT Ï!TÏ"T Ï=TÏ>T ÐT
ÐCT Ó+UÓ,T Ó/T Ó2T Ó5T Ó8T Ó;T Ó>T ÔT ÔT ÔT Ô
T Ô	UÔUÔ,T/Ô-&UÕUÕUÚlimitÚafterrÁ   c              ƒ   ó�  K  — t        |«       ddlm}m}m}	m}
m} t        j                  d||«       	 |€'t        ddt        j                  j                  i¬«      ‚t        | ¬«      ƒ d{  –—† }t        |¬	«      }|j                  | ||||
|	d
¬«      ƒ d{  –—† \  }}|
j!                  d«      }|�Pt#        |d«      rDt        j                  d«       t%        t&        |«      j)                  ||||||¬«      ƒ d{  –—† }�n”|j+                  d«      xs8 | j,                  j+                  d«      xs | j.                  j+                  d«      x}ryt1        ||d¬«      }t3        ||¬«       t5        j6                  d+|d   ||dœ|¤Žƒ d{  –—† }t9        |dd«      }|r|D ]  }t;        ||¬«       Œ t        j                  d|«       nÎ|s|j+                  dd«      rh|xs |j+                  dd«      }|€t=        d«      ‚|j?                  d«      d   }|jA                  dd«        |j6                  d+|||dœ|¤Žƒ d{  –—† }nR|xs tC        | ¬«      xs tE        | ¬«      xs d}tG        ||||¬«       t5        j6                  d+|||dœ|¤Žƒ d{  –—† }|
jI                  |||¬ «      ƒ d{  –—† }|�tK        |«      tK        |«      u r|}t9        |d!i «      xs i }|j+                  d"d«      xs d#}|j+                  d$d«      xs d#}|j+                  d%d«      xs d#}|j.                  jM                  t        jN                  |||||t9        |d&d#«      ¬'«      «       |S 7 �Œõ7 �ŒÌ7 �Œk7 �Œà7 �Œ.7 ŒÝ7 ŒÃ# tP        $ rF}|
jS                  ||||d(œ¬)«      ƒ d{  –—†7   t        jT                  d*|«       tW        |«      ‚d}~ww xY w­w),aU  
    Lists 
    This is the equivalent of GET https://api.openai.com/v1/batches/
    Supports Identical Params as: https://platform.openai.com/docs/api-reference/batch/list

    Example Curl
    ```
    curl http://localhost:4000/v1/batches?limit=2     -H "Authorization: Bearer sk-1234"     -H "Content-Type: application/json" 
    ```
    r   r\   z!GET /v1/batches after=%s limit=%sNrp   rq   rr   rb   re   Úalist_batchesrg   rx   Úlist_user_batchesz-Using managed objects table for batch listing)rZ   râ   rã   rY   rÁ   r^   rj   r‹   zbatch listingr}   r€   rk   )rk   rã   râ   r0   rŒ   zListed batches using model: %srÁ   z8target_model_names is required for this routing scenarioú,)rj   rã   râ   rl   r�   rŽ   r•   r~   r‘   r–   r—   r˜   )rZ   r~   r–   r—   ra   rš   )rã   râ   rœ   rÛ   rŸ   ),r   rK   r]   r^   r_   r`   ra   r   r    r	   ÚCommonProxyErrorsÚno_llm_routerÚvaluer   r   r£   r¨   r©   r   r   ræ   r;   r¬   r­   r"   r&   r<   rå   r³   r   Ú
ValueErrorÚsplitr¥   r   r   r   r¯   r8   r«   r´   rN   rµ   rq   r*   )rW   rX   rY   râ   rã   rZ   rÁ   r]   r^   r_   r`   ra   r0   r·   r¸   r|   r�   rÃ   r�   Úresponse_datarT   rj   rk   Ú	_responserÄ   r~   r–   r—   rR   s                                rB   Úlist_batchesrï   ¦  sd  è ø€ ôJ ˜eÔ$÷õ ô ×ÑÐBÀEÈ5ÔQðD+ØÐÜØØÔ!2×!@Ñ!@×!FÑ!FÐGôð ô (°Ô8×8ˆÜ-JÐPTÔ-UÐ#ð .×NÑNØØ-Ø/ØØ/Ø%Ø&ð Oó 
÷ 
ñ	
ØØð $5×#CÑ#CÀOÓ#TÐØÐ(¬WÐ5FÐH[Ô-\Ü ×&Ñ&Ð'VÔWÜ!¤#Ð'8Ó9×KÑKØ"3ØØØ!Ø#5Ø%ð Ló ÷ ŠHð �H‰H�WÓÒl ×!5Ñ!5×!9Ñ!9¸'Ó!BÒlÀgÇoÁo×FYÑFYÐZkÓFlð
ˆ[ð 
ô ";Ø%Ø$Ø"1ô"ˆKô *¨tÀÕMä$×2Ñ2ð Ø$/Ð0EÑ$FØØñð ñ	÷ ˆHô $+¨8°V¸TÓ#BˆMÙØ*ò H�EÜ-¨e¸;ÖGðHô !×&Ñ&Ð'GÈÕUñ   4§8¡8Ð,@À$Ô#GØ!3Ò![°t·x±xÐ@TÐVZÓ7[ÐØ!Ð)Ü Ð![Ó\Ð\Ø-×3Ñ3°CÓ8¸Ñ;ˆEØ�H‰H�W˜dÔ#Ø5˜Z×5Ñ5ð ØØØñð ñ	÷ ‰Hð ò Ü?ÈÔPòä=ÀgÔNòð ð	  ô ,ØØ%Ø"3Ø$7õ	ô %×2Ñ2ð Ø$7ØØñð ñ	÷ ˆHð "3×!IÑ!IØØ/Øð "Jó "
÷ 
ˆ	ð
 Ð ¤T¨(£^´t¸I³Ñ%FØ ˆHô  ' xÐ1AÀ2ÓFÒLÈ"ˆØ'×+Ñ+¨J¸Ó=ÒCÀˆØ(×,Ñ,¨[¸$Ó?ÒEÀ2ˆ	Ø'×+Ñ+¨J¸Ó=ÒCÀˆà× Ñ ×'Ñ'Ü)×<Ñ<Ø"3Ø!Ø#Ø!ØÜ$Ð%6Ð8NÐPRÓSôô		
ð ˆði 9ùð

ùðùð(ùð.ùð*øð
ùô4 ò +Ø×6Ñ6Ø/Ø Ø#(°5Ñ9ð 7ó 
÷ 	
ñ 	
ô
 	×"Ñ"Ð#hÐjkÔlÜ'¨Ó*Ð*ûð+üs·   ‚1O´8M4 Á,M!Á-+M4 ÂM$ÂA#M4 Ã<M'Ã=BM4 Æ
M*ÆB4M4 È?M-É AM4 ÊM0ÊM4 Ê.M2Ê/B1M4 Í OÍ!M4 Í$M4 Í'M4 Í*M4 Í-M4 Í0M4 Í2M4 Í4	OÍ=N>ÎNÎ&N>Î>OÏOz-/{provider}/v1/batches/{batch_id:path}/cancelz"/v1/batches/{batch_id:path}/cancelz/batches/{batch_id:path}/cancelc              ƒ   ó   K  — ddl m}m}m}m}m}	m}
 i }	 t        |d||	j                  d«      ¬«      ƒ d{  –—†  t        |«      }t        |¬«      }t        t        |«      }t        |«      }t        |¬«      }|j                  | |||
|	|d	¬
«      ƒ d{  –—† \  }} ||| |||
|¬«      ƒ d{  –—† }|�„t!        ||d¬«      }t#        |«      }t%        |||¬«       |j'                  d|«      |d<   t)        j*                  d2d|d   i|¤Žƒ d{  –—† }t-        ||¬«       t/        j0                  d||«       �nC|r¨|€t3        dddi¬«      ‚t5        |«      }|€t3        dddi¬«      ‚||d<   t7        |«      |d<    |j*                  d2i |¤Žƒ d{  –—† }||j8                  d<   |j8                  j;                  d«      s½|j;                  d«      r¬|d   |j8                  d<   n™|j'                  dd«      }|xs |xs t=        | ¬«      xs t?        | ¬«      }|xs d}|j'                  dd«       tA        ||||¬«       tC        ||d |› d!�¬"«       t        d2d|i|¤Ž}t)        j*                  d2d|i|¤Žƒ d{  –—† }|	j                  d«      }dd#l m"} tG        |||||t.        d$|¬%«      ƒ d{  –—†  |	jI                  |||¬&«      ƒ d{  –—† }tK        jL                  |	jO                  |j;                  d'd(«      d)¬*«      «       tQ        |d+i «      xs i }|j;                  dd«      xs d(}|j;                  d,d«      xs d(}|j;                  d-d«      xs d(}|jR                  jU                  t        jV                  |||||
tQ        |d.d(«      |¬/«      «       |S 7 �Œb7 �Œ7 �Œñ7 �Œ”7 �Œ7 �Œ17 Œý7 Œã# tX        $ rC}|	j[                  |||¬0«      ƒ d{  –—†7   t/        j\                  d1|«       t_        |«      ‚d}~ww xY w­w)3a—  
    Cancel a batch.
    This is the equivalent of POST https://api.openai.com/v1/batches/{batch_id}/cancel

    Supports Identical Params as: https://platform.openai.com/docs/api-reference/batch/cancel

    Example Curl
    ```
    curl http://localhost:4000/v1/batches/batch_abc123/cancel         -H "Authorization: Bearer sk-1234"         -H "Content-Type: application/json"         -X POST

    ```
    r   )Úadd_litellm_data_to_requestr]   r^   r_   r`   ra   rT   rx   ry   NrÊ   re   Úacancel_batchrg   )r0   rW   r]   rZ   ra   r_   z-batch cancellation (batch created with model)r}   rÕ   rƒ   rÈ   rk   rŒ   z0Cancelled batch using model: %s, original_id: %srp   rq   r‡   rr   r‰   z3Invalid LiteLLM managed batch ID. Missing model_id.rj   rÌ   r~   rb   rl   r�   rÖ   r×   rA   rG   Úcancel)rÈ   rÌ   r�   r|   rH   r   rÙ   rZ   rŽ   r�   r‘   r’   r“   r•   r–   r—   r˜   r™   rœ   rž   rŸ   )0rK   rñ   r]   r^   r_   r`   ra   r(   r¨   r   r   r   r®   r   r   r£   r"   r%   r&   r¥   r<   rò   r   r   r    r	   r#   r!   r•   r;   r   r   r   rC   rH   r'   r¯   r°   r±   r²   r³   r­   r«   r´   rN   rµ   r¶   r*   ) rW   rÈ   rX   rY   rZ   rñ   r]   r^   r_   r`   ra   r0   rÞ   Ú_cancel_batch_requestrÌ   r·   r¸   r�   r¿   r�   rà   Úbody_custom_llm_providerr/   rk   Ú_cancel_batch_datar|   rH   rÄ   r~   r–   r—   rR   s                                    rB   Úcancel_batchr÷   \  sÛ  è ø€ ÷J÷ ð €Dðm+Ü-Ø Ø!Ø/Ø/×>Ñ>¸ÓOô	
÷ 	
ð 	
ô  9¸ÓBˆô (:Øô(
Ðô ”DÐ/Ó0ˆä"DÀXÓ"NÐä-JÐPTÔ-UÐ#ð .×NÑNØØ-Ø/ØØ/Ø%Ø&ð Oó 
÷ 
ñ	
ØØñ 1ØØØ-Ø/ØØ%ô
÷ 
ˆð Ð$Ü!:Ø%Ø&Ø"Qô"ˆKô (<¸HÓ'EÐÜ)ØØ'Ø)õð  $Ÿx™x¨	Ð3DÓEˆD�Ñô %×2Ñ2ñ Ø$/Ð0EÑ$Fðàñ÷ ˆHô
 & h°mÕDä ×&Ñ&ØBÀMÐSdöñ
 ØÐ!Ü#Ø #Ø#Ð%`Ðaôð ô
 *LÐL\Ó)]ÐØ"Ð*Ü#Ø #Ø#Ð%ZÐ[ôð ð 0ˆD�‰MÜAÐBRÓSˆD�ÑØ5˜Z×5Ñ5Ñ=¸Ñ=×=ˆHØ:JˆH×#Ñ#Ð$6Ñ7à×*Ñ*×.Ñ.¨zÔ:¸t¿x¹xÈÔ?PØ6:¸7±m�×'Ñ'¨
Ò3ð (,§x¡xÐ0EÀtÓ'LÐ$àò OØ+òOä?ÈÔPòOô >ÀgÔNð	 ð *<Ò)G¸xÐð �H‰H�Z Ô&Ü+ØØ%Ø"3Ø$7õ	ô =Ø#5ØØ$<¸X¸JÀbÐ"Iõô
 );Ñ(UÀHÐ(UÐPTÑ(UÐÜ$×2Ñ2ñ Ø$7ðà$ñ÷ ˆHð $5×#CÑ#CÀOÓ#TÐÝ<ä&ØØ-ØØ/Ø'Ü!5ØØ/ô	
÷ 		
ð 		
ð +×AÑAØÐ):ÀXð Bó 
÷ 
ˆô
 	×ÑØ×3Ñ3ÀDÇHÁHÐM^Ð`bÓDcÐluÐ3Óvô	
ô
  ' xÐ1AÀ2ÓFÒLÈ"ˆØ'×+Ñ+¨J¸Ó=ÒCÀˆØ(×,Ñ,¨[¸$Ó?ÒEÀ2ˆ	Ø'×+Ñ+¨J¸Ó=ÒCÀˆà× Ñ ×'Ñ'Ü)×<Ñ<Ø"3Ø!Ø#Ø!ØÜ$Ð%6Ð8NÐPRÓSØ!ôô
	
ð ˆðM	
ùð,
ùð
ùð6ùð6 >ùð>ùð		
øð
ùô8 ò +Ø×6Ñ6Ø/ÀAÐTXð 7ó 
÷ 	
ñ 	
ô 	×&Ñ&Ð'jÐlmÔnÜ'¨Ó*Ð*ûð+üsÇ   ‚O>–!N/ ·N¸AN/ ÂNÂN/ Â.NÂ/AN/ ÄN"ÄBN/ ÆN%ÆC&N/ É7N(É85N/ Ê-N+Ê.N/ Ë	N-Ë
CN/ ÎO>ÎN/ ÎN/ ÎN/ Î"N/ Î%N/ Î(N/ Î+N/ Î-N/ Î/	O;Î8O6ÏOÏ&O6Ï6O;Ï;O>)Lr°   r>   Úcollections.abcr   Útypingr   r   r   Úfastapir   r   r	   r
   r   r   r<   Úlitellm._loggingr   Úlitellm.batches.mainr   r   Úlitellm.proxy._typesÚ$litellm.proxy.auth.user_api_key_authr   Ú,litellm.proxy.batches_endpoints.common_utilsr   Ú'litellm.proxy.common_request_processingr   Ú)litellm.proxy.common_utils.callback_utilsr   Ú-litellm.proxy.common_utils.http_parsing_utilsr   Ú0litellm.proxy.common_utils.openai_endpoint_utilsr   r   Ú1litellm.proxy.openai_files_endpoints.common_utilsr   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   Úlitellm.proxy.route_llm_requestr)   Úlitellm.proxy.utilsr*   r+   Ú'litellm.repositories.table_repositoriesr,   Úlitellm.types.llms.openair-   r.   Ú__annotations__ÚstrÚobjectrC   rS   ÚpostÚUserAPIKeyAuthrÅ   r;   rá   r§   rï   r÷   rŸ   rD   rB   ú<module>r     s8  ðô Û 	Ý #ß #Ñ #ç N× Nã Ý 1ß IÜ "Ý BÝ RÝ QÝ WÝ L÷÷÷ ÷ ÷ õ õ& Qß IÝ IÝ ?á“€ˆÓ ðØ$ðà
�#�v�+Ñ
ðð ðð 
ó	ð"'Àð 'Èó 'ð2 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð  Ù(/Ð0AÓ(Bñ	Q+ØðQ+àðQ+ð �D‰jðQ+ð &ò	Q+óóóðQ+ðh ‡�Ø,ÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�Ø!ÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ñ )0Ð0AÓ(BØÙÐ5ÐCdÔeñQ+ØðQ+àðQ+ð &ðQ+ð �D‰jð	Q+ð
 òQ+óóóðQ+ðh ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð  ØØÙ(/Ð0AÓ(BØ%)ñd+Øðd+àðd+ð �D‰jðd+ð �‰:ð	d+ð
 �‰:ðd+ð &ðd+ð ˜d™
òd+óóóðd+ðN ‡�Ø3ÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�Ø(ÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�Ø%ÙÐ+Ó,Ð-Ø
ˆð ó ð  Ù(/Ð0AÓ(BñM+ØðM+àðM+ð ðM+ð �D‰jð	M+ð
 &òM+óóóñM+rD   