Class: Tools::MetaToolWriteService
- Inherits:
-
Object
- Object
- Tools::MetaToolWriteService
- Extended by:
- T::Sig
- Defined in:
- app/services/tools/meta_tool_write_service.rb
Instance Method Summary collapse
- #delete_tool(tool_name) ⇒ Object
- #register_tool(class_name, before_call: nil, after_call: nil) ⇒ Object
- #register_tool_from_source(source: nil, before_call: nil, after_call: nil) ⇒ Object
Instance Method Details
#delete_tool(tool_name) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'app/services/tools/meta_tool_write_service.rb', line 53 def delete_tool(tool_name) schema = .find_schema(tool_name) return { error: "Tool not found: #{tool_name}" } unless schema service_class = schema[:service_class] ToolMeta.registry.delete(service_class) tool_constant = ToolSchema::RubyLlmFactory.tool_class_name(service_class) Tools.send(:remove_const, tool_constant) if Tools.const_defined?(tool_constant, false) fast_mcp_constant = ToolSchema::FastMcpFactory.tool_class_name(service_class) Mcp.send(:remove_const, fast_mcp_constant) if Mcp.const_defined?(fast_mcp_constant, false) { success: 'Tool deleted successfully' } rescue StandardError => e { error: e. } end |
#register_tool(class_name, before_call: nil, after_call: nil) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'app/services/tools/meta_tool_write_service.rb', line 15 def register_tool(class_name, before_call: nil, after_call: nil) return { error: 'class_name is required for register' } if class_name.nil? || class_name.empty? service_class = constantize(class_name) return { error: "Could not find #{class_name}" } if service_class.nil? return { error: "#{class_name} must extend ToolMeta" } unless service_class.respond_to?(:tool_metadata) ToolMeta.registry << service_class unless ToolMeta.registry.include?(service_class) schema = ToolSchema::Builder.build(service_class) ToolSchema::RubyLlmFactory.build(service_class, schema, before_call: before_call, after_call: after_call) ToolSchema::FastMcpFactory.build(service_class, schema, before_call: before_call, after_call: after_call) { status: 'registered', tool: .summary_payload(schema) } rescue ToolMeta::MissingSignatureError => e { error: e. } rescue NameError => e { error: "Could not find #{class_name}: #{e.}" } end |
#register_tool_from_source(source: nil, before_call: nil, after_call: nil) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'app/services/tools/meta_tool_write_service.rb', line 36 def register_tool_from_source(source: nil, before_call: nil, after_call: nil) class_name = extract_class_name(source) return { error: 'class_name is required for register' } if class_name.nil? || class_name.empty? # If source is provided, evaluate it first if source begin Object.class_eval(source) rescue StandardError => e return { error: "Failed to evaluate source: #{e.}" } end end register_tool(class_name, before_call: before_call, after_call: after_call) end |