
    ^h|w                     L   S r SSKrSSKrSSKrSSKJr  SSKJrJrJ	r	J
r
JrJrJr  SSKrSSKrSSKJr  SSKJr  SSKJrJrJr  SSKJr  SS	KJrJrJrJr  SS
K7  SSKJ r   \" 5       r!\" 5       r"\" 5       r#   S S\$S\
S   S\\	\$\$4      S\\	\$\$4      4S jjr%   S S\$S\
S   S\\	\$\$4      S\\	\$\$4      S\4
S jjr&   S S\$S\
S   S\\	\$\$4      S\\	\$\$4      S\\\\4   4
S jjr'   S S\$S\
S   S\\	\$\$4      S\\	\$\$4      S\4
S jjr(    S!S\
S   S\\$   S\\	\$\$4      S\\	\$\$4      4S jjr)    S!S\
S   S\\$   S\\	\$\$4      S\\	\$\$4      4S jjr*   S S\S\
S   S\
S   S\\	\$\$4      S\\	\$\$4      S\4S jjr+   S S\S\
S   S\
S   S\\	\$\$4      S\\	\$\$4      S\\\\\\4   4   4S jjr,   S S\$S\
S   S\\	\$\$4      S\\	\$\$4      S\4
S jjr-   S S\$S\
S   S\\	\$\$4      S\\	\$\$4      S\\\\\\4   4   4
S jjr.g)"z_
Main File for Files API implementation

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

    N)partial)Any	CoroutineDictLiteralOptionalUnioncast)get_secret_str)AzureOpenAIFilesAPI)FileDeleted
