Skip to content

Commit 2198ea0

Browse files
Update fastapi docs
1 parent 2e41a7c commit 2198ea0

1 file changed

Lines changed: 16 additions & 41 deletions

File tree

backend/fastapi_generate_quiz.py

Lines changed: 16 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
import logging
44
from generate_quiz import QuizGenerator
55
from generate_image import ImageGenerator
6-
from fastapi import FastAPI, Request
6+
from fastapi import FastAPI, Query
77
from fastapi.responses import StreamingResponse, JSONResponse
88
from fastapi.middleware.cors import CORSMiddleware
9+
from typing import Optional
910

1011
# Copy Azure Docs Example
1112
# https://github.com/Azure-Samples/fastapi-on-azure-functions/tree/main
@@ -22,7 +23,12 @@
2223

2324

2425
@app.get("/GenerateQuiz")
25-
async def generate_quiz_endpoint(request: Request) -> JSONResponse:
26+
async def generate_quiz_endpoint(
27+
topic: str = Query(..., description="The subject for the quiz (e.g., 'UK History')"),
28+
difficulty: str = Query(..., description="The desired difficulty (e.g., 'easy', 'medium', 'hard')"),
29+
n_questions: int = Query(10, description="Number of questions to generate (defaults to 10)"),
30+
model: Optional[str] = Query(None, description="The model to use. If not provided, the default from QuizGenerator is used")
31+
) -> StreamingResponse:
2632
"""
2733
FastAPI endpoint to generate a quiz based on topic, difficulty, and model.
2834
@@ -34,57 +40,31 @@ async def generate_quiz_endpoint(request: Request) -> JSONResponse:
3440
3541
Returns:
3642
- StreamingResponse: Streams quiz questions in SSE format.
37-
- JSONResponse: Error message if required parameters are missing.
3843
"""
39-
# Retrieve query parameters
40-
topic = request.query_params.get("topic")
41-
difficulty = request.query_params.get("difficulty")
42-
n_questions = request.query_params.get("n_questions")
43-
model = request.query_params.get("model")
44-
4544
logging.info(
4645
f"Python HTTP trigger function processed a request with {topic=} {difficulty=}, {n_questions=}, model={model}."
4746
)
4847

49-
# If either 'topic' or 'difficulty' is missing, return an error.
50-
if not topic or not difficulty:
51-
error_message = "Please provide a topic and difficulty in the query string or in the request body to generate a quiz."
52-
logging.error(error_message)
53-
return JSONResponse(
54-
content={"error": error_message},
55-
status_code=400,
56-
)
57-
58-
# Set default number of questions if not provided.
59-
if not n_questions:
60-
n_questions = 10
61-
else:
62-
# Convert n_questions to an integer if provided as string.
63-
try:
64-
n_questions = int(n_questions)
65-
except ValueError:
66-
error_message = "n_questions must be an integer."
67-
logging.error(error_message)
68-
return JSONResponse(
69-
content={"error": error_message},
70-
status_code=400,
71-
)
72-
7348
logging.info(
7449
f"Generating quiz with: {topic=}, {difficulty=}, {n_questions=}, {model=}."
7550
)
7651

7752
# Create a QuizGenerator instance.
7853
# TODO: rename to quiz creator ?
79-
quiz_generator = QuizGenerator(model=model)
54+
if model is not None:
55+
quiz_generator = QuizGenerator(model=model)
56+
else:
57+
quiz_generator = QuizGenerator()
8058
generator = quiz_generator.generate_quiz(topic, difficulty, n_questions)
8159

8260
# Return the quiz as a streaming response in SSE format.
8361
return StreamingResponse(generator, media_type="text/event-stream")
8462

8563

8664
@app.get("/GenerateImage")
87-
async def generate_image_endpoint(request: Request) -> JSONResponse:
65+
async def generate_image_endpoint(
66+
prompt: str = Query(..., description="The prompt for image generation")
67+
) -> JSONResponse:
8868
"""
8969
FastAPI endpoint to generate an image based on a provided prompt.
9070
@@ -95,12 +75,7 @@ async def generate_image_endpoint(request: Request) -> JSONResponse:
9575
- JSONResponse: Contains the generated image URL or an error message.
9676
"""
9777
logging.info("Processing image generation request.")
98-
prompt = request.query_params.get("prompt")
99-
if not prompt:
100-
error_message = "No prompt query param provided for image generation."
101-
logging.warning(error_message)
102-
return JSONResponse(content={"error": error_message}, status_code=400)
103-
78+
10479
logging.info(f"Received image prompt: {prompt}")
10580
image_generator = ImageGenerator()
10681
image_url = image_generator.generate_image(prompt)

0 commit comments

Comments
 (0)