@Override
    public HttpResponse handle(HttpRequest request) {
        Path path = new Path(request);
        Optional<String> apiName = path.segment(0);
        Optional<String> version = path.segment(1);
        Optional<String> modelName = path.segment(2);

        try {
            if ( apiName.isEmpty() || ! apiName.get().equalsIgnoreCase(API_ROOT))
                throw new IllegalArgumentException("unknown API");
            if ( version.isEmpty() || ! version.get().equalsIgnoreCase(VERSION_V1))
                throw new IllegalArgumentException("unknown API version");
            if ( modelName.isEmpty())
                return listAllModels(request);

            Model model = modelsEvaluator.requireModel(modelName.get());

            Optional<Integer> evalSegment = path.lastIndexOf(EVALUATE);
            String[] function = path.range(3, evalSegment);
            if (evalSegment.isPresent()) {
                return evaluateModel(request, model, function);
            }
            return listModelInformation(request, model, function);

        } catch (IllegalArgumentException e) {
            return new ErrorResponse(404, Exceptions.toMessageString(e));
        } catch (IllegalStateException e) { // On missing bindings
            return new ErrorResponse(400, Exceptions.toMessageString(e));
        }
    }
A dash in this key ensures it does not collide with feature names
model-evaluation/src/main/java/ai/vespa/models/handler/ModelsEvaluationHandler.java