- Updated InferenceSchema from ~=1.5.0 to ~=1.7.0 tp support MLflow NCD
- Fixed pydantic warning at the server startup.
- Added ability to configure seperate dedicated health check port.
- Restored streaming for score response.
- Updated the error message related to scoring script not found.
- Fixed the issue related to compatibility with flask1.
- Warning message will be logged if there are extra keys in the config file which are not supported by the server.
- Supports loading server config from a json file.
Added support for a new env variable
AZUREML_CONFIG_FILE. Refer to README for detailed usage.
- Exception details will not be returned in the HTTP response. Check the server logs for details.
- Drop support for Python 3.6
All error responses will be in json. (Format: {'message': <error_message>})
Loggers can be configured by users through a logging.json file in AML_APP_ROOT or alongside the entry script.
Log message default format has been updated. (Format: "<UTC DATE> <UTC TIME> <LOG LEVEL CHAR> [<PID>] <LOGGER NAME> - <MESSAGE>")
- Upgrade
inference-schemadependency to support Python 3.9
AML_APP_ROOTvariable is now defaulted to the current working directoryAZUREML_ENTRY_SCRIPTis now set to an absolute path to the entry script
- The header for Client Request ID is renamed from
x-client-request-idtox-ms-client-request-id. - Server will no longer throw an error when both
x-ms-request-idandx-request-idare provided. Going forward,x-ms-request-idwill be treated as the Client Request ID. However, it is still considered deprecated and users are recommended to usex-ms-client-request-idfor Client Request ID.- When neither
x-ms-request-idorx-ms-client-request-idis set, the server copies the value ofx-request-idtox-ms-request-id. This is done to preserve backwards compatability, ensuring thatx-ms-request-idis not empty. No value is logged to AppInsights as "Client Request Id". - When only
x-ms-request-idis set, the server returnsx-ms-request-idandx-ms-client-request-idset to the value. This value is logged to AppInsights as "Client Request Id". - When only
x-ms-client-request-idis set, the server returnsx-ms-request-idandx-ms-client-request-idset to the value. This value is logged to AppInsights as "Client Request Id". - When both
x-ms-request-idandx-ms-client-request-idare set, the values are returned in the respective headers. However, only the value fromx-ms-client-request-idis logged to AppInsights as "Client Request Id".
- When neither
- Fix an issue where the server would require arguments that have default values in run().
- CORS can be enabled with the environment variable
AML_CORS_ORIGINS. Refer to README for detailed usage. - Server can now be started with
python -m azureml_inference_server_httpin additional toazmlinfsrv. - OPTIONS calls are modified to return
200 OKinstead of the previous405 Method not allowed. - Users can bring their own swaggers by placing
swagger2.jsonandswagger3.jsoninAML_APP_ROOT.
- Swaggers are always generated now, regardless whether the user's run() function is decorated with inference-schema.
- The x-request-id and x-client-request-id headers are now limited to 100 characters.
- Fixed an issue that prevents the server from cleanly exiting when the scoring script cannot be initialized. If
AppInsights is not enabled, users may see
AttributeError: 'AppInsightsClient' object has no attribute 'logger'.
- Added support for Flask 2.1.
- The server now responds with a 400 Bad Request when it finds invalid inputs.
- The "x-ms-request-id" header is deprecated and is being replaced by "x-request-id". Until "x-ms-request-id" is removed, the server will accept either header and respond with both headers set to the same request id. Providing two request ids through the headers is not allowed and will be responded with a Bad Request.
Added support for Flask 2.0. A compatibility layer is introduced to ensure this upgrade doesn't break users who use
@rawhttpas the methods on the Flask request object have slightly changed. Specifically,request.headers.has_keys()was removedrequest.jsonthrows an exception if the content-type is not "application/json". Previously it returnsNone.
The compatibility layer restores these functionalities to their previous behaviors. However, this compatibility layer will be removed in a future date and users are encouraged to audit their score scripts today. To see if your score script is ready for Flask 2, run the server with the environment variable
AML_FLASK_ONE_COMPATIBILITYset tofalse.Flask's full changelog can be found here: https://flask.palletsprojects.com/en/2.1.x/changes/
Added support for the "x-request-id" and "x-client-request-id" headers. A new GUID is generated for "x-request-id" if one is not provided. These values are echoed back to the client in the response headers.