
    ju{                        d Z ddlZddlZddlmZmZmZmZmZm	Z	 erddl
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 erdd	lmZ  G d
 de      Z G d d      Zd Z	 	 	 	 	 	 	 	 	 	 	 d)dee   dee   dee   dee   dee   dee   dee   dee   dee   dee	eej<                  f      fdZ G d d      Z dedefdZ! G d d e      Z"d!efd"Z# G d# d$      Z$d%edee   fd&Z% G d' d(      Z&y)*zF
Common utilities used across bedrock chat/embedding/image generation
    N)TYPE_CHECKINGDictListLiteralOptionalUnion)BedrockCreateBatchRequest)BaseAnthropicMessagesConfig)BaseLLMModelInfo)BaseLLMException)
get_secret)AllMessageValuesc                       e Zd Zy)BedrockErrorN)__name__
__module____qualname__     z/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/litellm/llms/bedrock/common_utils.pyr   r      s    r   r   c                       e Zd Zd ZdefdZdedefdZdee   fdZ	dee   fdZ
dee   fd	Zdee   fd
Zdee   fdZdee   fdZy)AmazonBedrockGlobalConfigc                      y Nr   selfs    r   __init__z"AmazonBedrockGlobalConfig.__init__   s    r   returnc                 
    ddiS )zS
        Mapping of common auth params across bedrock/vertex/azure/watsonx
        region_nameaws_region_namer   r   s    r   get_mapped_special_auth_paramsz8AmazonBedrockGlobalConfig.get_mapped_special_auth_params"   s     011r   non_default_paramsoptional_paramsc                 p    | j                         }|j                         D ]  \  }}||v s||||   <    |S r   )r"   items)r   r#   r$   mapped_paramsparamvalues         r   map_special_auth_paramsz1AmazonBedrockGlobalConfig.map_special_auth_params(   sF    ;;=.446LE5%8=e 45 7 r   c                     | j                         | j                         z   | j                         z   | j                         z   | j	                         z   S r   )get_us_regionsget_eu_regionsget_ap_regionsget_ca_regionsget_sa_regionsr   s    r   get_all_regionsz)AmazonBedrockGlobalConfig.get_all_regions/   s[    !!!#$!!#$ !!#$ !!#	$	
r   c                 
    g dS )D
        Source: https://www.aws-services.info/bedrock.html
        )zap-northeast-1zap-northeast-2zap-northeast-3z
ap-south-1z
ap-south-2zap-southeast-1zap-southeast-2r   r   s    r   r.   z(AmazonBedrockGlobalConfig.get_ap_regions8   s    
 	
r   c                     dgS )Nz	sa-east-1r   r   s    r   r0   z(AmazonBedrockGlobalConfig.get_sa_regionsF   s
    }r   c                 
    g dS )r3   )z	eu-west-1z	eu-west-2z	eu-west-3zeu-central-1zeu-central-2z
eu-south-1z
eu-south-2z
eu-north-1r   r   s    r   r-   z(AmazonBedrockGlobalConfig.get_eu_regionsI   s    	
 		
r   c                     dgS )Nzca-central-1r   r   s    r   r/   z(AmazonBedrockGlobalConfig.get_ca_regionsX   s    r   c                 
    g dS )r3   )z	us-east-1z	us-east-2z	us-west-1z	us-west-2zus-gov-east-1zus-gov-west-1r   r   s    r   r,   z(AmazonBedrockGlobalConfig.get_us_regions[   s    
 	
r   N)r   r   r   r   dictr"   r*   r   strr1   r.   r0   r-   r/   r,   r   r   r   r   r      s    2 2$ QU 
c 

S	 
S	 
S	 
 S	  
S	 
r   r   c                       fd}|S )z,Closure to capture the headers and add them.c                 n    j                         D ]!  \  }}| j                  j                  ||       # y)z.Actual callback function that Boto3 will call.N)r&   headers
add_header)requestkwargsheader_nameheader_valuer<   s       r   callbackz#add_custom_header.<locals>.callbackl   s,    )0%KOO&&{LA *9r   r   )r<   rB   s   ` r   add_custom_headerrC   i   s    B
 Or   aws_access_key_idaws_secret_access_keyr!   aws_bedrock_runtime_endpointaws_session_nameaws_profile_nameaws_role_nameaws_web_identity_tokenextra_headerstimeoutc           
      b   t        dd       }t        dd       }||||||||g}t        |      D ](  \  }}|s	|j                  d      st        |      ||<   * |\  }}}}}}}}t        j                  dt
        j                        }| rn|r|} n|r|} n|r|} nt        dd      t        d      }|r|}n|r|}nd	|  d
}dd l}t        |
t              r|j                  j                  |
|
      }nft        |
