Ë
    tPêjgõ  ã                   óN  — U d dl Z d dlZd dl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mZmZmZmZmZmZmZmZ d dlmZ d dl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$ d dl%­ d dl&m'Z' d dl(m)Z) d dl*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z: d dl;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZF d dlGmHZHmIZI d dlJmKZK d dlLmMZM d dlNmOZOmPZPmQZQmRZR  e«       ZSeeTd<    eeUdz  «      ZVeeTd<    G d„ de«      ZWdaXd„ ZYdeZfd„Z[de\ez  d eZd!eeZe]f   d"e^d#eHd$e6dz  fd%„Z_de\ez  d$e`dz  fd&„Zad'e`d$eZdz  fd(„Zbd)eMdz  d*eZd+ed$eQfd,„Zc	 	 dPd)eMdz  d+ed eRd#eHd"e^d.edeZ   d/eed*eZdz  deZd0eZdz  d1eZdz  d$eQfd2„ZfeSjÏ                  d3 ee'«      gd4g¬5«      eSjÏ                  d6 ee'«      gd4g¬5«      eSjÏ                  d7 ee'«      gd4g¬5«       ed8«       ed9¬:«       ed-¬:«      d ed;¬:«       ed8«       ed¬:«       ee'«      fd<ed=ed eZd>eZd1eZd?eZdz  deZd@edAeZdz  d"e^fdB„«       «       «       ZheSjÓ                  dC ee'«      gd4g¬5«      eSjÓ                  dD ee'«      gd4g¬5«      eSjÓ                  dE ee'«      gd4g¬5«      d ee'«      fd<ed=edFeZd?eZdz  d"e^f
dG„«       «       «       ZjeSjÓ                  dH ee'«      gd4g¬5«      eSjÓ                  dI ee'«      gd4g¬5«      eSjÓ                  dJ ee'«      gd4g¬5«      d ee'«      fd<ed=edFeZd?eZdz  d"e^f
dK„«       «       «       ZkeSjÙ                  dH ee'«      gd4g¬5«      eSjÙ                  dI ee'«      gd4g¬5«      eSjÙ                  dJ ee'«      gd4g¬5«      d ee'«      fd<ed=edFeZd?eZdz  d"e^f
dL„«       «       «       ZmeSjÓ                  d3 ee'«      gd4g¬5«      eSjÓ                  d6 ee'«      gd4g¬5«      eSjÓ                  d7 ee'«      gd4g¬5«       ee'«      dddddfd<ed=ed"e^d?eZdz  d>eZdz  d eZdz  dMeUdz  dNeZdz  fdO„«       «       «       Zny)Qé    N)ÚMapping)ÚAnyÚBinaryIOÚFinalÚ	TypedDictÚcastÚget_args)	Ú	APIRouterÚDependsÚFileÚFormÚHTTPExceptionÚRequestÚResponseÚ
UploadFileÚstatus)ÚTypeAdapter)ÚReadOnly)ÚCreateFileRequestÚget_secret_str)Úverbose_proxy_logger)Úis_managed_cloud_storage_uri)Úget_or_create_metadata_bucket)ÚBaseFileEndpoints)Ú*)Úuser_api_key_auth)ÚProxyBaseLLMRequestProcessing)Ú_read_request_bodyÚextract_nested_form_metadata)Ú)get_custom_llm_provider_from_request_bodyÚ,get_custom_llm_provider_from_request_headersÚ*get_custom_llm_provider_from_request_query)Úcheck_batch_file_uploadÚ#raise_batch_file_validation_failure)ÚEMPTY_MAPPINGÚBatchScanResultÚraise_nothing_to_submitÚraise_publicÚrewrite_batch_input_fileÚscan_batch_input_file)Ú"_is_base64_encoded_unified_file_idÚadd_internal_model_credentialsÚapply_team_provider_credentialsÚencode_file_id_with_modelÚextract_file_creation_paramsÚget_credentials_for_modelÚhandle_model_based_routingÚprepare_data_with_credentialsÚvalidate_file_list_limitÚ"validate_managed_files_requirementÚvalidate_managed_id_requirement)ÚProxyLoggingÚis_known_model)ÚManagedFileRepository)ÚRouter)ÚCREATE_FILE_REQUESTS_PURPOSEÚFileExpiresAfterÚOpenAIFileObjectÚOpenAIFilesPurposeÚrouterÚ_MAX_BATCH_FILE_SIZE_MB_ADAPTERc                   óP   — e Zd ZU eedz     ed<   eedz     ed<   eedz     ed<   y)ÚUploadedFileInfoNÚfilenameÚcontent_typeÚsize)Ú__name__Ú
__module__Ú__qualname__r   ÚstrÚ__annotations__Úint© ó    úy/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/openai_files_endpoints/files_endpoints.pyrA   rA   X   s/   … Ø�s˜T‘zÑ"Ó"Ø˜3 ™:Ñ&Ó&Ø
�3˜‘:Ñ
ÔrL   rA   c                 ó  — | €y t        | t        «      st        d«      ‚| D ]\  }t        |t        «      sŒ|j	                  «       D ]6  \  }}t        |t
        «      sŒ|j                  d«      sŒ)t        |«      ||<   Œ8 Œ^ | ay )Nz3invalid files config, expected a list is not a listzos.environ/)	Ú
isinstanceÚlistÚ
ValueErrorÚdictÚitemsrH   Ú
startswithr   Úfiles_config)ÚconfigÚelementÚkeyÚvalues       rM   Úset_files_configrZ   a   s~   € à€~Øä�fœdÔ#ÜÐNÓOÐOàò 9ˆÜ�gœtÕ$Ø%Ÿm™m›oò 9‘
��UÜ˜e¤SÕ)¨e×.>Ñ.>¸}Õ.MÜ#1°%Ó#8�G˜C’Lñ9ð9ð �LrL   Úcustom_llm_providerc                 óx   — | dk(  ry t         €t        d«      ‚t         D ]  }|j                  d«      | k(  sŒ|c S  y )NÚ	vertex_aiz;files_settings is not set, set it on your config.yaml file.r[   )rU   rQ   Úget)r[   Úsettings     rM   Úget_files_provider_configr`   r   sM   € ð ˜kÒ)ØÜÐÜÐVÓWÐWÜò ˆØ�;‰;Ð,Ó-Ð1DÓDØŠNðð rL   Úfile_sourceÚpurposeÚrequest_metadataÚuser_api_key_dictÚproxy_logging_objÚreturnc              ƒ   ó  K  — |dk7  s!t        | t        «      s|j                  |«      syt        | |||¬«      ƒ d{  –—† }t        |t        «      st        |«       |j                  r|j                  dk(  r
t        «        |S 7 ŒF­w)zZGuardrail the records of a batch input file, or None when this upload has nothing to scan.ÚbatchN)ra   rc   rd   re   r   )	rO   ÚbytesÚhas_pre_call_guardrailsr*   r&   r(   ÚchangesÚsubmitted_recordsr'   )ra   rb   rc   rd   re   Úoutcomes         rM   Ú_scan_batch_uploadrn   €   s   è ø€ ð 	�7ÒÜ�k¤5Ô)Ø ×8Ñ8Ð9IÔJàÜ0ØØ)Ø+Ø+ô	÷ €Gô �gœÔ/Ü�WÔØ‡‚˜7×4Ñ4¸Ò9ÜÔ!Ø€Nðús   ‚:B¼B½ABc                 ó~  — 	 t        | t        t        f«      r"t        d„ | j	                  «       D «       d«      }n5| j                  d«       t        d„ | D «       d«      }| j                  d«       |€dS t        j                  |j                  «       «      S # t        j                  t        t        t        f$ r Y yw xY w)aÔ  
    The first record, used to pick a deployment when batch load balancing is on.

    Read the way the upload validation reads it, since a file it accepted must not lose its
    routing here: blank lines are not records and are skipped, and the line is parsed as bytes so
    the json module sniffs the encoding rather than rejecting a leading byte order mark. Either
    difference makes this return None, which silently sends the batch to the default provider.
    c              3   óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­w©N©Ústrip©Ú.0Úlines     rM   ú	<genexpr>z(get_first_json_object.<locals>.<genexpr>§   s   è ø€ Ò.i¸Ð\`×\fÑ\fÕ\h¬tÑ.iùó   ‚˜Nr   c              3   óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­wrq   rr   rt   s     rM   rw   z(get_first_json_object.<locals>.<genexpr>«   s   è ø€ Ò N¨$ÀÇÁÅ¤Ñ Nùrx   )rO   ri   Ú	bytearrayÚnextÚ
splitlinesÚseekÚjsonÚloadsrs   ÚJSONDecodeErrorÚUnicodeDecodeErrorÚOSErrorrQ   )ra   Úfirst_records     rM   Úget_first_json_objectr„   œ   s§   € ð
Ü�k¤E¬9Ð#5Ô6Ü)-Ñ.iÀ×@VÑ@VÓ@XÔ.iÐkoÓ)p‰Lð ×Ñ˜QÔÜÑ N°+Ô NÐPTÓUˆLØ×Ñ˜QÔØ#Ð+ˆtÐQ´·±¸L×<NÑ<NÓ<PÓ1QÐQøÜ× Ñ Ô"4´g¼zÐJò Ùðús   ‚A0B Á3"B Â#B<Â;B<Újson_objectc                 ój   — | j                  d«      }t        |t        «      r|j                  d«      S dS )ad  
    The model a record names, or None when it does not name one readably.

    The upload validation only checks that `body` is present, not that it is an object, so a
    record can carry a string there and reach this. Returning None sends the upload down the
    default-provider branch, which is what a record with no resolvable model already did.
    ÚbodyÚmodelN)r^   rO   rR   )r…   r‡   s     rM   Úget_model_from_json_objr‰   ²   s/   € ð —/‘/ &Ó)€DÜ *¨4´Ô 6ˆ4�8‰8�GÓÐ@¸DÐ@rL   Ú
llm_routerÚrouter_modelÚ_create_file_requestc              ƒ   ól   K  — | €t        dddi¬«      ‚ | j                  dd|i|¤Žƒ d {  –—† }|S 7 Œ­w)Néô  Úerrorú9LLM Router not initialized. Ensure models added to proxy.©Ústatus_codeÚdetailrˆ   rK   )r   Úacreate_file)rŠ   r‹   rŒ   Úresponses       rM   Ú$_deprecated_loadbalanced_create_filer–   ¾   sR   è ø€ ð
 ÐÜØØÐXÐYô
ð 	
ð
 4˜J×3Ñ3Ñ_¸,Ð_ÐJ^Ñ_×_€HØ€Oð `ús   ‚)4«2¬4ÚdefaultÚtarget_model_names_listÚis_router_modelrˆ   Útarget_storagec              ƒ   ó8  K  — |
rW|
dk7  rRddl m} ddlm}  |t	        t
        |j                  d«      «      «      }|j                  ||
