o
    ưi                     @   s8  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m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 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+m,Z, ddl-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6m7Z7m8Z8m9Z9m:Z: e# Z;e Z<e%ddZ=e Z>e! Z?	dJde.de	e@ef de@deAdeAf
ddZBe7					dKde
d  d!e
d" d#e@de
d$ d%ee	e@e@f  d&ee	e@e@f  d'ee	e@e@f  d(ee	e@ef  de3fd)d*ZCe7					dKde
d  d!e
d" d#e@de
d$ d%ee	e@e@f  d&ee	e@e@f  d'ee	e@e@f  d(ee	e@ef  dee3eeee3f f fd+d,ZDe7				dLd-e@de
d. d%ee	e@e@f  d&ee	e@e@f  d'ee	e@e@f  de3fd/d0ZE		dMd-e@de.d1eeAejFf d2eGd3e,d4eHde
d. d5ee fd6d7ZIe7				dLd-e@de
d. d%ee	e@e@f  d&ee	e@e@f  d'ee	e@e@f  dee3eeee3f f fd8d9ZJe7						dNd:ee@ d;eeK de2d%ee	e@e@f  d&ee	e@e@f  d'ee	e@e@f  fd<d=ZLe7					dOd:ee@ d;eeK de2d&ee	e@e@f  d'ee	e@e@f  f
d>d?ZM					dPd-e@d@ee@ de
dA d%ee	e@e@f  d&ee	e@e@f  d'ee	e@e@f  de3fdBdCZN					dPd-e@d@ee@ dee
dA e@f d%ee	e@e@f  d&ee	e@e@f  d'ee	e@e@f  dee3eeee3f f fdDdEZO	dQd-e@dFe@ddGfdHdIZPdS )Rz
Main File for Batches API implementation

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

- create_batch()
- retrieve_batch()
- cancel_batch()
- list_batch()

    N)partial)Any	CoroutineDictLiteralOptionalUnioncast)BatchRequestCounts)verbose_logger)Logging)AnthropicBatchesHandler)AzureBatchesAPI)BedrockBatchesHandler)AsyncHTTPHandlerHTTPHandler)BaseLLMHTTPHandler)OpenAIBatchesAPI)VertexAIBatchPrediction)get_secret_str)CancelBatchRequestCreateBatchRequestFileExpiresAfterRetrieveBatchRequest)GenericLiteLLMParams) LIST_BATCHES_SUPPORTED_PROVIDERS+OPENAI_COMPATIBLE_BATCH_AND_FILES_PROVIDERSListBatchesSupportedProviderLiteLLMBatchLlmProviders)ProviderConfigManagerclientget_litellm_paramsget_llm_providersupports_httpx_timeout )Zgcs_bucket_name     @optional_paramskwargscustom_llm_providerdefault_timeoutreturnc                 C   sf   | j p
|d|p
|}t|tjr't|du r |jp|}t|S t|jp%|S |du r/t|S t|S )a  
    Resolve timeout value from various sources and handle httpx.Timeout objects.

    Args:
        optional_params: GenericLiteLLMParams object containing timeout
        kwargs: Additional kwargs that may contain request_timeout
        custom_llm_provider: Provider name for httpx timeout support check
        default_timeout: Default timeout value to use

    Returns:
        Resolved timeout as float
    request_timeoutFN)timeoutget
isinstancehttpxTimeoutr$   readfloat)r'   r(   r)   r*   r-   read_timeout r5   K/home/app/Keep/.python/lib/python3.10/site-packages/litellm/batches/main.py_resolve_timeout@   s   

r7   openaicompletion_window24hendpoint)z/v1/chat/completions/v1/embeddingsz/v1/completionsinput_file_id)r8   azure	vertex_aibedrockhosted_vllmmetadataextra_headers
extra_bodyoutput_expires_afterc              
      s   z=t  }	d|d< tt| |||||||f	i |}
t }t|j|
}|	d|I dH }t |r:|I dH }|W S |}|W S  t	yL } z|d}~ww )z
    Async: Creates and executes a batch from an uploaded file of request

    LiteLLM Equivalent of POST: https://api.openai.com/v1/batches
    Tacreate_batchN)
