From 43809c107d2c3b0d30bb4e3bc8e6d8b7ef136049 Mon Sep 17 00:00:00 2001 From: 505030475 Date: Fri, 4 Aug 2023 23:53:23 +0800 Subject: [PATCH] update multi-language module --- crazy_functions/虚空终端.py | 148 +++++++++++++++++------------------- docs/translate_english.json | 17 ++++- docs/translate_std.json | 87 +++++++++++++++++++++ multi_language.py | 9 ++- 4 files changed, 176 insertions(+), 85 deletions(-) create mode 100644 docs/translate_std.json diff --git a/crazy_functions/虚空终端.py b/crazy_functions/虚空终端.py index fe71a46..36667e9 100644 --- a/crazy_functions/虚空终端.py +++ b/crazy_functions/虚空终端.py @@ -1,87 +1,70 @@ from toolbox import CatchException, update_ui, gen_time_str from .crazy_utils import request_gpt_model_in_new_thread_with_ui_alive from .crazy_utils import input_clipping +import copy, json - -prompt = """ -I have to achieve some functionalities by calling one of the functions below. -Your job is to find the correct funtion to use to satisfy my requirement, -and then write python code to call this function with correct parameters. - -These are functions you are allowed to choose from: -1. - 功能描述: 总结音视频内容 - 调用函数: ConcludeAudioContent(txt, llm_kwargs) - 参数说明: - txt: 音频文件的路径 - llm_kwargs: 模型参数, 永远给定None -2. - 功能描述: 将每次对话记录写入Markdown格式的文件中 - 调用函数: WriteMarkdown() -3. - 功能描述: 将指定目录下的PDF文件从英文翻译成中文 - 调用函数: BatchTranslatePDFDocuments_MultiThreaded(txt, llm_kwargs) - 参数说明: - txt: PDF文件所在的路径 - llm_kwargs: 模型参数, 永远给定None -4. - 功能描述: 根据文本使用GPT模型生成相应的图像 - 调用函数: ImageGeneration(txt, llm_kwargs) - 参数说明: - txt: 图像生成所用到的提示文本 - llm_kwargs: 模型参数, 永远给定None -5. - 功能描述: 对输入的word文档进行摘要生成 - 调用函数: SummarizingWordDocuments(input_path, output_path) - 参数说明: - input_path: 待处理的word文档路径 - output_path: 摘要生成后的文档路径 - - -You should always anwser with following format: ----------------- -Code: -``` -class AutoAcademic(object): - def __init__(self): - self.selected_function = "FILL_CORRECT_FUNCTION_HERE" # e.g., "GenerateImage" - self.txt = "FILL_MAIN_PARAMETER_HERE" # e.g., "荷叶上的蜻蜓" - self.llm_kwargs = None -``` -Explanation: -只有GenerateImage和生成图像相关, 因此选择GenerateImage函数。 ----------------- - -Now, this is my requirement: - -""" def get_fn_lib(): return { - "BatchTranslatePDFDocuments_MultiThreaded": ("crazy_functions.批量翻译PDF文档_多线程", "批量翻译PDF文档"), - "SummarizingWordDocuments": ("crazy_functions.总结word文档", "总结word文档"), - "ImageGeneration": ("crazy_functions.图片生成", "图片生成"), - "TranslateMarkdownFromEnglishToChinese": ("crazy_functions.批量Markdown翻译", "Markdown中译英"), - "SummaryAudioVideo": ("crazy_functions.总结音视频", "总结音视频"), + "BatchTranslatePDFDocuments_MultiThreaded": { + "module": "crazy_functions.批量翻译PDF文档_多线程", + "function": "批量翻译PDF文档", + "description": "Translate PDF Documents", + "arg_1_description": "A path containing pdf files.", + }, + "SummarizingWordDocuments": { + "module": "crazy_functions.总结word文档", + "function": "总结word文档", + "description": "Summarize Word Documents", + "arg_1_description": "A path containing Word files.", + }, + "ImageGeneration": { + "module": "crazy_functions.图片生成", + "function": "图片生成", + "description": "Generate a image that satisfies some description.", + "arg_1_description": "Descriptions about the image to be generated.", + }, + "TranslateMarkdownFromEnglishToChinese": { + "module": "crazy_functions.批量Markdown翻译", + "function": "Markdown中译英", + "description": "Translate Markdown Documents from English to Chinese.", + "arg_1_description": "A path containing Markdown files.", + }, + "SummaryAudioVideo": { + "module": "crazy_functions.总结音视频", + "function": "总结音视频", + "description": "Get text from a piece of audio and summarize this audio.", + "arg_1_description": "A path containing audio files.", + }, } +functions = [ + { + "name": k, + "description": v['description'], + "parameters": { + "type": "object", + "properties": { + "plugin_arg_1": { + "type": "string", + "description": v['arg_1_description'], + }, + }, + "required": ["plugin_arg_1"], + }, + } for k, v in get_fn_lib().items() +] + def inspect_dependency(chatbot, history): return True def eval_code(code, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, web_port): - import subprocess, sys, os, shutil, importlib - - with open('gpt_log/void_terminal_runtime.py', 'w', encoding='utf8') as f: - f.write(code) - + import importlib try: - AutoAcademic = getattr(importlib.import_module('gpt_log.void_terminal_runtime', 'AutoAcademic'), 'AutoAcademic') - # importlib.reload(AutoAcademic) - auto_dict = AutoAcademic() - selected_function = auto_dict.selected_function - txt = auto_dict.txt - fp, fn = get_fn_lib()[selected_function] + tmp = get_fn_lib()[code['name']] + fp, fn = tmp['module'], tmp['function'] fn_plugin = getattr(importlib.import_module(fp, fn), fn) - yield from fn_plugin(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, web_port) + arg = json.loads(code['arguments'])['plugin_arg_1'] + yield from fn_plugin(arg, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, web_port) except: from toolbox import trimmed_format_exc chatbot.append(["执行错误", f"\n```\n{trimmed_format_exc()}\n```\n"]) @@ -110,22 +93,27 @@ def 终端(txt, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, web_ history = [] # 基本信息:功能、贡献者 - chatbot.append(["函数插件功能?", "根据自然语言执行插件命令, 作者: binary-husky, 插件初始化中 ..."]) + chatbot.append(["虚空终端插件的功能?", "根据自然语言的描述, 执行任意插件的命令."]) yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 - - # # 尝试导入依赖, 如果缺少依赖, 则给出安装建议 - # dep_ok = yield from inspect_dependency(chatbot=chatbot, history=history) # 刷新界面 - # if not dep_ok: return # 输入 - i_say = prompt + txt + i_say = txt # 开始 + llm_kwargs_function_call = copy.deepcopy(llm_kwargs) + llm_kwargs_function_call['llm_model'] = 'gpt-call-fn' # 修改调用函数 gpt_say = yield from request_gpt_model_in_new_thread_with_ui_alive( inputs=i_say, inputs_show_user=txt, - llm_kwargs=llm_kwargs, chatbot=chatbot, history=[], - sys_prompt="" + llm_kwargs=llm_kwargs_function_call, chatbot=chatbot, history=[], + sys_prompt=functions ) # 将代码转为动画 - code = get_code_block(gpt_say) - yield from eval_code(code, llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, web_port) + res = json.loads(gpt_say)['choices'][0] + if res['finish_reason'] == 'function_call': + code = json.loads(gpt_say)['choices'][0] + yield from eval_code(code['message']['function_call'], llm_kwargs, plugin_kwargs, chatbot, history, system_prompt, web_port) + else: + chatbot.append(["无法调用相关功能", res]) + yield from update_ui(chatbot=chatbot, history=history) # 刷新界面 + + diff --git a/docs/translate_english.json b/docs/translate_english.json index f05f9e2..9721dcf 100644 --- a/docs/translate_english.json +++ b/docs/translate_english.json @@ -2146,5 +2146,20 @@ "的参数!": "parameters!", "例如翻译、解释代码、润色等等": "such as translation, code interpretation, polishing, etc.", "响应异常": "Response exception", - "响应中": "Responding" + "响应中": "Responding", + "请尝试英文Prompt": "Try English Prompt", + "在运行过程中动态地修改多个配置": "Dynamically modify multiple configurations during runtime", + "无法调用相关功能": "Unable to invoke related functions", + "接驳虚空终端": "Connect to Void Terminal", + "虚空终端插件的功能": "Functionality of Void Terminal plugin", + "执行任意插件的命令": "Execute commands of any plugin", + "修改调用函数": "Modify calling function", + "获取简单聊天的默认参数": "Get default parameters for simple chat", + "根据自然语言的描述": "Based on natural language description", + "获取插件的句柄": "Get handle of plugin", + "第四部分": "Part Four", + "在运行过程中动态地修改配置": "Dynamically modify configurations during runtime", + "请先把模型切换至gpt-*或者api2d-*": "Please switch the model to gpt-* or api2d-* first", + "获取简单聊天的句柄": "Get handle of simple chat", + "获取插件的默认参数": "Get default parameters of plugin" } \ No newline at end of file diff --git a/docs/translate_std.json b/docs/translate_std.json new file mode 100644 index 0000000..8c47de9 --- /dev/null +++ b/docs/translate_std.json @@ -0,0 +1,87 @@ +{ + "解析JupyterNotebook": "ParsingJupyterNotebook", + "Latex翻译中文并重新编译PDF": "TranslateChineseToEnglishInLatexAndRecompilePDF", + "联网的ChatGPT_bing版": "OnlineChatGPT_BingEdition", + "理解PDF文档内容标准文件输入": "UnderstandPdfDocumentContentStandardFileInput", + "Latex英文纠错加PDF对比": "CorrectEnglishInLatexWithPDFComparison", + "下载arxiv论文并翻译摘要": "DownloadArxivPaperAndTranslateAbstract", + "Markdown翻译指定语言": "TranslateMarkdownToSpecifiedLanguage", + "批量翻译PDF文档_多线程": "BatchTranslatePDFDocuments_MultiThreaded", + "下载arxiv论文翻译摘要": "DownloadArxivPaperTranslateAbstract", + "解析一个Python项目": "ParsePythonProject", + "解析一个Golang项目": "ParseGolangProject", + "代码重写为全英文_多线程": "RewriteCodeToEnglish_MultiThreaded", + "解析一个CSharp项目": "ParsingCSharpProject", + "删除所有本地对话历史记录": "DeleteAllLocalConversationHistoryRecords", + "批量Markdown翻译": "BatchTranslateMarkdown", + "连接bing搜索回答问题": "ConnectBingSearchAnswerQuestion", + "Langchain知识库": "LangchainKnowledgeBase", + "Latex输出PDF结果": "OutputPDFFromLatex", + "把字符太少的块清除为回车": "ClearBlocksWithTooFewCharactersToNewline", + "Latex精细分解与转化": "DecomposeAndConvertLatex", + "解析一个C项目的头文件": "ParseCProjectHeaderFiles", + "Markdown英译中": "TranslateMarkdownFromEnglishToChinese", + "Markdown中译英": "MarkdownChineseToEnglish", + "数学动画生成manim": "MathematicalAnimationGenerationManim", + "chatglm微调工具": "ChatGLMFineTuningTool", + "解析一个Rust项目": "ParseRustProject", + "解析一个Java项目": "ParseJavaProject", + "联网的ChatGPT": "ChatGPTConnectedToNetwork", + "解析任意code项目": "ParseAnyCodeProject", + "合并小写开头的段落块": "MergeLowercaseStartingParagraphBlocks", + "Latex英文润色": "EnglishProofreadingForLatex", + "Latex全文润色": "FullTextProofreadingForLatex", + "询问多个大语言模型": "InquiryMultipleLargeLanguageModels", + "解析一个Lua项目": "ParsingLuaProject", + "解析ipynb文件": "ParsingIpynbFiles", + "批量总结PDF文档": "BatchSummarizePDFDocuments", + "批量翻译PDF文档": "BatchTranslatePDFDocuments", + "理解PDF文档内容": "UnderstandPdfDocumentContent", + "Latex中文润色": "LatexChineseProofreading", + "Latex英文纠错": "LatexEnglishCorrection", + "Latex全文翻译": "LatexFullTextTranslation", + "同时问询_指定模型": "InquireSimultaneously_SpecifiedModel", + "批量生成函数注释": "BatchGenerateFunctionComments", + "解析一个前端项目": "ParseFrontendProject", + "高阶功能模板函数": "HighOrderFunctionTemplateFunctions", + "高级功能函数模板": "AdvancedFunctionTemplate", + "总结word文档": "SummarizingWordDocuments", + "载入对话历史存档": "LoadConversationHistoryArchive", + "Latex中译英": "LatexChineseToEnglish", + "Latex英译中": "LatexEnglishToChinese", + "连接网络回答问题": "ConnectToNetworkToAnswerQuestions", + "交互功能模板函数": "InteractiveFunctionTemplateFunction", + "交互功能函数模板": "InteractiveFunctionFunctionTemplate", + "sprint亮靛": "SprintIndigo", + "print亮黄": "PrintBrightYellow", + "print亮绿": "PrintBrightGreen", + "print亮红": "PrintBrightRed", + "解析项目源代码": "ParseProjectSourceCode", + "解析一个C项目": "ParseCProject", + "全项目切换英文": "SwitchToEnglishForTheWholeProject", + "谷歌检索小助手": "GoogleSearchAssistant", + "读取知识库作答": "ReadKnowledgeArchiveAnswerQuestions", + "print亮蓝": "PrintBrightBlue", + "微调数据集生成": "FineTuneDatasetGeneration", + "清理多余的空行": "CleanUpExcessBlankLines", + "编译Latex": "CompileLatex", + "解析Paper": "ParsePaper", + "ipynb解释": "IpynbExplanation", + "读文章写摘要": "ReadArticleWriteSummary", + "生成函数注释": "GenerateFunctionComments", + "解析项目本身": "ParseProjectItself", + "对话历史存档": "ConversationHistoryArchive", + "专业词汇声明": "ProfessionalTerminologyDeclaration", + "解析docx": "ParseDocx", + "解析源代码新": "ParsingSourceCodeNew", + "总结音视频": "SummaryAudioVideo", + "知识库问答": "UpdateKnowledgeArchive", + "多文件润色": "ProofreadMultipleFiles", + "多文件翻译": "TranslateMultipleFiles", + "解析PDF": "ParsePDF", + "同时问询": "SimultaneousInquiry", + "图片生成": "ImageGeneration", + "动画生成": "AnimationGeneration", + "语音助手": "VoiceAssistant", + "启动微调": "StartFineTuning" +} \ No newline at end of file diff --git a/multi_language.py b/multi_language.py index cba5fdc..7786b86 100644 --- a/multi_language.py +++ b/multi_language.py @@ -288,6 +288,7 @@ def trans_json(word_to_translate, language, special=False): def step_1_core_key_translate(): + LANG_STD = 'std' def extract_chinese_characters(file_path): syntax = [] with open(file_path, 'r', encoding='utf-8') as f: @@ -327,15 +328,15 @@ def step_1_core_key_translate(): for d in chinese_core_keys: if d not in chinese_core_keys_norepeat: chinese_core_keys_norepeat.append(d) need_translate = [] - cached_translation = read_map_from_json(language=LANG) + cached_translation = read_map_from_json(language=LANG_STD) cached_translation_keys = list(cached_translation.keys()) for d in chinese_core_keys_norepeat: if d not in cached_translation_keys: need_translate.append(d) - need_translate_mapping = trans(need_translate, language=LANG, special=True) - map_to_json(need_translate_mapping, language=LANG) - cached_translation = read_map_from_json(language=LANG) + need_translate_mapping = trans(need_translate, language=LANG_STD, special=True) + map_to_json(need_translate_mapping, language=LANG_STD) + cached_translation = read_map_from_json(language=LANG_STD) cached_translation = dict(sorted(cached_translation.items(), key=lambda x: -len(x[0]))) chinese_core_keys_norepeat_mapping = {}