||||¬«      ƒ d{  –—† }|S |	�“t        | |	d¬	«      }t        ||¬
«       t        j                  di |¤d|d   i¤Žƒ d{  –—† }|rPt        |d«      rD|j                  r8|j                  }t        ||	¬«      }||_        t        j                   d|||	«       |S |r||j#                  d«      }|€t%        dddd¬«      ‚| €t%        dddd¬«      ‚t'        |t(        «      st%        dddd¬«      ‚|j                  | |||j*                  |¬«      ƒ d{  –—† }|S t        j,                  du r|r|�t/        | ||¬«      ƒ d{  –—† }|S t1        t	        t2        |«      | ||¬«       t5        |¬«      }|�|j7                  |«       |j9                  dd«       t        j                  di |¤d|i¤Žƒ d{  –—† }|S 7 �Œ¹7 �Œy7 Œ«7 Œ7 Œ­w)aÌ  
    Route file creation request to the appropriate provider.

    Priority:
    1. If target_storage is specified and not "default" -> use storage backend
    2. If model parameter provided -> use model credentials and encode ID
    3. If target_model_names_list -> managed files (requires DB, supports loadbalancing)
    4. If enable_loadbalancing_on_batch_endpoints -> deprecated loadbalancing
    5. Else -> use custom_llm_provider with files_settings
    r—   r   )Úextract_file_data)ÚStorageBackendFileServiceÚfile)Ú	file_datarš   Útarget_model_namesrb   re   rd   Nzfile upload©rŠ   Úmodel_idÚoperation_context©ÚdataÚcredentialsr[   Úid)Úfile_idrˆ   z%Encoded file ID: %s -> %s (model: %s)Úmanaged_filesúManaged files hook not foundÚNonerŽ   ©ÚmessageÚtypeÚparamÚcodeúLLM Router not foundú-Managed files hook is not a BaseFileEndpoints)rŠ   Úcreate_file_requestr˜   Úlitellm_parent_otel_spanrd   T)rŠ   r‹   rŒ   ©r¥   rŠ   rd   r[   ©r[   rK   )Ú8litellm.litellm_core_utils.prompt_templates.common_utilsrœ   Ú<litellm.proxy.openai_files_endpoints.storage_backend_servicer�   r   r   r^   Úupload_file_to_storage_backendr0   r2   Úlitellmr”   Úhasattrr§   r.   r   ÚdebugÚget_proxy_hookÚProxyExceptionrO   r   Úparent_otel_spanÚ'enable_loadbalancing_on_batch_endpointsr–   r-   rR   r`   ÚupdateÚpop)rŠ   rŒ   rb   re   rd   r˜   r™   r‹   r[   rˆ   rš   rœ   r�   rŸ   Úfile_objectr¦   r•   Úoriginal_idÚ
encoded_idÚmanaged_files_objÚllm_provider_configs                        rM   Úroute_create_filerÈ   Í   s™  è ø€ ñ2 ˜.¨IÒ5õ	
õ	
ñ
 -¬T´#Ð7K×7OÑ7OÐPVÓ7WÓ-XÓYˆ	ð $=×#[Ñ#[ØØ)Ø6ØØ/Ø/ð $\ó $
÷ 
ˆð Ðð Ðä6Ø!ØØ+ô
ˆô 	&Ø%Ø#õ	
ô !×-Ñ-ñ 
Ø"ñ
à +Ð,AÑ Bò
÷ 
ˆñ œ ¨$Ô/°H·K²KØ!)§¡ˆKÜ 9À+ÐUZÔ [ˆJØ$ˆHŒKÜ ×&Ñ&Ð'NÐP[Ð]gÐinÔoàˆñ Ø#4×#CÑ#CÀOÓ#TÐØÐ$Ü Ø6ØØØô	ð ð ÐÜ Ø.ØØØô	ð ô Ð+Ô->Ô?Ü ØGØØØô	ð ð +×7Ñ7Ø!Ø 4Ø$;Ø%6×%GÑ%GØ/ð 8ó 
÷ 
ˆð< €Oô- 
×	8Ñ	8¸DÑ	@Á_ÐYeÐYqÜ=Ø!Ø%Ø!5ô
÷ 
ˆð* €Oô 	(Ü”dÐ0Ó1Ø!Ø/Ø 3õ		
ô &?ÐSfÔ%gÐØÐ*à ×'Ñ'Ð(;Ô<Ø× Ñ Ð!6¸Ô=ä ×-Ñ-ÑnÐ0DÑnÐZmÒn×nˆà€OðC
ùð6
ùðP
øð
øð& oús]   ‚AHÁHÁAHÂHÂCHÅ(HÅ)-HÆHÆA0HÈHÈHÈHÈHÈHÈHz/{provider}/v1/filesÚfiles)ÚdependenciesÚtagsz	/v1/filesz/files.Ú )r—   ÚopenaiÚrequestÚfastapi_responser    Úproviderrž   Úlitellm_metadatac
              ƒ   óö  K  — ddl m}
