From aa60d2af987730bfad149bc350bdc5ce1e4d9eae Mon Sep 17 00:00:00 2001 From: Soonoh Date: Tue, 3 Feb 2026 02:50:00 +0900 Subject: [PATCH] fix: map float type to number in RubyLlmBuilder RubyLLM's params DSL uses `number` method, not `float`. This was causing 'undefined method float' errors when converting tools with Float parameters (e.g., progress percentage). - scalar_method(:float) now returns :number - scalar_symbol(:float) now returns :number - Added tests for float type handling --- app/lib/tool_schema/ruby_llm_builder.rb | 4 +-- test/tool_schema_test.rb | 35 +++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/app/lib/tool_schema/ruby_llm_builder.rb b/app/lib/tool_schema/ruby_llm_builder.rb index fe7dee8..1ef67af 100644 --- a/app/lib/tool_schema/ruby_llm_builder.rb +++ b/app/lib/tool_schema/ruby_llm_builder.rb @@ -61,7 +61,7 @@ def self.scalar_symbol(type) case type when :string then :string when :integer then :integer - when :float then :float + when :float then :number # RubyLLM uses `number` not `float` when :boolean then :boolean else :any end @@ -71,7 +71,7 @@ def self.scalar_symbol(type) def self.scalar_method(type) case type when :integer then :integer - when :float then :float + when :float then :number # RubyLLM uses `number` not `float` when :boolean then :boolean else :string end diff --git a/test/tool_schema_test.rb b/test/tool_schema_test.rb index f5d6e49..b9cf742 100644 --- a/test/tool_schema_test.rb +++ b/test/tool_schema_test.rb @@ -128,6 +128,41 @@ def test_fast_mcp_builder_handles_boolean end end + def test_ruby_llm_builder_handles_float_type + params_ast = [ + { + name: :progress, + required: false, + type: :float, + description: 'Progress percentage' + } + ] + + params_proc = ToolSchema::RubyLlmBuilder.params_block(params_ast) + + # This should not raise "undefined method 'float'" error + # RubyLLM uses `number` not `float` + tool_class = Class.new(RubyLLM::Tool) do + params(¶ms_proc) + end + + schema = tool_class.new.params_schema + progress_prop = schema['properties']['progress'] + + assert_equal 'number', progress_prop['type'] + end + + def test_ruby_llm_builder_float_type_methods + # Verify scalar_method and scalar_symbol return :number for :float + assert_equal :number, ToolSchema::RubyLlmBuilder.scalar_method(:float) + assert_equal :number, ToolSchema::RubyLlmBuilder.scalar_symbol(:float) + + # Other types should remain unchanged + assert_equal :integer, ToolSchema::RubyLlmBuilder.scalar_method(:integer) + assert_equal :boolean, ToolSchema::RubyLlmBuilder.scalar_method(:boolean) + assert_equal :string, ToolSchema::RubyLlmBuilder.scalar_method(:string) + end + private def build_echo_service