o
    ưi                     @   s  d Z ddl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 ddlmZ ddl m!Z!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/m0Z0m1Z1m2Z2m3Z3 ddl4T ddl5m6Z6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z< e$ Z=e* Z>e Z?e, Z@e ZAe ZBe:				d9de1ded dee0 ded deeeCeCf  deeeCeCf  de3fdd ZDe:				d:de1ded dee0 deed  deeeCeCf  deeeCeCf  dee3e
e	e	e3f f fd!d"ZEe:			d;d#eCded$ deeeCeCf  deeeCeCf  de3f
d%d&ZFe:			d;d#eCded$ deeeCeCf  deeeCeCf  de)f
d'd(ZGe:			d;d#eCded) deeeCeCf  deeeCeCf  de
e	e	e)f f
d*d+ZHe:				d9d#eCd,eeC deed) eCf deeeCeCf  deeeCeCf  de(fd-d.ZIe:				d<ded/ deeC deeeCeCf  deeeCeCf  fd0d1ZJe:				d<ded/ deeC deeeCeCf  deeeCeCf  fd2d3ZKe:			d;d#eCded4 deeeCeCf  deeeCeCf  de2f
d5d6ZLe:				d:d#eCd,eeC deeed4 eCf  deeeCeCf  deeeCeCf  dee2e
e	e	e2f f fd7d8ZMdS )=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)AnthropicFilesHandler)get_azure_credentials)AzureOpenAIFilesAPI)BedrockFilesHandler)AsyncHTTPHandlerHTTPHandler)BaseLLMHTTPHandler)get_openai_credentials)FileDeleted
FileObjectOpenAIFilesAPI)VertexAIFilesHandler)CreateFileRequestFileContentRequestFileExpiresAfter	FileTypesHttpxBinaryResponseContentOpenAIFileObject)*)+OPENAI_COMPATIBLE_BATCH_AND_FILES_PROVIDERSLlmProviders)ProviderConfigManagerclientget_litellm_paramssupports_httpx_timeoutopenaifilepurpose)Z
assistantsbatchz	fine-tuneexpires_aftercustom_llm_provider)r'   azuregemini	vertex_aibedrockhosted_vllmmanusextra_headers
extra_bodyreturnc              
      s   z@t  }d|d< | |||||d|}ttfi |}	t }
t|
j|	}|d|I dH }t |r=|I dH }|W S |}|W S  t	yO } z|d}~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,   r3   r4   N)
asyncioget_event_loopr   create_filecontextvarscopy_contextrunrun_in_executoriscoroutine	Exception)r(   r)   r+   r,   r3   r4   kwargsloopZ	call_argsfuncctxfunc_with_contextinit_responseresponsee rH   I/home/app/Keep/.python/lib/python3.10/site-packages/litellm/files/main.pyr6   =   s4   

r6   c                 K   s4  z	| dddu }tdi |}tdi |}	ttt |d}
|
du r*td|d}|jp9|dd	p9d	}|durUt	|t
jrUttt|du rU|jpQd	}|}n|durdt	|t
jsdt|}n|du rjd
}|durxt| ||||d}nt| |||d}tjdt|d}|durtj||	||pi |j|j|
||durt	|ttfr|nd|d
}|W S |tv rt|j|j|jd}tj||j|j||j|j|d}|W S |dkrt|j|j|j d}t!j||j|j|j ||j||	d}|W S t"j#j$d%|d|t
j&ddt
j'ddddd t(y } z|d}~w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.
    r6   FTlitellm_logging_objNzlogging_obj is requiredr$   request_timeoutX       @)r(   r)   r+   r3   r4   )r(   r)   r3   r4    modelprovider)
provider_configlitellm_paramscreate_file_dataheadersapi_baseapi_keylogging_obj	_is_asyncr$   timeoutrV   rW   organization)rY   rV   rW   rZ   max_retriesr\   rT   r-   rV   rW   api_version)rY   rV   rW   r_   rZ   r]   rT   rS   zkLiteLLM doesn't support {} for 'create_file'. Only ['openai', 'azure', 'vertex_ai', 'manus'] are supported.n/a  Unsupported providerr9   "https://github.com/BerriAI/litellmmethodurlstatus_codecontentrequestmessagerP   Zllm_providerrF   rH   ))popGenericLiteLLMParamsdictr	   r   LiteLLMLoggingObjget
ValueErrorrZ   
isinstancehttpxTimeoutr&   strreadfloatr   r#   get_provider_files_configr"   base_llm_http_handlerr9   rV   rW   r   r   r!   r   r\   openai_files_instancer]   r   r_   azure_files_instancelitellm
exceptionsBadRequestErrorformatResponseRequestr?   )r(   r)   r+   r,   r3   r4   r@   rY   optional_paramslitellm_params_dictrX   r$   rZ   read_timeoutZ_create_file_requestrR   rF   openai_credsazure_credsrG   rH   rH   rI   r9   j   s   



=&r9   file_id)r'   r-   r.   r/   r1   r2   c              
      s   z>t  }d|d< tt| |||fi |}t }t|j|}|d|I dH }	t |	r4|	I dH }
n|	}
t	di |

 W S  tyM } z|d}~ww )a
    Async: Get file contents

    LiteLLM Equivalent of GET https://api.openai.com/v1/files
    Tis_asyncNrH   )r7   r8   r   file_retriever:   r;   r<   r=   r>   r   Z
model_dumpr?   )r   r,   r3   r4   r@   rA   rB   rC   rD   rE   rF   rG   rH   rH   rI   afile_retrieve   s0   

r   c                 K   sF  zt d$i |}|jp|ddpd}|dur,t|tjr,t|du r,|jp(d}|}n|dur;t|tjs;t|}n|du rAd}|	dddu }|t
v rht|j|j|jd}	tj| ||	j|	j||j|	jd	}
n|d
krt|j|j|jd}tj||j|j|j||j| d}
ntjdt|d}|durtd$i |}|j|d< |j|d< |d}|du rddlm} |dg d|rdndt |dtt t|dpdd}|d}tj| |||pi |||durt|t t!fr|nd|d}
nt"j#j$d%|d|tj&ddtj'dd d!d"d#t(t)|
W S  t*y" } z|d}~ww )%{
    Returns the contents of the specified file.

    LiteLLM Equivalent of POST: POST https://api.openai.com/v1/files
    rK   rL   NFrM   r   Tr[   r   rY   rV   rW   rZ   r]   r\   r-   r^   )rY   rV   rW   r_   rZ   r]   r   rN   rO   rW   rV   rJ   r   r   r   r   litellm_call_ididrP   messagesstreamZ	call_type
start_timer   Zfunction_idr$   r   rR   rS   rU   rX   rY   r$   rZ   zbLiteLLM doesn't support {} for 'file_retrieve'. Only 'openai', 'azure', and 'manus' are supported.r`   ra   rb   create_threadrc   rd   rg   rk   rH   )+rn   rZ   rq   rs   rt   ru   r&   rw   rx   rm   r!   r   rV   rW   r\   r{   Zretrieve_filer]   r   r_   r|   r#   ry   r"   r%   *litellm.litellm_core_utils.litellm_loggingr   timerv   uuid_moduleuuid4rz   r   r   r}   r~   r   r   r   r   r	   r   r?   )r   r,   r3   r4   r@   r   rZ   r   rY   r   rF   r   rR   r   rX   rp   r$   rG   rH   rH   rI   r     s   


	





r   )r'   r-   r.   r2   c              
      s   zAt  }|dd}d|d< tt| ||||fi |}t }t|j|}	|d|	I dH }
t 	|
r;|
I dH }n|
}t
t|W S  tyP } z|d}~ww )z^
    Async: Delete file

    LiteLLM Equivalent of DELETE https://api.openai.com/v1/files
    rP   NTr   )r7   r8   rm   r   file_deleter:   r;   r<   r=   r>   r	   r   r?   r   r,   r3   r4   r@   rA   rP   rB   rC   rD   rE   rF   rG   rH   rH   rI   afile_delete  s4   
