Module: Crimson::Tools::Schema

Defined in:
lib/crimson/tools/schema.rb

Overview

Helper for building OpenAI and Anthropic tool definition schemas.

Class Method Summary collapse

Class Method Details

.build(name:, description:, parameters:, required:) ⇒ Hash

Build an OpenAI-compatible tool definition.

Parameters:

  • name (String)
  • description (String)
  • parameters (Hash)

    JSON Schema properties

  • required (Array<String>)

Returns:

  • (Hash)


13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/crimson/tools/schema.rb', line 13

def self.build(name:, description:, parameters:, required:)
  {
    type: "function",
    function: {
      name: name,
      description: description,
      parameters: {
        type: "object",
        properties: parameters,
        required: required
      }
    }
  }
end

.build_anthropic(name:, description:, parameters:, required:) ⇒ Hash

Build an Anthropic-compatible tool definition.

Parameters:

  • name (String)
  • description (String)
  • parameters (Hash)

    JSON Schema properties

  • required (Array<String>)

Returns:

  • (Hash)


34
35
36
37
38
39
40
41
42
43
44
# File 'lib/crimson/tools/schema.rb', line 34

def self.build_anthropic(name:, description:, parameters:, required:)
  {
    name: name,
    description: description,
    input_schema: {
      type: "object",
      properties: parameters,
      required: required
    }
  }
end

.definitions_for(name:, description:, parameters:, required:) ⇒ Hash

Build both OpenAI and Anthropic definitions at once.

Parameters:

  • name (String)
  • description (String)
  • parameters (Hash)
  • required (Array<String>)

Returns:

  • (Hash)

    with keys :openai and :anthropic



52
53
54
55
56
57
# File 'lib/crimson/tools/schema.rb', line 52

def self.definitions_for(name:, description:, parameters:, required:)
  {
    openai: build(name: name, description: description, parameters: parameters, required: required),
    anthropic: build_anthropic(name: name, description: description, parameters: parameters, required: required)
  }
end