Spaces:
Sleeping
Sleeping
| # -*- coding: utf-8 -*- | |
| import gradio as gr | |
| import os | |
| import re | |
| import json | |
| import subprocess | |
| from openai import OpenAI | |
| from retry import retry | |
| from random import choices | |
| from datetime import datetime | |
| os.environ["OPENAI_BASE_URL"] = "http://117.50.185.39:50080/v1" | |
| os.environ["OPENAI_API_KEY"] = "0" | |
| client = OpenAI() | |
| execution_desc = ["运行以上代码,输出会是: ", | |
| "现在将上面的代码复制到Python环境中运行,运行结果为:", | |
| "执行上述Python代码,运行结果将是:", | |
| "上面的Python代码执行结果为:", | |
| "运行上述代码,我们可以得到题目要求的答案。输出结果将是:"] | |
| def question_answer(query): | |
| g = open("collect.json", "a", encoding="utf-8") | |
| messages = [{"role": "system", "content": "你是一个数学解题大师,请解决以下数学题,务必详细说明解题思路,并在必要时提供Python代码来支持你的推理。答案中的数值应使用\\boxed{}包围,最后的答案以“因此”开头并直接给出结论,不要添加任何多余的内容。"}] | |
| messages.append({"role": "user", "content": f"题目:{query}"}) | |
| result = client.chat.completions.create(messages=messages, | |
| model="gpt-3.5-turbo", | |
| temperature=0.2, | |
| stream=True) | |
| reply_message = "" | |
| for chunk in result: | |
| if hasattr(chunk, "choices") and chunk.choices[0].delta.content: | |
| reply_message += chunk.choices[0].delta.content | |
| # find python code and execute the code | |
| if '```python' in reply_message: | |
| reply_message = '```'.join(reply_message.split('```')[:-1]).replace('```python', '\n```python') + '```' | |
| messages.append({"role": "assistant", "content": reply_message}) | |
| python_code_string = re.findall(r'```python\n(.*?)\n```', reply_message, re.S)[0] | |
| python_file_path = 'temp.py' | |
| with open(python_file_path, 'w') as f: | |
| f.write(python_code_string) | |
| python_code_run = subprocess.run(['python3', python_file_path], stdout=subprocess.PIPE, timeout=10) | |
| if python_code_run.returncode: | |
| print("生成的Python代码无法运行!") | |
| raise RuntimeError("生成的Python代码无法运行!") | |
| python_code_execution = python_code_run.stdout.decode('utf-8') | |
| os.remove(python_file_path) | |
| if "``````" in python_code_execution: | |
| raise ValueError("执行Python代码结果为空!") | |
| code_reply_str = choices(execution_desc, k=1)[0] | |
| code_reply = f"\n{code_reply_str}```{python_code_execution.strip()}```\n" | |
| reply_message += code_reply | |
| # yield reply_message | |
| messages.append({"role": "user", "content": code_reply}) | |
| result = client.chat.completions.create(messages=messages, | |
| model="gpt-3.5-turbo", | |
| temperature=0.2, | |
| stream=True) | |
| for chunk in result: | |
| if hasattr(chunk, "choices") and chunk.choices[0].delta.content: | |
| reply_message += chunk.choices[0].delta.content | |
| # yield reply_message | |
| print(reply_message) | |
| g.write(json.dumps({"query": query, | |
| "answer": reply_message, | |
| "time": datetime.now().strftime('%Y-%m-%d %H:%M:%S %f') | |
| }, ensure_ascii=False)+"\n") | |
| g.close() | |
| return reply_message | |
| demo = gr.Interface( | |
| fn=question_answer, | |
| inputs=gr.Textbox(lines=3, placeholder="题目", label="数学题目"), | |
| outputs=gr.Markdown(), | |
| ) | |
| demo.launch() |