Class: OllamaChat::Tools::RunTests

Inherits:
Object
  • Object
show all
Includes:
Concern, Utils::PathValidator
Defined in:
lib/ollama_chat/tools/run_tests.rb

Overview

Tool for executing RSpec / Test‑Unit test suites.

The tool is registered under the name “run_tests“ and exposes a single function that accepts a “path“ (file or directory) and an optional “coverage“ flag. The implementation simply spawns the configured test runner (RSpec or Minitest) and streams its output back to the caller.

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Utils::PathValidator

#assert_valid_path

Methods included from Concern

#name, #to_hash, #valid_json?

Methods included from Utils::Backup

#perform_backup

Methods included from Utils::ValueFormatter

#format_bytes, #format_tokens

Class Method Details

.register_nameString

Returns the registered name for this tool.

Returns:

  • (String)

    the registered name for this tool



14
# File 'lib/ollama_chat/tools/run_tests.rb', line 14

def self.register_name = 'run_tests'

Instance Method Details

#execute(tool_call, **opts) ⇒ String

Execute the tool with the provided arguments.

Parameters:

  • tool_call (ToolCall)

    the tool invocation containing arguments

  • opts (Hash)

    additional options (currently unused)

Returns:

  • (String)

    JSON containing either result metrics (“success“, “path“, “output“, “status“) or error details (“error“, “message“).



53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/ollama_chat/tools/run_tests.rb', line 53

def execute(tool_call, **opts)
  config   = opts[:chat].config
  path     = tool_call.function.arguments.path
  coverage = tool_call.function.arguments.coverage || false
  path     = check_path(path, config)
  output, success = run_tests(path, coverage)
  {
    success:,
    path:,
    output:,
    status: success ? 'passed' : 'failed'
  }.to_json
rescue => e
  { error: e.class, message: e.message }.to_json
end

#toolTool

Build the OpenAI function schema for the tool.

Returns:

  • (Tool)


18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/ollama_chat/tools/run_tests.rb', line 18

def tool
  Tool.new(
    type: 'function',
    function: Tool::Function.new(
      name: 'run_tests',
      description: <<~EOT,
         Test Runner - Runs all tests/specs under *path* the path were the
         tests/specs are located. `coverage=false` by default; set to true
         for a coverage report. Returns JSON with test counts and, if
         requested, coverage percentage.
      EOT
      parameters: Tool::Function::Parameters.new(
        type: 'object',
        properties: {
          path: Tool::Function::Parameters::Property.new(
            type: 'string',
            description: 'Path to file or directory to run tests for (path has to be allowed!)'
          ),
          coverage: Tool::Function::Parameters::Property.new(
            type: 'boolean',
            description: 'True if coverage data should be created, (default: false)'
          )
        },
        required: []
      )
    )
  )
end