From 3ace1e76f267dbbbef32cf68b05c2c057be9dfb5 Mon Sep 17 00:00:00 2001 From: patricknihranz Date: Tue, 14 Apr 2026 16:22:23 -0400 Subject: [PATCH 1/2] Expose NumberInRange operator in workflow builder UI The (Number) in range operator was already implemented in the evaluation engine and BinaryStatement union but was not included in the introspection export, making it invisible to the workflow builder UI. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../core_steps/common/query_language/introspection/core.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/inference/core/workflows/core_steps/common/query_language/introspection/core.py b/inference/core/workflows/core_steps/common/query_language/introspection/core.py index c16009e8d8..71106d302b 100644 --- a/inference/core/workflows/core_steps/common/query_language/introspection/core.py +++ b/inference/core/workflows/core_steps/common/query_language/introspection/core.py @@ -16,6 +16,7 @@ NotEquals, NumberGreater, NumberGreaterEqual, + NumberInRange, NumberLower, NumberLowerEqual, OperationsChain, @@ -104,6 +105,7 @@ def prepare_operators_descriptions() -> List[OperatorDescription]: NumberLower, NumberGreaterEqual, NumberGreater, + NumberInRange, NotEquals, Equals, Exists, From e1ba4bd8906e3b60146f0cd61d2eead4815484d3 Mon Sep 17 00:00:00 2001 From: patricknihranz Date: Thu, 16 Apr 2026 16:20:46 -0400 Subject: [PATCH 2/2] Implement NumberInRange operator in query language backend Adds the NumberInRange BinaryOperator class and its evaluation lambda so the operator exposed in the workflow builder UI has a working backend. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../common/query_language/entities/operations.py | 16 ++++++++++++++++ .../query_language/evaluation_engine/core.py | 1 + 2 files changed, 17 insertions(+) diff --git a/inference/core/workflows/core_steps/common/query_language/entities/operations.py b/inference/core/workflows/core_steps/common/query_language/entities/operations.py index 078da5c0cc..64d5c92655 100644 --- a/inference/core/workflows/core_steps/common/query_language/entities/operations.py +++ b/inference/core/workflows/core_steps/common/query_language/entities/operations.py @@ -765,6 +765,21 @@ class NumberLowerEqual(BinaryOperator): type: Literal["(Number) <="] +class NumberInRange(BinaryOperator): + model_config = ConfigDict( + json_schema_extra={ + "description": "Checks if first value (number) is within the inclusive range given as second value (list of two numbers: [min, max])", + "operands_number": 2, + "operands_kinds": [ + [INTEGER_KIND, FLOAT_KIND, FLOAT_ZERO_TO_ONE_KIND], + [LIST_OF_VALUES_KIND], + ], + "output_kind": [BOOLEAN_KIND], + }, + ) + type: Literal["(Number) in range"] + + class StringStartsWith(BinaryOperator): model_config = ConfigDict( json_schema_extra={ @@ -994,6 +1009,7 @@ class BinaryStatement(BaseModel): StringContains, StringEndsWith, StringStartsWith, + NumberInRange, NumberLowerEqual, NumberLower, NumberGreaterEqual, diff --git a/inference/core/workflows/core_steps/common/query_language/evaluation_engine/core.py b/inference/core/workflows/core_steps/common/query_language/evaluation_engine/core.py index 6b615f3054..ad8d37cefb 100644 --- a/inference/core/workflows/core_steps/common/query_language/evaluation_engine/core.py +++ b/inference/core/workflows/core_steps/common/query_language/evaluation_engine/core.py @@ -34,6 +34,7 @@ "(Number) >=": lambda a, b: a >= b, "(Number) <": lambda a, b: a < b, "(Number) <=": lambda a, b: a <= b, + "(Number) in range": lambda a, b: b[0] <= a <= b[1], "(String) startsWith": lambda a, b: a.startswith(b), "(String) endsWith": lambda a, b: a.endswith(b), "(String) contains": lambda a, b: b in a,