Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import transformers | |
| import os | |
| import sys | |
| import openai | |
| from openai import Completion as complete | |
| qa_gen_prompt = str("""You are a highly intelligent & complex question-answer generative model. | |
| You take a passage as an input and generate 5 high-quality and diverse multiple-choice questions | |
| with four choices each from the given passage by imitating the way a human asks questions and give answers. | |
| Your output format is only | |
| [{\"Q\": Question, \"A1\": Answer, \"A2\": Answer,\"A3\": Answer, \"A4\": Answer}, ...]\") }} form, no other form. \n The passage: """) | |
| end_prompt = "the QA pairs:" | |
| openai.api_key = os.environ["openai_api_key"] | |
| access_code = os.environ["access_code"] | |
| def convert_questions_to_html(qapairs): | |
| qapairs_template = [] | |
| for qapair in qapairs: | |
| result = "<problem>\n<choiceresponse> \n<label>" + qapair['Q'] + "</label>\n<checkboxgroup>" | |
| for key, value in qapair.items(): | |
| if key != "Q": | |
| result += "\n <choice correct=\"false\">" + value + "</choice>" | |
| result+="\n" | |
| result += " </checkboxgroup>\n</choiceresponse>\n</problem>" | |
| qapairs_template.append(result) | |
| return "".join([qa + "\n\n" for qa in qapairs_template]) | |
| def convert_questions_to_template(qapairs): | |
| qapairs_template = [] | |
| for qapair in qapairs: | |
| result = ">>" + qapair['Q'] + " <<\n\n" | |
| choices = [qapair['A1'], qapair['A2'], qapair['A3'], qapair['A4']] | |
| for i, choice in enumerate(choices): | |
| result += "[ ] " + choice + "\n" | |
| qapairs_template.append(result) | |
| return "".join([qa + "\n\n" for qa in qapairs_template]) | |
| def list_of_dicts_to_str(qapairs, indent=0): | |
| result = '' | |
| for d in qapairs: | |
| for key, value in d.items(): | |
| if key.startswith("A"): | |
| result += ' ' * (indent + 4) + str(key) + ': ' + str(value) + '\n' | |
| else: | |
| result += ' ' * indent + str(key) + ': ' + str(value) + '\n' | |
| return result | |
| def generate_questions(context, credentials): | |
| """ | |
| Generate questions by calling davinci-003. | |
| """ | |
| if credentials != access_code: | |
| return "Code d'accès incorrect. Veuillez réessayer.", "Code d'accès incorrect. Veuillez réessayer.", "Code d'accès incorrect. Veuillez réessayer." | |
| prompt = qa_gen_prompt + context + end_prompt | |
| try: | |
| completion = complete.create(model="text-davinci-003", prompt=prompt, max_tokens=1875) | |
| q_dict = eval(completion.choices[0].text) | |
| return list_of_dicts_to_str(q_dict), convert_questions_to_html(q_dict), convert_questions_to_template(q_dict) | |
| except Exception as e: | |
| # return str(e) | |
| # return python version | |
| return str(sys.version) | |
| with gr.Blocks() as demo: | |
| # with gr.Row(): | |
| # with gr.Column(): | |
| with gr.Row(): | |
| with gr.Column(): | |
| gr.Markdown("## Générateur de questions à choix multiples") | |
| gr.Markdown("Pour créer des questions à choix multiples, insérez un texte dans la boîte à gauche, puis cliquez sur 'Générer des questions.' Attention! N'oubliez pas le code d'accès.") | |
| with gr.Column(): | |
| quiz_button = gr.Button("Générer cinq questions.", variant="primary") | |
| credentials = gr.Textbox(placeholder="Code d'accès", lines=1, label="") | |
| with gr.Row(): | |
| context = gr.Textbox(placeholder="insérez le texte ici.", lines=8, label="Texte") | |
| with gr.Tab("brut"): | |
| qa_pairs = gr.Textbox(placeholder="Les questions apparaîtront ici.", lines=19, label="Paires question-réponse") | |
| with gr.Tab("format html"): | |
| qa_pairs_html = gr.Textbox(placeholder="Les questions apparaîtront ici.", lines=19, label="Paires question-réponse, format html") | |
| with gr.Tab("format edulib"): | |
| qa_pairs_edulib = gr.Textbox(placeholder="Les questions apparaîtront ici.", lines=19, label="Paires question-réponse, format edulib") | |
| #todo: test generating with just one phrase for one MCQ with smaller models | |
| quiz_button.click(fn= generate_questions, | |
| inputs=[context, credentials], | |
| outputs=[qa_pairs, qa_pairs_html, qa_pairs_edulib] | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |