Skip to content

Commit 4641ae4

Browse files
authored
Support tools without params (#62)
This fixes #61 ensuring the (Gemini) `function_declarations`'s `parameters` is not set when there are no parameters.
1 parent 95f7606 commit 4641ae4

File tree

5 files changed

+599
-12
lines changed

5 files changed

+599
-12
lines changed

lib/ruby_llm/providers/gemini/tools.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -54,22 +54,22 @@ def function_declaration_for(tool)
5454
{
5555
name: tool.name,
5656
description: tool.description,
57-
parameters: {
58-
type: 'OBJECT',
59-
properties: format_parameters(tool.parameters),
60-
required: tool.parameters.select { |_, p| p.required }.keys.map(&:to_s)
61-
}
62-
}
57+
parameters: tool.parameters.any? ? format_parameters(tool.parameters) : nil
58+
}.compact
6359
end
6460

6561
# Format tool parameters for Gemini API
6662
def format_parameters(parameters)
67-
parameters.transform_values do |param|
68-
{
69-
type: param_type_for_gemini(param.type),
70-
description: param.description
71-
}.compact
72-
end
63+
{
64+
type: 'OBJECT',
65+
properties: parameters.transform_values do |param|
66+
{
67+
type: param_type_for_gemini(param.type),
68+
description: param.description
69+
}.compact
70+
end,
71+
required: parameters.select { |_, p| p.required }.keys.map(&:to_s)
72+
}
7373
end
7474

7575
# Convert RubyLLM param types to Gemini API types

spec/fixtures/vcr_cassettes/chat_function_calling_claude-3-5-haiku-20241022_can_use_tools_without_parameters.yml

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

spec/fixtures/vcr_cassettes/chat_function_calling_gemini-2_0-flash_can_use_tools_without_parameters.yml

Lines changed: 174 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)