
    h                        d Z ddlZ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mZ ddlZddlZddlmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZ ddlmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z% ddl& ddl'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-  e       Z. e       Z/ e       Z0 e       Z1e+	 	 	 d%de#de
d   de
d   dee	e2e2f      dee	e2e2f      de%fd       Z3e+	 	 	 d&de#de
d   dee
d      dee	e2e2f      dee	e2e2f      dee%eeee%f   f   fd       Z4	 	 	 d%de2de
d   dee	e2e2f      dee	e2e2f      fdZ5	 	 	 d%de2de
d   dee	e2e2f      dee	e2e2f      def
dZ6	 	 	 d%de2de
d   dee	e2e2f      dee	e2e2f      deeeef   f
dZ7	 	 	 d%de2de
d   dee	e2e2f      dee	e2e2f      def
dZ8	 	 	 	 d'de
d   dee2   dee	e2e2f      dee	e2e2f      fd Z9	 	 	 	 d'de
d   dee2   dee	e2e2f      dee	e2e2f      fd!Z:	 	 	 d%de2de
d   dee	e2e2f      dee	e2e2f      de$f
d"Z;	 	 	 	 d(de2d#ee2   deee
d   e2f      dee	e2e2f      dee	e2e2f      dee$eeee$f   f   fd$Z<y))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)get_llm_provider)Logging)AzureOpenAIFilesAPI)BaseLLMHTTPHandler)FileDeleted
FileObjectOpenAIFilesAPI)VertexAIFilesHandler)CreateFileRequestFileContentRequest	FileTypesHttpxBinaryResponseContentOpenAIFileObject)*)LlmProviders)ProviderConfigManagerclientget_litellm_paramssupports_httpx_timeoutfilepurpose)
assistantsbatchz	fine-tunecustom_llm_provider)openaiazure	vertex_aiextra_headers
extra_bodyreturnc                 r  K   	 t        j                         }d|d<   | ||||d|}t        t        fi |}t	        j
                         }	t        |	j                  |      }
|j                  d|
       d{   }t        j                  |      r| d{   }|S |}|S 7 )7 # t        $ r}|d}~ww xY ww)z
    Async: 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_file)r   r    r#   r'   r(   N)
asyncioget_event_loopr   create_filecontextvarscopy_contextrunrun_in_executoriscoroutine	Exception)r   r    r#   r'   r(   kwargsloop	call_argsfuncctxfunc_with_contextinit_responseresponsees                 N/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/files/main.pyr+   r+   1   s     %%'!%~ #6*$
 
	 {0i0 &&(#CGGT2"2249JKK}-**H  %H L*
  sY   B7A2B$ 6B 7B$ B"B$ B7B$ B7 B$ "B$ $	B4-B//B44B7c                 R	   	 |j                  dd      du }t        d-i |}t        d-i |}t        t        t
           |j                  d            }	|	t        d      |j                  d      }
|j                  xs |j                  dd	      xs d	}|Ht        |t        j                        r.t        t        t        |            du r|j                  xs d	}|}n,|&t        |t        j                        st        |      }n|d
}t!        | |||      }t#        j$                  dt'        |            }|St(        j+                  ||||xs i |j,                  |j.                  |	||
t        |
t0        t2        f      r|
nd|
      }|S |dk(  r|j,                  xsB t4        j,                  xs0 t7        j8                  d      xs t7        j8                  d      xs d}|j:                  xs, t4        j:                  xs t7        j8                  dd      xs d}|j.                  xs9 t4        j.                  xs' t4        j<                  xs t7        j8                  d      }t>        j+                  |||||j@                  ||      }|S |dk(  r|j,                  xs t4        j,                  xs tC        d      }|jD                  xs t4        jD                  xs tC        d      }|j.                  xs< t4        j.                  xs* t4        jF                  xs tC        d      xs tC        d      }|j                  di       }||j                  dd       ntC        d       tH        j+                  ||||||j@                  ||      }|S |dk(  r|j,                  xs d}|jJ                  xs t4        jJ                  xs tC        d       }|jL                  xs t4        jL                  xs tC        d!      }|jN                  xs tC        d"      }tP        j+                  |||||||j@                  |#      }|S t4        jR                  jU                  d$jW                  |      d%|t        jX                  d&d't        jZ                  d(d)*      +      ,      # t\        $ r}|d}~ww xY w).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

    Specify either provider_list or custom_llm_provider.
    r+   FTlitellm_logging_objNzlogging_obj is requiredr   request_timeoutX       @)r   r    r'   r(    )modelprovider)