r   rP   c                 K   s  z0z|durt ||\}}}}W n	 ty   Y nw td$i |}td$i |}|jp3|ddp3d}	|d}
|	durQt|	tjrQt	|du rQ|	j
pMd}|}	n|	dur`t|	tjs`t|	}	n|	du rfd}	|dddu }|tv rt|j|j|jd	}tj| ||j|j|	|j|jd
}n|dkrt|j|j|jd}tj||j|j|j|	|j| |
|d	}n~tjdt|d}|dur|j|d< |j|d< |d}|du rddlm} |dg d|rdndt |dtt  t|dpdd}t!j| |||pi |||
durt|
t"t#fr|
nd|	d}nt$j%j&d'|d|tj(ddtj)dd d!d"d#t*t+|W S  ty@ } z|d}~ww )%zW
    Delete file

    LiteLLM Equivalent of DELETE https://api.openai.com/v1/files
    NrK   rL   r$   FrM   r   Tr[   r   r-   r^   )	rY   rV   rW   r_   rZ   r]   r   r$   rS   rN   rO   rW   rV   rJ   r   r   r   r   r   r   r   r   zjLiteLLM doesn't support {} for 'file_delete'. Only 'openai', 'azure', 'gemini', and 'manus' are supported.r`   ra   rb   r   rc   rd   rg   rk   rH   ),r   r?   rn   r%   rZ   rq   rs   rt   ru   r&   rw   rx   rm   r!   r   rV   rW   r\   r{   Zdelete_filer]   r   r_   r|   r#   ry   r"   r   r   r   rv   r   r   rz   r   r   r}   r~   r   r   r   r   r	   r   )r   rP   r,   r3   r4   r@   _r   r   rZ   r$   r   rY   r   rF   r   rR   rX   rp   rG   rH   rH   rI   r     s   



	






r   )r'   r-   r2   c              
      s   z9t  }d|d< tt| |||fi |}t }t|j|}|d|I dH }	t |	r6|	I dH }
|
W S |	}
|
W S  t	yH } z|d}~ww )zZ
    Async: List files

    LiteLLM Equivalent of GET https://api.openai.com/v1/files
    Tr   N)
r7   r8   r   	file_listr:   r;   r<   r=   r>   r?   )r,   r)   r3   r4   r@   rA   rB   rC   rD   rE   rF   rG   rH   rH   rI   
afile_listB  s2   


r   c                 K   sD  zt d#i |}|jp|ddpd}|dur,t|tjr,t| du r,|jp(d}|}n|dur;t|tjs;t|}n|du rAd}|	dddu }t
jdt| d	}	|	durtd#i |}
|j|
d
< |j|
d< |d}|du rddlm} |dg d|r~dndt |dtt t|ddd}|d}tj||	|
|pi |||durt|ttfr|nd|d}|W S | tv rt|j|j|jd}tj|||j|j||j|jd}|W S | dkrt|j|j|j d}t!j||j|j|j ||j|d}|W S t"j#j$d%| d| tj&ddtj'ddd d!d" t(y! } z|d}~ww )$zS
    List files

    LiteLLM Equivalent of GET https://api.openai.com/v1/files
    rK   rL   NFrM   r   TrN   rO   rW   rV   rJ   r   r   r   r   r   r   r   r$   )r)   rR   rS   rU   rX   rY   r$   rZ   r[   )r)   rY   rV   rW   rZ   r]   r\   r-   r^   )rY   rV   rW   r_   rZ   r]   r)   z^LiteLLM doesn't support {} for 'file_list'. Only 'openai', 'azure', and 'manus' are supported.r`   ra   rb   rc   rd   rg   rk   rH   ))rn   rZ   rq   rs   rt   ru   r&   rw   rx   rm   r#   ry   r"   r%   rW   rV   r   r   r   rv   r   r   rz   Z
