
    i8(                    *   U 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 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#m$Z$ ddl%m&Z' ddl(m)Z)m*Z*m+Z+m,Z, ddl- ddl.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5m6Z6m7Z7 ddl4m8Z9 ddl4m:Z:m;Z;m<Z<m=Z= ddl>m?Z?m@Z@ ddlAmBZB ddlCmDZDm&Z&mEZE daF edd      ZGeeHd<   ddlImJZJ ddlKmLZL  eJ       ZM G d d      ZN	 	 	 	 d9d e
e)   d!eOd"ePd#eOd$eOd%eQd&ed'eRd(e
eR   d)e
ej                     d*eTfd+ZU	 	 	 	 d9d e
e*   d!eOd"ePd#eOd,e
eV   d$eOd%eQd&ed'eRd(e
eR   d)e
ej                     d*eTfd-ZW G d. d/eB      ZXd0 ZY G d1 d2      ZZ G d3 d4eZ      Z[ G d5 d6eZ      Z\ G d7 d8      Z]y):z
TODO: DELETE FILE. Bedrock LLM is no longer used. Goto `litellm/llms/bedrock/chat/invoke_transformations/base_invoke_transformation.py`
    N)partial)AsyncIteratorCallableIteratorOptionalTuplecastget_args)verbose_logger)uuid)InMemoryCache)RESPONSE_FORMAT_TOOL_NAME)map_finish_reason)Logging)track_llm_api_timing)cohere_message_pt construct_tool_use_system_promptcontains_tagcustom_promptextract_between_tagsparse_xml_paramsprompt_factory)ModelResponseIterator)AsyncHTTPHandlerHTTPHandler_get_httpx_clientget_async_httpx_client)*)#ChatCompletionRedactedThinkingBlockChatCompletionThinkingBlockChatCompletionToolCallChunk#ChatCompletionToolCallFunctionChunkChatCompletionUsageBlock)ChatCompletionMessageToolCallChoicesDelta)GenericStreamingChunk)ModelResponseModelResponseStreamStreamingChoicesUsage)CustomStreamWrapper
get_secret   )
BaseAWSLLM)BedrockErrorr   get_bedrock_tool_name2   iX  )max_size_in_memorydefault_ttlbedrock_tool_name_mappings)AmazonConverseConfig)AmazonBedrockOpenAIConfigc                   (   e Zd ZU dZdZeee      ed<   dZ	ee
   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed<   dZee   ed	<   dZee   ed
<   dZee   ed<   dZee   ed<   dZee   ed<   dZee
   ed<   dZeee      ed<   dZee
   ed<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 dde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   dee   dee
   dee   dee
   ddfdZed        Zdee   fdZdededefdZy)AmazonCohereChatConfigzv
    Reference - https://docs.aws.amazon.com/bedrock/latest/userguide/model-parameters-cohere-command-r-plus.html
    N	documentssearch_queries_onlypreamble
max_tokenstemperaturepkprompt_truncationfrequency_penaltypresence_penaltyseedreturn_promptstop_sequencesraw_promptingreturnc                     t               j                         }|j                         D ]%  \  }}|dk7  s|t        | j                  ||       ' y )Nself)localscopyitemssetattr	__class__)rJ   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   locals_keyvalues                     y/Users/manta/Documents/Projects/TheRoad-I1/.venv/lib/python3.12/site-packages/litellm/llms/bedrock/chat/invoke_handler.py__init__zAmazonCohereChatConfig.__init__h   sA    " (--/!--/JCf}!2U3 *    c                     | j                   j                         D ci c]O  \  }}|j                  d      s9t        |t        j
                  t        j                  t        t        f      s|||Q c}}S c c}}w )N__)	__dict__rM   
startswith
isinstancetypesFunctionTypeBuiltinFunctionTypeclassmethodstaticmethod)clsr@   vs      rS   
get_configz!AmazonCohereChatConfig.get_config~   sy     **,
,1<<%&&-- 	  qD,
 	
 
s   AA6c                 
    g dS )N)r=   max_completion_tokensstreamstopr>   top_prB   rC   rD   rf   toolstool_choice rJ   s    rS   get_supported_openai_paramsz2AmazonCohereChatConfig.get_supported_openai_params   s    
 	
