diff options
Diffstat (limited to 'model-evaluation/src/main/java/ai')
-rw-r--r-- | model-evaluation/src/main/java/ai/vespa/models/evaluation/FunctionEvaluator.java | 16 | ||||
-rw-r--r-- | model-evaluation/src/main/java/ai/vespa/models/handler/ModelsEvaluationHandler.java | 10 |
2 files changed, 24 insertions, 2 deletions
diff --git a/model-evaluation/src/main/java/ai/vespa/models/evaluation/FunctionEvaluator.java b/model-evaluation/src/main/java/ai/vespa/models/evaluation/FunctionEvaluator.java index 994f6dd9b64..e373a54bcd1 100644 --- a/model-evaluation/src/main/java/ai/vespa/models/evaluation/FunctionEvaluator.java +++ b/model-evaluation/src/main/java/ai/vespa/models/evaluation/FunctionEvaluator.java @@ -2,6 +2,7 @@ package ai.vespa.models.evaluation; import com.yahoo.searchlib.rankingexpression.ExpressionFunction; +import com.yahoo.searchlib.rankingexpression.evaluation.StringValue; import com.yahoo.searchlib.rankingexpression.evaluation.TensorValue; import com.yahoo.tensor.Tensor; import com.yahoo.tensor.TensorType; @@ -61,6 +62,21 @@ public class FunctionEvaluator { } /** + * Binds the given variable referred in this expression to the given value. + * String values are not yet supported in tensors. + * + * @param name the variable to bind + * @param value the value this becomes bound to + * @return this for chaining + */ + public FunctionEvaluator bind(String name, String value) { + if (evaluated) + throw new IllegalStateException("Cannot bind a new value in a used evaluator"); + context.put(name, new StringValue(value)); + return this; + } + + /** * Sets the default value to use for variables which are not bound * * @param value the default value diff --git a/model-evaluation/src/main/java/ai/vespa/models/handler/ModelsEvaluationHandler.java b/model-evaluation/src/main/java/ai/vespa/models/handler/ModelsEvaluationHandler.java index 5c353fcdf35..de23a8c6526 100644 --- a/model-evaluation/src/main/java/ai/vespa/models/handler/ModelsEvaluationHandler.java +++ b/model-evaluation/src/main/java/ai/vespa/models/handler/ModelsEvaluationHandler.java @@ -77,8 +77,14 @@ public class ModelsEvaluationHandler extends ThreadedHttpRequestHandler { property(request, missingValueKey).ifPresent(missingValue -> evaluator.setMissingValue(Tensor.from(missingValue))); for (Map.Entry<String, TensorType> argument : evaluator.function().argumentTypes().entrySet()) { - property(request, argument.getKey()).ifPresent(value -> evaluator.bind(argument.getKey(), - Tensor.from(argument.getValue(), value))); + Optional<String> value = property(request, argument.getKey()); + if (value.isPresent()) { + try { + evaluator.bind(argument.getKey(), Tensor.from(argument.getValue(), value.get())); + } catch (IllegalArgumentException e) { + evaluator.bind(argument.getKey(), value.get()); // since we don't yet support tensors with string values + } + } } Tensor result = evaluator.evaluate(); return new Response(200, JsonFormat.encode(result)); |