t        j                        r2|j                  j                  |
j                  |
j                         }n|j                  j                         }|p|n|lt        |      }|t        dd      |j#                  d      }|j%                  |||d      }|j#                  d|d   d   |d   d   |d   d   | |||      }n|V|T|j#                  d|||      }|j'                  ||      }|j#                  d|d   d   |d   d   |d   d   | |||      }nZ||j#                  d||| |||      }n?|'|j)                  |      j#                  d| |||      }n|j#                  d| |||      }|	r/|j*                  j,                  j/                  dt1        |	             |S )NAWS_REGION_NAME
AWS_REGIONzos.environ/
SSL_VERIFYzRAWS region not set: set AWS_REGION_NAME or AWS_REGION env variable or in .env filei  )messagestatus_codeAWS_BEDROCK_RUNTIME_ENDPOINTzhttps://bedrock-runtime.z.amazonaws.comr   )connect_timeoutread_timeoutz6OIDC token could not be retrieved from secret manager.stsi  )RoleArnRoleSessionNameWebIdentityTokenDurationSecondsbedrock-runtimeCredentialsAccessKeyIdSecretAccessKeySessionToken)service_namerD   rE   aws_session_tokenr    endpoint_urlconfigverify)rD   rE   rd   )rW   rX   )r`   rD   rE   r    rb   rc   rd   )profile_name)r`   r    rb   rc   rd   zbefore-sign.bedrock-runtime.*)r   	enumerate
startswithosgetenvlitellm
ssl_verifyr   boto3
isinstancefloatsessionConfighttpxTimeoutconnectreadclientassume_role_with_web_identityassume_roleSessionmetaeventsregisterrC   )r    rD   rE   r!   rF   rG   rH   rI   rJ   rK   rL   litellm_aws_region_namestandard_aws_region_nameparams_to_checkir(   rk    env_aws_bedrock_runtime_endpointrb   rl   rc   
oidc_token
sts_clientsts_responseru   s                            r   init_bedrock_clientr   t   s    )):DA),= 	$	O o.5U%%m4!+E!2OA / 		$ <););<J 	%	 -	!.h
 	
 (22P'Q$#3	)71+nM'5!%%gG%T	GU]]	+%%#OO',, & 
 %%' 	*%( 67