rU   non_default_paramsoptional_paramsc                     |j                         D ]i  \  }}|dk(  s|dk(  r||d<   |dk(  r||d<   |dk(  rt        |t              r|g}||d<   |dk(  r||d<   |dk(  r||d<   |d	k(  r||d	<   |d
k(  r||d
<   	 ||d<   k |S )Nr=   rd   re   rf   rF   r>   rg   r?   rB   rC   rD   )rM   rZ   str)rJ   rm   rn   paramrR   s        rS   map_openai_paramsz(AmazonCohereChatConfig.map_openai_params   s     /446LE5$1H(H05- ,1)eS)"GE49 01%16.',$++7< 34**6; 23*/'% 7& rU   )NNNNNNNNNNNNNN) __name__
__module____qualname____doc__r:   r   ListDocument__annotations__r;   boolr<   rp   r=   intr>   floatr?   r@   rA   rB   rC   rD   rE   rF   rG   rT   r^   rb   rl   dictrr   rj   rU   rS   r9   r9   T   s    +/IxX'.*.$."Hhsm" $J$#'K%'AxAx'+x}+)-x-(,huo,D(3-$(M8D>(*.NHT#Y'.$(M8D>( /3.2"&$('+!!+/-1,0"(,(,(,4DN+4 &d^4 3-	4
 SM4 e_4 E?4 E?4 $C=4 $E?4 #5/4 sm4  ~4 !4  ~4  
!4, 
 
"
T#Y 
 "&9=	rU   r9   clientapi_baseheadersdatamodelmessageslogging_objfake_stream	json_modebedrock_invoke_providerstream_chunk_sizec                   K   	 | kt        t        j                  j                  |rD|j                  r8|j                  j                  d      rd|j                  j                  d      ind       } | j                  |||| |       d {   }|j                  dk7  r!t        |j                  |j                        |r[t        j                         j                  ||t        j                         d|i d||t        j                  
      }t        ||	      }n|	d
k(  r0t        |d|      }|j!                  |j!                  |
            }nb|	dk(  r/t#        |d      }|j!                  |j!                  |
            }n.t%        ||      }|j!                  |j!                  |
            }|j'                  |ddd|i       |S 7 B# t(        j*                  $ r<}|j,                  j                  }t        ||j,                  j                        d }~wt(        j.                  $ r t        dd      t0        $ r}t        dt3        |            d }~ww xY ww)N
ssl_verify)llm_providerparamsr   r   re   r      status_codemessageT 
r   responsemodel_responsere   r   rn   api_keyr   r   encodingr   r   	anthropicFr   sync_streamr   
chunk_sizedeepseek_r1r   r   r   r   first stream response receivedcomplete_input_dictinputr   original_responseadditional_args  Timeout error occurred.  )r   litellmLlmProvidersBEDROCKlitellm_paramsgetpostr   r0   textr6   _transform_responser(   r   MockResponseIterator"AmazonAnthropicClaudeStreamDecoderaiter_bytesAmazonDeepSeekR1StreamDecoderAWSEventStreamDecoder	post_callhttpxHTTPStatusErrorr   TimeoutException	Exceptionrp   )r~   r   r   r   r   r   r   r   r   r   r   r   r   completion_streamdecodererr
error_codees                     rS   	make_callr      s~    N<>+$1199....22<@ %k&@&@&D&D\&RS F  "?# % 
 
 3&8+?+?WW ,,.BB!&446' "! )) C   &:-& %3-O!#.G
 !( 3 3$$0A$B! %53!G !( 3 3$$0A$B! ,%9MG ' 3 3$$0A$B!
 	>2D9	 	 	
 ! y
z    N\\--
z3<<;L;LMM!! Os4MNN <sCF;;<sH   I#BG GE G I#G I #7H+I II  I#signed_json_bodyc                    	 | Rt        |rD|j                  r8|j                  j                  d      rd|j                  j                  d      ind       } | j                  ||||n|| |      }|j                  dk7  r!t        |j                  |j                        |r[t        j                         j                  ||t        j                         d|i d||t        j                  
      }t        ||		      }n|
d
k(  r0t        |d|	      }|j                  |j                  |            }nb|
dk(  r/t        |d      }|j                  |j                  |            }n.t!        ||	      }|j                  |j                  |            }|j#                  |ddd|i       |S # t$        j&                  $ r<}|j(                  j                  }t        ||j(                  j                        d }~wt$        j*                  $ r t        dd      t,        $ r}t        dt/        |            d }~ww xY w)Nr   )r   r   r   r   Tr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r0   r   r   r6   r   r(   r   r   r   
iter_bytesr   r   r   r   r   r   r   r   rp   )r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                      rS   make_sync_callr     sf   M<>&....22<@ %k&@&@&D&D\&RS F ;;%5%A!t"?#  
 3&8+?+?WW ,,.BB!&446' "! )) C   &:-& %3-O #.G
 !( 2 2##/@#A! %53 G !( 2 2##/@#A! ,%9MG ' 2 2##/@#A!
 	>2D9	 	 	
 !    N\\--
z3<<;L;LMM!! Os4MNN <sCF;;<s$   F+F. .H>7G88+H>#H99H>c                   p    e Zd ZdZd fdZededefd       Zde	ee
e   f   fdZdedej                  d	ed
e
e   dedededeeef   dedeeef   fdZ	 	 	 	 d dedede
e   ded	ededededede
eeej0                  f      de
e   de
eeef      deeef   fdZddi dfdededed	ededede
eeej0                  f      dedede
e   deeef   fdZ e       ddi ddfdededed	ededede
eeej0                  f      dedede
e   dedefd       Zedede
e jB                     fd       Z" xZ#S )!
BedrockLLMa  
    Example call

    ```
    curl --location --request POST 'https://bedrock-runtime.{aws_region_name}.amazonaws.com/model/{bedrock_model_name}/invoke'         --header 'Content-Type: application/json'         --header 'Accept: application/json'         --user "$AWS_ACCESS_KEY_ID":"$AWS_SECRET_ACCESS_KEY"         --aws-sigv4 "aws:amz:us-east-1:bedrock"         --data-raw '{
        "prompt": "Hi",
        "temperature": 0,
        "p": 0.9,
        "max_tokens": 4096
        }'
    ```
    rH   Nc                 "    t         |           y N)superrT   )rJ   rO   s    rS   rT   zBedrockLLM.__init__  s    rU   r   c                 T    | j                         g d}t        fd|D              S )aZ  
        Check if the model uses the Claude Messages API (Claude 3+).

        Handles:
        - Regional prefixes: eu.anthropic.claude-*, us.anthropic.claude-*
        - Claude 3 models: claude-3-haiku, claude-3-sonnet, claude-3-opus, claude-3-5-*, claude-3-7-*
        - Claude 4 models: claude-opus-4, claude-sonnet-4, claude-haiku-4
        )zclaude-3zclaude-opus-4zclaude-sonnet-4zclaude-haiku-4c              3   &   K   | ]  }|v  
 y wr   rj   ).0	indicatormodel_lowers     rS   	<genexpr>z:BedrockLLM.is_claude_messages_api_model.<locals>.<genexpr>  s     U=T	9+=Ts   )lowerany)r   messages_api_indicatorsr   s     @rS   is_claude_messages_api_modelz'BedrockLLM.is_claude_messages_api_model  s,     kkm#
 U=TUUUrU   c                    d}d }||v r;||   }t        |d   |j                  dd      |j                  dd      |      }|d fS |dk(  s|dk(  rt        ||d	      }||fS |d
k(  rt        ||d	      }||fS |dk(  s|dk(  rt        ||d	      }||fS |dk(  rd}||fS |dk(  rt        |      \  }}||fS d}|D ]+  }d|v r|d   dk(  r
||d    z  }||d    z  }#||d    z  }- ||fS )Nr   rolesinitial_prompt_valuefinal_prompt_value)	role_dictr   r   r   r   amazonbedrockr   r   custom_llm_providermistralmetallamaopenaicoherer   roleusercontent)r   r   r   r   )	rJ   r   r   providercustom_prompt_dictpromptchat_historymodel_prompt_detailsr   s	            rS   convert_messages_to_promptz%BedrockLLM.convert_messages_to_prompt  s    '+&&#5e#< ".w7%9%=%=*B& $8#;#;<PRT#U!F 4<{"h(&:#hIF6 |##1 "#hIF. |##) 8w#6#hIF& |##! ! F |## !#4h#G FL |## F#W$v&0WY%7$89WY%7$89!3 45F $ |##rU   r   r   re   r   rn   r   r   r   c           	         | j                  |      }|j                  |	||j                  d|i        |
d|j                          	 |j                         }d }	 |dk(  rCd|v r|d   }nud|v rp|d   d	   d   }t        |d   d	   d
         |j                  d	   _        n=|dk(  r| j                  |      ri }d}d|v r*d}|d   D ]   }|d   j                  dd       ||d   d   <   " |j                  d      d	   j                  dd       }|t        d|      rt        d|      d	   }t        d|      d	   j                         }d| d}t        ||j                  |d             }t        j                   dt#        j$                          d|t        j'                  |      ddgd       }||j                  d	   _        ||j*                  d<   |du r||du r |
