| 
					
				 | 
			
			
				@@ -370,29 +370,14 @@ class BedrockLargeLanguageModel(LargeLanguageModel): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         :return:md = genai.GenerativeModel(model) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         prefix = model.split('.')[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        model_name = model.split('.')[1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if isinstance(messages, str): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             prompt = messages 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            prompt = self._convert_messages_to_prompt(messages, prefix) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            prompt = self._convert_messages_to_prompt(messages, prefix, model_name) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return self._get_num_tokens_by_gpt2(prompt) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def _convert_messages_to_prompt(self, model_prefix: str, messages: list[PromptMessage]) -> str: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Format a list of messages into a full prompt for the Google model 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        :param messages: List of PromptMessage to combine. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        :return: Combined string with necessary human_prompt and ai_prompt tags. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        messages = messages.copy()  # don't mutate the original list 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        text = "".join( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            self._convert_one_message_to_text(message, model_prefix) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            for message in messages 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return text.rstrip() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def validate_credentials(self, model: str, credentials: dict) -> None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -432,7 +417,7 @@ class BedrockLargeLanguageModel(LargeLanguageModel): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         except Exception as ex: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             raise CredentialsValidateFailedError(str(ex)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def _convert_one_message_to_text(self, message: PromptMessage, model_prefix: str) -> str: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _convert_one_message_to_text(self, message: PromptMessage, model_prefix: str, model_name: Optional[str] = None) -> str: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Convert a single message to a string. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -446,10 +431,17 @@ class BedrockLargeLanguageModel(LargeLanguageModel): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ai_prompt = "\n\nAssistant:" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         elif model_prefix == "meta": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            human_prompt_prefix = "\n[INST]" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            human_prompt_postfix = "[\\INST]\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            ai_prompt = "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-         
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            # LLAMA3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if model_name.startswith("llama3"): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                human_prompt_prefix = "<|eot_id|><|start_header_id|>user<|end_header_id|>\n\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                human_prompt_postfix = "<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ai_prompt = "\n\nAssistant:" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                # LLAMA2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                human_prompt_prefix = "\n[INST]" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                human_prompt_postfix = "[\\INST]\n" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ai_prompt = "" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         elif model_prefix == "mistral": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             human_prompt_prefix = "<s>[INST]" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             human_prompt_postfix = "[\\INST]\n" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -478,11 +470,12 @@ class BedrockLargeLanguageModel(LargeLanguageModel): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return message_text 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def _convert_messages_to_prompt(self, messages: list[PromptMessage], model_prefix: str) -> str: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _convert_messages_to_prompt(self, messages: list[PromptMessage], model_prefix: str, model_name: Optional[str] = None) -> str: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Format a list of messages into a full prompt for the Anthropic, Amazon and Llama models 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         :param messages: List of PromptMessage to combine. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        :param model_name: specific model name.Optional,just to distinguish llama2 and llama3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         :return: Combined string with necessary human_prompt and ai_prompt tags. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if not messages: 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -493,18 +486,20 @@ class BedrockLargeLanguageModel(LargeLanguageModel): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             messages.append(AssistantPromptMessage(content="")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         text = "".join( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            self._convert_one_message_to_text(message, model_prefix) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            self._convert_one_message_to_text(message, model_prefix, model_name) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for message in messages 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # trim off the trailing ' ' that might come from the "Assistant: " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return text.rstrip() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    def _create_payload(self, model_prefix: str, prompt_messages: list[PromptMessage], model_parameters: dict, stop: Optional[list[str]] = None, stream: bool = True): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def _create_payload(self, model: str, prompt_messages: list[PromptMessage], model_parameters: dict, stop: Optional[list[str]] = None, stream: bool = True): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Create payload for bedrock api call depending on model provider 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         payload = dict() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        model_prefix = model.split('.')[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        model_name = model.split('.')[1] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if model_prefix == "amazon": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             payload["textGenerationConfig"] = { **model_parameters } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -544,7 +539,7 @@ class BedrockLargeLanguageModel(LargeLanguageModel): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				          
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         elif model_prefix == "meta": 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             payload = { **model_parameters } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            payload["prompt"] = self._convert_messages_to_prompt(prompt_messages, model_prefix) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            payload["prompt"] = self._convert_messages_to_prompt(prompt_messages, model_prefix, model_name) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             raise ValueError(f"Got unknown model prefix {model_prefix}") 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -579,7 +574,7 @@ class BedrockLargeLanguageModel(LargeLanguageModel): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         model_prefix = model.split('.')[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        payload = self._create_payload(model_prefix, prompt_messages, model_parameters, stop, stream) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        payload = self._create_payload(model, prompt_messages, model_parameters, stop, stream) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # need workaround for ai21 models which doesn't support streaming 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if stream and model_prefix != "ai21": 
			 |