m}m}m}m}m} i }g }	 |dk(  r&|j                  d«      ƒ d{  –—†  |j                  }n|j                  «       ƒ d{  –—† }|xs4 t        | ¬«      xs& t        | ¬«      xs t        | ¬«      ƒ d{  –—† xs d}t        | ¬«      ƒ d{  –—† xs i }t        | |||¬«      ƒ d{  –—† }|j                  }|j                   }|j"                  }t%        ||¬«       t'        t(        «      }||vrt+        d	|› d
|› �ddd¬«      ‚t-        t(        |«      }|dk(  r]t/        j0                  t2        |j4                  |t6        j9                  |j;                  d«      «      «      ƒ d{  –—† }|�t=        |«       i }d}| j?                  «       ƒ d{  –—† }tA        |«      }tC        |d¬«      }|j;                  d«      }|j;                  d«      }|�||d<   |€|�„|�|€tE        dddi¬«      ‚tG        |tH        «      rtE        dddi¬«      ‚tG        |tJ        «      stE        dddi¬«      ‚|}|dk7  rtE        ddd|› d�i¬«      ‚	 tM        |«      } tS        d| ¬«      } |
|| ||	||¬ «      ƒ d{  –—† }|j4                  |jT                  |jV                  d!œ}"||d<   |"|d"<   |jY                  |	|d#¬$«      ƒ d{  –—† }#|#�|#n|}|j[                  dd«       |j[                  d"d«       |j;                  d%«      xs |j;                  d«      xs t\        }$t_        |||$|	|¬&«      ƒ d{  –—† }%|%�‡|%j`                  r{|%jc                  «       je                  «       tg        |«      d'   d(<   ti        jj                  d)tm        |%j`                  «      |%jn                  |j4                  |%jq                  «       «       |%�|js                  |%jt                  «       |%�/|%j`                  r#t/        j0                  tv        ||%«      ƒ d{  –—† n|}&|&|ur|js                  |&«       |j4                  |&|jT                  f}'d}(d*})tx        jz                  d+u r&t}        |&«      }*|*rt        |*¬,«      }(t�        |(|¬-«      })|	j‚                  xs i }+|+j;                  d.«      },|,�Nd/|,vsd0|,vrtE        d1dd2i¬«      ‚|,d/   dk7  rtE        d1dd3|,d/   › d4�i¬«      ‚tS        dtM        |,d0   «      ¬«      }ti        j„                  d5|«       t‡        dK|'t-        tˆ        |«      |d6œ|¤Ž}-t‹        ||-|||	||)|(|||¬7«      ƒ d{  –—† }.|.€tE        d1dd8i¬«      ‚t/        jŒ                  |j�                  |j;                  d9d:«      d;¬<«      «       |j‘                  ||	|.¬=«      ƒ d{  –—† }/|/�tG        |/t’        «      r|/}.|%�!|%j`                  r|%jc                  «       |._J        t—        |.d>i «      xs i }0|0j;                  d?d«      xs d:}1|0j;                  d@d«      xs d:}2|0j;                  dAd«      xs d:}3|j˜                  j›                  t�        jž                  |	|1|2|3|t—        |	dBd:«      ¬C«      «       |.|D ]  }4|4j¡                  «        Œ S 7 �ŒY7 �Œ77 �Œ7 �Œñ7 �ŒÙ7 �Œ7 �Œø# tN        tP        f$ r}!tE        ddd|› d|!› �i¬«      ‚d}!~!ww xY w7 �ŒH7 �Œ7 �Œ–7 �ŒÂ7 �Œ—7 �Œ7# t¢        $ rô}!|j¥                  |	|!|¬D«      ƒ d{  –—†7   ti        j¦                  dE|!«       tG        |!t*        «      r|!‚tG        |!tD        «      r\t+        t—        |!dFtK        |!j¨                  «      «      t—        |!dGdH«      t—        |!dIdH«      t—        |!dJtª        j¬                  «      ¬«      ‚|!› }5t+        t—        |!dF|5«      t—        |!dGdH«      t—        |!dIdH«      t—        |!dJd1«      ¬«      ‚d}!~!ww xY w# |D ]  }4|4j¡                  «        Œ w xY w­w)Laö  
    Upload a file that can be used across - Assistants API, Batch API 
    This is the equivalent of POST https://api.openai.com/v1/files

    Supports Identical Params as: https://platform.openai.com/docs/api-reference/files/create

    Example Curl
    ```
    curl http://localhost:4000/v1/files         -H "Authorization: Bearer sk-1234"         -F purpose="batch"         -F file="@mydata.jsonl"
        -F expires_after[anchor]="created_at"         -F expires_after[seconds]=2592000
    ```
    r   ©Úadd_litellm_data_to_requestÚgeneral_settingsrŠ   Úproxy_configre   Úversionrh   N©rÎ   rÍ   )rÎ   Úrequest_bodyÚtarget_model_names_formÚtarget_storage_form)r    rˆ   zInvalid purpose: z. Must be one of: Úinvalid_request_errorrb   é�  r¬   Úmax_batch_file_size_mbzlitellm_metadata[)Ú	form_dataÚprefixzexpires_after[anchor]zexpires_after[seconds]rÑ   r�   zdBoth expires_after[anchor] and expires_after[seconds] must be provided if expires_after is specifiedr‘   z9expires_after[anchor] must be a string, not a file uploadz:expires_after[seconds] must be a string, not a file uploadÚ
created_atz1expires_after[anchor] must be 'created_at', got 'ú'z5expires_after[seconds] must be a valid integer, got 'z': )ÚanchorÚseconds©r¥   rÎ   rÕ   rd   r×   rÖ   )rB   rC   rD   rž   r”   )rd   r¥   Ú	call_typeÚmetadata)ra   rb   rc   rd   re   é   Úbatch_guardrailz3batch guardrails changed %s of %s records in %s: %sFT)r…   )rˆ   rŠ   Úenforced_file_expires_afterrã   rä   rŽ   z¼Server configuration error: team metadata field 'enforced_file_expires_after' is malformed - must contain 'anchor' and 'seconds' keys. Contact your team or proxy admin to fix this setting.zbServer configuration error: team metadata field 'enforced_file_expires_after' has invalid anchor 'zO' - must be 'created_at'. Contact your team or proxy admin to fix this setting.zcreate_file expires_after: %s)rž   rb   Úexpires_after)rŠ   rŒ   rb   re   rd   r˜   r™   r‹   r[   rˆ   rš   z(Failed to create file. Please try again.Úlitellm_call_idrÌ   Úsuccess©rì   r   ©r¥   rd   r•   Ú_hidden_paramsr¢   Ú	cache_keyÚapi_baseÚallowed_model_region©rd   r¢   rñ   rò   r×   Úmodel_region©rd   Úoriginal_exceptionÚrequest_dataz@litellm.proxy.proxy_server.create_file(): Exception occured - %sr­   r®   r«   r¯   r’   rK   )WÚlitellm.proxy.proxy_serverrÔ   rÕ   rŠ   rÖ   re   r×   r}   rž   Úreadr!   r"   r    r   r/   rš   r    rˆ   r4   r	   r=   r¾   r   ÚasyncioÚ	to_threadr#   rB   r?   Úvalidate_pythonr^   r$   ÚformrR   r   r   rO   r   rH   rJ   rQ   Ú	TypeErrorr;   rC   rD   Úpre_call_hookrÂ   r%   rn   rk   ÚreportÚ
model_dumpr   r   ÚwarningÚlenÚscanned_recordsÚsummaryÚappendÚ
redactionsr)   rº   rÀ   r„   r‰   r7   Úteam_metadatar¼   r   r:   rÈ   Úcreate_taskÚupdate_request_statusÚpost_call_success_hookr<   Úlitellm_batch_guardrailÚgetattrÚheadersrÁ   r   Úget_custom_headersÚcloseÚ	ExceptionÚpost_call_failure_hookÚ	exceptionr“   r   ÚHTTP_400_BAD_REQUEST)6rÎ   rÏ   rb   r    rš   rÐ   r[   rž   rÑ   rd   rÔ   rÕ   rŠ   rÖ   re   r×   r¥   Úspoolsra   rÙ   Úfile_paramsr˜   Úmodel_paramÚvalid_purposesÚbatch_file_failurerë   Úform_data_rawÚform_data_dictÚextracted_litellm_metadataÚexpires_after_anchorÚexpires_after_seconds_strÚ#expires_after_seconds_str_validatedÚexpires_after_secondsÚeÚuploaded_file_infoÚhooked_datarc   Úscan_resultÚupload_sourcerŸ   r‹   r™   Újson_objr	  Úenforced_file_expiryrŒ   r•   Ú	_responseÚhidden_paramsr¢   rñ   rò   ÚspoolÚ	error_msgs6                                                         rM   Úcreate_filer-  V  sI	  è ø€ ÷V÷ ð €Dð %'€Fðoð
 �gÒØ—)‘)˜A“,×ÐØŸ)™)‰Kà $§	¡	£×+ˆKàò Ü;ÀGÔLòä9À'ÔJòô ?ÀwÔO×Oòð ð 	ô %7¸wÔ$G×GÒMÈ2ˆÜ#?ØØ%Ø$6Ø .ô	$
