ask-tools 0.1.2 → 0.2.0
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 +4 -4
- data/lib/ask/tools/tool.rb +46 -2
- data/lib/ask/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7672f4d067288ae4d37530eb3884b818355d6a3aeaaefc14594224e7c4794b9d
|
|
4
|
+
data.tar.gz: fe3d5ba56939e98775c4e80edec495d40d14fb8bd6d71b2d594d9a3484fc0d13
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '08a09910d9ace8bbdb32640e3049e30bbefb8fd6a18ea4594f000441b71029815ad0bf9ef22e2ef0c9da727de29f2f1ee3d3aa99f6ac1162a6a7987270384b2e'
|
|
7
|
+
data.tar.gz: dc70926d230847a1a6d114986c8042cc8a91fc7f9ce448b0354d19f6d613906287ff0fd777d0dd737ade6e5fcf693376a8ab4125e6b7102c703bc681a24ede35
|
data/lib/ask/tools/tool.rb
CHANGED
|
@@ -48,6 +48,49 @@ module Ask
|
|
|
48
48
|
@provider_params ||= {}
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
+
def params_schema
|
|
52
|
+
@params_schema ||= begin
|
|
53
|
+
if @params_schema_definition
|
|
54
|
+
deep_stringify_keys(resolve_params_schema(@params_schema_definition))
|
|
55
|
+
elsif @parameters && @parameters.any?
|
|
56
|
+
build_schema_from_params
|
|
57
|
+
else
|
|
58
|
+
nil
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def build_schema_from_params
|
|
64
|
+
properties = parameters.to_h do |_name, param|
|
|
65
|
+
schema = { type: param.type }
|
|
66
|
+
schema[:description] = param.description if param.description
|
|
67
|
+
schema[:items] = { type: "string" } if param.type == "array"
|
|
68
|
+
[param.name.to_s, schema]
|
|
69
|
+
end
|
|
70
|
+
required = parameters.select { |_, p| p.required }.keys.map(&:to_s)
|
|
71
|
+
{ type: "object", properties: properties, required: required, additionalProperties: false }
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def resolve_params_schema(definition)
|
|
75
|
+
case definition
|
|
76
|
+
when Proc
|
|
77
|
+
schema_class = Ask::Schema.create(&definition)
|
|
78
|
+
schema_class.new.to_json_schema.dig(:schema)
|
|
79
|
+
when Hash then definition
|
|
80
|
+
when ->(d) { d.respond_to?(:to_json_schema) }
|
|
81
|
+
definition.to_json_schema.dig(:schema)
|
|
82
|
+
else nil
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def deep_stringify_keys(obj)
|
|
87
|
+
case obj
|
|
88
|
+
when Hash then obj.each_with_object({}) { |(k, v), h| h[k.to_s] = deep_stringify_keys(v) }
|
|
89
|
+
when Array then obj.map { |v| deep_stringify_keys(v) }
|
|
90
|
+
else obj
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
51
94
|
private
|
|
52
95
|
|
|
53
96
|
def validate_param_type!(type, name)
|
|
@@ -89,10 +132,11 @@ module Ask
|
|
|
89
132
|
self.class.parameters
|
|
90
133
|
end
|
|
91
134
|
|
|
92
|
-
|
|
135
|
+
def call(args = {}, abort_controller = nil)
|
|
93
136
|
normalized = normalize_args(args)
|
|
94
137
|
validation = validate(normalized)
|
|
95
138
|
return Ask::Result.failure(validation) if validation
|
|
139
|
+
normalized[:_abort_controller] = abort_controller if abort_controller
|
|
96
140
|
execute(**normalized)
|
|
97
141
|
rescue Halt => e
|
|
98
142
|
Ask::Result.ok(data: e.content, metadata: { halted: true })
|
|
@@ -100,7 +144,7 @@ module Ask
|
|
|
100
144
|
Ask::Result.failure("#{self.class.name.split('::').last} raised #{e.class}: #{e.message}")
|
|
101
145
|
end
|
|
102
146
|
|
|
103
|
-
|
|
147
|
+
def execute(**args)
|
|
104
148
|
raise NotImplementedError, "#{self.class} must implement #execute(**args)"
|
|
105
149
|
end
|
|
106
150
|
|
data/lib/ask/version.rb
CHANGED