It's possible to return a custom HTTP status from the predict function. Note that, only 4xx and 5xx statuses are supported.
To use the feature, you have to raise a FrogmlHTTPException inside the predict function. The exception accepts two parameters:
HTTP status code (as a number)
The message to be returned (string or a dictionary)
If the message is a string, it will be returned as a JSON object in this format: {"message": "YOUR_MESSAGE"}. If it's a dictionary, the JFrog ML platform will return the entire dictionary as a JSON object.
If an unsupported HTTP status is used, it will be replaced with the status 500 and a jfrogml_backend_message will be added to the response body with a message: "Invalid status code. Given value: {status_code}. Supported: 4xx, 5xx".
An example server-side code:
@frogml.api()
def predict(self, df):
...
if cant_handle_the_request:
raise FrogmlHTTPException(500, "Not implemented")In case of a 4xx or 5xx response from the deployed model, the RealTimeClient will raise a FrogmlHTTPException with the status code and the returned message.
An example of the client code:
client = RealTimeClient(model_id="YOUR_MODEL")
try:
client.predict(feature_vector)
except FrogmlHTTPException as e:
print(e)
print(e.status_code)JFrog ML Analytics and custom HTTP statuses
If the model raises a FrogmlHTTPException (and the API analytics feature is enabled), the exception details will be logged in JFrog ML Analytics as columns: interence_exception_status_code and inference_exception_message.