o
    ưiH                     @   s   d dl Z d dlZd dlmZmZmZmZmZmZ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mZmZmZmZmZ d dlmZmZ d d	lmZmZ d
dl m!Z! d
dl"m#Z# G dd de!eZ$dS )    N)AnyDictListLiteralOptionalUnioncast)HeadersResponse)BaseBatchesConfig)BaseLLMException)get_secret_str)BedrockCreateBatchRequestBedrockCreateBatchResponseBedrockInputDataConfigBedrockOutputDataConfigBedrockS3InputDataConfigBedrockS3OutputDataConfig)AllMessageValuesCreateBatchRequest)LiteLLMBatchLlmProviders   )
BaseAWSLLM)CommonBatchFilesUtilsc                       sh  e Zd ZdZ fddZedefddZ		d+ded	e	d
e
e dededee	 dee	 defddZdee	 dee	 d	e	dededede	fddZd	e	dedededee	ef f
ddZd	ee	 dedededef
ddZde	dededee	ef fddZde	fdd Zd!d" Zd#d$ Zd	ee	 dedededef
d%d&Zd'e	d(edeeef defd)d*Z  Z S ),BedrockBatchesConfigz\
    Config for Bedrock Batches - handles batch job creation and management for Bedrock
    c                    s   t    t | _d S N)super__init__r   common_utilsself	__class__ b/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/bedrock/batches/transformation.pyr   !   s   
zBedrockBatchesConfig.__init__returnc                 C   s   t jS r   )r   ZBEDROCKr    r$   r$   r%   custom_llm_provider%   s   z(BedrockBatchesConfig.custom_llm_providerNheadersmodelmessagesoptional_paramslitellm_paramsapi_keyapi_basec                 C   s   |S )z
        Validate and prepare environment for Bedrock batch requests.
        AWS credentials are handled by BaseAWSLLM.
        r$   )r!   r(   r)   r*   r+   r,   r-   r.   r$   r$   r%   validate_environment)   s   z)BedrockBatchesConfig.validate_environmentdatac           	      C   s   |  ||}d| d}|S )z
        Get the complete URL for Bedrock batch creation.
        Bedrock batch jobs are created via the model invocation job API.
        https://bedrock.#.amazonaws.com/model-invocation-job)_get_aws_region_name)	r!   r.   r-   r)   r+   r,   r0   Zaws_region_nameZbedrock_endpointr$   r$   r%   get_complete_batch_url:   s   z+BedrockBatchesConfig.get_complete_batch_urlcreate_batch_datac                 C   sZ  | d}|std| j|\}}| dptd}|s!|}| dp/| dp/td}	|	s6td|s<td| jj|d	d
}
d|
 d}dtd| d| di}td| d| d}| dpjt	d}|rq||d< d|i}||
|||	d}| d}|r|dkrd|d< d| 
|| d}| jjd|||dd\}}d|||ddS ) a  
        Transform the batch creation request to Bedrock format.
        
        Bedrock batch inference requires:
        - modelId: The Bedrock model ID
        - jobName: Unique name for the batch job
        - inputDataConfig: Configuration for input data (S3 location)
        - outputDataConfig: Configuration for output data (S3 location)
        - roleArn: IAM role ARN for the batch job
        input_file_idz4input_file_id is required for Bedrock batch creationZs3_output_bucket_nameZAWS_S3_OUTPUT_BUCKET_NAMEZaws_batch_role_arnZAWS_BATCH_ROLE_ARNz}AWS IAM role ARN is required for Bedrock batch jobs. Set 'aws_batch_role_arn' in litellm_params or AWS_BATCH_ROLE_ARN env varzOCould not determine Bedrock model ID. Please pass `model` in your request body.Zlitellm)prefixzlitellm-batch-outputs//s3InputDataConfigzs3://)s3Uris3_encryption_key_idZAWS_S3_ENCRYPTION_KEY_IDZs3EncryptionKeyIds3OutputDataConfig)modelIdjobNameinputDataConfigoutputDataConfigroleArncompletion_window24h   timeoutDurationInHoursr1   r2   bedrockPOSTZservice_namer0   endpoint_urlr+   methodzutf-8rJ   urlr(   r0   )get