asyncioget_event_loopr   create_batchcontextvarscopy_contextrunrun_in_executoriscoroutine	Exception)r9   r;   r=   r)   rB   rC   rD   rE   r(   loopfuncctxfunc_with_contextinit_responseresponseer5   r5   r6   rF   k   s:   


rF   c                 K   s  zt d1i |}	|dd}
|dd}|dd}|dd}z|dur0t|dd\}}}}W n tyM } ztdt|  W Y d}~nd}~ww |dd	d
u }tt d1i |}t	t
|dd}t|	||}|j|d|	 |
|||di d|	jd
d|d t| |||||d}|durt	t||d< |durtj|t|d}nd}|durtj||||pi |	j|	j||tdurttttfrtnd||d}|W S d}|tv r|	jptjptdptdpd}|	jptjptddpd}|	jptjptj ptd}t!j||||||	j"|d}|W S |dkru|	jp,tjp,t#d}|	j$p8tj$p8t#d}|	jpMtjpMtj%pMt#dpMt#d}|	di }|dur`|dd nt#d  t&j||||||	j"||d!}|W S |d"kr|	jpd#}|	j'ptj'pt#d$}|	j(ptj(pt#d%}|	j)pt#d&}t*j|||||||	j"|d'}|W S tj+j,d(-|d)|t.j/d*d+t.j0d,d-d.d/d0 ty } z|d}~ww )2z
    Creates and executes a batch from an uploaded file of request

    LiteLLM Equivalent of POST: https://api.openai.com/v1/batches
    litellm_call_idNproxy_server_request
model_infomodelrZ   r)   zPlitellm.batches.main.py::create_batch() - Error inferring custom_llm_provider - rF   FTlitellm_logging_obj)rW   rX   rY   rB   Zpreset_cache_keyZstream_response)Zexclude_unsetrZ   userr'   litellm_paramsr)   )r9   r;   r=   rB   rC   rD   rE   rZ   provider)provider_configr_   create_batch_dataheadersapi_baseapi_keylogging_obj	_is_asyncr!   r-   rZ   OPENAI_BASE_URLOPENAI_API_BASEhttps://api.openai.com/v1OPENAI_ORGANIZATIONOPENAI_API_KEY)re   rf   organizationrc   r-   max_retriesrh   r>   AZURE_API_BASEAZURE_API_VERSIONAZURE_OPENAI_API_KEYAZURE_API_KEYrD   azure_ad_tokenAZURE_AD_TOKEN)rh   re   rf   api_versionr-   ro   rc   r_   r?   r%   VERTEXAI_PROJECTVERTEXAI_LOCATIONVERTEXAI_CREDENTIALS)rh   re   vertex_projectvertex_locationvertex_credentialsr-   ro   rc   zALiteLLM doesn't support custom_llm_provider={} for 'create_batch'n/a  Unsupported providerrI   "https://github.com/BerriAI/litellmmethodurlstatus_codecontentrequestmessagerZ   Zllm_providerrU   r5   )1r   r.   r#   rO   r   	exceptionstrpopdictr	   LiteLLMLoggingObjr7   update_environment_variables
model_dumpr   r   r    get_provider_batches_configr   base_llm_http_handlerrI   re   rf   r!   r/   r   r   r   litellmosgetenvrn   
openai_keyopenai_batches_instancero   r   rv   	azure_keyazure_batches_instancerz   r{   r|   vertex_ai_batches_instance
exceptionsBadRequestErrorformatr0   ResponseRequest)r9   r;   r=   r)   rB   rC   rD   rE   r(   r'   rW   rX   rY   rZ   _rV   rh   r_   r\   r-   Z_create_batch_requestrb   rU   re   rn   rf   rv   vertex_ai_projectvertex_ai_locationr|   r5   r5   r6   rI      sv  
	

T

1

rI   batch_id)r8   r>   r?   r@   rA   	anthropicc              
      s   z:t  }d|d< tt| ||||fi |}t }t|j|}	|d|	I dH }