÷ 
ˆð %×3Ñ3ˆØ)4×)GÑ)GÐØ(×.Ñ.ˆä*Ð>UÐ]hÕiô !)Ô);Ó <ˆØ˜.Ñ(Ü Ø+¨G¨9Ð4FÀ~ÐFVÐWØ,ØØô	ð ô Ô)¨7Ó3ˆà�gÒÜ.5×.?Ñ.?Ü'Ø—‘ØÜ/×?Ñ?Ð@P×@TÑ@TÐUmÓ@nÓoó	/÷ )Ðð "Ð-Ü3Ð4FÔGàˆð 26ˆØ%,§\¡\£^×3ˆÜ04°]Ó0CˆÜC_Ø$Ð-@ôD
Ð"ð '4×&7Ñ&7Ð8OÓ&PÐØ+8×+<Ñ+<Ð=UÓ+VÐ!ð &Ð1Ø'AˆDÐ#Ñ$àÐ+Ð/HÐ/TØ#Ð+Ð/HÐ/PÜ#Ø #àð  "Hðôð ô Ð.´
Ô;Ü#Ø #àÐ!\ðôð ô Ð7¼Ô=Ü#Ø #àÐ!]ðôð ð ?XÐ/ð $ |Ò3Ü#Ø #àÐ#TÐUiÐTjÐjkÐ!lðôð ðÜ/2Ð3VÓ/WÐ%ô -Ø#Ø-ôˆMñ 1ØØØ-Ø/ØØ%ô
÷ 
ˆð Ÿ™Ø ×-Ñ-Ø—I‘Iñ7
Ðð
 "ˆˆY‰Ø)ˆˆV‰Ø#4×#BÑ#BØ/ØØ$ð $Có $
