Module: OllamaChat::ToolCalling
- Included in:
- Chat
- Defined in:
- lib/ollama_chat/tool_calling.rb
Overview
A module that provides tool calling functionality for OllamaChat.
The ToolCalling module encapsulates methods for managing and processing tool calls within the chat application. It handles the registration and execution of tools that can be invoked during conversations, allowing the chat to interact with external systems or perform specialized tasks beyond simple text generation.
Instance Attribute Summary collapse
-
#enabled_tools ⇒ Array<String>
readonly
Provides access to the list of enabled tools for the chat session.
-
#tool_call_results ⇒ Hash
readonly
The tool_call_results reader returns the tools’ results for the chat session if any.
Instance Method Summary collapse
-
#configured_tools ⇒ Array<String>
The configured_tools method returns an array of tool names configured for the chat session.
-
#default_enabled_tools ⇒ Array<String>
The default_enabled_tools method returns an array of tool names that are configured as default tools.
-
#disable_tool ⇒ Object
The disable_tool method allows the user to select and disable a tool from a list of enabled tools.
-
#enable_tool ⇒ Object
The enable_tool method allows the user to select and enable a tool from a list of available tools.
-
#list_tools ⇒ Object
The list_tools method displays the sorted list of enabled tools.
-
#tool_configured?(name) ⇒ Boolean
Checks whether a tool is configured in the chat configuration.
-
#tool_enabled?(name) ⇒ Boolean
Checks if a tool is currently enabled for the chat session.
-
#tool_function(name) ⇒ ComplexConfig::Settings
The tool_function method retrieves a tool configuration by name from the chat’s configuration.
-
#tool_registered?(name) ⇒ Boolean
Determines whether a tool has been registered in the tool registry.
-
#tools ⇒ Hash
The tools reader returns the registered tools for the chat session.
Instance Attribute Details
#enabled_tools ⇒ Array<String> (readonly)
Provides access to the list of enabled tools for the chat session.
38 39 40 |
# File 'lib/ollama_chat/tool_calling.rb', line 38 def enabled_tools @enabled_tools end |
#tool_call_results ⇒ Hash (readonly)
The tool_call_results reader returns the tools’ results for the chat session if any.
94 95 96 |
# File 'lib/ollama_chat/tool_calling.rb', line 94 def tool_call_results @tool_call_results end |
Instance Method Details
#configured_tools ⇒ Array<String>
The configured_tools method returns an array of tool names configured for the chat session.
This method retrieves the list of available tools from the configuration and returns them as a sorted array of strings. It handles cases where the tools configuration might be nil or empty by returning an empty array.
86 87 88 |
# File 'lib/ollama_chat/tool_calling.rb', line 86 def configured_tools Array(config.tools&.functions&.attribute_names&.map(&:to_s)).sort end |
#default_enabled_tools ⇒ Array<String>
The default_enabled_tools method returns an array of tool names that are configured as default tools.
This method iterates through the configured tools and collects those that are registered and have the default flag set to true. Unregistered tools are skipped with a warning message.
65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/ollama_chat/tool_calling.rb', line 65 def default_enabled_tools result = [] config.tools.functions.each { |n, v| if tool_registered?(n) result << n.to_s if v.default else STDERR.puts "Skipping configuration for unregistered tool %s" % bold { n } end } result end |
#disable_tool ⇒ Object
The disable_tool method allows the user to select and disable a tool from a list of enabled tools.
This method presents a menu of currently enabled tools to the user, allowing them to choose which tool to disable. It uses the chooser to display the available tools and handles the user’s selection by removing the chosen tool from the list of enabled tools and sorting the list afterwards.
142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/ollama_chat/tool_calling.rb', line 142 def disable_tool select_tools = enabled_tools select_tools += [ '[EXIT]' ] case chosen = OllamaChat::Utils::Chooser.choose(select_tools) when '[EXIT]', nil STDOUT.puts "Exiting chooser." return when *select_tools enabled_tools.delete chosen puts "Disabled tool %s" % bold { chosen } end end |
#enable_tool ⇒ Object
The enable_tool method allows the user to select and enable a tool from a list of available tools.
This method presents a menu of tools that can be enabled, excluding those that are already enabled. It uses the chooser to display the available tools and handles the user’s selection by adding the chosen tool to the list of enabled tools and sorting the list.
120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/ollama_chat/tool_calling.rb', line 120 def enable_tool select_tools = configured_tools - enabled_tools select_tools += [ '[EXIT]' ] case chosen = OllamaChat::Utils::Chooser.choose(select_tools) when '[EXIT]', nil STDOUT.puts "Exiting chooser." return when *select_tools enabled_tools << chosen enabled_tools.sort! puts "Enabled tool %s" % bold { chosen } end end |
#list_tools ⇒ Object
The list_tools method displays the sorted list of enabled tools.
This method outputs to standard output the alphabetically sorted list of tool names that are currently enabled in the chat session.
100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/ollama_chat/tool_calling.rb', line 100 def list_tools STDOUT.puts "Registered tools:" configured_tools.each do |tool| enabled = tool_enabled?(tool) ? ?✓ : ?☐ require_confirmation = tool_function(tool).require_confirmation? ? ?? : ?☐ printf( "%s %s %s\n", enabled, require_confirmation, (enabled ? bold { tool } : tool) ) end tools_support.show end |
#tool_configured?(name) ⇒ Boolean
Checks whether a tool is configured in the chat configuration.
13 14 15 |
# File 'lib/ollama_chat/tool_calling.rb', line 13 def tool_configured?(name) config.tools.functions.attribute_set?(name) end |
#tool_enabled?(name) ⇒ Boolean
Checks if a tool is currently enabled for the chat session.
44 45 46 |
# File 'lib/ollama_chat/tool_calling.rb', line 44 def tool_enabled?(name) enabled_tools.member?(name) end |
#tool_function(name) ⇒ ComplexConfig::Settings
The tool_function method retrieves a tool configuration by name from the chat’s configuration.
23 24 25 |
# File 'lib/ollama_chat/tool_calling.rb', line 23 def tool_function(name) config.tools.functions[name] end |
#tool_registered?(name) ⇒ Boolean
Determines whether a tool has been registered in the tool registry.
31 32 33 |
# File 'lib/ollama_chat/tool_calling.rb', line 31 def tool_registered?(name) OllamaChat::Tools.registered?(name) end |
#tools ⇒ Hash
The tools reader returns the registered tools for the chat session.
51 52 53 54 |
# File 'lib/ollama_chat/tool_calling.rb', line 51 def tools @tools_support.off? and return [] enabled_tools.map { OllamaChat::Tools.registered[it]&.to_hash }.compact end |