Skip to content

Commit e2e1b5d

Browse files
authored
fix: log unexpected errors server-side, return generic message to client (#991) (#1057)
* fix(serve): log unexpected errors server-side, return generic message to client (#991) Signed-off-by: SAY-5 <say.apm35@gmail.com> * chore: remove em-dashes from comments * test(serve): assert raw exception text does not leak * test(serve): assert raw exception text does not leak * refactor(serve): use MelleaLogger for unhandled error logging Switch the serve handler's logger from the stdlib logging.getLogger to MelleaLogger.get_logger so unhandled errors surface through the shared mellea logging configuration. Signed-off-by: SAY-5 <say.apm35@gmail.com> * trim verbose comments --------- Signed-off-by: SAY-5 <say.apm35@gmail.com>
1 parent 6451a6d commit e2e1b5d

3 files changed

Lines changed: 9 additions & 5 deletions

File tree

cli/serve/app.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
) from e
2424

2525
from mellea.backends.model_options import ModelOption
26+
from mellea.core import MelleaLogger
2627
from mellea.helpers.openai_compatible_helpers import (
2728
build_completion_usage,
2829
build_tool_calls,
@@ -42,6 +43,8 @@
4243
from .streaming import stream_chat_completion_chunks
4344
from .utils import extract_finish_reason
4445

46+
logger = MelleaLogger.get_logger()
47+
4548
app = FastAPI(
4649
title="M serve OpenAI API Compatible Server",
4750
description="M programs that run as a simple OpenAI API-compatible server",
@@ -265,11 +268,11 @@ async def endpoint(request: ChatCompletionRequest):
265268
message=f"Invalid request: {e!s}",
266269
error_type="invalid_request_error",
267270
)
268-
except Exception as e:
269-
# Catch-all for any unexpected errors (including AttributeError)
271+
except Exception:
272+
logger.exception("Unhandled error in chat-completion handler")
270273
return create_openai_error_response(
271274
status_code=500,
272-
message=f"Internal server error: {e!s}",
275+
message="Internal server error",
273276
error_type="server_error",
274277
)
275278

test/cli/test_serve_errors.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def test_generic_error_handling(mock_module_generic_error, sample_request):
128128
assert "error" in data
129129
assert data["error"]["type"] == "server_error"
130130
assert "Internal server error" in data["error"]["message"]
131-
assert "Unexpected error" in data["error"]["message"]
131+
assert "Unexpected error" not in data["error"]["message"]
132132

133133

134134
@pytest.mark.unit

test/cli/test_serve_integration.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -569,4 +569,5 @@ def test_server_error_returns_500(self, client, mock_module):
569569
data = response.json()
570570
assert "error" in data
571571
assert data["error"]["type"] == "server_error"
572-
assert "Internal error" in data["error"]["message"]
572+
assert "Internal error" not in data["error"]["message"]
573+
assert "Internal server error" in data["error"]["message"]

0 commit comments

Comments
 (0)