÷ 
ˆð
 *Ð5‰{¸4ˆØ�‰�˜DÔ!Ø�‰�˜Ôð #'§(¡(¨:Ó"6Ò"g¸$¿(¹(ÐCUÓ:VÒ"gÔZgÐÜ#5Ø#ØØ-Ø/Ø/ô$
÷ 
ˆð Ð" {×':Ò':ð IT×HZÑHZÓH\×HgÑHgÓHiÔ)¨$Ó/°Ñ2Ð3DÑEÜ ×(Ñ(ØEÜ�K×'Ñ'Ó(Ø×+Ñ+Ø—‘Ø×#Ñ#Ó%ôð Ð"Ø�M‰M˜+×0Ñ0Ô1ð Ð&¨;×+>Ò+>ô ×#Ñ#Ô$<¸kÈ;ÓW×WÐWàð 	ð
  Ñ+Ø�M‰M˜-Ô(Ø ŸM™M¨=¸$×:KÑ:KÐLˆ	ð $(ˆØˆÜ×:Ñ:¸dÑBÜ3°MÓBˆHÙÜ6À8ÔL�Ü"0°|ÐPZÔ"[�ð  1×>Ñ>ÒDÀ"ˆØ&3×&7Ñ&7Ð8UÓ&VÐØÐ+ØÐ3Ñ3°yÐH\Ñ7\Ü#Ø #àð  "`ðôð ð $ HÑ-°Ò=Ü#Ø #àð  $Fð  G[ð  \dñ  Geð  Ffð  fuð  "vðôð ô -Ø#ÜÐ0°Ñ;Ó<ôˆMô
 	×"Ñ"Ð#BÀMÔRä&7ð '
ØÜÔ5°wÓ?Ø'ñ'
ð ñ	'
Ðô +Ø!Ø!5ØØ/Ø/Ø$;Ø+Ø%Ø 3ØØ)ô
÷ 
ˆð ÐÜØØÐ!KÐLôð ô
 	×ÑØ×3Ñ3ÀDÇHÁHÐM^Ð`bÓDcÐluÐ3Óvô	
ð
 "3×!IÑ!IØÐ):ÀXð "Jó "
÷ 
ˆ	ð Ð ¤Z°	Ô;KÔ%LØ ˆHàÐ" {×':Ò':Ø/:×/AÑ/AÓ/CˆHÔ,ô  ' xÐ1AÀ2ÓFÒLÈ"ˆØ'×+Ñ+¨J¸Ó=ÒCÀˆØ(×,Ñ,¨[¸$Ó?ÒEÀ2ˆ	Ø'×+Ñ+¨J¸Ó=ÒCÀˆà× Ñ ×'Ñ'Ü)×<Ñ<Ø"3Ø!Ø#Ø!ØÜ$Ð%6Ð8NÐPRÓSôô		
ð ð0 ò 	ˆEØ�K‰K�Mñ	ðQ	 ùð ,ùð
 Pùð
 Hùð
ùð6)ùð  4úôl ¤	Ð*ò Ü#Ø #àÐ#XÐYrÐXsÐsvÐwxÐvyÐ!zðôð ûðúð
ùð 
ùð
ùð. Xùðb
ùð2
úô4 ò Ø×6Ñ6Ø/ÀAÐTXð 7ó 
÷ 	
ñ 	
ô 	×&Ñ&Ð'iÐklÔmÜ�aœÔ(ØˆGÜ�aœÔ'Ü Ü  9¬c°!·(±(«mÓ<Ü˜Q ¨Ó/Ü˜a ¨&Ó1Ü˜Q ¬v×/JÑ/JÓKô	ð ð #$ ˆIÜ Ü  9¨iÓ8Ü˜Q ¨Ó/Ü˜a ¨&Ó1Ü˜Q ¨sÓ3ô	ð ûð!ûð. ò 	ˆEØ�K‰K�Mñ	üsO  ‚_9˜[ ±Z
²$[ ÁZÁ3[ Â
ZÂ[ Â"ZÂ#[ Â=ZÂ>B=[ Å;ZÅ<([ Æ$ZÆ%B4[ ÉZ É%[ Ê[ÊA	[ Ë[ËA-[ Ì;[Ì<C[ Ð[ÐD-[ Õ [ÕA"[ Ö#[Ö$C[ Ù2_9Ú
[ Ú[ Ú[ Ú[ Ú[ Ú[ Ú[ Ú[Ú.[Û[Û[ Û[ Û[ Û[ Û[ Û[ Û	_Û&_Û=\ Û>C_ß_ß_ ß_6ß6_9z+/{provider}/v1/files/{file_id:path}/contentz /v1/files/{file_id:path}/contentz/files/{file_id:path}/contentr¨   c              ƒ   ó   K  — ddl m}m}m}m}m}	 d|i}
	 t        |d||j                  d«      ¬«      ƒ d{  –—†  t        |
¬«      }|j                  | |||	||d	¬
«      ƒ d{  –—† \  }
}|xs4 t        | ¬«      xs& t        | ¬«      xs t        | ¬«      ƒ d{  –—† xs d}t        |«      }|�r�|j                  d«      }|€t        dddd¬«      ‚|€t        dddd¬«      ‚t        |t         «      st        dddd¬«      ‚t#        |d«      r²t%        |dd«      r¥t%        |d«      }t'        |«      j(                  j+                  d|i¬«      ƒ d{  –—† }|rh|j,                  r\|j.                  rPddlm} |j,                  }|j.                  }	  ||«      }|j5                  |«      ƒ d{  –—† }ddlm}  ||d¬«      S t=        t>        dz  |
jA                  d«      «      }|r/tC        |
||¬«        |jD                  dDi ||dœ|
¥¤Žƒ d{  –—† }�nR |jD                  dDi ||jF                  |d œ|
¥¤Žƒ d{  –—† }�n&tI        |«      rtK        dd!¬"«      ‚tM        || ||
d#¬$«      \  }}}}|stO        |
|||¬%«       dd&l(m)} |jU                  |||
|||¬'«      \  } }!}"|jW                  | ¬(«      r8tY        jZ                  d)| ||!|«       |j]                  | |!|"|||	¬*«      ƒ d{  –—† S |rY|�Wt_        |
||d#¬+«       ta        jD                  dDd,|d,   i|
¤Žƒ d{  –—† }tY        jZ                  d-|› �|rd.|› d/|› �nd0z   «       n"ta        jD                  dDi ||d1œ|
¥¤Žƒ d{  –—† }tc        jd                  |jg                  |
jA                  d2d0«      d3¬4«      «       t%        |d5i «      xs i }#|#jA                  d6d«      xs d0}$|#jA                  d7d«      xs d0}%|#jA                  d8d«      xs d0}&|jh                  jk                  t        jl                  ||$|%|&|	t%        |d9d0«      ¬:«      «       t%        |d;d«      }'|'€t;        d<|› �«      ‚t9        |'jn                  |'jp                  |'jh                  ¬=«      S 7 �Œ@7 �Œ7 �Œã7 �Œ.7 �Œ×# t:        $ r}t        d|› �ddd¬«      ‚d}~ww xY w7 �Œœ7 �Œs7 �ŒË7 �Œ™7 �ŒT# tr        $ �r	}|ju                  |||
¬>«      ƒ d{  –—†7   tY        jv                  d?|«       tY        jZ                  ty        jz                  «       «       t        |tJ        «      r\t        t%        |d@t?        |j|                  «      «      t%        |dAd«      t%        |dBd«      t%        |dCt~        j€                  «      ¬«      ‚|› }(t        t%        |d@|(«      t%        |dAd«      t%        |dBd«      t%        |dCd«      ¬«      ‚d}~ww xY w­w)Ea±  
    Returns information about a specific file. that can be used across - Assistants API, Batch API 
    This is the equivalent of GET https://api.openai.com/v1/files/{file_id}/content

    Supports Identical Params as: https://platform.openai.com/docs/api-reference/files/retrieve-contents

    Example Curl
    ```
    curl http://localhost:4000/v1/files/file-abc123/content         -H "Authorization: Bearer sk-1234"

    ```
    r   ©rÕ   rŠ   rÖ   re   r×   r¨   rž   r©   ©Úresource_idÚresource_kindrd   rÆ   N©r¥   Úafile_content©rÎ   rÕ   rd   r×   re   rÖ   Ú
route_typerØ   rÍ   rª   r«   rŽ   r¬   r±   r²   Úprisma_clientÚunified_file_id)Úwhere)Úget_storage_backend)r   zapplication/octet-stream)ÚcontentÚ
media_typezStorage backend error: rÜ   rÝ   rˆ   )r¥   rŠ   r¢   )rˆ   r¨   ©r¨   r´   rŠ   z|Raw cloud storage file ids cannot be retrieved directly. Use the LiteLLM managed file id returned when the file was created.r‘   T©r¨   rÎ   rŠ   r¥   Úcheck_file_id_encodingrµ   )ÚFileContentStreamingHandler)r[   r¨   r¥   Úshould_routeÚoriginal_file_idr¦   r¶   znUsing streaming file content helper for custom_llm_provider=%s, original_file_id=%s, file_id=%s, model_used=%s)r[   r¨   r¥   re   rd   r×   ©r¥   r¦   r¨   Úinclude_internal_credentialsr[   z$Retrieved file content using model: z, file_id: z -> rÌ   ©r[   r¨   rì   rí   rî   rð   r¢   rñ   rò   ró   rô   r•   z3Invalid response - response.response is None - got )r;  r’   r  rö   zJlitellm.proxy.proxy_server.retrieve_file_content(): Exception occured - %sr­   r®   r¯   r’   rK   )Arù   rÕ   rŠ   rÖ   re   r×   r5   r½   r   Ú common_processing_pre_call_logicr!   r"   r    r+   r¾   rO   r   r»   r  r8   ÚtableÚ
find_firstÚstorage_backendÚstorage_urlÚ3litellm.llms.base_llm.files.storage_backend_factoryr:  Údownload_fileÚfastapi.responsesr   rQ   r   rH   r^   r,   r4  r¿   r   r   r1   r-   ÚClitellm.proxy.openai_files_endpoints.file_content_streaming_handlerr@  Ú resolve_streaming_request_paramsÚshould_stream_file_contentr   r¼   Ú#get_streaming_file_content_responser2   rº   rû   r
  r  r  rÁ   r  r;  r’   r  r  r  Ú	tracebackÚ
format_excr“   r   r  ))rÎ   rÏ   r¨   rÐ   rd   rÕ   rŠ   rÖ   re   r×   r¥   Úbase_llm_response_processorÚlitellm_logging_objr[   Úis_base64_unified_file_idrÆ   r7  Údb_filer:  Ústorage_backend_namerJ  rI  Úfile_contentÚFastAPIResponser"  rˆ   r•   rA  Ú
model_usedrB  r¦   r@  Úresolved_custom_llm_providerÚresolved_file_idÚresolved_streaming_datar*  r¢   rñ   rò   Úhttpx_responser,  s)                                            rM   Úget_file_contentr`  Á  s  è ø€ ÷Fõ ð ˜WÐ%€DðBÜ-ØØ Ø/Ø/×>Ñ>¸ÓOô	
÷ 	
ð 	
ô .KÐPTÔ-UÐ#ð .×NÑNØØ-Ø/ØØ/Ø%Ø&ð Oó 
÷ 
ñ	
ØØð ò Ü;ÀGÔLòä9À'ÔJòô ?ÀwÔO×Oòð ð 	ô ,NÈgÓ+VÐ!Ú$Ø'8×'GÑ'GÈÓ'XÐØ Ð(Ü$Ø:ØØ Øô	ð ð Ð!Ü$Ø2ØØ Øô	ð ô Ð/Ô1BÔCÜ$ØKØØ Øô	ð ô Ð(¨/Ô:¼wÐGXÐZiÐkoÔ?pÜ'.Ð/@À/Ó'R�Ü'<¸]Ó'K×'QÑ'Q×'\Ñ'\Ø,¨gÐ6ð (]ó (÷ "�ñ ˜w×6Ò6¸7×;NÒ;Nõð 3:×2IÑ2IÐ(Ø)0×)<Ñ)<�Kðá1DÐEYÓ1Z˜Ø4C×4QÑ4QÐR]Ó4^×.^˜õ Rá.Ø$0Ø'Aô ð ô  ¤ d¡
¨D¯H©H°WÓ,=Ó>ˆEÙÜ.°DÀZÐZ_Õ`Ø!9 ×!9Ñ!9ñ "à!&Ø#*ñð ðñ"÷ ’ð "AÐ!2×!@Ñ!@ñ "à#*Ø4E×4VÑ4VØ&0ñð ð	ñ"÷ ’ô ,¨GÔ4Ü#Ø #ð Zôð ô +ØØØ%ØØ'+ôñØØØ Øñ  Ü/ØØ)Ø&7Ø(;õ	õð ,×LÑLØ$7ØØØ)Ø!1Ø'ð Mó ñ	Ø,Ø Ø'ð +×EÑEØ$@ð Fô ô %×*Ñ*ð EØ0Ø$Ø$Øôð 9×\Ñ\Ø(DØ,Ø0Ø&7Ø&7Ø#ð ]ó ÷ ð ñ  Ð 7ä-ØØ +Ø,Ø15õ	ô ")×!6Ñ!6ñ "Ø(3Ð4IÑ(Jð"àñ"÷ �ô
 %×*Ñ*Ø:¸:¸,ÐGÙHX˜ W I¨TÐ2BÐ1CÑDÐ^`ñbõô ")×!6Ñ!6ñ "à/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ôô		
ô 8?¸xÈÐUYÓ7ZˆØÐ!ÜÐRÐS[ÐR\Ð]Ó^Ð^äØ"×*Ñ*Ø&×2Ñ2Ø"×*Ñ*ô
ð 	
ðO	
ùð
ùð PùðB"ùð /_úô &ò Ü,Ø&=¸a¸SÐ$AØ!8Ø"+Ø!$ô	ð ûðúðùðùðFùð"ùðúôN ó Ø×6Ñ6Ø/ÀAÐTXð 7ó 
÷ 	
ñ 	
ô 	×&Ñ&Ð'sÐuvÔwÜ×"Ñ"¤9×#7Ñ#7Ó#9Ô:Ü�aœÔ'Ü Ü  9¬c°!·(±(«mÓ<Ü˜Q ¨Ó/Ü˜a ¨&Ó1Ü˜Q ¬v×/JÑ/JÓKô	ð ð #$ ˆIÜ Ü  9¨iÓ8Ü˜Q ¨Ó/Ü˜a ¨&Ó1Ü˜Q ¨sÓ3ô	ð ûðüs  ‚W–!R8 ·Q7¸+R8 Á#Q:Á$6R8 ÂQ=ÂB7R8 ÅR Å<R8 ÆR Æ,RÆ-R Ç WÇAR8 ÈR)È+R8 È9R,È:B*R8 Ë$R/Ë%R8 Ë(WË)0R8 ÌR2ÌAR8 Í!R5Í"DR8 Ñ6WÑ7R8 Ñ:R8 Ñ=R8 Ò R8 ÒR Ò	R&ÒR!Ò!R&Ò&R8 Ò,R8 Ò/R8 Ò2R8 Ò5R8 Ò8
WÓWÓSÓC,W×W×Wz#/{provider}/v1/files/{file_id:path}z/v1/files/{file_id:path}z/files/{file_id:path}c              ƒ   ó®  K  — ddl m}m}m}m} d|i}		 t        |d||j                  d«      ¬«      ƒ d{  –—†  |xs4 t        | ¬«      xs& t        | ¬«      xs t        | ¬«      ƒ d{  –—† xs d	}
t        |	¬
«      }|j                  | |||||d¬«      ƒ d{  –—† \  }	}ddl m} t        || ||	d¬«      \  }}}}|rrt        |	||d¬«       t        j                   d,i |	¤Žƒ d{  –—† }|r!|rt#        |d«      r|j$                  r||_        t'        j(                  d|› �|rd|› �ndz   «       n´t+        |«      rh|j                  d«      }|€t-        dddd¬«      ‚t/        |t0        «      st-        dddd¬«      ‚|j!                  ||j2                  |¬«      ƒ d{  –—† }nA|	j5                  dd«       t7        |	|||
¬«       t        j                   d,|
|dœ|	¤Žƒ d{  –—† }t9        j:                  |j=                  |	j?                  dd«      d¬«      «       tA        |d i «      xs i }|j?                  d!d«      xs d}|j?                  d"d«      xs d}|j?                  d#d«      xs d}|jB                  jE                  t        jF                  |||||tA        |d$d«      ¬%«      «       |S 7 �Œy7 �ŒH7 �Œ7 �ŒÒ7 �Œ7 ŒÝ# tH        $ �r	}|jK                  |||	¬&«      ƒ d{  –—†7   t'        jL                  d'|«       t'        j(                  tO        jP                  «       «       t/        |tR        «      r\t-        tA        |d(tU        |jV                  «      «      tA        |d)d«      tA        |d*d«      tA        |d+tX        jZ                  «      ¬«      ‚|› }t-        tA        |d(|«      tA        |d)d«      tA        |d*d«      tA        |d+d«      ¬«      ‚d}~ww xY w­w)-a˜  
    Returns information about a specific file. that can be used across - Assistants API, Batch API 
    This is the equivalent of GET https://api.openai.com/v1/files/{file_id}

    Supports Identical Params as: https://platform.openai.com/docs/api-reference/files/retrieve

    Example Curl
    ```
    curl http://localhost:4000/v1/files/file-abc123         -H "Authorization: Bearer sk-1234"

    ```
    r   )rÕ   rÖ   re   r×   r¨   rž   r©   r0  NrØ   rÍ   r3  Úafile_retriever5  )rŠ   Tr>  rC  r§   zRetrieved file using model: ú, original_id: rÌ   rª   r«   rŽ   r¬   r²   r=  rµ   rE  rì   rí   rî   rð   r¢   rñ   rò   ró   rô   rö   zBlitellm.proxy.proxy_server.retrieve_file(): Exception occured - %sr­   r®   r¯   r’   rK   ).rù   rÕ   rÖ   re   r×   r5   r½   r!   r"   r    r   rF  rŠ   r1   r2   rº   rb  r»   r§   r   r¼   r+   r¾   rO   r   r¿   rÂ   r-   rû   r
  r  r^   r  r  rÁ   r  r  r  r�   rR  rS  r   rH   r“   r   r  )rÎ   rÏ   r¨   rÐ   rd   rÕ   rÖ   re   r×   r¥   r[   rT  rU  rŠ   rA  r[  rB  r¦   r•   rÆ   r*  r¢   rñ   rò   r"  r,  s                             rM   Úget_filerd  ò  sS  è ø€ ÷Fó ð ˜WÐ%€DðTÜ-ØØ Ø/Ø/×>Ñ>¸ÓOô	
÷ 	
ð 	
ð ò Ü;ÀGÔLòä9À'ÔJòô ?ÀwÔO×Oòð ð 	ô .KÐPTÔ-UÐ#ð .×NÑNØØ-Ø/ØØ/Ø%Ø'ð Oó 
÷ 
ñ	
ØØõ 	:ô 'ØØØ!ØØ#'ô
ñ	
ØØØØñ ä)ØØ'Ø(Ø-1õ	ô %×3Ñ3Ñ;°dÑ;×;ˆHñ  ¡H´¸À4Ô1HÈXÏ[Ê[Ø%�”ä ×&Ñ&Ø.¨z¨lÐ;Ù;K�_Ð%5Ð$6Ñ7ÐQSñUõô 0°Ô8Ø'8×'GÑ'GÈÓ'XÐØ Ð(Ü$Ø:ØØ Øô	ð ô Ð/Ô1BÔCÜ$ØKØØ Øô	ð ð /×=Ñ=ØØ):×)KÑ)KØ%ð >ó ÷ ‰Hð �H‰H�Y Ô%Ü+ØØ%Ø"3Ø$7õ	ô %×3Ñ3ð Ø$7Øñð ñ÷ ˆHô 	×ÑØ×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ôô		
ð ˆð{	
ùð Pùð
ùðF <ùð8ùðùô: ó Ø×6Ñ6Ø/ÀAÐTXð 7ó 
÷ 	
ñ 	
ô 	×"Ñ"Ð#gÐijÔkÜ×"Ñ"¤9×#7Ñ#7Ó#9Ô:Ü�aœÔ'Ü Ü  9¬c°!·(±(«mÓ<Ü˜Q ¨Ó/Ü˜a ¨&Ó1Ü˜Q ¬v×/JÑ/JÓKô	ð ð #$ ˆIÜ Ü  9¨iÓ8Ü˜Q ¨Ó/Ü˜a ¨&Ó1Ü˜Q ¨sÓ3ô	ð ûðüs£   ‚O”!J? µJ.¶3J? Á)J1Á*/J? ÂJ4ÂAJ? Ã%J7Ã&B7J? ÆJ:ÆAJ? ÇJ=Ç CJ? Ê-OÊ.J? Ê1J? Ê4J? Ê7J? Ê:J? Ê=J? Ê?
OË	OË K#Ë!C,OÏOÏOc              ƒ   óØ  K  — ddl m}m}m}m}m}	m}
 d|i}	 t        |d||	j                  d«      ¬«      ƒ d{  –—†  |xs4 t        | ¬«      xs& t        | ¬«      xs t        | ¬«      ƒ d{  –—† xs d	}t        |¬
«      }|j                  | |||
|	|d¬«      ƒ d{  –—† \  }} ||| |||
|¬«      ƒ d{  –—† }t        || ||d¬«      \  }}}}|rV|�Tt        |||d¬«       t!        j"                  d-d|d   i|¤Žƒ d{  –—† }t%        j&                  d|› �|rd|› �ndz   «       nðt)        |«      r¤|	j                  d«      }|€t+        dddd¬«      ‚|€t+        dddd¬«      ‚t-        |t.        «      st+        dddd¬«      ‚|j1                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ }}} |j"                  d-||j2                  |dœ|¤Žƒ d{  –—† }nA|j5                  dd«       t7        ||||¬«       t!        j"                  d-||dœ|¤Žƒ d{  –—† }t9        j:                  |	j=                  |j?                  dd«      d¬ «      «       tA        |d!i «      xs i }|j?                  d"d«      xs d}|j?                  d#d«      xs d}|j?                  d$d«      xs d}|jB                  jE                  t        jF                  |||||
tA        |d%d«      ¬&«      «       |S 7 �Œ©7 �Œx7 �ŒK7 �Œ57 �Œîc c}}w 7 �Œ&7 Œæ# tH        $ râ}|	jK                  |||¬'«      ƒ d{  –—†7   t%        jL                  d(|«       t-        |tN        «      r\t+        tA        |d)tQ        |jR                  «      «      tA        |d*d«      tA        |d+d«      tA        |d,tT        jV                  «      ¬«      ‚|› }t+        tA        |d)|«      tA        |d*d«      tA        |d+d«      tA        |d,d«      ¬«      ‚d}~ww xY w­w).aš  
    Deletes a specified file. that can be used across - Assistants API, Batch API 
    This is the equivalent of DELETE https://api.openai.com/v1/files/{file_id}

    Supports Identical Params as: https://platform.openai.com/docs/api-reference/files/delete

    Example Curl
    ```
    curl http://localhost:4000/v1/files/file-abc123     -X DELETE     -H "Authorization: Bearer $OPENAI_API_KEY"

    ```
    r   rÓ   r¨   rž   r©   r0  NrØ   rÍ   r3  Úafile_deleter5  rå   Tr>  rC  r[   zDeleted file using model: rc  rÌ   rª   r«   rŽ   r¬   r±   r²   r=  rµ   rE  rì   rí   rî   rð   r¢   rñ   rò   ró   rô   rö   z@litellm.proxy.proxy_server.delete_file(): Exception occured - %sr­   r®   r¯   r’   rK   ),rù   rÔ   rÕ   rŠ   rÖ   re   r×   r5   r½   r!   r"   r    r   rF  r1   r2   rº   rf  r   r¼   r+   r¾   rO   r   rS   r¿   rÂ   r-   rû   r
  r  r^   r  r  rÁ   r  r  r  r  r   rH   r“   r   r  )rÎ   rÏ   r¨   rÐ   rd   rÔ   rÕ   rŠ   rÖ   re   r×   r¥   r[   rT  rU  rA  r[  rB  r¦   r•   rÆ   ÚkÚvÚdata_without_file_idr*  r¢   rñ   rò   r"  r,  s                                 rM   Údelete_filerj  ´  s½  è ø€ ÷H÷ ð ˜WÐ%€DðcÜ-ØØ Ø/Ø/×>Ñ>¸ÓOô	
÷ 	
ð 	
ð ò Ü;ÀGÔLòä9À'ÔJòô ?ÀwÔO×Oòð ð 	ô .KÐPTÔ-UÐ#ð .×NÑNØØ-Ø/ØØ/Ø%Ø%ð Oó 
÷ 
ñ	
ØØñ 1ØØØ-Ø/ØØ%ô
÷ 
ˆô 'ØØØ!ØØ#'ô
ñ	
ØØØØñ ˜KÐ3ä)ØØ'Ø(Ø-1õ	ô %×1Ñ1ñ Ø$/Ð0EÑ$Fðàñ÷ ˆHô
 !×&Ñ&Ø,¨Z¨LÐ9Ù;K�_Ð%5Ð$6Ñ7ÐQSñUõô 0°Ô8Ø'8×'GÑ'GÈÓ'XÐØ Ð(Ü$Ø:ØØ Øô	ð ð Ð!Ü$Ø2ØØ Øô	ð ô Ð/Ô1BÔCÜ$ØKØØ Øô	ð ð =A¿J¹J»L×*[±D°A°qÈAÐQZËN¨1¨a©4Ð*[Ð Ñ*[Ø;Ð.×;Ñ;ð ØØ):×)KÑ)KØ%ñð 'ñ	÷ ‰Hð �H‰H�Y Ô%Ü+ØØ%Ø"3Ø$7õ	ô %×1Ñ1ð Ø$7Øñð ñ÷ ˆHô 	×ÑØ×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ôô		
ð ˆð[	
ùð Pùð
ùð
ùð@ûóH +\ðùðùô: ò Ø×6Ñ6Ø/ÀAÐTXð 7ó 
÷ 	
ñ 	
ô 	×&Ñ&Ð'iÐklÔmÜ�aœÔ'Ü Ü  9¬c°!·(±(«mÓ<Ü˜Q ¨Ó/Ü˜a ¨&Ó1Ü˜Q ¬v×/JÑ/JÓKô	ð ð #$ ˆIÜ Ü  9¨iÓ8Ü˜Q ¨Ó/Ü˜a ¨&Ó1Ü˜Q ¨sÓ3ô	ð ûðüsÇ   ‚O*˜!K< ¹K"º3K< Á-K%Á./K< ÂK(ÂK< Â6K+Â7A	K< Ä K.ÄBK< ÆK1Æ&K1Æ+&K< ÇK7ÇAK< ÈK:ÈCK< Ë!O*Ë"K< Ë%K< Ë(K< Ë+K< Ë.K< Ë1K< Ë:K< Ë<	O'ÌO"ÌLÌCO"Ï"O'Ï'O*ÚlimitÚafterc              ƒ   ó¦  K  — ddl m}m}	m}
m}m} i }	 t        |«       t        |¬«      }|j                  | |||||
t        j                  j                  ¬«      ƒ d{  –—† \  }}d}t        d| |	|d¬«      \  }}}}|rJ|�Ht        ||¬	«       t        j                  d.|d
   |dœ|¤Žƒ d{  –—† }t!        j"                  d|«       �nD|r�t%        |t&        «      r}|j)                  d«      }t+        |«      dk7  rt-        dd¬«      ‚|	€t-        dd¬«      ‚t/        |	|d   d¬«      }t        ||¬	«       t        j                  d.|d
   |dœ|¤Žƒ d{  –—† }nµ|xs0 t1        | ¬«      xs" t3        | ¬«      xs t5        | ¬«      ƒ d{  –—† }|j7                  d«      }|€9t%        |t8        «      r)|j                  ||j:                  |||¬«      ƒ d{  –—† }n5|xs d}t=        ||	||¬«       t        j                  d.||dœ|¤Žƒ d{  –—† }|€t-        dd¬«      ‚|j?                  |||¬«      ƒ d{  –—† }|�t%        |t@        «      r|}tC        jD                  |jG                  |jI                  dd«      d¬«      «       tK        |d i «      xs i }|jI                  d!d«      xs d}|jI                  d"d«      xs d}|jI                  d#d«      xs d}|jL                  jO                  t        jP                  |||||tK        |d$d«      ¬%«      «       |S 7 �Œ¸7 �Œm7 �ŒÊ7 �Œ˜7 �ŒP7 �Œ7 Œô# tR        $ �r}|jU                  |||¬&«      ƒ d{  –—†7   t!        jV                  d'|«       t!        j"                  tY        jZ                  «       «       t%        |t\        «      r‚ t%        |t,        «      r\t]        tK        |d(t'        |j^                  «      «      tK        |d)d*«      tK        |d+d*«      tK        |d,t`        jb                  «      ¬-«      ‚|› }t]        tK        |d(|«      tK        |d)d*«      tK        |d+d*«      tK        |d,d«      ¬-«      ‚d}~ww xY w­w)/a~  
    Returns information about a specific file. that can be used across - Assistants API, Batch API 
    This is the equivalent of GET https://api.openai.com/v1/files/

    Supports Identical Params as: https://platform.openai.com/docs/api-reference/files/list

    Example Curl
    ```
    curl http://localhost:4000/v1/files        -H "Authorization: Bearer sk-1234"

    ```
    r   r/  r3  r5  NrÌ   Fr>  r¤   r[   )r[   rb   zListed files using model: %sú,rè   rÝ   zVtarget_model_names on list files must be a list of one model name. Example: ['gpt-4o']r‘   rŽ   r�   z	file listr¡   rØ   r©   )rb   r´   rd   rk  rl  rÍ   rµ   z\Either 'provider' or 'target_model_names' must be provided e.g. `?target_model_names=gpt-4o`rï   rì   rí   rî   rð   r¢   rñ   rò   ró   rô   rö   z?litellm.proxy.proxy_server.list_files(): Exception occured - %sr­   r®   r«   r¯   r’   r¬   rK   )2rù   rÕ   rŠ   rÖ   re   r×   r3   r   rF  Ú	CallTypesÚalist_fine_tuning_jobsrY   r1   r2   rº   Ú