t |
r7|
I dH }|W S |
}|W S  t	yI } z|d}~ww )zo
    Async: Retrieves a batch.

    LiteLLM Equivalent of GET https://api.openai.com/v1/batches/{batch_id}
    Taretrieve_batchN)
rG   rH   r   retrieve_batchrJ   rK   rL   rM   rN   rO   )r   r)   rB   rC   rD   r(   rP   rQ   rR   rS   rT   rU   rV   r5   r5   r6   r   l  s4   


r   r-   r_   _retrieve_batch_requestrh   rg   c                 C   s  d }|t v rC|jptjptdptdpd}|jp%tjp%tdd p%d }	|jp3tjp3tjp3td}
tj	||||
|	||j
d}|S |dkr|jpPtjpPtd}|jpZtjpZtd	}|jpktjpktjpktd
pktd}
|di }|d ur}|dd  ntd tj	|||
|||j
||d}|S |dkr|jpd}|jptjptd}|jptjptd}|jptd}tj	|| ||||||j
|d	}|S |dkr|jptjptd}|jptjptjptd}
tj	|| ||
||j
d}|S tjjd|d|tjddtjddd d!d")#Nri   rj   rk   rl   rm   )rh   retrieve_batch_datare   rf   rn   r-   ro   r>   rp   rq   rr   rs   rD   rt   ru   )rh   re   rf   rv   r-   ro   r   r_   r?   r%   rw   rx   ry   )	rh   r   re   rz   r{   r|   r-   ro   rg   r   ZANTHROPIC_API_BASEZANTHROPIC_API_KEY)rh   r   re   rf   r-   ro   zJLiteLLM doesn't support {} for 'create_batch'. Only 'openai' is supported.r}   r~   r   create_threadr   r   r   r   )r   re   r   r   r   rn   rf   r   r   r   ro   r   rv   r   r.   r   r   rz   r{   r|   r   anthropic_batches_instancer   r   r   r0   r   r   )r   r'   r-   r_   r   rh   r)   rg   re   rn   rf   rU   rv   rD   r   r   r|   r5   r5   r6   8_handle_retrieve_batch_providers_without_provider_config  s  