provider_configlitellm_paramscreate_file_dataheadersapi_baseapi_keylogging_obj	_is_asyncr   timeoutr$   OPENAI_BASE_URLOPENAI_API_BASEhttps://api.openai.com/v1OPENAI_ORGANIZATIONOPENAI_API_KEY)rN   rK   rL   rO   max_retriesorganizationrI   r%   AZURE_API_BASEAZURE_API_VERSIONAZURE_OPENAI_API_KEYAZURE_API_KEYr(   azure_ad_tokenAZURE_AD_TOKEN)rN   rK   rL   api_versionrO   rU   rI   rH   r&   VERTEXAI_PROJECTVERTEXAI_LOCATIONVERTEXAI_CREDENTIALS)rN   rK   vertex_projectvertex_locationvertex_credentialsrO   rU   rI   zbLiteLLM doesn't support {} for 'create_file'. Only ['openai', 'azure', 'vertex_ai'] are supported.n/a  Unsupported providerr.   "https://github.com/BerriAI/litellmmethodurlstatus_codecontentrequestmessagerE   llm_providerr<    )/popGenericLiteLLMParamsr   r
   r   LiteLLMLoggingObjget
ValueErrorrO   
isinstancehttpxTimeoutr   strreadfloatr   r   get_provider_files_configr   base_llm_http_handlerr.   rK   rL   HTTPHandlerAsyncHTTPHandlerlitellmosgetenvrV   
openai_keyopenai_files_instancerU   r   r]   	azure_keyazure_files_instancera   rb   rc   vertex_ai_files_instance
exceptionsBadRequestErrorformatResponseRequestr4   )r   r    r#   r'   r(   r5   rN   optional_paramslitellm_params_dictrM   r   rO   read_timeout_create_file_requestrG   r<   rK   rV   rL   r]   vertex_ai_projectvertex_ai_locationrc   r=   s                           r>   r.   r.   ]   s    _JJ~u5=	.880:6:&'4I)J
 677H% "))VVZZ8I3-OVSV 7EMM2&tC1D'EF%O"<<.3L"G GU]])KGnG_G0'!	 
 0II!"56
 &,88 /2!5%+(11'//'#%v5E'FG   9 Hl O !H,  (( /##/99.// 99.// /   ,, ''992D9 	   '' /??/%%/ 99-.	  -88#!+77)!5 9 H` O !G+&//g73C3Cg~VfGgH++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6/0+77#!'+77!52 8 	Hb 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  D' 0 #2!MMDhi 5    s4   FR C=R C?R B,R 9AR 	R&R!!R&file_id)r$   r%   c                 f  K   	 t        j                         }d|d<   t        t        | |||fi |}t	        j
                         }t        |j                  |      }|j                  d|       d{   }	t        j                  |	      r|	 d{   }
|
S |	}
|
S 7 )7 # t        $ r}|d}~ww xY ww)a
    Async: Get file contents

    LiteLLM Equivalent of GET https://api.openai.com/v1/files
    Tis_asyncN)
r,   r-   r   file_retriever/   r0   r1   r2   r3   r4   r   r#   r'   r(   r5   r6   r8   r9   r:   r;   r<   r=   s               r>   afile_retriever     s     %%'!z 
 
 &&(#CGGT2"2249JKK}-**H  %H L*
  Y   B1A,B 0B1B BB B1B B1B B 	B.'B))B..B1c                 R   	 t        d!i |}|j                  xs |j                  dd      xs d}|:t        |t        j
                        r t        |      du r|j                  xs d}|}n,|&t        |t        j
                        st        |      }n|d}|j                  dd      du }|dk(  r|j                  xsB t        j                  xs0 t        j                  d	      xs t        j                  d
      xs d}	|j                  xs, t        j                  xs t        j                  dd      xs d}