afile_listr   r¼   rO   rH   Úsplitr  r   r0   r!   r"   r    r½   r   r¿   r-   r  r<   rû   r
  r  r^   r  r  rÁ   r  r  r  r�   rR  rS  r¾   r“   r   r  ) rÎ   rÏ   rd   rÐ   r    rb   rk  rl  rÕ   rŠ   rÖ   re   r×   r¥   rT  rU  r•   rA  r[  Ú_r¦   r˜   r[   rÆ   r\  r)  r*  r¢   rñ   rò   r"  r,  s                                    rM   Ú
list_filesrt  ˆ  sè  è ø€ ÷Lõ ð €DðXÜ  Ô'ô .KÐPTÔ-UÐ#ð .×NÑNØØ-Ø/ØØ/Ø%Ü ×7Ñ7×=Ñ=ð Oó 
÷ 
ñ	
ØØð  $ˆô 4NØØØ!ØØ#(ô4
Ñ0ˆ�j ! [ñ ˜KÐ3ä)¨tÀÕMÜ$×/Ñ/ð Ø$/Ð0EÑ$FØñð ñ÷ ˆHô !×&Ñ&Ð'EÀzÖRá¤JÐ/AÄ3Ô$GØ-?×-EÑ-EÀcÓ-JÐ#ÜÐ*Ó+¨qÒ0Ü#Ø #Øsôð ð Ð!Ü#Ø #ØVôð ô 4Ø%Ø0°Ñ3Ø"-ôˆKô
 *¨tÀÕMÜ$×/Ñ/ð Ø$/Ð0EÑ$FØñð ñ÷ ‰Hð ò TÜ?ÈÔPòTä=ÀgÔNòTô CÈ7ÔS×Sð	  ð (9×'GÑ'GÈÓ'XÐØ"Ð*¬zÐ:KÔM^Ô/_Ø!2×!=Ñ!=Ø#Ø->×-OÑ-OØ&7ØØð ">ó "÷ ‘ð 7JÒ6UÈXÐ,Ü/ØØ)Ø&7Ø(Dõ	ô ")×!3Ñ!3ð "Ø(DØ#ñ"ð ñ"÷ �ð ÐÜØØuôð ð "3×!IÑ!IØÐ):ÀXð "Jó "
÷ 
ˆ	ð Ð ¤Z°	Ô;KÔ%LØ ˆHô 	×ÑØ×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ôô		
ð ˆðq
ùð0ùð4ùð Tùðùð ùð
ùô: ó Ø×6Ñ6Ø/ÀAÐTXð 7ó 
÷ 	
ñ 	
ô 	×"Ñ"Ð#dÐfgÔhÜ×"Ñ"¤9×#7Ñ#7Ó#9Ô:Ü�aœÔ(ØÜ�aœÔ'Ü Ü  9¬c°!·(±(«mÓ<Ü˜Q ¨Ó/Ü˜a ¨&Ó1Ü˜Q ¬v×/JÑ/JÓKô	ð ð #$ ˆIÜ Ü  9¨iÓ8Ü˜Q ¨Ó/Ü˜a ¨&Ó1Ü˜Q ¨sÓ3ô	ð ûð#üs¸   ‚Q”A
L* ÁLÁAL* Â,LÂ-B%L* ÅLÅ4L* ÆLÆA
L* ÇL"Ç5L* ÈL%È	*L* È3L(È4C!L* ÌQÌL* ÌL* ÌL* ÌL* Ì"L* Ì%L* Ì(L* Ì*
QÌ4Q	ÍMÍC=Q	Ñ	QÑQ)Nr—   )orû   rR  Úcollections.abcr   Útypingr   r   r   r   r   r	   ÚhttpxÚfastapir
   r   r   r   r   r   r   r   r   Úpydanticr   Útyping_extensionsr   rº   r   r   Úlitellm._loggingr   Ú1litellm.litellm_core_utils.cloud_storage_securityr   Ú'litellm.litellm_core_utils.core_helpersr   Ú*litellm.llms.base_llm.files.transformationr   Úlitellm.proxy._typesÚ$litellm.proxy.auth.user_api_key_authr   Ú'litellm.proxy.common_request_processingr   Ú-litellm.proxy.common_utils.http_parsing_utilsr   r   Ú0litellm.proxy.common_utils.openai_endpoint_utilsr    r!   r"   Ú:litellm.proxy.openai_files_endpoints.batch_file_validationr#   r$   Ú5litellm.proxy.openai_files_endpoints.batch_guardrailsr%   r&   r'   r(   r)   r*   Ú1litellm.proxy.openai_files_endpoints.common_utilsr+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   Úlitellm.proxy.utilsr6   r7   Ú'litellm.repositories.table_repositoriesr8   Úlitellm.routerr9   Úlitellm.types.llms.openair:   r;   r<   r=   r>   rI   rJ   r?   rA   rU   rZ   rH   r`   ri   ÚobjectÚUserAPIKeyAuthrn   rR   r„   r‰   r–   rP   ÚboolrÈ   Úpostr-  r^   r`  rd  Údeleterj  rt  rK   rL   rM   ú<module>r�     s	  ðô Û Ý #ß B× Bã ÷
÷ 
õ 
õ !Ý &ã ß 5Ý 1õõ RÝ HÜ "Ý BÝ Q÷÷ñ ÷
÷÷ ÷÷ ÷ ñ ÷ =Ý IÝ !÷ó ñ “€ˆÓ á)4°S¸4±ZÓ)@Ð  Ó @ô�yô ð €òð"Øóðà˜Ñ!ðð ðð ˜c 6˜kÑ*ð	ð
 &ðð $ðð �tÑóð8 u¨xÑ'7ð ¸DÀ4¹Kó ð,	A¨ð 	A°#¸±*ó 	AðØ˜‘ðàðð ,ðð ó	ð2 Ø!*ñFØ˜‘ðFà+ðFð  ðFð $ð	Fð
 &ðFð " #™YðFð ðFð ˜‘*ðFð ðFð �‰:ðFð ˜$‘JðFð óFðR ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ñ ˜“9Ù"¨2Ô.Ù yÔ1ØÙ#¨HÔ5Ù˜C“yÙ#'°Ô#5Ù(/Ð0AÓ(BñYØðYàðYð ðYð ð	Yð
 ðYð �D‰jðYð ðYð ðYð ˜D‘jðYð &òYóóóðYðx
 ‡�Ø1ÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�Ø&ÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�Ø#ÙÐ+Ó,Ð-Ø
ˆð ó ð  Ù(/Ð0AÓ(Bñ_Øð_àð_ð ð_ð �D‰jð	_ð
 &ò_óóóð_ðD	 ‡�Ø)ÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð  Ù(/Ð0AÓ(BñpØðpàðpð ðpð �D‰jð	pð
 &òpóóóðpðf ‡�Ø)ÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð  Ù(/Ð0AÓ(BñBØðBàðBð ðBð �D‰jð	Bð
 &òBóóóðBðJ ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ð
 ‡�ØÙÐ+Ó,Ð-Ø
ˆð ó ñ )0Ð0AÓ(BØØ%)ØØØñxØðxàðxð &ðxð �D‰jð	xð
 ˜d™
ðxð �4‰Zðxð �‰:ðxð �‰:òxóóóñxrL   