File size: 2,187 Bytes
4d33dac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e577e73
2f73a63
4d33dac
 
 
 
ab2cbe2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
from flask import Flask, request, jsonify, render_template
from huggingface_hub import InferenceClient
from requests.exceptions import RequestException

app = Flask(__name__)

client = InferenceClient("mistralai/Mistral-7B-Instruct-v0.2")

def system_instructions(context):
    return f"""<s> [INST] Your are a great teacher and your task is to create 6 questions with answer and 4 choices based on the following context:\n\n{context}\n\n. Each example should be like this
    Question: ""
    Choices:
    A): ""
    B): ""
    C): ""
    D): ""
    Answer: "Choose either A, B, C, or D as the correct answer"
    Explanation: ""
    \n
    [/INST]
    """

def generate_quiz(context):
    formatted_prompt = system_instructions(context)

    generate_kwargs = dict(
            temperature=0.1,
            max_new_tokens=2048,
            top_p=0.95,
            repetition_penalty=1.0,
            do_sample=True,
            seed=42,)
        
    try:
        response = client.text_generation(
            formatted_prompt,
            **generate_kwargs,
            stream=False,
            details=False,
            return_full_text=False,
        )
        return response
        
    except (RequestException, SystemExit) as e:
        return {"error": str(e)}

@app.route("/", methods=["GET", "POST"])
def generate_quiz_page():
    if request.method == "POST":
        if request.content_type == 'application/json':
            data = request.get_json()
            context = data.get("context")
            if context is None or context.strip() == "":
                return jsonify({"error": "Missing or empty 'context' parameter"}), 400
        else:
            context = request.form.get("context")
            if context is None or context.strip() == "":
                return jsonify({"error": "Missing or empty 'context' parameter"}), 400
        
        response = generate_quiz(context)

        if request.content_type == 'application/json':
            return jsonify(response)
            
        return render_template('quiz.html', textWithAnswers=response)
    
    return render_template('index.html')

if __name__ == "__main__":
    app.run(debug=True)