FileObjectOpenAIFilesAPI)VertexAIFilesHandler)CreateFileRequestFileContentRequest	FileTypesHttpxBinaryResponseContent)*)supports_httpx_timeoutfile_idcustom_llm_provider)openaiazureextra_headers
extra_bodyc                 x  #     [         R                  " 5       nSUS'   [        [        U UUU40 UD6n[        R
                  " 5       n[        UR                  U5      nUR                  SU5      I Sh  vN n	[         R                  " U	5      (       a  U	I Sh  vN n
U
$ U	n
U
$  N/ N! [         a  nUeSnAff = f7f)U
Async: Get file contents

LiteLLM Equivalent of GET https://api.openai.com/v1/files
Tis_asyncN)
asyncioget_event_loopr   file_retrievecontextvarscopy_contextrunrun_in_executoriscoroutine	Exceptionr   r   r   r   kwargsloopfuncctxfunc_with_contextinit_responseresponsees               L/home/james-whalen/.local/lib/python3.13/site-packages/litellm/files/main.pyafile_retriever3   %   s     %%'!z 
 
 &&(#CGGT2"2249JKK}--**H  %H L*
  Y   B:A.B& 2B"3$B& B$B& B:B& !B:"B& $B& &
B70B22B77B:returnc                      [        S 0 UD6nUR                  =(       d    UR                  SS5      =(       d    SnUbE  [        U[        R
                  5      (       a&  [        U5      SL a  UR                  =(       d    SnUnO3Ub+  [        U[        R
                  5      (       d  [        U5      nOUc  SnUR                  SS5      SL nUS:X  Ga  UR                  =(       d6    [        R                  =(       d    [        R                  " S	5      =(       d    S
n	UR                  =(       d7    [        R                  =(       d     [        R                  " SS5      =(       d    Sn
UR                  =(       dD    [        R                  =(       d-    [        R                   =(       d    [        R                  " S5      n["        R%                  U UU	UUUR&                  U
S9nGO|US:X  Ga  UR                  =(       d"    [        R                  =(       d    [)        S5      n	UR*                  =(       d"    [        R*                  =(       d    [)        S5      nUR                  =(       dK    [        R                  =(       d4    [        R,                  =(       d    [)        S5      =(       d    [)        S5      nUR                  S0 5      nUb  UR                  SS5        O[)        S5        [.        R%                  UU	UUUUR&                  U S9nOV[        R0                  R3                  SR5                  U5      SU[        R6                  " SS[        R8                  " SSS9S9S9e[;        [<        U5      $ ! [>         a  nUeSnAff = f)!o
Returns the contents of the specified file.

LiteLLM Equivalent of POST: POST https://api.openai.com/v1/files
request_timeoutX  NF     @r   Tr   OPENAI_API_BASEhttps://api.openai.com/v1OPENAI_ORGANIZATIONOPENAI_API_KEYr   	_is_asyncapi_baseapi_keytimeoutmax_retriesorganizationr   AZURE_API_BASEAZURE_API_VERSIONAZURE_OPENAI_API_KEYAZURE_API_KEYr   azure_ad_tokenAZURE_AD_TOKENr@   rA   rB   api_versionrC   rD   r   zXLiteLLM doesn't support {} for 'file_retrieve'. Only 'openai' and 'azure' are supported.n/a  Unsupported providercreate_thread"https://github.com/BerriAI/litellmmethodurlstatus_codecontentrequestmessagemodelllm_providerr0    ) GenericLiteLLMParamsrC   get
isinstancehttpxTimeoutr   readfloatpoprA   litellmosgetenvrE   rB   
openai_keyopenai_files_instanceretrieve_filerD   r   rM   	azure_keyazure_files_instance
exceptionsBadRequestErrorformatResponseRequestr
   r   r(   r   r   r   r   r*   optional_paramsrC   read_timeoutr@   rA   rE   rB   r0   rM   r1   s                  r2   r"   r"   M   s   a.88!))VVZZ8I3-OVSV 7EMM22&':;uD"<<.3L"G GU]])K)KGnG_GJJz51T9	(*  (( /##/99.// /	   ,, ''992D9 	   '' /??/%%/ 99-.	  -::#!+77) ; H !G+&//g73C3Cg~VfGgH++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6/0+99#!'+77 : H $$44ryy' 0 #2!MMFjk 5   J))    M)M, ,
M=6M88M=c                   #     [         R                  " 5       nSUS'   [        [        U UUU40 UD6n[        R
                  " 5       n[        UR                  U5      nUR                  SU5      I Sh  vN n	[         R                  " U	5      (       a  U	I Sh  vN n
OU	n
[        [        U
5      $  N< N! [         a  nUeSnAff = f7f)zR
Async: Delete file

LiteLLM Equivalent of DELETE https://api.openai.com/v1/files
Tr   N)r    r!   r   file_deleter#   r$   r%   r&   r'   r
   r   r(   r)   s               r2   afile_deleterz      s     %%'!z 
 
 &&(#CGGT2"2249JKK}--**H$HK** L*
  sM   CA.B3 2B/3$B3 B1B3 .C/B3 1B3 3
C=B??CCc                      [        S 0 UD6nUR                  =(       d    UR                  SS5      =(       d    SnUbE  [        U[        R
                  5      (       a&  [        U5      SL a  UR                  =(       d    SnUnO3Ub+  [        U[        R
                  5      (       d  [        U5      nOUc  SnUR                  SS5      SL nUS:X  Ga  UR                  =(       d6    [        R                  =(       d    [        R                  " S	5      =(       d    S
n	UR                  =(       d7    [        R                  =(       d     [        R                  " SS5      =(       d    Sn
UR                  =(       dD    [        R                  =(       d-    [        R                   =(       d    [        R                  " S5      n["        R%                  U UU	UUUR&                  U
S9nGO|US:X  Ga  UR                  =(       d"    [        R                  =(       d    [)        S5      n	UR*                  =(       d"    [        R*                  =(       d    [)        S5      nUR                  =(       dK    [        R                  =(       d4    [        R,                  =(       d    [)        S5      =(       d    [)        S5      nUR                  S0 5      nUb  UR                  SS5        O[)        S5        [.        R%                  UU	UUUUR&                  U S9nOV[        R0                  R3                  SR5                  U5      SU[        R6                  " SS[        R8                  " SSS9S9S9e[;        [<        U5      $ ! [>         a  nUeSnAff = f)!zK
Delete file

LiteLLM Equivalent of DELETE https://api.openai.com/v1/files
r8   r9   NFr:   r   Tr   r;   r<   r=   r>   r?   r   rF   rG   rH   rI   r   rJ   rK   rL   JLiteLLM doesn't support {} for 'create_batch'. Only 'openai' is supported.rN   rO   rP   rQ   rR   rS   rV   rZ   r^   ) r_   rC   r`   ra   rb   rc   r   rd   re   rf   rA   rg   rh   ri   rE   rB   rj   rk   delete_filerD   r   rM   rm   rn   ro   rp   rq   rr   rs   r
   r   r(   rt   s                  r2   ry   ry      s   ^.88!))VVZZ8I3-OVSV 7EMM22&':;uD"<<.3L"G GU]])K)KGnG_GJJz51T9	(*  (( /##/99.// /	   ,, ''992D9 	   '' /??/%%/ 99-.	  -88#!+77) 9 H !G+&//g73C3Cg~VfGgH++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6/0+77#!'+77 8 H $$44dkk' 0 #2!MMFjk 5   K** rw   purposec                 x  #     [         R                  " 5       nSUS'   [        [        U UUU40 UD6n[        R
                  " 5       n[        UR                  U5      nUR                  SU5      I Sh  vN n	[         R                  " U	5      (       a  U	I Sh  vN n
U
$ U	n
U
$  N/ N! [         a  nUeSnAff = f7f)zN
Async: List files

LiteLLM Equivalent of GET https://api.openai.com/v1/files
Tr   N)
r    r!   r   	file_listr#   r$   r%   r&   r'   r(   )r   r~   r   r   r*   r+   r,   r-   r.   r/   r0   r1   s               r2   
afile_listr   T  s     %%'!z 
 
 &&(#CGGT2"2249JKK}--**H  %H L*
  r4   c                     [        S 0 UD6nUR                  =(       d    UR                  SS5      =(       d    SnUbE  [        U[        R
                  5      (       a&  [        U 5      SL a  UR                  =(       d    SnUnO3Ub+  [        U[        R
                  5      (       d  [        U5      nOUc  SnUR                  SS5      SL nU S:X  Ga  UR                  =(       d6    [        R                  =(       d    [        R                  " S	5      =(       d    S
n	UR                  =(       d7    [        R                  =(       d     [        R                  " SS5      =(       d    Sn
UR                  =(       dD    [        R                  =(       d-    [        R                   =(       d    [        R                  " S5      n["        R%                  UUU	UUUR&                  U
S9nU$ U S:X  Ga   UR                  =(       d"    [        R                  =(       d    [)        S5      n	UR*                  =(       d"    [        R*                  =(       d    [)        S5      nUR                  =(       dK    [        R                  =(       d4    [        R,                  =(       d    [)        S5      =(       d    [)        S5      nUR                  S0 5      nUb  UR                  SS5        O[)        S5        [.        R%                  UU	UUUUR&                  US9nU$ [        R0                  R3                  SR5                  U 5      SU [        R6                  " SS[        R8                  " SSS9S9S9e! [:         a  nUeSnAff = f)!zG
List files

LiteLLM Equivalent of GET https://api.openai.com/v1/files
r8   r9   NFr:   r   Tr   r;   r<   r=   r>   )r~   r@   rA   rB   rC   rD   rE   r   rF   rG   rH   rI   r   rJ   rK   )r@   rA   rB   rM   rC   rD   r~   zTLiteLLM doesn't support {} for 'file_list'. Only 'openai' and 'azure' are supported.rN   rO   rP   r   rR   rS   rV   rZ   r^   )r_   rC   r`   ra   rb   rc   r   rd   re   rf   rA   rg   rh   ri   rE   rB   rj   rk   
list_filesrD   r   rM   rm   rn   ro   rp   rq   rr   rs   r(   )r   r~   r   r   r*   ru   rC   rv   r@   rA   rE   rB   r0   rM   r1   s                  r2   r   r   |  s   `.88!))VVZZ8I3-OVSV 7EMM22&':;uD"<<.3L"G GU]])K)KGnG_GJJz51T9	(*  (( /##/99.// /	   ,, ''992D9 	   '' /??/%%/ 99-.	  -77#!+77) 8 Hj Y !G+&//g73C3Cg~VfGgH++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6/0+66#!'+77 7 H,  $$44nuu' 0 #2!MMBfg 5    s&   GM  D&M AM 
M.'M))M.file)
assistantsbatchz	fine-tune)r   r   	vertex_aic                 z  #     [         R                  " 5       nSUS'   [        [        U UUUU40 UD6n[        R
                  " 5       n[        UR                  U5      n	UR                  SU	5      I Sh  vN n
[         R                  " U
5      (       a  U
I Sh  vN nU$ U
nU$  N/ N! [         a  nUeSnAff = f7f)z
Async: Files are used to upload documents that can be used with features like Assistants, Fine-tuning, and Batch API.

LiteLLM Equivalent of POST: POST https://api.openai.com/v1/files
Tacreate_fileN)
r    r!   r   create_filer#   r$   r%   r&   r'   r(   )r   r~   r   r   r   r*   r+   r,   r-   r.   r/   r0   r1   s                r2   r   r     s     %%'!%~ 
 
 &&(#CGGT2"2249JKK}--**H  %H L*
  sY   B;A/B' 3B#4$B' B%B' B;B' "B;#B' %B' '
B81B33B88B;c                     UR                  SS5      SL n[        S'0 UD6nUR                  =(       d    UR                  SS5      =(       d    SnUbE  [	        U[
        R                  5      (       a&  [        U5      SL a  UR                  =(       d    Sn	U	nO3Ub+  [	        U[
        R                  5      (       d  [        U5      nOUc  Sn[        U UUUS9n
US	:X  Ga  UR                  =(       d6    [        R                  =(       d    [        R                  " S
5      =(       d    SnUR                  =(       d7    [        R                  =(       d     [        R                  " SS5      =(       d    SnUR                   =(       dD    [        R                   =(       d-    [        R"                  =(       d    [        R                  " S5      n[$        R'                  UUUUUR(                  UU
S9nU$ US:X  Ga   UR                  =(       d"    [        R                  =(       d    [+        S5      nUR,                  =(       d"    [        R,                  =(       d    [+        S5      nUR                   =(       dK    [        R                   =(       d4    [        R.                  =(       d    [+        S5      =(       d    [+        S5      nUR                  S0 5      nUb  UR                  SS5        O[+        S5        [0        R'                  UUUUUUR(                  U
S9nU$ US:X  a  UR                  =(       d    SnUR2                  =(       d"    [        R2                  =(       d    [+        S5      nUR4                  =(       d"    [        R4                  =(       d    [+        S5      nUR6                  =(       d    [+        S5      n[8        R'                  UUUUUUUR(                  U
S9nU$ [        R:                  R=                  SR?                  U5      SU[
        R@                  " S S![
        RB                  " S"S#S$9S%9S&9e! [D         a  nUeSnAff = f)(z
Files are used to upload documents that can be used with features like Assistants, Fine-tuning, and Batch API.

LiteLLM Equivalent of POST: POST https://api.openai.com/v1/files
r   FTr8   r9   Nr:   )r   r~   r   r   r   r;   r<   r=   r>   )r@   rA   rB   rC   rD   rE   create_file_datar   rF   rG   rH   rI   r   rJ   rK   )r@   rA   rB   rM   rC   rD   r   r    VERTEXAI_PROJECTVERTEXAI_LOCATIONVERTEXAI_CREDENTIALS)r@   rA   vertex_projectvertex_locationvertex_credentialsrC   rD   r   r|   rN   rO   rP   rQ   rR   rS   rV   rZ   r^   )#rf   r_   rC   r`   ra   rb   rc   r   rd   re   r   rA   rg   rh   ri   rE   rB   rj   rk   r   rD   r   rM   rm   rn   r   r   r   vertex_ai_files_instancero   rp   rq   rr   rs   r(   )r   r~   r   r   r   r*   r@   ru   rC   rv   _create_file_requestrA   rE   rB   r0   rM   vertex_ai_projectvertex_ai_locationr   r1   s                       r2   r   r     s   AJJ~u5=	.88 "))VVZZ8I3-OVSV 7EMM22&':;uD"<<.3L"G GU]])K)KGnG_G0'!	 
 (*  (( /##/99.// /	   ,, ''992D9 	   '' /??/%%/ 99-.	  -88#!+77)!5 9 H^ M !G+&//g73C3Cg~VfGgH++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6/0+77#!'+77!5 8 H` O !K/&//52H.. 6))6!"45   // 7**7!"56 
 "1!C!C "~&H 0;;#!0 2#5+77!5 < 	H.  $$44dkk' 0 #2!MMFjk 5    s-   G)P2 ,D&P2 CP2 AP2 2
Q<P>>Qc                 x  #     [         R                  " 5       nSUS'   [        [        U UUU40 UD6n[        R
                  " 5       n[        UR                  U5      nUR                  SU5      I Sh  vN n	[         R                  " U	5      (       a  U	I Sh  vN n
U
$ U	n
U
$  N/ N! [         a  nUeSnAff = f7f)r   Tafile_contentN)
r    r!   r   file_contentr#   r$   r%   r&   r'   r(   r)   s               r2   r   r     s     %%'"& 
 
 &&(#CGGT2"2249JKK}--**H  %H L*
  r4   c                     [        S!0 UD6nUR                  =(       d    UR                  SS5      =(       d    SnUbE  [        U[        R
                  5      (       a&  [        U5      SL a  UR                  =(       d    SnUnO3Ub+  [        U[        R
                  5      (       d  [        U5      nOUc  Sn[        U UUS9nUR                  SS5      SL n	US	:X  Ga  UR                  =(       d6    [        R                  =(       d    [        R                  " S
5      =(       d    Sn
UR                  =(       d7    [        R                  =(       d     [        R                  " SS5      =(       d    SnUR                   =(       dD    [        R                   =(       d-    [        R"                  =(       d    [        R                  " S5      n[$        R'                  U	UU
UUUR(                  US9nU$ US:X  Ga   UR                  =(       d"    [        R                  =(       d    [+        S5      n
UR,                  =(       d"    [        R,                  =(       d    [+        S5      nUR                   =(       dK    [        R                   =(       d4    [        R.                  =(       d    [+        S5      =(       d    [+        S5      nUR                  S0 5      nUb  UR                  SS5        O[+        S5        [0        R'                  U	U
UUUUR(                  US9nU$ [        R2                  R5                  SR7                  U5      SU[        R8                  " SS[        R:                  " SSS9S9S 9e! [<         a  nUeSnAff = f)"r7   r8   r9   NFr:   )r   r   r   r   Tr   r;   r<   r=   r>   )r@   file_content_requestrA   rB   rC   rD   rE   r   rF   rG   rH   rI   r   rJ   rK   )r@   rA   rB   rM   rC   rD   r   zWLiteLLM doesn't support {} for 'file_content'. Only 'openai' and 'azure' are supported.rN   rO   rP   rQ   rR   rS   rV   rZ   r^   )r_   rC   r`   ra   rb   rc   r   rd   re   r   rf   rA   rg   rh   ri   rE   rB   rj   rk   r   rD   r   rM   rm   rn   ro   rp   rq   rr   rs   r(   )r   r   r   r   r*   ru   rC   rv   _file_content_requestr@   rA   rE   rB   r0   rM   r1   s                   r2   r   r     s4   f.88!))VVZZ8I3-OVSV 7EMM22&':;uD"<<.3L"G GU]])K)KGnG_G 2'!!
 JJ6$>	(*  (( /##/99.// /	   ,, ''992D9 	   '' /??/%%/ 99-.	  -99#%:!+77) : Hj Y !G+&//g73C3Cg~VfGgH++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6/0+88#!'+77%: 9 H,  $$44qxx' 0 #2!MMFjk 5    s&   G(M( +D&M( AM( (
M92M44M9)r   NN)r   NNN)/__doc__r    r#   rh   	functoolsr   typingr   r   r   r   r   r	   r
   rb   rg   r    litellm.llms.azure.files.handlerr   litellm.llms.openai.openair   r   r   $litellm.llms.vertex_ai.files.handlerr   litellm.types.llms.openair   r   r   r   litellm.types.routerlitellm.utilsr   rk   rn   r   strr3   r"   rz   ry   r   r   r   r   r   r   r^       r2   <module>r      s     	  G G G   " @ N N E  # 0 '( *, /1  7?.2+/	%% !23% DcN+% c3h(	%T 7?.2+/	mm !23m DcN+m c3h(	m mf 7?.2+/	%% !23% DcN+% c3h(	% sC#$%T 7?.2+/	jj !23j DcN+j c3h(	j j^ 7?!.2+/	% !23%c]% DcN+% c3h(	%R 7?!.2+/	l !23lc]l DcN+l c3h(	ld DL.2+/'
'78' !!?@' DcN+	'
 c3h(' 'Z DL.2+/N
N78N !!?@N DcN+	N
 c3h(N :yc:!5667Nf 7?.2+/	%% !23% DcN+% c3h(	%  %T 7?.2+/	rr !23r DcN+r c3h(	r %yc;U1U'VVWrr   