d       t-               }t/        |j                  d	   d
d      |j                  d	   _        t        j0                  j3                         }|j                  d	   j4                  |_        g } |
dt7        |j                  d	                  |
d t7        |              t9        |j                  d	   t        j:                        r2t/        |j                  d	   j(                  d!d       	 t9        |j                  d	   j(                  j<                  t>              rO|j                  d	   j(                  j<                  D ])  }i |jA                         d"d	i}|jC                  |       + tE        t/        |j                  d	   j(                  dd       |j                  d	   j(                  jF                  |#      }||_$        |g|_        tK        |$      } |
d%       t        jL                  ||d&|'      S t        |j                  d(d)            |j                  d	   _        t        jN                  |d*   d+   |d*   d,   |d*   d+   |d*   d,   z   -      }tQ        |d*|       n|d.   }|d(   |j                  d	   _        nc|d/k(  r4|j                  d0      d	   j                  d1      j                  d      }n*|d2k(  s|d3k(  r|d4   }n|d5k(  rd6|v rtS        |d6         d	kD  r|d6   d	   }d7|v r|d7   j                  d      }n	d|v r|d   }d
|v r t        |d
         |j                  d	   _        d*|v r|d*   }t        jN                  |j                  d8d	      |j                  d9d	      |j                  d:d	      -      }tQ        |d*|       nQ|d;k(  r)|d<   d	   d   }|d<   d	   d(   |j                  d	   _        n#|j                  d=      d	   j                  d>      }	 |ktS        |      d	kD  r]tY        |j                  d	   d7      rDt/        |j                  d	   j(                  d!d       	 ||j                  d	   j(                  _-        nItY        |j                  d	   d7      r&t/        |j                  d	   j(                  d!d       	 n
t	               |r|d/k(  rt-               }|j                  d	   j                  |j                  d	   _        t        j0                  j3                         }|j                  d	   j4                  |_        t        j0                  jE                  t/        |j                  d	   j(                  dd       |j                  d	   j(                  jF                  A      }||_$        |g|_        tK        |$      }!tM        |!|d&|'      S tY        |d*      rt/        |d*d       |j^                  j                  dBd       }"|j^                  j                  dCd       }#ta        |"xs t        jb                  |	D            }$ta        |#xs8 t        jb                  |j                  d	   j(                  jZ                  dE            }%ta        te        jd                               |_3        ||_4        tO        |$|%|$|%z   -      }tQ        |d*|       |S ta        te        jd                               |_3        ||_4        |S # t        $ r t        |j                  d      w xY w# t        $ r5} t        d?jU                  |j                  tW        |             d      d } ~ ww xY w# t        $ r5} t        d@jU                  |tW        |             |j\                        d } ~ ww xY w)FNr   r   zraw model_response: i  )r   r   r   r   generationsr   finish_reasonr   Frh   Tfunction
parametersnamer   invoke	tool_namez<invoke>z	</invoke>)json_schemacall_r   	arguments)idtyper   )
tool_callsr   r   z5INSIDE BEDROCK STREAMING TOOL CALLING CONDITION BLOCKrf   z#type of model_response.choices[0]: ztype of streaming_choice: r   index)r   r   r   )r   zMReturns anthropic CustomStreamWrapper with 'cached_response' streaming objectcached_responser   r   r   r   stop_reasonr   usageinput_tokensoutput_tokensprompt_tokenscompletion_tokenstotal_tokens
completionai21completionsr   r   r   
generationr   choicesr   r  r  r  r   outputsresults
outputTextz&Error processing={}, Received error={}z(Error parsing received text={}.
Error-{})r   r   z x-amzn-bedrock-input-token-countz!x-amzn-bedrock-output-token-countr   )r   count_response_tokens)5get_bedrock_invoke_providerr   r   jsonr   r0   r   r  r   r   r   r   r   stripr   r   Messager   uuid4dumpsr   _hidden_paramsr)   getattrutilsr*   r   r   rZ   r%   r   listr}   appendr&   r   deltar   r,   r+   rN   lenformatrp   hasattrr   r   r   r{   token_countertimecreatedr   )&rJ   r   r   r   re   r   rn   r   r   r   print_verboser   r   completion_responser  json_schemas_is_function_calltoolfunction_namefunction_arguments_strfunction_arguments_messagestreaming_model_responsestreaming_choice_tool_calls	tool_call
_tool_call	delta_objr   _usagechoicer   r   mribedrock_input_tokensbedrock_output_tokensr  r  s&                                         rS   process_responsezBedrockLLM.process_response  sB
    33E:&mm2D9	 	 	
 	,X]]O<=	G"*--/ %)
l	8#00!4V!<J"&99!4]!CA!Fv!NJ>O+M:1=oN?N**1-; [(44U;)+L(-%/1,0)$3G$<DEI *F!c,5 )j)9&)AB %= "5!8!8!CA!F!J!J6SW!XJ!-, *3 )=[*(UVW(X1E$j22"UW / ''=&>iH / .>2(4(8(8 -t).* $+?? -2$**,*@,60=59ZZ@R5S1&!"	( %)$ =E..q19 ' '55/ *T1"."dN%S 4G3H0LS*2215M088;I ,3==+I+I+K(1?1G1G1J1P1P(.&(%A$~G]G]^_G`BaAbc &8>N9O8PQ &n&<&<Q&?Q& . 6 6q 9 A A<QU %) *.8 . 6 6q 9 A A L Ld/ 2@1G1G$%2"")'**25I 2RINN4D1Qgq1QJ$/$6$6z$B	25
 ).(/$2$:$:1$=$E$EyRV)" &4%;%;A%>%F%F%K%K+6)I 6?,2@P?Q4<0E/G1- * o $+#>#>2C&+4E,7	$  ?P+//rB?N**1-; %]]&9'&B>&R*=g*F*W%8%A.%Q-g6G&HF NGV<!4\!BJ>Q%?N**1-; V#'++M:1=AA&IMMfU  V#x7':0>
