Class: OmniAI::Schema::Array

Inherits:
Base
  • Object
show all
Defined in:
lib/omniai/schema/array.rb

Overview

Examples:

array = OmniAI::Tool::Array.deserialize({
  description: "A list of people.",
  items: {
    properties: {
      name: { type: "string" },
    },
    required: ["name"],
  },
  min_items: 1,
  max_items: 5,
})
array.serialize # => { type: "array", items: { ... }, minItems: 1, maxItems: 5 }
array.parse([{ "name" => "Ringo Starr" }]) # => [{ name: "Ringo Star" }]

Constant Summary collapse

TYPE =
"array"

Instance Attribute Summary collapse

Attributes inherited from Base

#description, #title

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#nonnullable, #nullable, #nullable?

Constructor Details

#initialize(items:, title: nil, description: nil, min_items: nil, max_items: nil, nullable: nil) ⇒ Array

Returns a new instance of Array.

Parameters:

  • items (OmniAI::Schema::Object, OmniAI::Schema::Array, OmniAI::Schema::Scalar)

    required

  • title (String) (defaults to: nil)

    optional

  • description (String) (defaults to: nil)

    optional

  • nullable (Boolean) (defaults to: nil)

    optional

  • min_items (Integer) (defaults to: nil)

    optional

  • max_items (Integer) (defaults to: nil)

    optional



40
41
42
43
44
45
# File 'lib/omniai/schema/array.rb', line 40

def initialize(items:, title: nil, description: nil, min_items: nil, max_items: nil, nullable: nil)
  super(title:, description:, nullable:)
  @items = items
  @min_items = min_items
  @max_items = max_items
end

Instance Attribute Details

#itemsOmniAI::Schema::Object, ...



24
25
26
# File 'lib/omniai/schema/array.rb', line 24

def items
  @items
end

#max_itemsInteger?

Returns:

  • (Integer, nil)


28
29
30
# File 'lib/omniai/schema/array.rb', line 28

def max_items
  @max_items
end

#min_itemsInteger?

Returns:

  • (Integer, nil)


32
33
34
# File 'lib/omniai/schema/array.rb', line 32

def min_items
  @min_items
end

Class Method Details

.deserialize(data) ⇒ OmniAI::Schema::Array

Examples:

array = OmniAI::Schema::Array.deserialize({
  type: "array",
  items: { type: "string" },
  minItems: 1,
  maxItems: 5,
  description: "A list of strings."
}) # => OmniAI::Schema::Array

Parameters:

  • data (Hash)

Returns:



87
88
89
90
91
92
93
94
95
96
97
# File 'lib/omniai/schema/array.rb', line 87

def self.deserialize(data)
  nullable = Array(data[:type] || data["type"]).include?("null")

  new(
    items: OmniAI::Schema.deserialize(data["items"] || data[:items]),
    max_items: data[:maxItems] || data["maxItems"],
    min_items: data[:minItems] || data["minItems"],
    description: data[:description] || data["description"],
    nullable:
  )
end

Instance Method Details

#parse(data) ⇒ Array

Examples:

array.parse(["1", "2", "3"]) # => [1, 2, 3]

Parameters:

Returns:



53
54
55
56
57
# File 'lib/omniai/schema/array.rb', line 53

def parse(data)
  return data if data.nil? && nullable?

  data.map { |arg| @items.parse(arg) }
end

#serialize(additional_properties: false) ⇒ Hash

Examples:

array.serialize # => { type: "array", items: { type: "string" } }

Parameters:

  • additional_properties (Boolean, nil) (defaults to: false)

    optional

Returns:

  • (Hash)


65
66
67
68
69
70
71
72
73
# File 'lib/omniai/schema/array.rb', line 65

def serialize(additional_properties: false)
  {
    type: nullify(TYPE),
    description: @description,
    items: @items.serialize(additional_properties:),
    maxItems: @max_items,
    minItems: @min_items,
  }.compact
end