P 
 \\%(
 "??!,' 	 @ 
 **=9-H".}"=>O"P*=9.I#%  	
 
	"'7'C\\/"7	 " 

 "--!3C . 
 **=9-H".}"=>O"P*=9.I#%  	
 
	& */"7#%  
 
	% ,<=DD*#% E 
 *#%  
 ##+->}-M	
 Mr   c                   *    e Zd Zd Zd Zd Zd Zd Zy)ModelResponseIteratorc                      || _         d| _        y )NF)model_responseis_done)r   r   s     r   r   zModelResponseIterator.__init__,  s    ,r   c                     | S r   r   r   s    r   __iter__zModelResponseIterator.__iter__1      r   c                 L    | j                   rt        d| _         | j                  S NT)r   StopIterationr   r   s    r   __next__zModelResponseIterator.__next__4  s"    <<"""r   c                     | S r   r   r   s    r   	__aiter__zModelResponseIterator.__aiter__;  r   r   c                 T   K   | j                   rt        d| _         | j                  S wr   )r   StopAsyncIterationr   r   s    r   	__anext__zModelResponseIterator.__anext__>  s&     <<$$"""s   &(N)r   r   r   r   r   r   r   r   r   r   r   r   r   +  s    
##r   r   response_tool_namer   c                 x    | t         j                  j                  v rt         j                  j                  |    } | S )z
    If litellm formatted the input tool name, we need to convert it back to the original name.

    Args:
        response_tool_name (str): The name of the tool as received from the response.

    Returns:
        str: The original name of the tool.
    )rj   bedrock_tool_name_mappings
cache_dict)r   s    r   get_bedrock_tool_namer   E  s:     W??JJJ$??JJ
 r   c                   :   e Zd Z e       Zej                         Zeddee	   dee	   fd       Z
eddee	   dee	   fd       Z	 	 ddede	d	ed
   dededee	   dee	   defdZ	 ddee	   dee	   dee	   fdZede	de	fd       Zede	de	fd       Zede	de	fd       Zedee	   fd       Zede	ded   fd       Zede	defd       Zede	defd       Zede	defd       Zede	defd       Zede	defd       Zede	defd       Zede	dee   fd       Zy)BedrockModelInfoNapi_baser   c                     | S )z7
        Get the API base for the given model.
        r   )r   s    r   get_api_basezBedrockModelInfo.get_api_base[  s	    
 r   api_keyc                     | S )z6
        Get the API key for the given model.
        r   )r   s    r   get_api_keyzBedrockModelInfo.get_api_keyb  s	    
 r   r<   modelmessagesr   r$   litellm_paramsc                     |S r   r   )r   r<   r   r   r$   r   r   r   s           r   validate_environmentz%BedrockModelInfo.validate_environmenti  s	     r   c                     g S r   r   )r   r   r   s      r   
get_modelszBedrockModelInfo.get_modelsu  s	     	r   c                 R    d| j                         v r| j                  d      d   S | S )a[  
        Extract the model name from an AWS Bedrock ARN.
        Returns the string after the last '/' if 'arn' is in the input string.

        Args:
            arn (str): The ARN string to parse

        Returns:
            str: The extracted model name if 'arn' is in the string,
                otherwise returns the original string
        arn/)lowersplitr   s    r   extract_model_name_from_arnz,BedrockModelInfo.extract_model_name_from_arnz  s+     EKKM!;;s#B''r   c                     | j                  d      r| j                  dd      d   } | j                  d      r| j                  dd      d   } | j                  d      r| j                  dd      d   } | S )Nbedrock/r      	converse/invoke/)rg   r   r   s    r   "get_non_litellm_routing_model_namez3BedrockModelInfo.get_non_litellm_routing_model_name  sp    J'KKQ'*EK(KKQ'*EI&KKQ'*Er   c                    t         j                  |       } t         j                  |       } | j                  dd      d   }| j                  dd      d   }|t         j	                         v r| j                  dd      d   S |t         j
                  v r3t        | j                  dd            dkD  r| j                  dd      d   S | S )z
        Get the base model from the given model name.

        Handle model names like - "us.meta.llama3-2-11b-instruct-v1:0" -> "meta.llama3-2-11b-instruct-v1"
        AND "meta.llama3-2-11b-instruct-v1:0" -> "meta.llama3-2-11b-instruct-v1"
        r   .r   r   r   )r   r   r   r   (_supported_cross_region_inference_regionall_global_regionslen)r   potential_regionalt_potential_regions      r   get_base_modelzBedrockModelInfo.get_base_model  s     !CC%CP <<UC ;;sA.q1${{32 

 HHJK ;;sA&q)) $4$G$GGEKKQ'(1,;;sA&q))r   c                  
    g dS )zZ
        Abbreviations of regions AWS Bedrock supports for cross region inference
        )globaluseuapacjpauzus-govr   r   r   r   r   z9BedrockModelInfo._supported_cross_region_inference_region  s    
 DCr   )converseinvokeconverse_likeagent	agentcoreasync_invokec                     ddddddd}|j                         D ]  \  }}|| v s|c S  t        j                  |       }t        j                  |       }|t        j
                  v s|t        j
                  v ryy)	z<
        Get the bedrock route for the given model.
        r   r   r   r   r   r   )r   converse_like/r   agent/
agentcore/async_invoke/r   )r&   r   r   r   rj   bedrock_converse_models)r   route_mappingsprefix
route_type
base_model	alt_models         r   get_bedrock_routez"BedrockModelInfo.get_bedrock_route  s      -#%+
 	 #1"6"6"8FJ!! #9 &44U;
$GGeGT	'999G;;;r   c                 
    d| v S )zC
        Check if the model is an explicit converse route.
        r   r   r   s    r   _explicit_converse_routez)BedrockModelInfo._explicit_converse_route  s    
 e##r   c                 
    d| v S )zA
        Check if the model is an explicit invoke route.
        r   r   r   s    r   _explicit_invoke_routez'BedrockModelInfo._explicit_invoke_route  s    
 E!!r   c                 
    d| v S )z@
        Check if the model is an explicit agent route.
        r   r   r   s    r   _explicit_agent_routez&BedrockModelInfo._explicit_agent_route  s    
 5  r   c                 
    d| v S )zD
        Check if the model is an explicit agentcore route.
        r   r   r   s    r   _explicit_agentcore_routez*BedrockModelInfo._explicit_agentcore_route  s    
 u$$r   c                 
    d| v S )zH
        Check if the model is an explicit converse like route.
        r   r   r   s    r   _explicit_converse_like_routez.BedrockModelInfo._explicit_converse_like_route  s    
  5((r   c                 
    d| v S )zG
        Check if the model is an explicit async invoke route.
        r   r   r   s    r   _explicit_async_invoke_routez-BedrockModelInfo._explicit_async_invoke_route  s    
 %''r   c                 `    t         j                  |       ryd| v rt        j                         S y)z
        Get the bedrock provider config for the given model.

        Only route to AmazonAnthropicClaude3MessagesConfig() for BaseMessagesConfig

        All other routes should return None since they will go through litellm.completion
        Nclaude)r   r   rj   #AmazonAnthropicClaudeMessagesConfigr   s    r   ,get_bedrock_provider_config_for_messages_apiz=BedrockModelInfo.get_bedrock_provider_config_for_messages_api  s3     44U; u>>@@
 r   r   )NN)r   r   r   r   global_configr1   r   staticmethodr   r9   r   r   r8   r   r   r   r   r   r   r   r   r   boolr   r   r   r   r   r   r
   r   r   r   r   r   r   W  s   -/M&668x}    Xc] hsm   "&"&

 
 )*	

 
 
 #
 3-
 

 HL}7?}	c
 3 3    
# 
# 
 
 c c  < Dd3i D D 	\	] > $ $ $ $ "c "d " " !S !T ! ! % % % % )S )T ) ) (C (D ( ( 	-	. r   r   r   c                 v   t         j                  |       }t        j                  j	                  |       }t         j                  |       }|dk(  s|dk(  rt        j                         S |dk(  rddlm}  |       S |dk(  rddl	m
}  |       S |d	k(  rt        j                         S |d
k(  rH|t        j                  j                         v rt        j                         S t        j                         S |dk(  s|dk(  rt        j                         S |dk(  rt        j                          S |dk(  rt        j"                         S |dk(  rt        j$                         S |dk(  rt        j&                         S |dk(  rt        j(                         S |dk(  rt        j*                         S t        j,                         S )z
    Helper function to get the appropriate Bedrock chat config based on model and route.
    
    Args:
        model: The model name/identifier
        
    Returns:
        The appropriate Bedrock config class instance
    r   r   r   r   r   )AmazonInvokeAgentConfigr   )AmazonAgentCoreConfigamazon	anthropicry   llamaai21coheremistraldeepseek_r1novaqwen3)r   r   rj   
BedrockLLMget_bedrock_invoke_providerr   AmazonConverseConfig5litellm.llms.bedrock.chat.invoke_agent.transformationr   2litellm.llms.bedrock.chat.agentcore.transformationr   AmazonTitanConfigAmazonAnthropicConfig get_legacy_anthropic_model_namesAmazonAnthropicClaudeConfigAmazonLlamaConfigAmazonAI21ConfigAmazonCohereConfigAmazonMistralConfigAmazonDeepSeekR1ConfigAmazonInvokeNovaConfigAmazonQwen3ConfigAmazonInvokeConfig)r   bedrock_routebedrock_invoke_providerr   r   r   s         r   get_bedrock_chat_configr  &  s    %66u=M%00LL M  "007J 
"m&F++--	'	!	
 '((	+	%	
 %&& (*((**	 K	/,,MMOP 00226688	 F	*.E.P((**	 F	*''))	 H	,))++	 I	-**,,	 M	1--//	 F	*--//	 G	+((**))++r   c                   2    e Zd ZdZdZd Zd Zdee   fdZ	y)BedrockEventStreamDecoderBasez:
    Base class for event stream decoding for Bedrock
    Nc                 (    ddl m}  |       | _        y )Nr   )EventStreamJSONParser)botocore.parsersr  parser)r   r  s     r   r   z&BedrockEventStreamDecoderBase.__init__h  s    :+-r   c                     | j                   Cddlm} ddlm}  |       }|j                  dd      } ||      }|j                  d      | _         | j                   S )Nr   )Loader)ServiceModelr[   z	service-2ResponseStream)_response_stream_shape_cachebotocore.loadersr  botocore.modelr  load_service_model	shape_for)r   r  r  loaderbedrock_service_dictbedrock_service_models         r   get_response_stream_shapez7BedrockEventStreamDecoderBase.get_response_stream_shapem  sc    ,,4/3XF#)#<#<!;$  %11E$F!0E0O0O 1D- 000r   r   c                 |   |j                         }| j                  j                  || j                               }|d   dk7  r|d   j	                         }t        |t              r|j                  d      }nt        |t              r|}nd}|d   j                  d      }|dz   |z   }t        |d   t        |t              rt        j                  |      	      |	      d
|v r3|j                  d
      }|sy |j                  d      j	                         S |j                  d      }|sy |j	                         S )NrR      bodyrQ    r<   z:exception-type )rR   rQ   chunkbytes)to_response_dictr  parser  decoderm   r8   getr9   r   jsondumps)r   eventresponse_dictparsed_responsedecoded_bodyerror_messageexception_statusr$  s           r   _parse_message_from_eventz7BedrockEventStreamDecoderBase._parse_message_from_event}  s@   ..0++++499;
 '3.(0779L,- , 0 0 ;L#. , ",Y7;;<MN,s2]BM)-8 "-6 JJ}- 
 '  o%#''0E99W%,,..!%%f-E<<>!r   )
r   r   r   __doc__r  r   r  r   r9   r2  r   r   r   r  r  a  s)     $( .
1 ""(3- ""r   r  r<   c                     | j                  d      }|sg S |j                  d      D cg c]  }|j                          c}S c c}w )a  
    Extract anthropic-beta header values and convert them to a list.
    Supports comma-separated values from user headers.

    Used by both converse and invoke transformations for consistent handling
    of anthropic-beta headers that should be passed to AWS Bedrock.

    Args:
        headers (dict): Request headers dictionary

    Returns:
        List[str]: List of anthropic beta feature strings, empty list if no header
    zanthropic-beta,)r)  r   strip)r<   anthropic_beta_headerbetas      r   get_anthropic_beta_from_headersr9    sI     $KK(89 	 &;%@%@%EF%ETDJJL%EFFFs   Ac                       e Zd ZdZd ZdedefdZdedefdZdede	defd	Z
	 dd
edeee	df   dede	dedefdZddededefdZ	 	 dde	de	dededef
dZdededeeej$                  f   defdZy)CommonBatchFilesUtilsz
    Common utilities for Bedrock batch and file operations.
    Provides shared functionality to reduce code duplication between batches and files.
    c                 (    ddl m}  |       | _        y )Nr   )
BaseAWSLLM)base_aws_llmr=  	_base_aws)r   r=  s     r   r   zCommonBatchFilesUtils.__init__  s    ,#r   r   r   c                 2    |j                  d      r|dd S |S )a  
        Extract the actual Bedrock model ID from LiteLLM model name.

        Args:
            model: LiteLLM model name (e.g., "bedrock/anthropic.claude-3-sonnet-20240229-v1:0")

        Returns:
            Bedrock model ID (e.g., "anthropic.claude-3-sonnet-20240229-v1:0")
        r      N)rg   )r   r   s     r   'get_bedrock_model_id_from_litellm_modelz=CommonBatchFilesUtils.get_bedrock_model_id_from_litellm_model  s#     J'9r   s3_uric                     |j                  d      st        d|       |dd j                  dd      }t        |      dk7  rt        d|       |d   |d   fS )	z
        Parse S3 URI into bucket and key components.

        Args:
            s3_uri: S3 URI (e.g., "s3://bucket/key/path")

        Returns:
            Tuple of (bucket, key)

        Raises:
            ValueError: If URI format is invalid
        zs3://zInvalid S3 URI format:    Nr   r      r   )rg   
ValueErrorr   r   )r   rC  s3_partss      r   parse_s3_uriz"CommonBatchFilesUtils.parse_s3_uri  so       )6vh?@@!":##C+x=A6vh?@@{HQK''r   r$   c                 H   d|v r|d   r| j                  |d         S 	 | j                  |      \  }}|j                  d      rP|dd }|j                  d      }t	        |      dkD  r,dj                  |dd       }|j                  d      r|dd	 }|S y
# t        $ r Y y
w xY w)z
        Extract model ID from S3 file path.

        The Bedrock file transformation creates S3 objects with the model name embedded:
        Format: s3://bucket/litellm-bedrock-files-{model}-{uuid}.jsonl
        r   zlitellm-bedrock-files-   N-r   r   z.jsonliz)anthropic.claude-3-5-sonnet-20240620-v1:0)rB  rI  rg   r   r   joinendswith	Exception)r   rC  r$   bucket
object_key
model_partparts
model_names           r   extract_model_from_s3_file_pathz5CommonBatchFilesUtils.extract_model_from_s3_file_path  s     o%/'*B??( 	!%!2!26!:FJ $$%=>'_
"((-u:>!$%*!5J!**84%/_
%%
 ;	  	 ;		s   A4B 	B! B!r`   datar	   rb   methodc                 ,   	 ddl m} ddlm} | j
                  j                  |d      }| j
                  j                  |j                  d      |j                  d      |j                  d	      ||j                  d
      |j                  d      |j                  d      |j                  d      |j                  d      	      }	|j                         }
|
dk(  rd}i }n-t        |t              rddl} |j                  |      }n|}ddi} ||	||      } ||
|||      }|j                  |       |j                         }t        |j                         t        |t"              r|j%                  d      fS |fS # t        $ r t	        d      w xY w)a  
        Sign AWS request using Signature Version 4.

        Args:
            service_name: AWS service name ("bedrock" or "s3")
            data: Request data (string or dict)
            endpoint_url: Full endpoint URL
            optional_params: Optional parameters containing AWS credentials
            method: HTTP method (default: POST)

        Returns:
            Tuple of (signed_headers, signed_data)
        r   )	SigV4Auth)
AWSRequestz7Missing boto3 to call bedrock. Run 'pip install boto3'.r"  )r$   r   rD   rE   ra   rG   rH   rI   rJ   aws_sts_endpoint)	rD   rE   ra   r!   rG   rH   rI   rJ   r[  GETNzContent-Typezapplication/json)rW  urlrV  r<   zutf-8)botocore.authrY  botocore.awsrequestrZ  ImportErrorr?  _get_aws_region_nameget_credentialsr)  upperrm   r8   r*  r+  add_authpreparer<   r9   encode)r   r`   rV  rb   r$   rW  rY  rZ  r!   credentialsmethod_upperrequest_datar<   r*  sigv4r>   preppeds                    r   sign_aws_requestz&CommonBatchFilesUtils.sign_aws_request  s   *	Y/6
 ..==+2 > 
 nn44-112EF"1"5"56M"N-112EF+,001CD,001CD)--o>#2#6#67O#P,001CD 5 

 ||~5 LG$%)tzz$/#%'9:G +|_E\g
 	w//# !,, (
 	
 	
 	
W  	YWXX	Ys   E> >Fr   c                 X    ddl m} t        |j                               dd }| d| }|S )u]  
        Generate a unique job name for AWS services.
        AWS services often have length limits, so this creates a concise name.

        Args:
            model: Model name to include in the job name
            prefix: Prefix for the job name

        Returns:
            Unique job name (≤ 63 characters for Bedrock compatibility)
        r   uuidNrA  z-batch-)litellm._uuidro  r9   uuid4)r   r   r   ro  	unique_idjob_names         r   generate_unique_job_namez.CommonBatchFilesUtils.generate_unique_job_nameX  s5     	'

%bq)	 XWYK0r   r   bucket_env_var
key_prefixc                 4   ddl }ddlm} |j                  d      xs( |j                  d      xs t	        j
                  |      }|st        d| d      t        |j                               }t        |j                               dd }	| d| d|	 }
||
fS )	al  
        Get S3 bucket and generate a unique key from configuration.

        Args:
            litellm_params: LiteLLM parameters
            optional_params: Optional parameters
            bucket_env_var: Environment variable name for bucket
            key_prefix: Prefix for the S3 key

        Returns:
            Tuple of (bucket_name, object_key)
        r   Nrn  s3_bucket_namez>S3 bucket name is required. Set 's3_bucket_name' parameter or z env varrA  rL  )
timerp  ro  r)  rh   ri   rG  intr9   rq  )r   r   r$   ru  rv  ry  ro  bucket_name	timestamprr  rQ  s              r   !get_s3_bucket_and_key_from_configz7CommonBatchFilesUtils.get_s3_bucket_and_key_from_configm  s    & 	& /0 )""#34)yy( 	
 PQ_P``hi 
 		$	

%bq)	"|1YKq<
J&&r   r0  rR   r<   c                     t        |||      S )z3
        Get Bedrock-specific error class.
        )rR   rQ   r<   )r   )r   r0  rR   r<   s       r   get_error_classz%CommonBatchFilesUtils.get_error_class  s     #]G
 	
r   N)POST)rj   )AWS_S3_BUCKET_NAMErj   )r   r   r   r3  r   r9   rB  tuplerI  r8   rU  r   rl  rt  r}  rz  r   rq   Headersr   r  r   r   r   r;  r;    s4   
&S S (3 (5 (,$;$;,0$;	$;X H
H
 C::;H
 	H

 H
 H
 
H
Tc 3 s 2 3#'''' '' 	''
 '' 
''R
 
/2
=B4CV=W
	
r   r;  )NNNNNNNNNNN)'r3  r*  rh   typingr   r   r   r   r   r   litellm.types.llms.bedrockr	   rq   rj   7litellm.llms.base_llm.anthropic_messages.transformationr
    litellm.llms.base_llm.base_utilsr   )litellm.llms.base_llm.chat.transformationr   litellm.secret_managers.mainr   litellm.types.llms.openair   r   r   rC   r9   r8   rn   rr   r   r   r   r   r  r  r9  r;  r   r   r   <module>r     s    	 F FD   > F 3:	# 	H
 H
V '++/%)26&*&*#',0$(59t}t $C=t c]	t
 #+3-t smt smt C=t %SMt D>t eE5==012tn# #4c c $L' L^8,3 8,v>" >"BGT Gd3i G,f
 f
r   