X% !44/	:;a?0;A>F F*%+I%6%:%:9%E
6)%+F^
 '&0BS"?3C..q1?
 "55 3G <!(*/))OQ*G.3ii8KQ.O).>1)E"
  @Y&0;A>vF
:M;;";$&&q)7 144Y?BFF|T
	&
Oa'N2215yAN2215==|TR =G&&q)119..q19=N2215==|TR k! h&(':'<$@N@V@VAm %,,Q/=  '}}==?%3%;%;A%>%D%D"++ 6 6q 9 A A9dS#++A.66;; , I &/"0@/A$,'7OPC&"%$5'	  0~w5=#+#3#3#7#72D$  %-$4$4$8$83T%!  $P(=(=x(PM !$% (('//2::BB*.! &)%5N"#(N +"3*->>E
 NGU3  &)%5N"#(N O  	Gx}}#FF	GT  	@GGMM3q6  	 	2  	CJJA %00	 	sE   	c Nc0 1G0c0 "B6d1 !c-0	d.90d))d.1	e/:0e**e/r   r   r"  acompletiontimeoutextra_headersr~   c                    	 ddl m} |	j                  dd       }|	j                  dd      }| j	                  |      }| j                  |||	      }|	j                  dd       }|	j                  d	d       }|	j                  d
d       }|	j                  dd       }|	j                  dd       }|	j                  dd       }|	j                  dd       }|	j                  dd       }|	j                  dd       }|	j                  dd       }|	j                  dd       }|Dt        dd       } | t        | t              r| }t        dd       }!|!t        |!t              r|!}|d}| j                  ||||||||||
      }"| j                  |||      \  }#}$||du r|dk7  r|# d| d}#|$ d| d}$n|# d| d}#|$ d| d}$| j                  ||||      \  }%}&t        j                  |	      }'i }(|dk(  r|j                  d      rht        j                          j#                         })|)j%                         D ]  \  }*}+|*|'vs|+|'|*<    d|%i|'},|&|&|,d <   t&        j)                  |,      }-nGt        j*                  j#                         })|)j%                         D ]  \  }*}+|*|'vs|+|'|*<    |du rd|'d<   t&        j)                  d!|%i|'      }-n|d"k(  r| j-                  |      rXg }.g }/t/        |      D ]3  \  }0}1|1d#   d$k(  s|/j1                  |1d%          |.j1                  |0       5 t3        |.      dkD  r6d&j5                  |/      |'d$<   t/        |      D 23cg c]  \  }2}3|2|.vs|3 }}2}3t7        ||d'(      }t        j8                  j#                         })|)j%                         D ]  \  }*}+|*|'vs|+|'|*<    d)|'v rbd}4|'d)   D ]   }5|5d*   j;                  d+d       |(|5d*   d,   <   " t=        |'d)   -      }6|'j;                  d$d&      |6z   |'d$<   |'j                  d)       t&        j)                  d.|i|'      }-nst        j>                  j#                         })|)j%                         D ]  \  }*}+|*|'vs|+|'|*<    t&        j)                  d!|%i|'      }-n|dk(  r[t        j@                  j#                         })|)j%                         D ]  \  }*}+|*|'vs|+|'|*<    t&        j)                  d!|%i|'      }-n|d/k(  r[t        jB                  j#                         })|)j%                         D ]  \  }*}+|*|'vs|+|'|*<    t&        j)                  d!|%i|'      }-nX|d0k(  rYt        jD                  j#                         })|)j%                         D ]  \  }*}+|*|'vs|+|'|*<    t&        j)                  |%|'d1      }-n|d2k(  s|d3k(  rZt        jF                  j#                         })|)j%                         D ]  \  }*}+|*|'vs|+|'|*<    t&        j)                  d!|%i|'      }-n|d4k(  r^tI               }7|7jK                  |5      }8|'j%                         D *+ci c]  \  }*}+|*|8v s|*|+ }9}*}+t&        j)                  d.|i|9      }-n3|jM                  |d6d7|'i8       tO        d9d:jQ                  ||      ;      d<d=i}:|d<d=i|}:| jS                  |"|||#|-|:>      };|jM                  |d6|-|$|;jT                  d?8       |
