n8cha commited on
Commit
8cccf42
·
1 Parent(s): 5bca8f8

add error handling for missing env vars and respective tests

Browse files
Files changed (2) hide show
  1. app.py +12 -2
  2. test_app.py +26 -1
app.py CHANGED
@@ -50,9 +50,19 @@ def generate_prompt(request: gr.Request):
50
  try:
51
  # Read the system prompt from file
52
  system_prompt = os.environ.get("SYSTEM_PROMPT")
 
 
 
 
 
 
 
 
 
 
53
 
54
  # Initialize OpenAI client
55
- client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
56
 
57
  # Make API call
58
  session_id = request.session_hash
@@ -72,7 +82,7 @@ def generate_prompt(request: gr.Request):
72
 
73
  except Exception as e:
74
  logger.error(f"API request failed - Session: {session_id} - Error: {str(e)}")
75
- return "Could not generate a prompt. No fish today."
76
 
77
  with gr.Blocks(
78
  title="Prompt Roulette",
 
50
  try:
51
  # Read the system prompt from file
52
  system_prompt = os.environ.get("SYSTEM_PROMPT")
53
+ api_key = os.environ.get("OPENAI_API_KEY")
54
+
55
+ # Validate required environment variables
56
+ if not system_prompt:
57
+ logger.error("SYSTEM_PROMPT environment variable not set")
58
+ return "⚠️ Service temporarily unavailable. Please try again later."
59
+
60
+ if not api_key:
61
+ logger.error("OPENAI_API_KEY environment variable not set")
62
+ return "⚠️ Service temporarily unavailable. Please try again later."
63
 
64
  # Initialize OpenAI client
65
+ client = OpenAI(api_key=api_key)
66
 
67
  # Make API call
68
  session_id = request.session_hash
 
82
 
83
  except Exception as e:
84
  logger.error(f"API request failed - Session: {session_id} - Error: {str(e)}")
85
+ return "⚠️ Could not generate a prompt. No fish today."
86
 
87
  with gr.Blocks(
88
  title="Prompt Roulette",
test_app.py CHANGED
@@ -9,6 +9,10 @@ TEST_OPENAI_CHAT_RESPONSE_CONTENT = "You are ..."
9
  TEST_GRADIO_SESSION_HASH = "prompt-roulette-session-..."
10
 
11
  class TestGeneratePrompt:
 
 
 
 
12
  @patch("app.OpenAI")
13
  @patch.dict(os.environ, {
14
  "SYSTEM_PROMPT": TEST_SYSTEM_PROMPT,
@@ -55,10 +59,14 @@ class TestGeneratePrompt:
55
  # Call the function
56
  result = generate_prompt(mock_gradio_request)
57
 
58
- assert result == "Could not generate a prompt. No fish today."
59
 
60
  @patch("app.logger")
61
  @patch("app.OpenAI")
 
 
 
 
62
  def test_logging_on_success(self, mock_openai_class, mock_logger):
63
  """Test that logging works correctly on successful API call."""
64
  api_total_token_count = 500
@@ -92,6 +100,10 @@ class TestGeneratePrompt:
92
 
93
  @patch("app.logger")
94
  @patch("app.OpenAI")
 
 
 
 
95
  def test_logging_on_failure(self, mock_openai_class, mock_logger):
96
  """Test that logging works correctly on failed API call."""
97
  api_error_message = "OpenAI is down."
@@ -111,3 +123,16 @@ class TestGeneratePrompt:
111
  mock_logger.error.assert_any_call(
112
  f"API request failed - Session: {TEST_GRADIO_SESSION_HASH} - Error: {api_error_message}"
113
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  TEST_GRADIO_SESSION_HASH = "prompt-roulette-session-..."
10
 
11
  class TestGeneratePrompt:
12
+ def test_gradio_app_loads(self):
13
+ from app import demo
14
+ assert demo is not None
15
+
16
  @patch("app.OpenAI")
17
  @patch.dict(os.environ, {
18
  "SYSTEM_PROMPT": TEST_SYSTEM_PROMPT,
 
59
  # Call the function
60
  result = generate_prompt(mock_gradio_request)
61
 
62
+ assert result == "⚠️ Could not generate a prompt. No fish today."
63
 
64
  @patch("app.logger")
65
  @patch("app.OpenAI")
66
+ @patch.dict(os.environ, {
67
+ "SYSTEM_PROMPT": TEST_SYSTEM_PROMPT,
68
+ "OPENAI_API_KEY": TEST_OPENAI_API_KEY
69
+ })
70
  def test_logging_on_success(self, mock_openai_class, mock_logger):
71
  """Test that logging works correctly on successful API call."""
72
  api_total_token_count = 500
 
100
 
101
  @patch("app.logger")
102
  @patch("app.OpenAI")
103
+ @patch.dict(os.environ, {
104
+ "SYSTEM_PROMPT": TEST_SYSTEM_PROMPT,
105
+ "OPENAI_API_KEY": TEST_OPENAI_API_KEY
106
+ })
107
  def test_logging_on_failure(self, mock_openai_class, mock_logger):
108
  """Test that logging works correctly on failed API call."""
109
  api_error_message = "OpenAI is down."
 
123
  mock_logger.error.assert_any_call(
124
  f"API request failed - Session: {TEST_GRADIO_SESSION_HASH} - Error: {api_error_message}"
125
  )
126
+
127
+ @patch.dict(os.environ, {}, clear=True)
128
+ def test_missing_env_vars(self):
129
+ """Test what happens when SYSTEM_PROMPT and/or OPENAI_API_KEY are missing."""
130
+ # Mock the gradio request
131
+ mock_gradio_request = Mock()
132
+ mock_gradio_request.session_hash = TEST_GRADIO_SESSION_HASH
133
+
134
+ # Call the function
135
+ result = generate_prompt(mock_gradio_request)
136
+
137
+ assert result == "⚠️ Service temporarily unavailable. Please try again later."
138
+