33import logging
44from generate_quiz import QuizGenerator
55from generate_image import ImageGenerator
6- from fastapi import FastAPI , Request
6+ from fastapi import FastAPI , Query
77from fastapi .responses import StreamingResponse , JSONResponse
88from 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
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