rpt        |tV              rd }|du r0|dk7  r+| jY                  |||-|$|||||	d|||;jT                  |||@      S | j[                  |||-|$|||||	||||;jT                  ||A      S |t        |t\              rOi }<|:t        |t^              st        |t`              rtc        jd                  |      }||<dB<   tg        |<      | _4        n|| _4        ||du r|dk7  r| jh                  jk                  |$|;jT                  |-||C      }=|=jl                  dDk7  r.tO        |=jl                  t        |=jo                               ;      tq        |5      }>|>js                  |=js                  |E            }?tu        |?|dF|G      }@|jw                  |d6|@d7|-iH       |@S 	 | jh                  jk                  |$ty        |;jT                        |-|I      }=|=j{                          | j                  ||=||||	d6|-|||L      S # t        $ r t        d      w xY wc c}3}2w c c}+}*w # tb        j|                  $ r<}AAj~                  jl                  }BtO        |B|Aj~                  j                  ;      d }A~Awtb        j                  $ r tO        dJdK;      w xY w)MNr   )Credentialsz7Missing boto3 to call bedrock. Run 'pip install boto3'.re   r      )r   r   rn   aws_secret_access_keyaws_access_key_idaws_session_tokenaws_region_nameaws_role_nameaws_session_nameaws_profile_nameaws_bedrock_runtime_endpointaws_web_identity_tokenaws_sts_endpointr   AWS_REGION_NAME
AWS_REGIONz	us-west-2)
r>  r=  r?  r@  rB  rC  rA  rE  rF  r   )r   rD  r@  Tr  z/model/z/invoke-with-response-streamz/invoker   zcohere.command-rr   r   r   r   r   systemr   
anthropic_xmlr   rh   r   r   r   )rh   r   r   r   )	inputTexttextGenerationConfigr   r   r   r   r   r   )r   r   r   i  zqBedrock Invoke HTTPX: Unknown provider={}, model={}. Try calling via converse route - `bedrock/converse/<model>`.r   zContent-Typezapplication/json)credentialsr@  r9  endpoint_urlr   r   )r   r   r   )r   r   r   r   r   r"  r   r   rn   re   r   	logger_fnr   r8  r~   r   )r   r   r   r   r   r"  r   r   rn   re   r   rQ  r   r8  r~   r8  )urlr   r   re   r   r   r   r   r   r   )rR  r   r   r   r   r   )r   r   r   re   r   rn   r   r   r   r"  r   )Cbotocore.credentialsr;  ImportErrorpopr  get_bedrock_model_idr-   rZ   rp   get_credentialsget_runtime_endpointr   rL   deepcopyrY   r   r9   rb   rM   r  r  AmazonCohereConfigr   	enumerater  r  joinr   AmazonAnthropicClaudeConfigr   r   AmazonAnthropicConfigAmazonAI21ConfigAmazonMistralConfigAmazonTitanConfigAmazonLlamaConfigr7   rl   pre_callr0   r  get_request_headersr   r   async_streamingasync_completionr   r|   r{   r   Timeoutr   r~   r   r   readr   r   r,   r   r}   raise_for_statusr   r   r   r   r6  )CrJ   r   r   r   r   r   r"  r   r   rn   r7  r8  r   rQ  r9  r~   r;  re   r   r   modelIdr=  r>  r?  r@  rA  rB  rC  rD  rE  rF  r   litellm_aws_region_namestandard_aws_region_namerO  rP  proxy_endpoint_urlr   r   inference_paramsr$  configr@   ra   _datar   system_prompt_idxsystem_messagesidxr   jir%  r&  tool_calling_system_promptopenai_configsupported_paramsfiltered_paramsr   prepped_paramsr   r   r   streaming_responser   r   sC                                                                      rS   r  zBedrockLLM.completion  sa   $	Y8
 !$$Xt4+//0CTJ33E:+++ , 
 !0 3 34KT R+//0CTJ+//0CTJ)--.?F'++OTB*../A4H*../A4H'6':':*D(
$ "1!4!45Mt!T*../A4H$((t<
 "&01BD&I#&2z'8 #:'1,'E$'3
(#9 #;&"-#'#7#7/"7/+--'#9-! $8 $
 ,0+D+D)E+ ,E ,
(( 6T>x67I*^77);WXL%&ggY6RS  +^77)7CL$6#7wwiw!O#>>8X'9 
  ==9x 23 779DDF"LLNDAq!11./(+	 +
 #F?.>?+,8E.)zz%( !33>>@"LLNDAq!11./(+	 +
 T>  %  zz8V"H7G"HI$007/1!-/$-h$7LCv(2'..wy/AB)005 %8 ()A-15?1K$X.&/&9 &9daQFW=W&9    *( !<<GGI"LLNDAq!11./(+	 + ..(,% 0 9AEjAQAUAU($BT*%5f%=> !: 2R.w72. ),,Xt<45 %X. %((1zz:x"L;K"LM !66AAC"LLNDAq!11./(+	 +
 zz8V"H7G"HI--88:F1--*+$Q'	 ' ::xD3CDED"00;;=F1--*+$Q'	 ' ::xD3CDED!..99;F1--*+$Q'	 ' ::!',<D 8w#6..99;F1--*+$Q'	 '
 ::xD3CDED! 67M,HHuHU "2!7!7!9!9AQBR=R1!9  
 ::z8GGHD   )+;! !   L  S  Se  "#56$%'9K]KG**#+'% + 
 	'+."?? 	 	
 &+.~(f"4++%/#1"/% +$3#1'#OO#!&7! ,  & ((!+-+!' /-# )  $ >Z0@AG"gu-GS1I#mmG4G%,	"+G4DK DK6T>x67I{{''&' ( H ##s*" ( 4 4c(--/>R  ,%8G ' 2 2##/@#A! "5"3$-'	" !!"4!6 =	 "  &%	S{{''&W__-'	 ( H %%' $$)#+' % 
 	
K  	YWXX	Yp tZ $$ 	R11J:s||?P?PQQ%% 	S38QRR	Ss<   c3 d%dddAd 3df*7e!!$fc                 z  K   |di }|:t        |t              st        |t              rt        j                  |      }||d<   t        |t        j                  j                        }n|}	 |j                  |||||	       d {   }|j                          | j#                  |||t        |
t$              r|
nd|	d|||||	      S 7 B# t        j                  $ r<}|j                  j                  }t        ||j                  j                        d }~wt        j                   $ r t        dd      w xY ww)
Nr8  )r   r   )r   r   r8  r   r   r   r   Fr   )r   r   r   re   r   r   r   r   r"  rn   r   )rZ   r|   r{   r   rg  r   r   r   r   r   ri  r   r   r   r0   r   r   r6  rz   )rJ   r   r   r   r   r"  r   r8  r   r   re   rn   r   rQ  r   r~   r{  r   r   r   s                       rS   rf  zBedrockLLM.async_completion  sB    $ >G"gu-GS1I#mmG4G%,	"+7I]I]IeIefFF	S#[[' )  H %%' $$)'565#'+ % 
 	
 $$ 	R11J:s||?P?PQQ%% 	S38QRR	Ss<   A)D;,C
 CC
 .D;C
 
D87D$D88D;r<  r   c                 h   K   t        d t        t        |||||||	d|v rdnd|
      |d|	      }|S w)Nr  TF)	r~   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   )r,   r   r   )rJ   r   r   r   r   r"  r   r8  r   r   re   rn   r   rQ  r   r~   r   r|  s                     rS   re  zBedrockLLM.async_streaming  sX     , 1"!!'$*h$6DE"3  )#!
$ "!s   02
model_pathc                     | j                  d      }t        |      dk\  r:|d   }|t        t        j                        v rt        t        j                  |      S y)at  
        Helper function to get the provider from a model path with format: provider/model-name

        Args:
            model_path (str): The model path (e.g., 'llama/arn:aws:bedrock:us-east-1:086734376398:imported-model/r4c4kewx2s0n' or 'anthropic/model-name')

        Returns:
            Optional[str]: The provider name, or None if no valid provider found
        /   r   N)splitr  r
   r    BEDROCK_INVOKE_PROVIDERS_LITERALr	   )r  partsr   s      rS   _get_provider_from_model_pathz(BedrockLLM._get_provider_from_model_path  sQ       %u:?QxH8G$L$LMMGDDhOOrU   )rH   N)NNNN)$rs   rt   ru   rv   rT   r_   rp   rz   r   r   r   r  r   r   Responser(   r   r}   Unionrw   r,   r6  r   r|   rg  r   r   r  rf  r   r{   re  r   r  r  __classcell__rO   s   @rS   r   r   u  sA   $ VC VD V V,0$	sHTN"	#0$dbb ..b &	b
 b b b b D#Ib b 
}11	2bb	 (,AE!E
E
 E
 3-	E

 !E
 &E
  E
 E
 E
 E
 %u}} 456E
  ~E
  /<=>!E
" 
}11	2#E
h -1!7
7
 7
 	7

 &7
  7
 7
 %u}} 4567
 7
 7
  )*!7
" 
}11	2#7
r  -1!%#'"'" '" 	'"
 &'"  '" '" %u}} 456'" '" '"  )*!'"" #'"$ 
%'" '"R 	'::	; rU   r   c                      t         >ddlm}  ddlm}  |        }|j                  dd      } ||      }|j                  d      a t         S )Nr   )Loader)ServiceModelzbedrock-runtimez	service-2ResponseStream)_response_stream_shape_cachebotocore.loadersr  botocore.modelr  load_service_model	shape_for)r  r  loaderbedrock_service_dictbedrock_service_models        rS   get_response_stream_shaper    sM    #++/%889JKX ,-A B'<'F'FGW'X$''rU   c                      e Zd Zddedee   ddfdZdefdZdedee   fdZ	d	edee
eeef         fd
ZdefdZdedeee   eee
eeef         f   fdZdededeeee   eee   ee
eeef         f   fdZdedee   fdZdedefdZdedeeeef   fdZdee   deeeeef      fdZde e   de eeeef      fdZ!dee   fdZ"y)r   r   r   rH   Nc                 |    ddl m} || _         |       | _        g | _        d | _        d | _        || _        d | _        y )Nr   )EventStreamJSONParser)	botocore.parsersr  r   parsercontent_blockstool_calls_indexresponse_idr   _current_tool_name)rJ   r   r   r  s       rS   rT   zAWSEventStreamDecoder.__init__  s=    :
+-<>/3*."15rU   c                     d}t        | j                        dk(  ryd| j                  d   vry| j                  D ]  }d|v s||d   d   z  } t        |      dk(  ryy)zN
        Check if the tool call block so far has been an empty string
        r   r   FtoolUser   T)r  r  )rJ   argsblocks      rS   check_empty_tool_call_argsz0AWSEventStreamDecoder.check_empty_tool_call_args  sv     t""#q( T0033((EE!i(11 ) t9>rU   reasoning_content_blockc                     d|v r|d   S y )Nr   rj   )rJ   r  s     rS   extract_reasoning_content_strz3AWSEventStreamDecoder.extract_reasoning_content_str'  s     ,,*622rU   thinking_blockc                     g }d}d|v rt        d      }|d   |d<   n2d|v rt        d      }|d   |d<   d|d<   nd|v rt        d|d   	      }||j                  |       |S )
z;
        Translate the thinking blocks to a string
        Nr   thinking)r   	signaturer   redactedContentredacted_thinking)r   r   )r    r   r  )rJ   r  thinking_blocks_list_thinking_blocks       rS   translate_thinking_blocksz/AWSEventStreamDecoder.translate_thinking_blocks.  s      	
  	 ^#9zJO*8*@OJ'N*9zJO+9++FOK(*,OJ'.0A(~>O/PO & ''8##rU   
chunk_datac                     | j                   Cd|v r"|d   j                  d      }|rd| | _         yydt        j                          | _         yy)z:Initialize response_id from chunk data if not already set.NmessageStartconversationIdz	chatcmpl-)r  r   r   r  )rJ   r  conversation_ids      rS    _initialize_converse_response_idz6AWSEventStreamDecoder._initialize_converse_response_idM  s`    #+",^"<"@"@AQ"R")2?2C'DD$ # &/tzz|n#=  $rU   	start_objc                 l   d}i }d}g | _         |d|v ry|d   t|d   d   }t        |      }|| _        | j                  du r|t        k(  r|||fS | j
                  dn| j
                  dz   | _        |d   d   d	|d