|j                  xs9 t        j                  xs' t        j                   xs t        j                  d      }t"        j%                  | ||	|||j&                  |
      }n[|dk(  r|j                  xs t        j                  xs t)        d      }	|j*                  xs t        j*                  xs t)        d      }|j                  xs< t        j                  xs* t        j,                  xs t)        d      xs t)        d      }|j                  di       }||j                  dd       nt)        d       t.        j%                  ||	||||j&                  |       }n]t        j0                  j3                  dj5                  |      d|t	        j6                  ddt	        j8                  dd                   t;        t<        |      S # t>        $ r}|d}~ww xY w)"{
    Returns the contents of the specified file.

    LiteLLM Equivalent of POST: POST https://api.openai.com/v1/files
    rA   rB   NFrC   r   Tr$   rP   rQ   rR   rS   rT   r   rN   rK   rL   rO   rU   rV   r%   rW   rX   rY   rZ   r(   r[   r\   )rN   rK   rL   r]   rO   rU   r   zXLiteLLM doesn't support {} for 'file_retrieve'. Only 'openai' and 'azure' are supported.rd   re   rf   create_threadrg   rh   rk   ro   rr   ) rt   rO   rv   rx   ry   rz   r   r|   r}   rs   rK   r   r   r   rV   rL   r   r   retrieve_filerU   r   r]   r   r   r   r   r   r   r   r
   r   r4   )r   r#   r'   r(   r5   r   rO   r   rN   rK   rV   rL   r<   r]   r=   s                  r>   r   r   7  s)   b.88!))VVZZ8I3-OVSV 7EMM2&':;uD"<<.3L"G GU]])KGnG_GJJz51T9	(*  (( /##/99.// 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)) s   LL 	L&L!!L&c                   K   	 t        j                         }d|d<   t        t        | |||fi |}t	        j
                         }t        |j                  |      }|j                  d|       d{   }	t        j                  |	      r|	 d{   }
n|	}
t        t        |
      S 7 67 # t        $ r}|d}~ww xY ww)z^
    Async: Delete file

    LiteLLM Equivalent of DELETE https://api.openai.com/v1/files
    Tr   N)r,   r-   r   file_deleter/   r0   r1   r2   r3   r
   r   r4   r   s               r>   afile_deleter     s     %%'!z 
 
 &&(#CGGT2"2249JKK}-**H$HK** L*
  sM   B>A,B+ 0B'1B+ B)B+ &B>'B+ )B+ +	B;4B66B;;B>c                    	 t        d"i |}t        d"i |}|j                  xs |j                  dd      xs d}|j                  d      }|:t	        |t
        j                        r t        |      du r|j                  xs d}	|	}n,|&t	        |t
        j                        st        |      }n|d}|j                  dd      du }
|d	k(  r|j                  xsB t        j                  xs0 t        j                  d
      xs t        j                  d      xs d}|j                  xs, t        j                  xs t        j                  dd      xs d}|j                   xs9 t        j                   xs' t        j"                  xs t        j                  d      }t$        j'                  | |
||||j(                  |      }n]|dk(  r|j                  xs t        j                  xs t+        d      }|j,                  xs t        j,                  xs t+        d      }|j                   xs< t        j                   xs* t        j.                  xs t+        d      xs t+        d      }|j                  di       }||j                  dd       nt+        d       t0        j'                  |
|||||j(                  | ||	      }n]t        j2                  j5                  dj7                  |      d|t        j8                  ddt        j:                  dd             !      t=        t>        |      S # t@        $ r}|d}~ww xY w)#zW
    Delete file

    LiteLLM Equivalent of DELETE https://api.openai.com/v1/files
    rA   rB   r   NFrC   r   Tr$   rP   rQ   rR   rS   rT   r   r%   rW   rX   rY   rZ   r(   r[   r\   )	rN   rK   rL   r]   rO   rU   r   r   rH   zJLiteLLM doesn't support {} for 'create_batch'. Only 'openai' is supported.rd   re   rf   r   rg   rh   rk   ro   rr   )!rt   r   rO   rv   rx   ry   rz   r   r|   r}   rs   rK   r   r   r   rV   rL   r   r   delete_filerU   r   r]   r   r   r   r   r   r   r   r
   r   r4   )r   r#   r'   r(   r5   r   r   rO   r   r   rN   rK   rV   rL   r<   r]   r=   s                    r>   r   r     sK   c.880:6:!))VVZZ8I3-OVSVH% 7EMM2&':;uD"<<.3L"G GU]])KGnG_GJJz51T9	(*  (( /##/99.// 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2 8 
