
    h                         d dl Z d dlmZmZmZmZmZ d dlmZ d dl	m
Z
 d dlmZ ddlmZ ddlmZmZ erd dl	m
Z d d	lmZ erd d
lmZ  G d deeee      Zy)    N)TYPE_CHECKINGListOptionalTuplecast)Response)Logging)BasePassthroughConfig   )
BaseAWSLLM)BedrockEventStreamDecoderBaseBedrockModelInfo)CostResponseTypes)URLc                      e Zd ZdededefdZdee   dee   dededee   d	eded
ef   fdZ		 dded	edee   dedee   deeee
   f   fdZdededededededed   fdZdee
   dee   fdZdee   dddedededed   fdZy)BedrockPassthroughConfigendpointrequest_datareturnc                 
    d|v S )Nstream )selfr   r   s      k/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/bedrock/passthrough/transformation.pyis_streaming_requestz-BedrockPassthroughConfig.is_streaming_request   s    8##    api_baseapi_keymodelrequest_query_paramslitellm_paramsr   c                     |j                         }| j                  ||d       }d| d}| j                  |||xs i       |fS )N)optional_paramsr   model_idzhttps://bedrock-runtime.z.amazonaws.com)copy_get_aws_region_name
format_url)	r   r   r   r   r   r    r!   r#   aws_region_names	            r   get_complete_urlz)BedrockPassthroughConfig.get_complete_url   s`     )--/33+ 4 
 .o->nMx3G3M2NPXXXr   Nheadersc                 X    |j                         }| j                  d|||xs i ||      S )Nbedrock)service_namer*   r#   r   r   r   )r%   _sign_request)r   r*   r!   r   r   r   r#   s          r   sign_requestz%BedrockPassthroughConfig.sign_request0   sA     )--/!!"+%+ " 
 	
r   custom_llm_providerhttpx_responselogging_objr   c                     ddl m} ddlm}m}	 ddlm}
 d|v rd|z   }nd|v rd|z   }ny |
j                   ||      |	      }|t        d
|       |j                  |dddg| |	       |i i d||
      }|S )Nr   )encoding)LlmProvidersModelResponse)ProviderConfigManagerinvokezinvoke/conversez	converse/)providerr   z$No provider config found for model: userz no-message-pass-through-endpoint)rolecontent )
r   messagesraw_responsemodel_responser2   r#   r!   r   r   r4   )
litellmr4   litellm.types.utilsr5   r6   litellm.utilsr7   get_provider_chat_config
ValueErrortransform_response)r   r   r0   r1   r   r2   r   r4   r5   r6   r7   chat_config_modelprovider_chat_configlitellm_model_responses                 r   logging_non_streaming_responsez7BedrockPassthroughConfig.logging_non_streaming_responseB   s     	%C7x )E 18# +e 34MM!"56#  N  

  'CE7KLL0D0W0W%2TUV'(?#% 1X 1
 &%r   	raw_bytesc                     ddl m} g } |       }|D ]?  }|j                  |       |D ]'  }| j                  |      }||j	                  |       ) A |S )Nr   )EventStreamBuffer)botocore.eventstreamrN   add_data_parse_message_from_eventappend)r   rL   rN   
all_chunksevent_stream_bufferchunkeventmessages           r   _convert_raw_bytes_to_str_linesz8BedrockPassthroughConfig._convert_raw_bytes_to_str_linesm   sa    :
/1E((/,88?&%%g. -  r   rS   litellm_logging_objLiteLLMLoggingObjc                    ddl m}m} ddlm} ddlm}	 ddlm}
 ddl	m
}m} g }d|v r1|	j                  |      }|t        d	| d
|        |||dd      }nd|v r |d|dd      }ny|D ]  }t        j                  |      }|j!                  |      }t#        |t$              r) |t'        t$        |            r |t'        ||            }nt#        ||      r|}ns|j)                  |        t+        |      dkD  r |
|      }|S y)z
        1. Convert all_chunks to a ModelResponseStream
        2. combine model_response_stream to model_response
        3. Return the model_response
        r   ).convert_generic_chunk_to_model_response_stream%generic_chunk_has_all_required_fields) get_bedrock_event_stream_decoder)AmazonInvokeConfig)stream_chunk_builder)GenericStreamingChunkModelResponseStreamr8   NzInvalid invoke provider: z, for model: TF)invoke_providerr   sync_stream	json_moder9   )
chunk_data)chunks),litellm.litellm_core_utils.streaming_handlerr\   r]   litellm.llms.bedrock.chatr^   Klitellm.llms.bedrock.chat.invoke_transformations.base_invoke_transformationr_   litellm.mainr`   rC   ra   rb   get_bedrock_invoke_providerrF   jsonloads_chunk_parser
isinstancedictr   rR   len)r   rS   rY   r   r0   r   r\   r]   r^   r_   r`   ra   rb   all_translated_chunksrc   objrU   rW   translated_chunk	chunk_objrA   s                        r   handle_logging_collected_chunksz8BedrockPassthroughConfig.handle_logging_collected_chunks{   sD   	
 	O	
 	6R "x0LLUSO& //@eWU  3 / 	C 8#2 $ 	C Ejj'G"00G0D $7TCS8TUJ.0@A	 ,.AB,	!((3  " $%)1,N "!r   )N)__name__
__module____qualname__strrq   boolr   r   r   r)   bytesr/   r   r	   rK   r   rX   rw   r   r   r   r   r      s   $S $ $ $Y3-Y #Y 	Y
 Y 'tnY Y 
ucz	Y6  $

 
 tn	

 
 }
 
tXe_$	%
$)&)& !)& !	)&
 )& )& )& 
%	&)&Ve c FIF 1F 	F
 !F F 
%	&Fr   r   )rm   typingr   r   r   r   r   httpxr   *litellm.litellm_core_utils.litellm_loggingr	   0litellm.llms.base_llm.passthrough.transformationr
   base_aws_llmr   common_utilsr   r   rZ   rC   r   r   r   r   r   r   <module>r      sF     = =  > R % JW5 l "?AVlr   