d| j
                  d}n$d|v r |d   | j                  |d         }d|d   i}|||fS )z/Handle 'start' event in converse chunk parsing.Nr  r   )response_tool_nameTr   r  	toolUseIdr   r   r   r   r   r   r   reasoningContent)r  r1   r  r   r   r  r  )rJ   r  tool_useprovider_specific_fieldsthinking_blocks_response_tool_namer  s          rS   _handle_converse_start_eventz2AWSEventStreamDecoder._handle_converse_start_eventX  s1    ;?)+ 
 	 	 ! I%)I*>*J&/	&:6&B#%:':&" +='
 NNd**.GG#%=NN ..6AD<Q<QTU<U % $I.{;& 2%'! "22 #i/01="&"@"@01# '	2D(E,( 1?BBrU   r0  r   c                    d}d}i }d}d}| j                   j                  |       d|v r|d   }nd|v rS| j                  du r| j                  t        k(  r	|d   d   }n|ddd|d   d   d| j
                  | j
                  n|d	}nSd
|v rDd
|d
   i}| j                  |d
         }| j                  |d
         }|rt        |      dkD  r|d}nd|v rd|d   i}|||||fS )z/Handle 'delta' event in converse chunk parsing.r   Nr   r  Tr   r   r   r  r  r   citationsContent)	r  r  r   r  r   r  r  r  r  )rJ   r0  r   r   r  r  reasoning_contentr  s           rS   _handle_converse_delta_eventz2AWSEventStreamDecoder._handle_converse_delta_event  sp     :>)+ +/
 	 	 	""9-YV$D)# $&++/HH +G4 & $%.y%9'%B!  00< --"  9,"I.@$A($ !% B B,-! #<<,-O  (1,%-  "  9, #I.@$A($ $
 	
