in frontend/server/src/main/java/org/pytorch/serve/http/api/rest/InferenceRequestHandler.java [52:105]
public void handleRequest(
ChannelHandlerContext ctx,
FullHttpRequest req,
QueryStringDecoder decoder,
String[] segments)
throws ModelException, DownloadArchiveException, WorkflowException {
if (isInferenceReq(segments)) {
if (endpointMap.getOrDefault(segments[1], null) != null) {
handleCustomEndpoint(ctx, req, segments, decoder);
} else {
switch (segments[1]) {
case "ping":
Runnable r =
() -> {
String response = ApiUtils.getWorkerStatus();
NettyUtils.sendJsonResponse(
ctx,
new StatusResponse(
response, HttpURLConnection.HTTP_OK));
};
ApiUtils.getTorchServeHealth(r);
break;
case "models":
case "invocations":
validatePredictionsEndpoint(segments);
handleInvocations(ctx, req, decoder, segments);
break;
case "predictions":
handlePredictions(ctx, req, segments, false);
break;
case "explanations":
handlePredictions(ctx, req, segments, true);
break;
default:
handleLegacyPredict(ctx, req, decoder, segments);
break;
}
}
} else if (isKFV1InferenceReq(segments)) {
if (segments[3].contains(":predict")) {
handleKFV1Predictions(ctx, req, segments, false);
} else if (segments[3].contains(":explain")) {
handleKFV1Predictions(ctx, req, segments, true);
}
} else if (isKFV2InferenceReq(segments)) {
if (segments[4].equals("infer")) {
handleKFV2Predictions(ctx, req, segments, false);
} else if (segments[4].equals("explain")) {
handleKFV2Predictions(ctx, req, segments, true);
}
} else {
chain.handleRequest(ctx, req, decoder, segments);
}
}