
    j                        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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/m0Z0  e       Z1 e        Z2 e       Z3 e"       Z4e.	 	 	 d'de&de
d   de
d   dee	e5e5f      dee	e5e5f      de(fd       Z6e.	 	 	 d(de&de
d   dee
d      dee	e5e5f      dee	e5e5f      dee(eeee(f   f   fd       Z7e.	 	 	 d'de5de
d   dee	e5e5f      dee	e5e5f      de(f
d       Z8e.	 	 	 d'de5de
d   dee	e5e5f      dee	e5e5f      def
d       Z9e.	 	 	 d'de5de
d   dee	e5e5f      dee	e5e5f      deeeef   f
d       Z:e.	 	 	 d'de5de
d   dee	e5e5f      dee	e5e5f      def
d        Z;e.	 	 	 	 d)de
d   dee5   dee	e5e5f      dee	e5e5f      fd!       Z<e.	 	 	 	 d)de
d   dee5   dee	e5e5f      dee	e5e5f      fd"       Z=e.	 	 	 d'de5de
d#   dee	e5e5f      dee	e5e5f      de'f
d$       Z>e.	 	 	 	 d*de5d%ee5   deee
d#   e5f      dee	e5e5f      dee	e5e5f      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)AsyncHTTPHandlerHTTPHandler)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bedrock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                 k/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/files/main.pyr.   r.   2   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)rQ   rN   rO   rR   max_retriesorganizationrL   r'   AZURE_API_BASEAZURE_API_VERSIONAZURE_OPENAI_API_KEYAZURE_API_KEYr+   azure_ad_tokenAZURE_AD_TOKEN)rQ   rN   rO   api_versionrR   rX   rL   rK   r(   VERTEXAI_PROJECTVERTEXAI_LOCATIONVERTEXAI_CREDENTIALS)rQ   rN   vertex_projectvertex_locationvertex_credentialsrR   rX   rL   zbLiteLLM doesn't support {} for 'create_file'. Only ['openai', 'azure', 'vertex_ai'] are supported.n/a  Unsupported providerr1   "https://github.com/BerriAI/litellmmethodurlstatus_codecontentrequestmessagerH   llm_providerr?    )/popGenericLiteLLMParamsdictr
   r   LiteLLMLoggingObjget
ValueErrorrR   
isinstancehttpxTimeoutr    strreadfloatr   r   get_provider_files_configr   base_llm_http_handlerr1   rN   rO   r   r   litellmosgetenvrY   
openai_keyopenai_files_instancerX   r   r`   	azure_keyazure_files_instancerd   re   rf   vertex_ai_files_instance
exceptionsBadRequestErrorformatResponseRequestr7   )r!   r"   r%   r*   r+   r8   rQ   optional_paramslitellm_params_dictrP   r   rR   read_timeout_create_file_requestrJ   r?   rN   rY   rO   r`   vertex_ai_projectvertex_ai_locationrf   r@   s                           rA   r1   r1   ^   s     _JJ~u5=	.88"nVn&'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                   K   	 t        j                         }d|d<   t        t        | |||fi |}t	        j
                         }t        |j                  |      }|j                  d|       d{   }	t        j                  |	      r|	 d{   }
n|	}
t        di |
j                         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_asyncNru   )r/   r0   r   file_retriever2   r3   r4   r5   r6   r   
model_dumpr7   r   r%   r*   r+   r8   r9   r;   r<   r=   r>   r?   r@   s               rA   afile_retriever     s     %%'!z 
 
 &&(#CGGT2"2249JKK}-**H$H8("5"5"788 L*
  sM   CA,B4 0B01B4 B2B4 /C0B4 2B4 4	C=B??CC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
    rD   rE   NFrF   r   Tr&   rS   rT   rU   rV   rW   r   rQ   rN   rO   rR   rX   rY   r'   rZ   r[   r\   r]   r+   r^   r_   )rQ   rN   rO   r`   rR   rX   r   zXLiteLLM doesn't support {} for 'file_retrieve'. Only 'openai' and 'azure' are supported.rg   rh   ri   create_threadrj   rk   rn   rr   ru   ) rw   rR   rz   r|   r}   r~   r    r   r   rv   rN   r   r   r   rY   rO   r   r   retrieve_filerX   r   r`   r   r   r   r   r   r   r   r
   r   r7   )r   r%   r*   r+   r8   r   rR   r   rQ   rN   rY   rO   r?   r`   r@   s                  rA   r   r   9  s)   c.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/   r0   r   file_deleter2   r3   r4   r5   r6   r
   r   r7   r   s               rA   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
    rD   rE   r   NFrF   r   Tr&   rS   rT   rU   rV   rW   r   r'   rZ   r[   r\   r]   r+   r^   r_   )	rQ   rN   rO   r`   rR   rX   r   r   rK   zJLiteLLM doesn't support {} for 'create_batch'. Only 'openai' is supported.rg   rh   ri   r   rj   rk   rn   rr   ru   )!rw   r   rR   rz   r|   r}   r~   r    r   r   rv   rN   r   r   r   rY   rO   r   r   delete_filerX   r   r`   r   r   r   r   r   r   r   r
   r   r7   )r   r%   r*   r+   r8   r   r   rR   r   r   rQ   rN   rY   rO   r?   r`   r@   s                    rA   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/   r0   r   	file_listr2   r3   r4   r5   r6   r7   )r%   r"   r*   r+   r8   r9   r;   r<   r=   r>   r?   r@   s               rA   
