weiwei1392
share
b6c027d
import gradio as gr
import pandas as pd
from llm import OpenAI3, OpenAI4
from question import generate
block_css = """
.importantButton {
background: linear-gradient(45deg, #7e0570,#5d1c99, #6e00ff) !important;
border: none !important;
}
.importantButton:hover {
background: linear-gradient(45deg, #ff00e0,#8500ff, #6e00ff) !important;
border: none !important;
}"""
webui_title = "📚📚📚📚📚📚📚📚📚📚📚📚* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ☘️ * * *智能生题* * * ☘️ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *📚📚📚📚📚📚📚📚📚📚📚📚"
llm_name_dict = {'chatgpt-3.5': 'OpenAI3', 'chatgpt-4': 'OpenAI4', 'chatglm—6b': 'ChatGLM'}
kg = pd.read_excel('教材知识点.xlsx')
qt = pd.read_excel('题型.xlsx')
def llm_change(name):
llm = eval(eval('llm_name_dict[name]'))()
return llm
def clear_screen(chatbot):
return [[None, None]]
def function_select(mode):
if mode == "试题生成":
return gr.update(visible=True), gr.update(visible=False), gr.update(visible=False), gr.update(visible=False)
elif mode == "试卷生成":
return gr.update(visible=False), gr.update(visible=True), gr.update(visible=False), gr.update(visible=False)
elif mode == "阅读理解生成":
return gr.update(visible=False), gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)
else:
return gr.update(visible=False), gr.update(visible=False), gr.update(visible=False), gr.update(visible=True)
def update_semesters(_publisher):
df = kg[kg['教材'] == _publisher]
_semesters = list(set(df['学期']))
_semesters.sort()
return gr.inputs.Dropdown.update(choices=_semesters)
def update_units(_publisher, _semester):
df = kg[kg['教材'] == _publisher]
df = df[df['学期'] == _semester]
_units = list(set(df['进度']))
_units.sort()
return gr.inputs.Dropdown.update(choices=_units)
def update_material_and_skill(_publisher, _semester, _unit, _material_type):
df = kg[kg['教材'] == _publisher]
df = df[df['学期'] == _semester]
df = df[df['进度'] == _unit]
_materials = df[_material_type].to_list()
_materials = list(set(_materials[0].split('\n')))
_materials.sort()
if '' in _materials:
_materials.pop(_materials.index(''))
# _materials = ['全选', '随机'] + _materials
df = qt[qt['材料类型'] == _material_type]
_skills = list(set(df['能指']))
_skills.sort()
return gr.inputs.Radio.update(choices=_materials, value=None), gr.inputs.Radio.update(choices=_skills, value=None),\
gr.inputs.Radio.update(choices=[], value=None), gr.inputs.Radio.update(choices=[], value=None), \
gr.inputs.Textbox.update(value='')
def update_question_class(_material_type, _skill):
df = qt[qt['材料类型'] == _material_type]
df = df[df['能指'] == _skill]
_question_class = list(set(df['一级题型']))
_question_class.sort()
return gr.inputs.Dropdown.update(choices=_question_class, value=None), \
gr.inputs.Dropdown.update(choices=[], value=None), \
gr.inputs.Textbox.update(value=''),
def update_question_type(_material_type, _skill, _question_class):
df = qt[qt['材料类型'] == _material_type]
df = df[df['能指'] == _skill]
df = df[df['一级题型'] == _question_class]
_question_type = list(set(df['二级题型']))
_question_type.sort()
return gr.inputs.Dropdown.update(choices=_question_type)
def update_question_example(_question_type):
if _question_type:
df = qt[qt['二级题型'] == _question_type]
return df['样例'].to_list()[0]
else:
return ''
def generate_questions(_model_mode, _material, _question_type, _question_num, _chatbot):
questions = generate(materials=_material, q_type=_question_type, q_num=_question_num, model=_model_mode)
response = _question_type + '\n\n'
for i in range(len(questions)):
q = questions[i]
response = response + f'{i+1}_question:\n\n' + q['question'] + '\n\n' + f'{i+1}_answer:\n\n' +\
q['answer'] + '\n\n\n\n'
_chatbot = _chatbot + [[None, response]]
return _chatbot
with gr.Blocks(css=block_css) as demo:
gr.Markdown('\n\n\n\n')
gr.Markdown(webui_title)
gr.Markdown('\n\n\n\n')
llm = gr.State('')
# model_mode = gr.Radio(['chatgpt-3.5', "chatgpt-4", 'chatglm—6b'], label="请选择驱动模型")
model_mode = gr.Radio(['chatgpt-3.5'], label="请选择驱动模型")
model_mode.change(fn=llm_change, inputs=[model_mode], outputs=[llm])
# fun_mode = gr.Radio(["试题生成"], label="请选择功能模式", value="试题生成")
# fun_mode = gr.Radio(["试题生成","试卷生成", "阅读理解生成", "作文批改"], label="请选择功能模式", value="试卷生成")
qg = gr.Column(visible=True)
pg = gr.Column(visible=False)
rc = gr.Row(visible=False)
aa = gr.Row(visible=False)
# fun_mode.change(fn=function_select, inputs=[fun_mode], outputs=[qg, pg, rc, aa])
# progress.change(fn=llm_change, inputs=[model_mode], outputs=[llm])
with qg:
with gr.Row():
with gr.Column(scale=10):
publishers = list(set(kg['教材']))
publishers.sort()
publisher = gr.inputs.Dropdown(label="版本", choices=publishers)
semester = gr.inputs.Dropdown(label="学期", choices=[])
unit = gr.inputs.Dropdown(label="单元", choices=[])
material_type = gr.Radio(['词汇', '短语', '句子', '语法'], label="出题材料类型")
material = gr.CheckboxGroup([], label="出题材料")
skill = gr.Radio([], label="考察能力")
question_class = gr.Radio([], label="题类")
question_type = gr.Radio(label="题型", choices=[])
question_example = gr.Textbox('', label='题例')
publisher.change(update_semesters, inputs=[publisher], outputs=[semester])
semester.change(update_units, inputs=[publisher, semester], outputs=[unit])
skill.change(update_question_class, inputs=[material_type, skill],
outputs=[question_class, question_type, question_example])
question_class.change(update_question_type, inputs=[material_type, skill, question_class],
outputs=[question_type])
question_type.change(update_question_example, inputs=[question_type], outputs=[question_example])
material_type.change(update_material_and_skill, inputs=[publisher, semester, unit, material_type],
outputs=[material, skill, question_class, question_type, question_example])
# option_num = gr.Slider(0, 5, value=3, step=1, label="选项数量", interactive=True)
question_num = gr.Slider(0, 5, value=1, step=1, label="题量", interactive=True)
# question = gr.Textbox('', label='生成题目')
generate_button = gr.Button('生成')
with gr.Column(scale=10):
chatbot = gr.Chatbot([[None, None]],
elem_id="chat-box",
show_label=False).style(height=1000)
generate_button.click(generate_questions, inputs=[model_mode, material, question_type, question_num,
chatbot], outputs=chatbot)
# with pg:
#
# publisher = gr.inputs.Dropdown(label="教材版本", choices=textbooks)
# semester = gr.inputs.Dropdown(label="教材版本", choices=['三年级上', '三年级下'])
# progress = gr.Radio(['unit1', 'unit2', 'unit3', 'unit4', 'unit5', 'unit6', 'unit7', '期中', 'unit8', 'unit9',
# 'unit10', 'unit11', 'unit12', 'unit13', 'unit14', '期末'], label="请选择教学进度")
#
# with gr.Row():
#
# with gr.Column(scale=10):
#
# gr.Markdown('\n\n\n\n')
# gr.Markdown('📚**************word pronunciation**************📚')
# gr.Markdown('\n\n\n\n')
#
# gr.Markdown('\n')
# gr.Markdown('choice')
# gr.Markdown('\n')
#
# word_p1 = gr.Slider(0,
# 5,
# value=2,
# step=1,
# label="选择划线部分发音不同的单词",
# interactive=True)
#
# word_p2 = gr.Slider(0,
# 5,
# value=1,
# step=1,
# label="选择与指定单词划线部分发音不同的单词",
# interactive=True)
#
# word_p3 = gr.Slider(0,
# 5,
# value=2,
# step=1,
# label="以下划线字母哪个发/r/的音",
# interactive=True)
#
# gr.Markdown('\n')
# gr.Markdown('judge')
# gr.Markdown('\n')
#
# word_p4 = gr.Slider(0,
# 5,
# value=1,
# step=1,
# label="判断下列单词划线部分读音是否相同",
# interactive=True)
# gr.Markdown('\n\n\n\n')
# gr.Markdown('📚**************word spelling**************📚')
# gr.Markdown('\n\n\n\n')
#
# gr.Markdown('\n')
# gr.Markdown('choice')
# gr.Markdown('\n')
#
# word_s1 = gr.Slider(0,
# 5,
# value=2,
# step=1,
# label="选出拼写正确的单词",
# interactive=True)
#
# word_s2 = gr.Slider(0,
# 5,
# value=1,
# step=1,
# label="选择正确的拼写补全单词",
# interactive=True)
#
# word_s3 = gr.Slider(0,
# 5,
# value=2,
# step=1,
# label="看图,选出该图表示单词的首字母",
# interactive=True)
#
# gr.Markdown('\n')
# gr.Markdown('fill')
# gr.Markdown('\n')
#
# word_s4 = gr.Slider(0,
# 5,
# value=1,
# step=1,
# label="根据图片补全单词",
# interactive=True)
# gr.Markdown('\n\n\n\n')
# gr.Markdown('📚**************word meaning**************📚')
# gr.Markdown('\n\n\n\n')
#
# gr.Markdown('\n')
# gr.Markdown('choice')
# gr.Markdown('\n')
#
# word_m1 = gr.Slider(0,
# 5,
# value=2,
# step=1,
# label="挑选一组词中不同类的词",
# interactive=True)
#
# word_m2 = gr.Slider(0,
# 5,
# value=1,
# step=1,
# label="挑选单词的正确释义",
# interactive=True)
#
# word_m3 = gr.Slider(0,
# 5,
# value=2,
# step=1,
# label="选择可以替换划线部分的词",
# interactive=True)
# word_m4 = gr.Slider(0,
# 5,
# value=2,
# step=1,
# label="选择与图片相符的单词",
# interactive=True)
#
# gr.Markdown('\n')
# gr.Markdown('judge')
# gr.Markdown('\n')
#
# word_m5 = gr.Slider(0,
# 5,
# value=1,
# step=1,
# label="判断单词中文意思是否正确",
# interactive=True)
#
# word_m6 = gr.Slider(0,
# 5,
# value=1,
# step=1,
# label="判断下列单词是否属于同一类",
# interactive=True)
#
# gr.Markdown('\n')
# gr.Markdown('fill')
# gr.Markdown('\n')
#
# word_m7 = gr.Slider(0,
# 5,
# value=1,
# step=1,
# label="根据汉语提示补全句子",
# interactive=True)
#
# word_m8 = gr.Slider(0,
# 5,
# value=1,
# step=1,
# label="根据图片提示补全句子",
# interactive=True)
#
# word_m9 = gr.Slider(0,
# 5,
# value=1,
# step=1,
# label="下厨下列单词的反义词",
# interactive=True)
#
# gr.Markdown('\n\n\n\n')
# gr.Markdown('📚**************fixed phrase**************📚')
# gr.Markdown('\n\n\n\n')
#
# gr.Markdown('\n')
# gr.Markdown('choice')
# gr.Markdown('\n')
#
# phrase_f1 = gr.Slider(0,
# 5,
# value=2,
# step=1,
# label="请选择合适的词语将句子补充完整",
# interactive=True)
#
# gr.Markdown('\n\n\n\n')
# gr.Markdown('📚**************sentence structure**************📚')
# gr.Markdown('\n\n\n\n')
#
# gr.Markdown('\n')
# gr.Markdown('fill')
# gr.Markdown('\n')
#
# sentence_s1 = gr.Slider(0,
# 5,
# value=2,
# step=1,
# label="请将下列单词组成句子",
# interactive=True)
#
# gr.Markdown('\n\n\n\n')
# gr.Markdown('📚**************sentence meaning**************📚')
# gr.Markdown('\n\n\n\n')
#
# gr.Markdown('\n')
# gr.Markdown('fill')
# gr.Markdown('\n')
#
# sentence_s2 = gr.Slider(0,
# 5,
# value=2,
# step=1,
# label="请将下列汉语翻译成对应英语",
# interactive=True)
#
# gr.Markdown('\n')
# gr.Markdown('choice')
# gr.Markdown('\n')
#
# sentence_s3 = gr.Slider(0,
# 5,
# value=2,
# step=1,
# label="选出正确的中文翻译",
# interactive=True)
#
#
# gr.Markdown('\n\n\n\n')
# gr.Markdown('📚**************名词所有格**************📚')
# gr.Markdown('\n\n\n\n')
#
# gr.Markdown('\n')
# gr.Markdown('choice')
# gr.Markdown('\n')
#
# grammar_1 = gr.Slider(0,
# 5,
# value=2,
# step=1,
# label="请选择正确的单词进行填空",
# interactive=True)
#
# gr.Markdown('\n\n\n\n')
# gr.Markdown('📚**************there be 句型**************📚')
# gr.Markdown('\n\n\n\n')
#
# gr.Markdown('\n')
# gr.Markdown('choice')
# gr.Markdown('\n')
#
# grammar_2 = gr.Slider(0,
# 5,
# value=2,
# step=1,
# label="请选择正确的单词进行填空",
# interactive=True)
#
# # gr.Markdown(f'试卷存储路径')
# # paper_path = gr.Textbox(show_label=False, placeholder="请输入待生成试卷存放路径",
# # value='.\\papers\\', lines=1).style(container=False)
#
# generate_button = gr.Button(value="生成试卷", visible=False)
#
# with gr.Column(scale=10):
#
# chatbot = gr.Chatbot([[None, None]],
# elem_id="chat-box",
# show_label=False).style(height=1000)
#
# generate_button.click(fn=generate_paper,
# inputs=[progress, word_p1, word_p2, word_p3, word_p4, word_s1, word_s2, word_s3, word_s4,
# word_m1, word_m2, word_m3, word_m4, word_m5, word_m6, word_m7, word_m8, word_m9,
# phrase_f1, sentence_s1, sentence_s2, sentence_s3, grammar_1, grammar_2],
# outputs=[chatbot])
# with rc:
#
# with gr.Column(scale=10):
# chatbot = gr.Chatbot([[None, None]],
# elem_id="chat-box",
# show_label=False).style(height=800)
# clear_button = gr.Button(value="清屏")
# clear_button.click(fn=clear_screen, inputs=[chatbot], outputs=[chatbot])
#
# with gr.Column(scale=10):
#
# with gr.Tab('生成配置'):
# generate_number = gr.Slider(1,
# 5,
# value=3,
# step=1,
# label="请设定单篇文章需要生成的问题数量",
# interactive=True)
#
# gr.Markdown(f'单篇生成')
# texts = gr.Textbox(show_label=False, placeholder="文本内容", lines=12).style(container=False)
# text_button = gr.Button(value="生成问题")
# text_button.click(fn=text_generate, inputs=[chatbot, texts, generate_number, llm], outputs=[chatbot])
#
# gr.Markdown(f'批量生成')
# folder_address = gr.File(label="添加文件",
# file_types=['.txt', '.md', '.docx', '.pdf'],
# file_count="multiple",
# show_label=False
# )
# file_button = gr.Button(value="生成问题")
# file_button.click(fn=files_generate, inputs=[chatbot, folder_address, generate_number, llm],
# outputs=[chatbot])
#
# with aa:
#
# with gr.Column(scale=10):
# chatbot = gr.Chatbot([[None, None]],
# elem_id="chat-box",
# show_label=False).style(height=800)
# clear_button = gr.Button(value="清屏")
# clear_button.click(fn=clear_screen, inputs=[chatbot], outputs=[chatbot])
#
# with gr.Column(scale=10):
#
# with gr.Tab('批改配置'):
#
# gr.Markdown(f'写作要求')
# require_texts = gr.Textbox(show_label=False, placeholder="文本内容", lines=4).style(container=False)
# # require_texts_button = gr.Button(value="批改")
# # require_texts_button.click(fn=text_correct, inputs=[chatbot, texts, llm], outputs=[chatbot])
#
# gr.Markdown(f'单篇批改')
# feedback_texts = gr.Textbox(show_label=False, placeholder="文本内容", lines=12).style(container=False)
# feedback_button = gr.Button(value="批改")
# feedback_button.click(fn=text_correct, inputs=[chatbot, require_texts, feedback_texts, llm],
# outputs=[chatbot])
#
# gr.Markdown(f'批量批改')
# folder_address = gr.File(label="添加文件",
# file_types=['.txt', '.md', '.docx', '.pdf'],
# file_count="multiple",
# show_label=False
# )
# file_button = gr.Button(value="批改")
# file_button.click(fn=files_correct, inputs=[chatbot, require_texts, folder_address, llm],
# outputs=[chatbot])
# demo.queue(concurrency_count=5).launch(server_name='0.0.0.0', server_port=7858, share=True)
demo.queue(concurrency_count=5).launch()