list_filesr   r   r!   r   r\   r{   r]   r   r_   r|   r}   r~   r   r   r   r   r?   )r,   r)   r3   r4   r@   r   rZ   r   rY   rR   r   rX   rp   r$   rF   r   r   rG   rH   rH   rI   r   k  s   








%r   )r'   r-   r/   r0   r1   	anthropicr2   c              
      s   z@t  }d|d< |dd}tt| ||||fi |}t }t|j|}	|d|	I dH }
t 	|
r=|
I dH }|W S |
}|W S  t
yO } z|d}~ww )r   Tafile_contentrP   N)r7   r8   rm   r   file_contentr:   r;   r<   r=   r>   r?   r   rH   rH   rI   r     s6   

r   c                 K   s  z2t d"i |}td"i |}|jp|ddpd}|d}	z|dur.t||\}
}}
}
W n	 ty8   Y nw |durTt|tjrTt	t
t|du rT|jpPd}|}n|durct|tjsct|}n|du rid}t| ||d}|ddd	u }|d
krtj|||j|j||jd}|W S |tv rt|j|j|jd}tj|||j|j||j|jd}|W S |dkrt|j|j|jd}tj||j|j|j||j||	|d	}|W S |dkr|jpd}|jptjptd}|jptjptd}|j ptd}t!j||||||||jd}|W S |dkrt"j|||j|||jd}|W S tj#j$d%|d|tj&ddtj'dddd d! tyB } z|d}~ww )#r   rK   rL   r$   NFrM   )r   r3   r4   r   Tr   )rY   file_content_requestrV   rW   rZ   r]   r[   )rY   r   rV   rW   rZ   r]   r\   r-   r^   )	rY   rV   rW   r_   rZ   r]   r   r$   rS   r/   rN   ZVERTEXAI_PROJECTZVERTEXAI_LOCATIONZVERTEXAI_CREDENTIALS)rY   r   rV   vertex_credentialsvertex_projectvertex_locationrZ   r]   r0   )rY   r   rV   r   rZ   r]   zzLiteLLM doesn't support {} for 'file_content'. Supported providers are 'openai', 'azure', 'vertex_ai', 'bedrock', 'manus'.r`   ra   rb   r   rc   rd   rg   rk   rH   )(rn   r%   rZ   rq   r   r?   rs   rt   ru   r&   r	   rv   rw   rx   r   rm   anthropic_files_instancer   rV   rW   r]   r!   r   r\   r{   r   r_   r|   r   r}   r
   r   r   vertex_ai_files_instancebedrock_files_instancer~   r   r   r   r   )r   rP   r,   r3   r4   r@   r   r   rZ   r$   r   r   Z_file_content_requestrY   rF   r   r   rV   Zvertex_ai_projectZvertex_ai_locationr   rG   rH   rH   rI   r     s   



J;

 
r   )Nr'   NN)NNNN)r'   NN)r'   NNN)N__doc__r7   r:   r   uuidr   	functoolsr   typingr   r   r   r   r   r   r	   rt   r}   r
   Z1litellm.litellm_core_utils.get_llm_provider_logicr   r   r   rp   Z$litellm.llms.anthropic.files.handlerr   Zlitellm.llms.azure.common_utilsr   Z litellm.llms.azure.files.handlerr   Z"litellm.llms.bedrock.files.handlerr   Z&litellm.llms.custom_httpx.http_handlerr   r   Z*litellm.llms.custom_httpx.llm_http_handlerr   Z litellm.llms.openai.common_utilsr   Zlitellm.llms.openai.openair   r   r   Z$litellm.llms.vertex_ai.files.handlerr   Zlitellm.types.llms.openair   r   r   r   r   r   Zlitellm.types.routerZlitellm.types.utilsr!   r"   Zlitellm.utilsr#   r$   r%   r&   rz   r{   r|   r   r   r   rv   r6   r9   r   r   r   r   r   r   r   r   rH   rH   rH   rI   <module>   s   $ ,
 (|* (z*	