Skip to content

Commit 03b2054

Browse files
committed
dry up param detection and added spec for tool combiniation to ensure those are working correctly
1 parent 84e3712 commit 03b2054

13 files changed

+1680
-3
lines changed

lib/ruby_llm/mcp/parameter.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@ module MCP
77
class Parameter < RubyLLM::Parameter
88
attr_accessor :items, :properties, :enum, :union_type, :default, :title
99

10+
class << self
11+
def all_mcp_parameters?(parameters)
12+
parameters.is_a?(Hash) &&
13+
parameters.any? &&
14+
parameters.values.all? { |p| p.is_a?(RubyLLM::MCP::Parameter) }
15+
end
16+
end
17+
1018
def initialize(name, type: "string", title: nil, desc: nil, required: true, default: nil, union_type: nil) # rubocop:disable Metrics/ParameterLists
1119
super(name, type: type.to_sym, desc: desc, required: required)
1220
@title = title

lib/ruby_llm/mcp/providers/anthropic/complex_parameter_support.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ module RubyLLM::Providers::Anthropic::Tools
6868
module_function :original_clean_parameters, :original_required_parameters
6969

7070
def clean_parameters(parameters)
71-
if parameters.is_a?(Hash) && parameters.values.any? { |p| p.is_a?(RubyLLM::MCP::Parameter) }
71+
if RubyLLM::MCP::Parameter.all_mcp_parameters?(parameters)
7272
return RubyLLM::MCP::Providers::Anthropic::ComplexParameterSupport.clean_parameters(parameters)
7373
end
7474

@@ -77,7 +77,7 @@ def clean_parameters(parameters)
7777
module_function :clean_parameters
7878

7979
def required_parameters(parameters)
80-
if parameters.is_a?(Hash) && parameters.values.any? { |p| p.is_a?(RubyLLM::MCP::Parameter) }
80+
if RubyLLM::MCP::Parameter.all_mcp_parameters?(parameters)
8181
return RubyLLM::MCP::Providers::Anthropic::ComplexParameterSupport.required_parameters(parameters)
8282
end
8383

lib/ruby_llm/mcp/providers/gemini/complex_parameter_support.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ module RubyLLM::Providers::Gemini::Tools
7676
module_function :param_type_for_gemini
7777

7878
def format_parameters(parameters)
79-
if parameters.is_a?(Hash) && parameters.values.all? { |p| p.is_a?(RubyLLM::MCP::Parameter) }
79+
if RubyLLM::MCP::Parameter.all_mcp_parameters?(parameters)
8080
return RubyLLM::MCP::Providers::Gemini::ComplexParameterSupport.format_parameters(parameters)
8181
end
8282

spec/fixtures/vcr_cassettes/with_stdio_with_anthropic_claude-sonnet-4_mixed_parameter_types_handles_both_RubyLLM_Parameter_and_MCP_Parameter_tools_in_same_chat.yml

Lines changed: 265 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)