use of org.jpmml.evaluator.HasGroupFields in project openscoring by openscoring.
the class ModelResource method doEvaluate.
@SuppressWarnings(value = "resource")
private List<EvaluationResponse> doEvaluate(String id, List<EvaluationRequest> requests, boolean allOrNothing, String method) {
Model model = this.modelRegistry.get(id, true);
if (model == null) {
throw new NotFoundException("Model \"" + id + "\" not found");
}
List<EvaluationResponse> responses = new ArrayList<>();
Timer timer = this.metricRegistry.timer(createName(id, method));
Timer.Context context = timer.time();
try {
Evaluator evaluator = model.getEvaluator();
if (evaluator instanceof HasGroupFields) {
HasGroupFields hasGroupFields = (HasGroupFields) evaluator;
List<InputField> groupFields = hasGroupFields.getGroupFields();
if (groupFields.size() == 1) {
InputField groupField = groupFields.get(0);
requests = aggregateRequests(groupField.getName(), requests);
} else if (groupFields.size() > 1) {
throw new EvaluationException("Too many group fields");
}
}
for (EvaluationRequest request : requests) {
EvaluationResponse response;
try {
response = evaluate(evaluator, request);
} catch (Exception e) {
if (allOrNothing) {
throw e;
}
response = new EvaluationResponse(request.getId());
response.setMessage(e.toString());
}
responses.add(response);
}
} catch (Exception e) {
logger.error("Failed to evaluate", e);
throw new BadRequestException(e);
}
context.stop();
Counter counter = this.metricRegistry.counter(createName(id, "records"));
counter.inc(responses.size());
return responses;
}
use of org.jpmml.evaluator.HasGroupFields in project openscoring by openscoring.
the class ModelUtil method encodeSchema.
public static Map<String, List<Field>> encodeSchema(Evaluator evaluator) {
Map<String, List<Field>> result = new LinkedHashMap<>();
List<InputField> inputFields = evaluator.getInputFields();
result.put("inputFields", encodeInputFields(inputFields));
List<InputField> groupFields = Collections.emptyList();
if (evaluator instanceof HasGroupFields) {
HasGroupFields hasGroupFields = (HasGroupFields) evaluator;
groupFields = hasGroupFields.getGroupFields();
}
result.put("groupFields", encodeInputFields(groupFields));
List<TargetField> targetFields = evaluator.getTargetFields();
result.put("targetFields", encodeTargetFields(targetFields));
List<OutputField> outputFields = evaluator.getOutputFields();
result.put("outputFields", encodeOutputFields(outputFields));
return result;
}
Aggregations