afile_listr   J  s     %%'!z 
 
 &&(#CGGT2"2249JKK}-**H  %H L*
  sY   B1A,B 0B1B BB B1B B1B B 	B.'B))B..B1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
    rD   rE   NFrF   r   Tr&   rS   rT   rU   rV   rW   )r"   rQ   rN   rO   rR   rX   rY   r'   rZ   r[   r\   r]   r+   r^   r_   )rQ   rN   rO   r`   rR   rX   r"   zTLiteLLM doesn't support {} for 'file_list'. Only 'openai' and 'azure' are supported.rg   rh   ri   r   rj   rk   rn   rr   ru   )rw   rR   rz   r|   r}   r~   r    r   r   rv   rN   r   r   r   rY   rO   r   r   
list_filesrX   r   r`   r   r   r   r   r   r   r   r7   )r%   r"   r*   r+   r8   r   rR   r   rQ   rN   rY   rO   r?   r`   r@   s                  rA   r   r   s  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)r&   r'   r(   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_contentrH   N)r/   r0   rv   r   file_contentr2   r3   r4   r5   r6   r7   )r   r%   r*   r+   r8   r9   rH   r;   r<   r=   r>   r?   r@   s                rA   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rH   c                 J   	 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 |dk(  r|j                   xs d}|j<                  xs t"        j<                  xs t5        d      }|j>                  xs t"        j>                  xs t5        d      }|j@                  xs t5        d      }tB        j1                  ||||||||j2                        }|S t"        jD                  jG                  d jI                  |      d!|t        jJ                  d"d#t        jL                  d$d%&      '      (      # t
        $ r Y w xY w# t
        $ r}|d}~ww xY w)*r   rD   rE   r   NFrF   )r   r*   r+   r   Tr&   rS   rT   rU   rV   rW   )rQ   file_content_requestrN   rO   rR   rX   rY   r'   rZ   r[   r\   r]   r+   r^   r_   )	rQ   rN   rO   r`   rR   rX   r   r   rK   r(   rG   ra   rb   rc   )rQ   r   rN   rf   rd   re   rR   rX   zmLiteLLM doesn't support {} for 'custom_llm_provider'. Supported providers are 'openai', 'azure', 'vertex_ai'.rg   rh   ri   r   rj   rk   rn   rr   ru   )'rw   r   rR   rz   r   r7   r|   r}   r~   r    r
   r   r   r   r   rv   rN   r   r   r   rY   rO   r   r   r   rX   r   r`   r   r   rd   re   rf   r   r   r   r   r   r   )r   rH   r%   r*   r+   r8   r   r   rR   r   _r   _file_content_requestrQ   rN   rY   rO   r?   r`   r   r   rf   r@   s                          rA   r   r     sz    N.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) : Hb Q !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 
Hd O !K/&//52H.. 6))6!"45   // 7**7!"56 
 "1!C!C "~&H 0<<#%:!#50 2+77 = 	H.  $$44 H  O  O' 0 #2!MMFjk 5  g  		@  sR   AP P !FP 7D P 8B,P %AP 	PP PP 	P"PP")r&   NN)NNN)r&   NNN)NNNN)@__doc__r/   r2   r   	functoolsr   typingr   r   r   r   r   r	   r
   r}   r   r   1litellm.litellm_core_utils.get_llm_provider_logicr   *litellm.litellm_core_utils.litellm_loggingr   ry    litellm.llms.azure.files.handlerr   &litellm.llms.custom_httpx.http_handlerr   r   *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.   r1   r   r   r   r   r   r   r   r   ru       rA   <module>r      sw     	  G G G   " N S @ P I N N E  # ,  +,  '( *, /1   OW.2+/(
(78( !!JK( DcN+	(
 c3h(( ( (V  Y].2+/n
n78n "'*S"TUn DcN+	n
 c3h(n YsC1A'ABBCn nb  7?.2+/	%% !23% DcN+% c3h(	% % %P  7?.2+/	oo !23o DcN+o c3h(	o o of  7?.2+/	%% !23% DcN+% c3h(	% sC#$% %P  7?.2+/	oo !23o DcN+o c3h(	o o of 6>!.2+/	% !23%c]% DcN+% c3h(	% %P 6>!.2+/	m !23mc]m DcN+m c3h(	m m`  DL.2+/	'' !?@' DcN+' c3h(	'  ' 'T    	.2+/]]C=] "g45s:;] DcN+] c3h(] %yc;U1U'VVW] ]r   