rU   c                     d}| j                   du r| j                  t        k(  r	d| _        |S d| _        | j                         }|r"ddddd| j                  | j                  n|d}|S )z>Handle stop/contentBlockIndex event in converse chunk parsing.NTr   z{}r   r  )r   r  r   r  r  )rJ   r   r  is_emptys       rS   _handle_converse_stop_eventz1AWSEventStreamDecoder._handle_converse_stop_event  s     ;?
 NNd"''+DD&*D#O"&224" !% ,,8 ))H rU   c                 Z   	 | j                  |       t        j                  dj                  |             d}d }d}d }i }d }d }t	        |j                  dd            }	d|v r$t        di |d   }
| j                  |
      \  }}}nd|v r't        di |d   }| j                  ||	      \  }}}}}n_d|v r| j                  |	      }nId|v rt        |j                  dd            }n)d	|v r%t        j                  |j                  d	i             }i }d
|v r|j                  d
      }||d
<   t        t        |dt!        |d|r|gnd |r|nd ||            g| j"                  | j$                  ||      }|S # t&        $ r(}t'        dj                  t)        |                  d }~ww xY w)Nz

Raw Chunk: {}

r   contentBlockIndexr   startr  
stopReasonrf   r   trace	assistant)r   r   r   r  r  r  )r   r   r  )r  r   r   r   r  zReceived streaming error - {}rj   )r  r   debugr  r{   r   ContentBlockStartEventr  ContentBlockDeltaEventr  r  r   converse_config_transform_usager)   r*   r&   r  r   r   rp   )rJ   r  r   r  r   r   r  r  r  content_block_indexr  r0  'model_response_provider_specific_fieldsr  r   r   s                   rS   converse_chunk_parserz+AWSEventStreamDecoder.converse_chunk_parser
  s   M	L 11*=  !8!?!?
!KLD>BHM%)E-/$/3   #&jnn5H!&L"M*$2IZ5HI	
 55i@	,#J&2IZ5HI	 55iATU,%# $z1;;<OP+ 1*..v2V WJ&'88QS9TU683*$"w/CH7@*$&3#$(!,5=z4 $< !9%),;.?$ ##jj)P-H2 O 	L;BB3q6JKK	Ls   E6E9 9	F*#F%%F*c                 x   d}d}d}d|v r|d   }nd| j                   v r7|j                  d      d   j                  d      j                  d      }d	}d
}nd|v sd|v sd|v sd|v r| j                  |      S d|v r$|j                  di       }| j                  |      S d|v rMt        |d         dk(  r#|d   d   j                  dd       |d   d   d   }|j                  dd       }|>d	}|}n9d|v r|d   }n/d|v r|d   }n%d|v r|d   }d	}n|j                  dd       rd	}|d   }t	        |||d dd       S )Nr   Fr  r  r	  r   r   r   Trf   r  r  metricsr  r  contentBlockDeltar  r  r   r
  r   completionReason)r   is_finishedr   r   r   r  )r   r   r  r  GChunk)rJ   r  r   r  r   _chunk_datar   s          rS   _chunk_parserz#AWSEventStreamDecoder._chunk_parserZ  s    :%l+Dtzz!>>-0377?CCFKDK"M  :-z)J&*$---DD J.$..)<bAK---EE*$Jy)*a/y)!,00>J!),Q/7$..=K&" + Z'l+Dz!f%D
*&7MK^^.5K&'9:M#'
 	
rU   iteratorc              #      K   ddl m}  |       }|D ]W  }|j                  |       |D ]?  }| j                  |      }|st        j                  |      }| j                  |       A Y yw)zTGiven an iterator that yields lines, iterate over it & yield every event encounteredr   EventStreamBufferr  Nbotocore.eventstreamr  add_data_parse_message_from_eventr  loadsr  rJ   r  r  event_stream_bufferchunkeventr   rp  s           rS   r   z AWSEventStreamDecoder.iter_bytes  sk      	;/1E((/,88? JJw/E,,,>> - s
   <A-.A-c                   K   ddl m}  |       }|2 3 d{   }|j                  |       |D ]@  }| j                  |      }|st        j                  |      }| j                  |       B `7 [6 yw)zZGiven an async iterator that yields lines, iterate over it & yield every event encounteredr   r  Nr  r  r  s           rS   r   z!AWSEventStreamDecoder.aiter_bytes  ss      	;/1# 	?%((/,88? JJw/E,,,>>	 -	?8s+   A6A4A2A4*A6-A62A44A6c                 p   |j                         }| j                  j                  |t                     }|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 )Nr   r   bodyr   r   r   z:exception-type r   r  bytes)to_response_dictr  parser  decoderZ   r}   r   rp   r0   r  r  )rJ   r  response_dictparsed_responsedecoded_bodyerror_messageexception_statusr  s           rS   r  z/AWSEventStreamDecoder._parse_message_from_event  s6   ..0++++M;T;VW'3.(0779L,- , 0 0 ;L#. , ",Y7;;<MN,s2]BM)-8 "-6 JJ}- 
 '  o%#''0E99W%,,..!%%f-E<<>!rU   F)#rs   rt   ru   rp   r   rz   rT   r  )BedrockConverseReasoningContentBlockDeltar  rw   r  r    r   r  r}   r  r  r   r!   r  r  r{   r  r  r)   r  r  r  r   r  r   r   r   r  rj   rU   rS   r   r     s   	6c 	6htn 	6 	6D ,'P	#$G$	U.0SSTU
$>	>4 	>=C)=C 
,-13VVW	
	
=C~P
)P
 P
 
,-13VVW	
		

	P
d	-	.BNL NL9L NL`:
:
	v*D0	1:
x? ?	% 3T9:	;? ?%e,?	uV%8$>?	@? "(3-  "rU   r   c            	       J     e Zd Z	 d	dededee   ddf fdZdedefdZ	 xZ
S )
r   Nr   r   r   rH   c                 L    t         |   |       t        d||      | _        y)z
        Child class of AWSEventStreamDecoder that handles the streaming response from the Anthropic family of models

        The only difference between AWSEventStreamDecoder and AmazonAnthropicClaudeStreamDecoder is the `chunk_parser` method
        rN  N)r|  r   r   )r   rT   AnthropicModelResponseIterator!anthropic_model_response_iterator)rJ   r   r   r   rO   s       rS   rT   z+AmazonAnthropicClaudeStreamDecoder.__init__  s+     	u%1O##2
