|
from fastapi import FastAPI, Form |
|
from fastapi.responses import HTMLResponse |
|
from huggingface_hub import InferenceClient |
|
|
|
app = FastAPI() |
|
|
|
|
|
client = InferenceClient("mistralai/Mixtral-8x7B-Instruct-v0.1") |
|
|
|
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: "A/B/C/D" |
|
Explanation: "" |
|
\n |
|
[/INST] |
|
""" |
|
|
|
def generate_quiz(context): |
|
formatted_prompt = system_instructions(context) |
|
|
|
pre_prompt = [ |
|
{"role": "system", "content": formatted_prompt} |
|
] |
|
|
|
generate_kwargs = dict( |
|
temperature=0.1, |
|
max_new_tokens=2048, |
|
top_p=0.95, |
|
repetition_penalty=1.0, |
|
do_sample=True, |
|
seed=42, |
|
) |
|
|
|
response = client.text_generation( |
|
formatted_prompt, **generate_kwargs, stream=False, details=False, return_full_text=False, |
|
) |
|
|
|
return response |
|
|
|
@app.get("/", response_class=HTMLResponse) |
|
async def get_index(): |
|
return """ |
|
<!DOCTYPE html> |
|
<html lang="en"> |
|
<head> |
|
<meta charset="UTF-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
<title>Generate Quiz</title> |
|
</head> |
|
<body> |
|
<h2>Generate Quiz</h2> |
|
<form action="/generate-quiz" method="post"> |
|
<label for="context">Context:</label><br> |
|
<textarea id="context" name="context" rows="4" cols="50" required></textarea><br><br> |
|
<input type="submit" value="Generate Quiz"> |
|
</form> |
|
</body> |
|
</html> |
|
""" |
|
|
|
@app.post("/generate-quiz", response_class=HTMLResponse) |
|
async def generate_quiz_endpoint(context: str = Form(...)): |
|
response = await generate_quiz(context) |
|
|
|
quiz_html = f""" |
|
<!DOCTYPE html> |
|
<html lang="en"> |
|
<head> |
|
<meta charset="UTF-8"> |
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
<title>Generated Quiz</title> |
|
</head> |
|
<body> |
|
<h2>Generated Quiz</h2> |
|
<pre>{response}</pre> |
|
<p><a href="/">Back to generate another quiz</a></p> |
|
</body> |
|
</html> |
|
""" |
|
|
|
return HTMLResponse(content=quiz_html) |