diff --git a/pilot/model/proxy/llms/tongyi.py b/pilot/model/proxy/llms/tongyi.py index fb826e49c..2b68ec82e 100644 --- a/pilot/model/proxy/llms/tongyi.py +++ b/pilot/model/proxy/llms/tongyi.py @@ -7,6 +7,36 @@ from pilot.scene.base_message import ModelMessage, ModelMessageRoleType logger = logging.getLogger(__name__) +def __convert_2_tongyi_messages(messages: List[ModelMessage]): + + + chat_round = 0 + tongyi_messages = [] + + last_usr_message = "" + system_messages = [] + + for message in messages: + if message.role == ModelMessageRoleType.HUMAN: + last_usr_message = message.content + elif message.role == ModelMessageRoleType.SYSTEM: + system_messages.append(message.content) + elif message.role == ModelMessageRoleType.AI: + last_ai_message = message.content + tongyi_messages.append({"role": "user", "content": last_usr_message}) + tongyi_messages.append({"role": "assistant", "content": last_ai_message}) + if len(system_messages) >0: + if len(system_messages) < 2: + tongyi_messages.insert(0, {"role": "system", "content": system_messages[0]}) + else: + tongyi_messages.append({"role": "user", "content": system_messages[1]}) + else: + last_message = messages[-1] + if last_message.role == ModelMessageRoleType.HUMAN: + tongyi_messages.append({"role": "user", "content": last_message.content}) + + return tongyi_messages + def tongyi_generate_stream( model: ProxyModel, tokenizer, params, device, context_len=2048 ): @@ -23,40 +53,11 @@ def tongyi_generate_stream( if not proxyllm_backend: proxyllm_backend = Generation.Models.qwen_turbo # By Default qwen_turbo - history = [] + messages: List[ModelMessage] = params["messages"] - # Add history conversation - - if len(messages) > 1 and messages[0].role == ModelMessageRoleType.SYSTEM: - role_define = messages.pop(0) - history.append({"role": "system", "content": role_define.content}) - else: - message = messages.pop(0) - if message.role == ModelMessageRoleType.HUMAN: - history.append({"role": "user", "content": message.content}) - for message in messages: - if message.role == ModelMessageRoleType.SYSTEM: - history.append({"role": "user", "content": message.content}) - # elif message.role == ModelMessageRoleType.HUMAN: - # history.append({"role": "user", "content": message.content}) - elif message.role == ModelMessageRoleType.AI: - history.append({"role": "assistant", "content": message.content}) - else: - pass - - # temp_his = history[::-1] - temp_his = history - last_user_input = None - for m in temp_his: - if m["role"] == "user": - last_user_input = m - break - - if last_user_input: - history.remove(last_user_input) - history.append(last_user_input) + history = __convert_2_tongyi_messages(messages) gen = Generation() res = gen.call( proxyllm_backend, diff --git a/pilot/scene/chat_db/auto_execute/chat.py b/pilot/scene/chat_db/auto_execute/chat.py index b05480cdf..6cf7dd6a9 100644 --- a/pilot/scene/chat_db/auto_execute/chat.py +++ b/pilot/scene/chat_db/auto_execute/chat.py @@ -40,7 +40,7 @@ class ChatWithDbAutoExecute(BaseChat): self.top_k: int = 200 self.api_call = ApiCall(display_registry=CFG.command_disply) - def generate_input_values(self): + async def generate_input_values(self): """ generate input values """