Skip to content

Commit 01daf15

Browse files
change to ues api keys
1 parent 5dd52ee commit 01daf15

5 files changed

Lines changed: 45 additions & 30 deletions

File tree

backend/fastapi_generate_quiz.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,18 @@
22
# AI-powered quiz generation and image creation service
33
# https://platform.openai.com/docs/api-reference/streaming
44
import logging
5-
from generate_quiz import QuizGenerator
6-
from generate_image import ImageGenerator
5+
from typing import Optional
6+
7+
from dotenv import load_dotenv
78
from fastapi import FastAPI, Query
8-
from fastapi.responses import StreamingResponse, JSONResponse
99
from fastapi.middleware.cors import CORSMiddleware
10-
from typing import Optional
10+
from fastapi.responses import JSONResponse, StreamingResponse
11+
12+
from generate_image import ImageGenerator
13+
from generate_quiz import QuizGenerator
14+
15+
# Load environment variables from .env file
16+
load_dotenv()
1117

1218
# Configure logging
1319
logging.basicConfig(level=logging.INFO)

backend/generate_quiz.py

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
1-
from typing import Generator, Optional
2-
import logging
31
import json
2+
import logging
43
import os
5-
from response_stream_parser import ResponseStreamParser
4+
from typing import Generator, Optional
5+
66
import litellm
7+
from dotenv import load_dotenv
8+
9+
from response_stream_parser import ResponseStreamParser
10+
11+
# Load environment variables
12+
load_dotenv()
713

814
# Set up logging
915
logger = logging.getLogger(__name__)
@@ -66,25 +72,23 @@ class QuizGenerator:
6672

6773
@classmethod
6874
def check_api_key_from_env(cls) -> None:
69-
"""Retrieves the API keys from environment variables.
75+
"""Check if at least one API key is available.
7076
7177
Raises:
72-
ValueError: If the environment variable is not set or empty.
78+
ValueError: If no API keys are found.
7379
"""
74-
75-
for key in [
76-
"OPENAI_API_KEY",
77-
"GEMINI_API_KEY",
78-
"DEEPSEEK_API_KEY",
79-
"AZURE_AI_API_KEY",
80-
"AZURE_AI_API_BASE",
81-
]:
82-
api_key = os.getenv(key)
83-
if not api_key:
84-
raise ValueError(
85-
f"Environment variable {key} is not set."
86-
"Please ensure it's set and try again."
87-
)
80+
api_keys = [
81+
os.getenv("OPENAI_API_KEY"),
82+
os.getenv("GEMINI_API_KEY"),
83+
os.getenv("DEEPSEEK_API_KEY"),
84+
os.getenv("AZURE_AI_API_KEY"),
85+
]
86+
87+
if not any(api_keys):
88+
raise ValueError(
89+
"No API keys found. Please set at least one of: "
90+
"OPENAI_API_KEY, GEMINI_API_KEY, DEEPSEEK_API_KEY, or AZURE_AI_API_KEY"
91+
)
8892

8993
@staticmethod
9094
def check_model_is_supported(model: str) -> str:
@@ -218,7 +222,7 @@ def print_quiz(generator: Generator[str, None, None]):
218222
"azure_ai/DeepSeek-R1",
219223
]
220224

221-
quiz_generator = QuizGenerator(model="gemini/gemini-2.0-flash")
225+
quiz_generator = QuizGenerator(model="o1-mini")
222226

223227
topic = "Crested Gecko"
224228
difficulty = "Medium"

backend/pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ dependencies = [
1111
"fastapi",
1212
"uvicorn",
1313
"litellm",
14+
"python-dotenv",
1415
]
1516

1617
[project.optional-dependencies]

backend/tests/test_generate_quiz.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,16 @@ def test_check_model_is_supported(self):
4343

4444
def test_environment_variable_not_set(self, monkeypatch):
4545
"""
46-
Test that initializing QuizGenerator without an API key (i.e. if the environment variable
47-
is not set) raises a ValueError.
48-
49-
We remove the environment variable and expect the constructor to raise an error.
46+
Test that initializing QuizGenerator without any API keys raises a ValueError.
5047
"""
48+
# Remove all API keys
5149
monkeypatch.delenv("OPENAI_API_KEY", raising=False)
50+
monkeypatch.delenv("GEMINI_API_KEY", raising=False)
51+
monkeypatch.delenv("DEEPSEEK_API_KEY", raising=False)
52+
monkeypatch.delenv("AZURE_AI_API_KEY", raising=False)
53+
5254
with pytest.raises(
53-
ValueError, match="Environment variable OPENAI_API_KEY is not set"
55+
ValueError, match="No API keys found"
5456
):
5557
QuizGenerator()
5658

@@ -70,7 +72,7 @@ def test_create_role(self, quiz_generator):
7072
assert str(n_questions) in role
7173
assert quiz_generator.EXAMPLE_RESPONSE in role
7274

73-
@patch("backend.generate_quiz.completion")
75+
@patch("backend.generate_quiz.litellm.completion")
7476
def test_generate_quiz(self, mock_completion, quiz_generator):
7577
"""Test generate_quiz to ensure it streams responses properly."""
7678
mock_stream = iter(['{"question": "What is 2+2?", "answer": "4"}\n'])

backend/uv.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)