ValueErrorr   Zparse_s3_uriosgetenvZgenerate_unique_job_namer   r   r   r3   sign_aws_requestdecode)r!   r)   r5   r+   r,   r6   Zinput_bucketZ	input_keyZoutput_bucketZrole_arnZjob_nameZ
output_keyinput_data_configs3_output_configr;   output_data_configZbedrock_requestrB   rI   signed_headersZsigned_datar$   r$   r%   transform_create_batch_requestU   sr   



	

z3BedrockBatchesConfig.transform_create_batch_requestraw_responselogging_objc                 C   s  z|  }W n ty } ztd| d}~ww |dd}t|dd}ddddd	d	d
dddd
}	ttd |	|d}
|di }td(i d|ddd|ddddd|ddd|ddd|
dddddtt		 d|dkrtt		 n#dddd dd!dd"dd#dd$dd%dd&dd'|d'i S ddd dd!dd"dd#dd$dd%dd&dd'|d'i S ))zN
        Transform Bedrock batch creation response to LiteLLM format.
        (Failed to parse Bedrock batch response: NjobArn status	Submitted
validatingin_progress	completedfailed
cancelling	cancelledexpired
r^   
Validating	Scheduled
InProgressPartiallyCompleted	CompletedFailedZStoppingStoppedZExpiredr_   rb   r`   Z
finalizingra   re   rc   rd   Zoriginal_batch_requestidobjectbatchendpoint/v1/chat/completionserrorsr6   rB   rC   output_file_iderror_file_id
created_atin_progress_atri   
expires_atfinalizing_atcompleted_at	failed_at
expired_atcancelling_atcancelled_atrequest_countsmetadatar$   )
json	ExceptionrN   rM   strr   r   r   inttime)r!   r)   rX   rY   r,   response_dataejob_arn
status_strstatus_mappingopenai_statusZoriginal_requestr$   r$   r%   transform_create_batch_response   s   
	
z4BedrockBatchesConfig.transform_create_batch_responsebatch_idc                 C   s   | dstd| |d}t|dk rtd| |d }ddlm} |j|d	d
}d| d| }| jjdi ||dd\}	}
d||	ddS )aF  
        Transform batch retrieval request for Bedrock.
        
        Args:
            batch_id: Bedrock job ARN
            optional_params: Optional parameters
            litellm_params: LiteLLM parameters
            
        Returns:
            Transformed request data for Bedrock GetModelInvocationJob API
        zarn:aws:bedrock:z,Invalid batch_id format. Expected ARN, got: :   zInvalid ARN format:    r   Nr\   )safer1   z$.amazonaws.com/model-invocation-job/rF   GETrH   rK   )	
startswithrN   splitlenurllib.parseparsequoter   rQ   )r!   r   r+   r,   Z	arn_partsregionZ_ulZencoded_arnrI   rV   _r$   r$   r%    transform_retrieve_batch_request  s*   



z5BedrockBatchesConfig.transform_retrieve_batch_requestr   c                    sF  ddl  dtt dtt f fdd}||ddur"t|dnd}h d}||v r?||d	dur<t|d	ndnd}|d
v rW||ddurTt|dndnd}|dkro||ddurlt|dndnd}|dkr||ddurt|dndnd}	||ddurt|dnd}
|||||	|
fS )z+Helper to parse timestamps based on status.r   Nts_strr&   c                    s@   | sd S z j | dd}t| W S  ty   Y d S w )NZz+00:00)datetimefromisoformatreplacer   	timestampr   )r   dtr   r$   r%   parse_timestamp<  s   zJBedrockBatchesConfig._parse_timestamps_and_status.<locals>.parse_timestampZ
submitTime>   ri   rh   rg   ZlastModifiedTime>   rk   rj   ZendTimerl   rm   ZjobExpirationTime)r   r   r   r   rM   )r!   r   r   r   rw   Zin_progress_statesrx   r{   r|   r   ry   r$   r   r%   _parse_timestamps_and_status9  s   $	$000$z1BedrockBatchesConfig._parse_timestamps_and_statusc                 C   s   d}| di }t|tr| di }t|tr| dd}d}| di }t|tr<| di }t|tr<| dd}||fS )z7Helper to extract input and output file configurations.r\   r?   r9   r:   Nr@   r<   )rM   
isinstancedict)r!   r   r6   rS   Zs3_input_configru   rU   rT   r$   r$   r%   _extract_file_configsS  s   



z*BedrockBatchesConfig._extract_file_configsc              	   C   s   | d}d}|r#ddlm} ddlm} |||t|jdgdd}| d	| d
| d| d| d| dd}ddl}i }	| D ]/\}
}|du rQqHt	|t
tfrqz	|||	|
< W qH typ   t||	|
< Y qHw t||	|
< qH||	fS )z/Helper to extract errors and enriched metadata.messageNr   )Errors)
BatchError)r   codelist)r0   rp   r>   clientRequestTokenr=   rA   rE   	vpcConfig)r>   r   r=   rA   rE   r   )rM   Zopenai.types.batchr   Zopenai.types.batch_errorr   r   status_coder   itemsr   r   r   dumpsr   )r!   r   rX   r   rt   r   r   Zenriched_metadata_raw_jsonenriched_metadataZ_k_vr$   r$   r%   _extract_errors_and_metadatag  s:   
z1BedrockBatchesConfig._extract_errors_and_metadatac                 C   s  ddl m} z| }W n ty } ztd| d}~ww |dd}t|dd}	d	d	d
d
ddddddd
}
ttd |
|	d	}| 	||	\}}}}}}| 
|\}}| ||\}}td(i d|ddddd|d|ddd|d|ddd|ptt d|d|d dd!|d"|d#dd$dd%|d&dd'|S d|d|d dd!|d"|d#dd$dd%|d&dd'|S ))zO
        Transform Bedrock batch retrieval response to LiteLLM format.
        r   )BedrockGetBatchResponserZ   Nr[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   rn   ro   rp   rq   rr   rs   rt   r6   rB   rC   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r$   )litellm.types.llms.bedrockr   r   r   rN   rM   r   r   r   r   r   r   r   r   r   )r!   r)   rX   rY   r,   r   r   r   r   r   r   r   rw   rx   r{   r|   r   ry   r6   ru   rt   r   r$   r$   r%   !transform_retrieve_batch_response  s   
	

z6BedrockBatchesConfig.transform_retrieve_batch_responseerror_messager   c                 C   s   | j |||S )zH
        Get Bedrock-specific error class using common utility.
        )r   get_error_class)r!   r   r   r(   r$   r$   r%   r     s   z$BedrockBatchesConfig.get_error_class)NN)!__name__
__module____qualname____doc__r   propertyr   r'   r   r   r   r   r   r/   r   r   r4   r   rW   r
   r   r   r   r   r   r   r   r   r   r	   r   r   __classcell__r$   r$   r"   r%   r      s    
	



o
>

7%
;
r   )%rO   r   typingr   r   r   r   r   r   r   Zhttpxr	   r
   Z,litellm.llms.base_llm.batches.transformationr   Z)litellm.llms.base_llm.chat.transformationr   Zlitellm.secret_managers.mainr   r   r   r   r   r   r   r   Zlitellm.types.llms.openair   r   Zlitellm.types.utilsr   r   Zbase_aws_llmr   r   r   r   r$   r$   r$   r%   <module>   s    $ 