H $$44dkk' 0 #2!MMFjk 5   K** s   L1L4 4	M=L??Mc                 f  K   	 t        j                         }d|d<   t        t        | |||fi |}t	        j
                         }t        |j                  |      }|j                  d|       d{   }	t        j                  |	      r|	 d{   }
|
S |	}
|
S 7 )7 # t        $ r}|d}~ww xY ww)zZ
    Async: List files

    LiteLLM Equivalent of GET https://api.openai.com/v1/files
    Tr   N)
r,   r-   r   	file_listr/   r0   r1   r2   r3   r4   )r#   r    r'   r(   r5   r6   r8   r9   r:   r;   r<   r=   s               r>   
afile_listr   D  s     %%'!z 
 
 &&(#CGGT2"2249JKK}-**H  %H L*
  r   c                 4   	 t        d!i |}|j                  xs |j                  dd      xs d}|:t        |t        j
                        r t        |       du r|j                  xs d}|}n,|&t        |t        j
                        st        |      }n|d}|j                  dd      du }| dk(  r|j                  xsB t        j                  xs0 t        j                  d	      xs t        j                  d
      xs d}	|j                  xs, t        j                  xs t        j                  dd      xs d}
|j                  xs9 t        j                  xs' t        j                   xs t        j                  d      }t"        j%                  |||	|||j&                  |
      }|S | dk(  r|j                  xs t        j                  xs t)        d      }	|j*                  xs t        j*                  xs t)        d      }|j                  xs< t        j                  xs* t        j,                  xs t)        d      xs t)        d      }|j                  di       }||j                  dd       nt)        d       t.        j%                  ||	||||j&                  |      }|S t        j0                  j3                  dj5                  |       d| t	        j6                  ddt	        j8                  dd                   # t:        $ r}|d}~ww xY w)"zS
    List files

    LiteLLM Equivalent of GET https://api.openai.com/v1/files
    rA   rB   NFrC   r   Tr$   rP   rQ   rR   rS   rT   )r    rN   rK   rL   rO   rU   rV   r%   rW   rX   rY   rZ   r(   r[   r\   )rN   rK   rL   r]   rO   rU   r    zTLiteLLM doesn't support {} for 'file_list'. Only 'openai' and 'azure' are supported.rd   re   rf   r   rg   rh   rk   ro   rr   )rt   rO   rv   rx   ry   rz   r   r|   r}   rs   rK   r   r   r   rV   rL   r   r   
list_filesrU   r   r]   r   r   r   r   r   r   r   r4   )r#   r    r'   r(   r5   r   rO   r   rN   rK   rV   rL   r<   r]   r=   s                  r>   r   r   l  s,   a.88!))VVZZ8I3-OVSV 7EMM2&':;uD"<<.3L"G GU]])KGnG_GJJz51T9	(*  (( /##/99.// 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&   F(L +C>L *AL 	LLLc                   K   	 t        j                         }d|d<   |j                  dd      }t        t        | ||||fi |}t        j                         }t        |j                  |      }	|j                  d|	       d{   }
t        j                  |
      r|
 d{   }|S |
}|S 7 )7 # t        $ r}|d}~ww xY ww)r   Tafile_contentrE   N)r,   r-   rs   r   file_contentr/   r0   r1   r2   r3   r4   )r   r#   r'   r(   r5   r6   rE   r8   r9   r:   r;   r<   r=   s                r>   r   r     s     %%'"&