jG
-r   c                 K   s  zt di |}|dd}|jp|ddpd}tdd|i|}	|dur2|jdd| |	|d |durJt|tjrJt	|du rJ|j
pFd}
|
}n|durYt|tjsYt|}n|du r_d}t| ||d	}|d
ddu }|dd}| drd| v rd| v r| }|dd tjd| |dd|d|W S |dd}|durtj|t|d}nd}|durtj| ||	|pi |j|j|pt|p| dg dddd|  dd||durt|ttfr|nd||d}|W S t| |||	||||dW S  ty } z|d}~ww )zh
    Retrieves a batch.

    LiteLLM Equivalent of GET https://api.openai.com/v1/batches/{batch_id}
    r\   Nr,   X  r)   r]   Fr&   r   rC   rD   r   Tr!   zarn:awsz	:bedrock:z:async-invoke/aws_region_namez	us-east-1)r   r   rg   rZ   r`   z/unknownZbatch_retrieveZbatch_retrieve_)rZ   messagesstreamZ	call_type
start_timerW   Zfunction_id)r   rb   r_   rd   re   rf   rg   rh   r!   r-   rZ   )r   r)   r'   r_   r   rh   r-   rg   r5   )r   r.   r-   r"   r   r   r/   r0   r1   r$   r2   r3   r   r   
startswithcopyr   _handle_async_invoke_statusr    r   r   r   r   re   rf   r   r   r   r   rO   )r   r)   rB   rC   rD   r(   r'   r\   r-   r_   r4   r   rh   r!   Zasync_kwargsrZ   rb   rU   rV   r5   r5   r6   r   %  s   	



	r   afterlimitc              
      s   z:t  }d|d< tt| ||||fi |}t }	t|	j|}
|d|
I dH }t |r7|I dH }|W S |}|W S  t	yI } z|d}~ww )z2
    Async: List your organization's batches.
    Talist_batchesN)
rG   rH   r   list_batchesrJ   rK   rL   rM   rN   rO   )r   r   r)   rB   rC   rD   r(   rP   rQ   rR   rS   rT   rU   rV   r5   r5   r6   r     s4   

r   c                 K   s  z9t d(i |}td(d|i|}|jptjptjptd}|jp*|ddp*d}	|	durCt	|	t
jrCt|du rC|	jp?d}
|
}	n|	durRt	|	t
jsRt|	}	n|	du rXd}	|ddd	u }|tv r|jputjputd
putdpud}|jptjptddpd}tj|| |||||	|jd}|W S |dkr|jptjptd}|jptjptd}|jptjptjptdptd}|di }|dur|dd ntd tj|||||	|j|d}|W S |dkr|jpd}|jptjptd}|jptjptd}|jp
td}tj|| ||||||	|jd	}|W S tjjd |d!t"t#d |t
j$d!d"t
j%d#d$d%d&d' t&yI } z|d}~ww ))z>
    Lists batches

    List your organization's batches.
    r)   rm   r,   r   NFr&   r   Tri   rj   rk   rl   )rh   r   r   re   rf   rn   r-   ro   r>   rp   rq   rr   rs   rD   rt   ru   )rh   re   rf   rv   r-   ro   r_   r?   r%   rw   rx   ry   )	rh   r   r   re   rz   r{   r|   r-   ro   zELiteLLM doesn't support {} for 'list_batch'. Supported providers: {}.z, r}   r~   r   r   r   r   r   r   r5   )'r   r"   rf   r   r   r   r   r-   r.   r/   r0   r1   r$   r2   r3   r   r   re   rn   r   r   ro   r   rv   r   r   rz   r{   r|   r   r   r   r   joinsortedr   r   r   rO   )r   r   r)   rC   rD   r(   r'   r_   rf   r-   r4   rh   re   rn   rU   rv   r   r   r|   rV   r5   r5   r6   r     s   



R2


r   rZ   )r8   r>   c              
      s   zCt  }d|d< |ddp|}tt| |||||fi |}t }	t|	j|}
|d|
I dH }t 	|r@|I dH }|W S |}|W S  t
yR } z|d}~ww )zu
    Async: Cancels a batch.

    LiteLLM Equivalent of POST https://api.openai.com/v1/batches/{batch_id}/cancel
    Tacancel_batchrZ   N)rG   rH   r   r   cancel_batchrJ   rK   rL   rM   rN   rO   )r   rZ   r)   rB   rC   rD   r(   rP   rQ   rR   rS   rT   rU   rV   r5   r5   r6   r   g  s8   

r   c                 K   s  z1z|durt ||d\}}}}W n ty. } ztdt|  W Y d}~nd}~ww td$i |}	td$d|i|}
|	jpI|ddpId}|durbt	|t
jrbt|du rb|jp^d}|}n|durqt	|t
jsqt|}n|du rwd}t| ||d	}|d
ddu }d}|tv r|	jptjptdptdpd}|	jptjptddpd}|	jptjptjptd}tj|||||||	jd}|W S |dkr|	jptjptd}|	jptjptd}|	jptjptjptdptd}|	di }|dur|dd ntd tj||||||	j||
d}|W S tj j!d"|d|t
j#ddt
j$dd d!d"d# tyA } z|d}~ww )%zn
    Cancels a batch.

    LiteLLM Equivalent of POST https://api.openai.com/v1/batches/{batch_id}/cancel
    Nr[   zPlitellm.batches.main.py::cancel_batch() - Error inferring custom_llm_provider - r)   r,   r   Fr&   r   r   Tri   rj   rk   rl   rm   )rh   cancel_batch_datare   rf   rn   r-   ro   r>   rp   rq   rr   rs   rD   rt   ru   )rh   re   rf   rv   r-   ro   r   r_   zWLiteLLM doesn't support {} for 'cancel_batch'. Only 'openai' and 'azure' are supported.r}   r~   r   r   r   r   r   r   r5   )%r#   rO   r   r   r   r   r"   r-   r.   r/   r0   r1   r$   r2   r3   r   r   r   re   r   r   r   rn   rf   r   r   r   ro   r   rv   r   r   r   r   r   r   r   )r   rZ   r)   rB   rC   rD   r(   r   rV   r'   r_   r-   r4   Z_cancel_batch_requestrh   re   rn   rf   rU   rv   r5   r5   r6   r     s   



:

r   r   r   c                    s~   ddl ddlm   fddddl}fdd}|j }||}| W  d   S 1 s8w   Y  dS )a  
    Handle async invoke status check for AWS Bedrock.

    Args:
        batch_id: The async invoke ARN
        aws_region_name: AWS region name
        **kwargs: Additional parameters

    Returns:
        dict: Status information including status, output_file_id (S3 URL), etc.
    r   N)BedrockEmbeddingc                     s@    } | j ddI d H }ddlm} ddlm} |dd}| }ddd	d	d
}||d}d}z
|d d d }W n ttfyM   Y nw dd l	}	ddl
m}
 |
 ||\}}}}}}||d d||prt|		 |||td|dkr}dnd|dkrdnddtdi ||dpd|d ddddd}|S )N)Zinvocation_arnr   rg   r   )BatchJobStatus)r   statusr%   	completedfailedin_progress)r   r   Z
inprogressr   ZoutputDataConfigZs3OutputDataConfigZs3Uri)BedrockBatchesConfigZinvocationArnbatch   )totalr   r   ZfailureMessageZmodelArn)Zoutput_file_idZfailure_messageZ	model_arnr:   r<   )idobjectr   
created_atin_progress_atcompleted_at	failed_atZrequest_countsrB   r9   r;   r=   r5   )Z_get_async_invoke_statuslitellm.types.llms.openair   litellm.types.utilsr   r.   lowerKeyError	TypeErrortimeZ+litellm.llms.bedrock.batches.transformationr   Z_parse_timestamps_and_statusintr
   r   )Zembedding_handlerZstatus_responser   r   Zaws_status_rawZaws_status_lowerZstatus_mappingZnormalized_statusZoutput_s3_urir   r   r   r   r   r   r   result)r   r   r   r(   rg   r5   r6   _async_get_status2  sh   z6_handle_async_invoke_status.<locals>._async_get_statusc                     s4     } |  z|   W |   S |   w N)new_event_loopset_event_looprun_until_completeclose)Znew_loop)r   rG   r5   r6   run_in_thready  s
   
z2_handle_async_invoke_status.<locals>.run_in_thread)rG   Z$litellm.llms.bedrock.embed.embeddingr   concurrent.futuresfuturesThreadPoolExecutorsubmitr   )r   r   rg   r(   
concurrentr   executorfuturer5   )r   r   rG   r   r   r(   rg   r6   r      s   E
$r   )r&   )r8   NNNN)r8   NNN)r8   N)NNr8   NNN)NNr8   NN)Nr8   NNNr   )Q__doc__rG   rJ   r   	functoolsr   typingr   r   r   r   r   r   r	   r0   Zopenai.types.batchr
   r   Zlitellm._loggingr   Z*litellm.litellm_core_utils.litellm_loggingr   r   Z&litellm.llms.anthropic.batches.handlerr   Z"litellm.llms.azure.batches.handlerr   Z$litellm.llms.bedrock.batches.handlerr   Z&litellm.llms.custom_httpx.http_handlerr   r   Z*litellm.llms.custom_httpx.llm_http_handlerr   Zlitellm.llms.openai.openair   Z&litellm.llms.vertex_ai.batches.handlerr   Zlitellm.secret_managers.mainr   r   r   r   r   r   Zlitellm.types.routerr   r   r   r   r   r   r   Zlitellm.utilsr    r!   r"   r#   r$   r   r   r   r   r   r   r3   r7   rF   rI   r   r1   r   boolr   r   r   r   r   r   r   r   r5   r5   r5   r6   <module>   s   $	


+
1
 O0
  * 
0
 