|  | @@ -8,8 +8,9 @@ from typing import (
 | 
	
		
			
				|  |  |      Union
 | 
	
		
			
				|  |  |  )
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -from core.model_runtime.entities.message_entities import PromptMessage, PromptMessageTool, UserPromptMessage, AssistantPromptMessage, \
 | 
	
		
			
				|  |  | -    SystemPromptMessage
 | 
	
		
			
				|  |  | +from core.model_runtime.entities.message_entities import PromptMessage, PromptMessageTool, UserPromptMessage, \
 | 
	
		
			
				|  |  | +    AssistantPromptMessage, \
 | 
	
		
			
				|  |  | +    SystemPromptMessage, PromptMessageRole
 | 
	
		
			
				|  |  |  from core.model_runtime.entities.llm_entities import LLMResult, LLMResultChunk, \
 | 
	
		
			
				|  |  |      LLMResultChunkDelta
 | 
	
		
			
				|  |  |  from core.model_runtime.errors.validate import CredentialsValidateFailedError
 | 
	
	
		
			
				|  | @@ -111,16 +112,39 @@ class ZhipuAILargeLanguageModel(_CommonZhipuaiAI, LargeLanguageModel):
 | 
	
		
			
				|  |  |          if len(prompt_messages) == 0:
 | 
	
		
			
				|  |  |              raise ValueError('At least one message is required')
 | 
	
		
			
				|  |  |          
 | 
	
		
			
				|  |  | -        if prompt_messages[0].role.value == 'system':
 | 
	
		
			
				|  |  | +        if prompt_messages[0].role == PromptMessageRole.SYSTEM:
 | 
	
		
			
				|  |  |              if not prompt_messages[0].content:
 | 
	
		
			
				|  |  |                  prompt_messages = prompt_messages[1:]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        # resolve zhipuai model not support system message and user message, assistant message must be in sequence
 | 
	
		
			
				|  |  | +        new_prompt_messages = []
 | 
	
		
			
				|  |  | +        for prompt_message in prompt_messages:
 | 
	
		
			
				|  |  | +            copy_prompt_message = prompt_message.copy()
 | 
	
		
			
				|  |  | +            if copy_prompt_message.role in [PromptMessageRole.USER, PromptMessageRole.SYSTEM, PromptMessageRole.TOOL]:
 | 
	
		
			
				|  |  | +                if not isinstance(copy_prompt_message.content, str):
 | 
	
		
			
				|  |  | +                    # not support image message
 | 
	
		
			
				|  |  | +                    continue
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                if new_prompt_messages and new_prompt_messages[-1].role == PromptMessageRole.USER:
 | 
	
		
			
				|  |  | +                    new_prompt_messages[-1].content += "\n\n" + copy_prompt_message.content
 | 
	
		
			
				|  |  | +                else:
 | 
	
		
			
				|  |  | +                    if copy_prompt_message.role == PromptMessageRole.USER:
 | 
	
		
			
				|  |  | +                        new_prompt_messages.append(copy_prompt_message)
 | 
	
		
			
				|  |  | +                    else:
 | 
	
		
			
				|  |  | +                        new_prompt_message = UserPromptMessage(content=copy_prompt_message.content)
 | 
	
		
			
				|  |  | +                        new_prompt_messages.append(new_prompt_message)
 | 
	
		
			
				|  |  | +            else:
 | 
	
		
			
				|  |  | +                if new_prompt_messages and new_prompt_messages[-1].role == PromptMessageRole.ASSISTANT:
 | 
	
		
			
				|  |  | +                    new_prompt_messages[-1].content += "\n\n" + copy_prompt_message.content
 | 
	
		
			
				|  |  | +                else:
 | 
	
		
			
				|  |  | +                    new_prompt_messages.append(copy_prompt_message)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          params = {
 | 
	
		
			
				|  |  |              'model': model,
 | 
	
		
			
				|  |  |              'prompt': [{
 | 
	
		
			
				|  |  | -                'role': prompt_message.role.value if prompt_message.role.value != 'system' else 'user',
 | 
	
		
			
				|  |  | +                'role': prompt_message.role.value,
 | 
	
		
			
				|  |  |                  'content': prompt_message.content
 | 
	
		
			
				|  |  | -            } for prompt_message in prompt_messages],
 | 
	
		
			
				|  |  | +            } for prompt_message in new_prompt_messages],
 | 
	
		
			
				|  |  |              **model_parameters
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 |