From f70d91f41d70ed66d3fd954f43e60cf9e9bc7729 Mon Sep 17 00:00:00 2001 From: Carmine Paolino Date: Sat, 6 Jun 2026 12:26:53 +0200 Subject: [PATCH] Add exclusive numeric boundaries --- lib/ruby_llm/schema/dsl/schema_builders.rb | 8 +++++-- .../schema/properties/numbers_spec.rb | 22 +++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/lib/ruby_llm/schema/dsl/schema_builders.rb b/lib/ruby_llm/schema/dsl/schema_builders.rb index 287865d..fff4b02 100644 --- a/lib/ruby_llm/schema/dsl/schema_builders.rb +++ b/lib/ruby_llm/schema/dsl/schema_builders.rb @@ -16,22 +16,26 @@ def string_schema(description: nil, enum: nil, min_length: nil, max_length: nil, }.compact end - def number_schema(description: nil, minimum: nil, maximum: nil, multiple_of: nil) + def number_schema(description: nil, minimum: nil, maximum: nil, greater_than: nil, less_than: nil, multiple_of: nil) { type: "number", description: description, minimum: minimum, maximum: maximum, + exclusiveMinimum: greater_than, + exclusiveMaximum: less_than, multipleOf: multiple_of }.compact end - def integer_schema(description: nil, minimum: nil, maximum: nil, multiple_of: nil) + def integer_schema(description: nil, minimum: nil, maximum: nil, greater_than: nil, less_than: nil, multiple_of: nil) { type: "integer", description: description, minimum: minimum, maximum: maximum, + exclusiveMinimum: greater_than, + exclusiveMaximum: less_than, multipleOf: multiple_of }.compact end diff --git a/spec/ruby_llm/schema/properties/numbers_spec.rb b/spec/ruby_llm/schema/properties/numbers_spec.rb index 9e8cb12..8a57bc3 100644 --- a/spec/ruby_llm/schema/properties/numbers_spec.rb +++ b/spec/ruby_llm/schema/properties/numbers_spec.rb @@ -18,6 +18,17 @@ }) end + it "supports exclusive number boundaries" do + schema_class.number :score, greater_than: 0, less_than: 100 + + properties = schema_class.properties + expect(properties[:score]).to eq({ + type: "number", + exclusiveMinimum: 0, + exclusiveMaximum: 100 + }) + end + it "supports number type with description" do schema_class.number :price, description: "Price field" @@ -31,4 +42,15 @@ properties = schema_class.properties expect(properties[:count]).to eq({type: "integer", description: "Count value"}) end + + it "supports exclusive integer boundaries" do + schema_class.integer :age, greater_than: 17, less_than: 66 + + properties = schema_class.properties + expect(properties[:age]).to eq({ + type: "integer", + exclusiveMinimum: 17, + exclusiveMaximum: 66 + }) + end end