| from toolbox import get_conf |
| import threading |
| import logging |
|
|
| timeout_bot_msg = '[Local Message] Request timeout. Network error.' |
|
|
| class ZhipuRequestInstance(): |
| def __init__(self): |
|
|
| self.time_to_yield_event = threading.Event() |
| self.time_to_exit_event = threading.Event() |
|
|
| self.result_buf = "" |
|
|
| def generate(self, inputs, llm_kwargs, history, system_prompt): |
| |
| import zhipuai |
| ZHIPUAI_API_KEY, ZHIPUAI_MODEL = get_conf("ZHIPUAI_API_KEY", "ZHIPUAI_MODEL") |
| zhipuai.api_key = ZHIPUAI_API_KEY |
| self.result_buf = "" |
| response = zhipuai.model_api.sse_invoke( |
| model=ZHIPUAI_MODEL, |
| prompt=generate_message_payload(inputs, llm_kwargs, history, system_prompt), |
| top_p=llm_kwargs['top_p'], |
| temperature=llm_kwargs['temperature'], |
| ) |
| for event in response.events(): |
| if event.event == "add": |
| self.result_buf += event.data |
| yield self.result_buf |
| elif event.event == "error" or event.event == "interrupted": |
| raise RuntimeError("Unknown error:" + event.data) |
| elif event.event == "finish": |
| yield self.result_buf |
| break |
| else: |
| raise RuntimeError("Unknown error:" + str(event)) |
| |
| logging.info(f'[raw_input] {inputs}') |
| logging.info(f'[response] {self.result_buf}') |
| return self.result_buf |
|
|
| def generate_message_payload(inputs, llm_kwargs, history, system_prompt): |
| conversation_cnt = len(history) // 2 |
| messages = [{"role": "user", "content": system_prompt}, {"role": "assistant", "content": "Certainly!"}] |
| if conversation_cnt: |
| for index in range(0, 2*conversation_cnt, 2): |
| what_i_have_asked = {} |
| what_i_have_asked["role"] = "user" |
| what_i_have_asked["content"] = history[index] |
| what_gpt_answer = {} |
| what_gpt_answer["role"] = "assistant" |
| what_gpt_answer["content"] = history[index+1] |
| if what_i_have_asked["content"] != "": |
| if what_gpt_answer["content"] == "": |
| continue |
| if what_gpt_answer["content"] == timeout_bot_msg: |
| continue |
| messages.append(what_i_have_asked) |
| messages.append(what_gpt_answer) |
| else: |
| messages[-1]['content'] = what_gpt_answer['content'] |
| what_i_ask_now = {} |
| what_i_ask_now["role"] = "user" |
| what_i_ask_now["content"] = inputs |
| messages.append(what_i_ask_now) |
| return messages |
|
|