diff --git a/cli_demo.py b/cli_demo.py index ea5a895..245412e 100644 --- a/cli_demo.py +++ b/cli_demo.py @@ -31,13 +31,13 @@ if __name__ == "__main__": chat_history=history, streaming=STREAMING): if STREAMING: - print(resp["result"][last_print_len:], end="", flush=True) + logger.info(resp["result"][last_print_len:], end="", flush=True) last_print_len = len(resp["result"]) else: - print(resp["result"]) + logger.info(resp["result"]) if REPLY_WITH_SOURCE: source_text = [f"""出处 [{inum + 1}] {os.path.split(doc.metadata['source'])[-1]}:\n\n{doc.page_content}\n\n""" # f"""相关度:{doc.metadata['score']}\n\n""" for inum, doc in enumerate(resp["source_documents"])] - print("\n\n" + "\n\n".join(source_text)) + logger.info("\n\n" + "\n\n".join(source_text)) diff --git a/configs/model_config.py b/configs/model_config.py index 8de2919..41f32de 100644 --- a/configs/model_config.py +++ b/configs/model_config.py @@ -1,6 +1,13 @@ import torch.cuda import torch.backends import os +import logging +import uuid + +LOG_FORMAT = "%(levelname) -5s %(asctime)s" "-1d: %(message)s" +logger = logging.getLogger() +logger.setLevel(logging.INFO) +logging.basicConfig(format=LOG_FORMAT) embedding_model_dict = { "ernie-tiny": "nghuyong/ernie-3.0-nano-zh", @@ -63,3 +70,13 @@ LLM_HISTORY_LEN = 3 VECTOR_SEARCH_TOP_K = 5 NLTK_DATA_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), "nltk_data") + +FLAG_USER_NAME = uuid.uuid4().hex + +logger.info(f""" +loading model config +llm device: {LLM_DEVICE} +embedding device: {EMBEDDING_DEVICE} +dir: {os.path.dirname(os.path.dirname(__file__))} +flagging username: {FLAG_USER_NAME} +""") \ No newline at end of file diff --git a/models/chatglm_llm.py b/models/chatglm_llm.py index e0b1ae5..0cac961 100644 --- a/models/chatglm_llm.py +++ b/models/chatglm_llm.py @@ -125,9 +125,8 @@ class ChatGLM(LLM): prefix_encoder_file.close() model_config.pre_seq_len = prefix_encoder_config['pre_seq_len'] model_config.prefix_projection = prefix_encoder_config['prefix_projection'] - except Exception as e: - print(e) - print("加载PrefixEncoder config.json失败") + except Exception as e: + logger.error(f"加载PrefixEncoder config.json失败: {e}") self.model = AutoModel.from_pretrained(model_name_or_path, config=model_config, trust_remote_code=True, **kwargs) if LLM_LORA_PATH and use_lora: @@ -164,9 +163,8 @@ class ChatGLM(LLM): new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v self.model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict) self.model.transformer.prefix_encoder.float() - except Exception as e: - print(e) - print("加载PrefixEncoder模型参数失败") + except Exception as e: + logger.error(f"加载PrefixEncoder模型参数失败:{e}") self.model = self.model.eval() @@ -177,8 +175,8 @@ if __name__ == "__main__": llm_device=LLM_DEVICE, ) last_print_len = 0 for resp, history in llm._call("你好", streaming=True): - print(resp[last_print_len:], end="", flush=True) + logger.info(resp[last_print_len:], end="", flush=True) last_print_len = len(resp) for resp, history in llm._call("你好", streaming=False): - print(resp) + logger.info(resp) pass diff --git a/webui.py b/webui.py index 1936ebf..ff431a4 100644 --- a/webui.py +++ b/webui.py @@ -4,8 +4,7 @@ import shutil from chains.local_doc_qa import LocalDocQA from configs.model_config import * import nltk -import uuid - + nltk.data.path = [NLTK_DATA_PATH] + nltk.data.path def get_vs_list(): @@ -27,9 +26,7 @@ llm_model_dict_list = list(llm_model_dict.keys()) local_doc_qa = LocalDocQA() -logger = gr.CSVLogger() -username = uuid.uuid4().hex - +flag_csv_logger = gr.CSVLogger() def get_answer(query, vs_path, history, mode, streaming: bool = STREAMING): @@ -54,23 +51,24 @@ def get_answer(query, vs_path, history, mode, history[-1][-1] = resp + ( "\n\n当前知识库为空,如需基于知识库进行问答,请先加载知识库后,再进行提问。" if mode == "知识库问答" else "") yield history, "" - logger.flag([query, vs_path, history, mode], username=username) + logger.info(f"flagging: username={FLAG_USER_NAME},query={query},vs_path={vs_path},mode={mode},history={history}") + flag_csv_logger.flag([query, vs_path, history, mode], username=FLAG_USER_NAME) def init_model(): try: local_doc_qa.init_cfg() local_doc_qa.llm._call("你好") reply = """模型已成功加载,可以开始对话,或从右侧选择模式后开始对话""" - print(reply) + logger.info(reply) return reply except Exception as e: - print(e) + logger.error(e) reply = """模型未成功加载,请到页面左上角"模型配置"选项卡中重新选择后点击"加载模型"按钮""" if str(e) == "Unknown platform: darwin": - print("该报错可能因为您使用的是 macOS 操作系统,需先下载模型至本地后执行 Web UI,具体方法请参考项目 README 中本地部署方法及常见问题:" + logger.info("该报错可能因为您使用的是 macOS 操作系统,需先下载模型至本地后执行 Web UI,具体方法请参考项目 README 中本地部署方法及常见问题:" " https://github.com/imClumsyPanda/langchain-ChatGLM") else: - print(reply) + logger.info(reply) return reply @@ -83,11 +81,11 @@ def reinit_model(llm_model, embedding_model, llm_history_len, use_ptuning_v2, us use_lora=use_lora, top_k=top_k, ) model_status = """模型已成功重新加载,可以开始对话,或从右侧选择模式后开始对话""" - print(model_status) + logger.info(model_status) except Exception as e: - print(e) + logger.error(e) model_status = """模型未成功重新加载,请到页面左上角"模型配置"选项卡中重新选择后点击"加载模型"按钮""" - print(model_status) + logger.info(model_status) return history + [[None, model_status]] @@ -109,7 +107,7 @@ def get_vector_store(vs_id, files, history): else: file_status = "模型未完成加载,请先在加载模型后再导入文件" vs_path = None - print(file_status) + logger.info(file_status) return vs_path, None, history + [[None, file_status]] @@ -235,7 +233,7 @@ with gr.Blocks(css=block_css) as demo: inputs=[select_vs, folder_files, chatbot], outputs=[vs_path, folder_files, chatbot], ) - logger.setup([query, vs_path, chatbot, mode], "flagged") + flag_csv_logger.setup([query, vs_path, chatbot, mode], "flagged") query.submit(get_answer, [query, vs_path, chatbot, mode], [chatbot, query])