.rU   r  c                 :    | j                   j                  |      S N)r  )r   chunk_parserrJ   r  s     rS   r  z0AmazonAnthropicClaudeStreamDecoder._chunk_parser  s    55BBBTTrU   r   )rs   rt   ru   rp   rz   r   rT   r}   r)   r  r  r  s   @rS   r   r     sN    
 %)	

 
 D>	

 

$U U1D UrU   r   c                   H     e Zd Zdededdf fdZdedeee	ef   fdZ
 xZS )r   r   r   rH   Nc                 P    t         |   |       ddlm}  |d |      | _        y )NrN  r   ) AmazonDeepseekR1ResponseIterator)r|  r   )r   rT   Olitellm.llms.bedrock.chat.invoke_transformations.amazon_deepseek_transformationr   deepseek_model_response_iterator)rJ   r   r   r  rO   s       rS   rT   z&AmazonDeepSeekR1StreamDecoder.__init__  s0    
 	u%	
 1Q##1
-rU   r  c                 :    | j                   j                  |      S r  )r	  r  r  s     rS   r  z+AmazonDeepSeekR1StreamDecoder._chunk_parser  s     44AA
ASSrU   )rs   rt   ru   rp   rz   rT   r}   r  r  r)   r  r  r  s   @rS   r   r     sI    

 
 
	
TT	v*D0	1TrU   r   c            	       x    e Zd Zddee   fdZd Zdedeee	      de
eee	   f   fdZdedefd	Zd
 Zd Zd Zy)r   r   c                 .    || _         || _        d| _        y )NF)r   r   is_done)rJ   r   r   s      rS   rT   zMockResponseIterator.__init__  s    ,"rU   c                     | S r   rj   rk   s    rS   __iter__zMockResponseIterator.__iter__      rU   r   r   rH   c                     d}| j                   du r>|<t        j                         j                  |      }||j                  xs d}d}||fS |t        |      dkD  r|d   }||fS )a+  
        If JSON mode is enabled, convert the tool call to a message.

        Bedrock returns the JSON schema as part of the tool call
        OpenAI returns the JSON schema as part of the content, this handles placing it in the content

        Args:
            text: str
            tool_use: Optional[ChatCompletionToolCallChunk]
        Returns:
            Tuple[str, Optional[ChatCompletionToolCallChunk]]

            text: The text to use in the content
            tool_use: The ChatCompletionToolCallChunk to use in the chunk response
        NT)r   r   r   )r   r   AnthropicConfig!_convert_tool_response_to_messager   r  )rJ   r   r   r  r   s        rS   _handle_json_mode_chunkz,MockResponseIterator._handle_json_mode_chunk  s    $ ;?>>T!j&<--/QQ% R G "," X~ #J!(;!!}HX~rU   r  c                 J   	 t        |d      }|j                  d   j                  j                  xs d}d }t	        t
        t        t              t	        t        |j                  d         j                  j                        }| j                  du r8| j                  ||j                  d   j                  j                        \  }}nW|Ut        |d   j                  dt        |d   j                  j                   |d   j                  j"                        d      }t%        ||dt'        |j                  d   j(                  xs d	      t+        |j,                  |j.                  |j0                  
      d      }|S # t2        $ r}t5        d| d|       d }~ww xY w)Nr   r   r   T)r   r   r   r   r  )r   r  )r   r  r  r   r   r   zFailed to decode chunk: z	. Error: )r  r  r   r   r	   r   rw   r$   r%   r   r   r  r!   r   r"   r   r   r   r  r   r   r#   r  r  r  r   
ValueError)rJ   r  chunk_usager   r  _model_response_tool_callprocessed_chunkr   s           rS   r  z"MockResponseIterator._chunk_parser-  s   '	R!(W!=K%%a(0088>BDH(,;<=Wj0034<<GG)% ~~%!%!=!=)11!4<<GG "> "h +660366#@6q9BBGG";A">"G"G"Q"Q  %! /","4"4Q"7"E"E"K /"-";";&1&C&C!,!9!9
 O #" 	R7
|9QCPQQ	Rs   F F 	F"FF"c                 j    | j                   rt        d| _         | j                  | j                        S NT)r  StopIterationr  r   rk   s    rS   __next__zMockResponseIterator.__next__W  s-    <<!!$"5"566rU   c                     | S r   rj   rk   s    rS   	__aiter__zMockResponseIterator.__aiter__^  r  rU   c                 r   K   | j                   rt        d| _         | j                  | j                        S wr  )r  StopAsyncIterationr  r   rk   s    rS   	__anext__zMockResponseIterator.__anext__a  s1     <<$$!!$"5"566s   57Nr  )rs   rt   ru   r   rz   rT   r  rp   rw   r!   r   r  r(   r  r  r  r  r"  rj   rU   rS   r   r     su    (4. %-d3N.O%P	sH899	:<(R (R& (RT77rU   r   )FFNr<  )^rv   rL   r   r[   	functoolsr   typingr   r   r   r   r   r	   r
   r   r   r   litellm._uuidr   litellm.caching.cachingr   litellm.constantsr   'litellm.litellm_core_utils.core_helpersr   *litellm.litellm_core_utils.litellm_loggingr   (litellm.litellm_core_utils.logging_utilsr   3litellm.litellm_core_utils.prompt_templates.factoryr   r   r   r   r   r   r   #litellm.llms.anthropic.chat.handlerr   r  &litellm.llms.custom_httpx.http_handlerr   r   r   r   litellm.types.llms.bedrocklitellm.types.llms.openair   r    r!   r"   r#   litellm.types.utilsr$   r%   r&   r'   r  r(   r)   r*   r+   litellm.utilsr,   r-   base_aws_llmr/   common_utilsr0   r1   r  r5   ry   1litellm.llms.bedrock.chat.converse_transformationr6   Mlitellm.llms.bedrock.chat.invoke_transformations.amazon_openai_transformationr7   r  r9   rp   r}   r  rz   r  r{   r   r  r   r   r  r   r   r   r   rj   rU   rS   <module>r6     so           "  1 7 E > I    )  
 @  : % U U# ,9s- M  S '(b bZ  %RV![<%&[<[< [< 	[<
 [< [< [< [< ~[< &g&N&NO[< [<N  %RV![<[![<[< [< 	[<
 uo[< [< [< [< [< ~[< &g&N&NO[< [<| D(P" P"fU)> U.T$9 T,`7 `7rU   