7D) 
 
 &&(#CGGT2"2249JKK}-**H  %H L*
  sY   CA?B1 B-B1 "B/#B1 (C)B1 ,C-B1 /B1 1	C:B<<CCrE   c                    	 t        d#i |}t        d#i |}|j                  xs |j                  dd      xs d}|j                  d      }		 |t	        ||      \  }
}}
}
|Ht        |t        j                        r.t        t        t        |            du r|j                  xs d}|}n,|&t        |t        j                        st        |      }n|d}t        | ||      }|j                  dd      d	u }|d
k(  r|j                   xsB t"        j                   xs0 t%        j&                  d      xs t%        j&                  d      xs d}|j(                  xs, t"        j(                  xs t%        j&                  dd      xs d}|j*                  xs9 t"        j*                  xs' t"        j,                  xs t%        j&                  d      }t.        j1                  ||||||j2                  |      }|S |dk(  r|j                   xs t"        j                   xs t5        d      }|j6                  xs t"        j6                  xs t5        d      }|j*                  xs< t"        j*                  xs* t"        j8                  xs t5        d      xs t5        d      }|j                  di       }||j                  dd       nt5        d       t:        j1                  ||||||j2                  ||	|	      }|S t"        j<                  j?                  djA                  |      d|t        jB                  ddt        jD                  dd       !      "      # t
        $ r Y  w xY w# t
        $ r}|d}~ww xY w)$r   rA   rB   r   NFrC   )r   r'   r(   r   Tr$   rP   rQ   rR   rS   rT   )rN   file_content_requestrK   rL   rO   rU   rV   r%   rW   rX   rY   rZ   r(   r[   r\   )	rN   rK   rL   r]   rO   rU   r   r   rH   zmLiteLLM doesn't support {} for 'custom_llm_provider'. Supported providers are 'openai', 'azure', 'vertex_ai'.rd   re   rf   r   rg   rh   rk   ro   rr   )#rt   r   rO   rv   r   r4   rx   ry   rz   r   r
   r{   r|   r}   r   rs   rK   r   r   r   rV   rL   r   r   r   rU   r   r]   r   r   r   r   r   r   r   )r   rE   r#   r'   r(   r5   r   r   rO   r   _r   _file_content_requestrN   rK   rV   rL   r<   r]   r=   s                       r>   r   r     s   t.880:6:!))VVZZ8I3-OVSVH%	 /?.0,&1 7EMM2&tC1D'EF%O"<<.3L"G GU]])KGnG_G 2'!!
 JJ6$>	(*  (( /##/99.// 99.// /   ,, ''992D9 	   '' /??/%%/ 99-.	  -99#%:!+77) : Hn ] !G+&//g73C3Cg~VfGgH++ 7&&7!"56   '' 3??3$$3 ""893 "/2  ),,\2>J%/6/0+88#!'+77%:2 9 
H0  $$44 H  O  O' 0 #2!MMFjk 5  s  		L  sK   AM% M !FM% 7D M% 8AM% 	M"M% !M""M% %	M5.M00M5)r$   NN)NNN)r$   NNN)NNNN)=__doc__r,   r/   r   	functoolsr   typingr   r   r   r   r   r	   r
   ry   r   r   1litellm.litellm_core_utils.get_llm_provider_logicr   *litellm.litellm_core_utils.litellm_loggingr   ru    litellm.llms.azure.files.handlerr   *litellm.llms.custom_httpx.llm_http_handlerr   litellm.llms.openai.openair   r   r   $litellm.llms.vertex_ai.files.handlerr   litellm.types.llms.openair   r   r   r   r   litellm.types.routerlitellm.types.utilsr   litellm.utilsr   r   r   r   r   r   r   r   r{   r+   r.   r   r   r   r   r   r   r   r   rr       r>   <module>r      s     	  G G G   " N S @ I N N E  # ,  +,  '( *, /1   DL.2+/(
(78( !!?@( DcN+	(
 c3h(( ( (V  NR.2+/n
n78n "'*H"IJn DcN+	n
 c3h(n YsC1A'ABBCn nf 7?.2+/	%% !23% DcN+% c3h(	%T 7?.2+/	nn !23n DcN+n c3h(	n nh 7?.2+/	%% !23% DcN+% c3h(	% sC#$%T 7?.2+/	oo !23o DcN+o c3h(	o oh 7?!.2+/	% !23%c]% DcN+% c3h(	%R 7?!.2+/	m !23mc]m DcN+m c3h(	md 7?.2+/	'' !23' DcN+' c3h(	'  'X   	.2+/CCC=C "g45s:;C DcN+C c3h(C %yc;U1U'VVWCr   