sublayer 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b88b5a8d08e537fed46f26b445126a1482f13e79732a545b225c6b6447e9417
|
4
|
+
data.tar.gz: 7903ce4058e07fa95faee094bc937f41eb297d23a941a8f2287365c052773797
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07701102f65938db5dc6e9c1ed3de303073c4a185ecde0fc12c458e6051294d3bd00def3f89219663dc6f6f879b4aac29f84163b000f310bf18831fa94d3e831
|
7
|
+
data.tar.gz: e5c34b702ba9aabb599e4d95e13671ef3a433c577dc0a68fd2d1a3ff938d137819da31908ee11cd8eed334fb16dc02f08cd99be21f33ef41dd00db3d5e728065
|
@@ -3,23 +3,41 @@ module Sublayer
|
|
3
3
|
module OutputAdapters
|
4
4
|
module Formattable
|
5
5
|
def format_properties
|
6
|
+
build_json_schema(self.properties)
|
7
|
+
end
|
8
|
+
|
9
|
+
def build_json_schema(props)
|
6
10
|
formatted_properties = {}
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
}
|
12
|
-
|
13
|
-
property[:enum] = prop.enum if prop.respond_to?(:enum) && prop.enum
|
14
|
-
property[:default] = prop.default if prop.respond_to?(:default) && !prop.default.nil?
|
15
|
-
property[:minimum] = prop.minimum if prop.respond_to?(:minimum) && !prop.minimum.nil?
|
16
|
-
property[:maximum] = prop.maximum if prop.respond_to?(:maximum) && !prop.maximum.nil?
|
17
|
-
property[:items] = prop.items if prop.respond_to?(:items) && prop.items
|
18
|
-
formatted_properties[prop.name.to_sym] = property
|
11
|
+
|
12
|
+
props.map do |prop|
|
13
|
+
formatted_property = format_property(prop)
|
14
|
+
formatted_properties[prop.name.to_sym] = formatted_property
|
19
15
|
end
|
16
|
+
|
20
17
|
formatted_properties
|
21
18
|
end
|
22
19
|
|
20
|
+
def format_property(property)
|
21
|
+
result = {
|
22
|
+
type: property.type,
|
23
|
+
description: property.description
|
24
|
+
}
|
25
|
+
|
26
|
+
result[:enum] = property.enum if property.respond_to?(:enum) && property.enum
|
27
|
+
result[:default] = property.default if property.respond_to?(:default) && !property.default.nil?
|
28
|
+
result[:minimum] = property.minimum if property.respond_to?(:minimum) && !property.minimum.nil?
|
29
|
+
result[:maximum] = property.maximum if property.respond_to?(:maximum) && !property.maximum.nil?
|
30
|
+
|
31
|
+
case property.type
|
32
|
+
when 'array'
|
33
|
+
result[:items] = property.items.is_a?(OpenStruct) ? format_property(property.items) : property.items
|
34
|
+
when 'object'
|
35
|
+
result[:properties] = build_json_schema(property.properties) if property.properties
|
36
|
+
end
|
37
|
+
|
38
|
+
result
|
39
|
+
end
|
40
|
+
|
23
41
|
def format_required
|
24
42
|
self.properties.select(&:required).map(&:name)
|
25
43
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Sublayer
|
2
|
+
module Components
|
3
|
+
module OutputAdapters
|
4
|
+
class NamedStrings
|
5
|
+
attr_reader :name, :description, :attributes
|
6
|
+
|
7
|
+
def initialize(options)
|
8
|
+
@name = options[:name]
|
9
|
+
@description = options[:description]
|
10
|
+
@attributes = options[:attributes]
|
11
|
+
end
|
12
|
+
|
13
|
+
def properties
|
14
|
+
[
|
15
|
+
OpenStruct.new(
|
16
|
+
name: @name,
|
17
|
+
type: "object",
|
18
|
+
description: @description,
|
19
|
+
required: true,
|
20
|
+
properties: @attributes.map { |attribute| OpenStruct.new(type: "string", description: attribute[:description], required: true, name: attribute[:name]) }
|
21
|
+
)
|
22
|
+
]
|
23
|
+
end
|
24
|
+
|
25
|
+
def materialize_result(raw_result)
|
26
|
+
OpenStruct.new( @attributes.map { |attribute| [attribute[:name], raw_result[attribute[:name]]] }.to_h)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -10,7 +10,10 @@ module Sublayer
|
|
10
10
|
|
11
11
|
def generate
|
12
12
|
self.class::OUTPUT_ADAPTER.load_instance_data(self) if self.class::OUTPUT_ADAPTER.respond_to?(:load_instance_data)
|
13
|
-
|
13
|
+
|
14
|
+
raw_results = Sublayer.configuration.ai_provider.call(prompt: prompt, output_adapter: self.class::OUTPUT_ADAPTER)
|
15
|
+
|
16
|
+
@results = self.class::OUTPUT_ADAPTER.respond_to?(:materialize_result) ? self.class::OUTPUT_ADAPTER.materialize_result(raw_results) : raw_results
|
14
17
|
end
|
15
18
|
end
|
16
19
|
end
|
data/lib/sublayer/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sublayer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Werner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-08-
|
11
|
+
date: 2024-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-openai
|
@@ -195,6 +195,7 @@ files:
|
|
195
195
|
- lib/sublayer/components/output_adapters.rb
|
196
196
|
- lib/sublayer/components/output_adapters/formattable.rb
|
197
197
|
- lib/sublayer/components/output_adapters/list_of_strings.rb
|
198
|
+
- lib/sublayer/components/output_adapters/named_strings.rb
|
198
199
|
- lib/sublayer/components/output_adapters/single_string.rb
|
199
200
|
- lib/sublayer/components/output_adapters/string_selection_from_list.rb
|
200
201
|
- lib/sublayer/generators/base.rb
|