alexa_generator 0.2.1 → 0.3.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df62fac43ca92e9a3c82c42a1fae04bd1feecc1a
|
4
|
+
data.tar.gz: 89650a53d1d39eb8469beef10a1999e8a671ae96
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44a03f30c76b4f5c7d7085413e606ba77c3b1d4371c08c497d50270b8864e1362efdd8d8163e1dac80cec0c03042c662c841075ad5305efc97952f25bef7f479
|
7
|
+
data.tar.gz: a515a2e4824e6d1d3ae968a0c59bf7dabbc454f440ea7f64f0bd08a5d124e85f2591a887463ce75004ff31f4d259f9959b0b879fcc7c2a3498b5faa3ac1bef57
|
@@ -92,10 +92,7 @@ module AlexaGenerator
|
|
92
92
|
slot_value_combinations.each do |value_binding|
|
93
93
|
raw_template = template.template.dup
|
94
94
|
|
95
|
-
# puts value_binding.inspect
|
96
|
-
|
97
95
|
value_binding.each do |binding|
|
98
|
-
# puts "----> #{binding}"
|
99
96
|
binding.bind_to_template!( raw_template )
|
100
97
|
end
|
101
98
|
|
@@ -111,6 +108,26 @@ module AlexaGenerator
|
|
111
108
|
"#{intent_name} #{utterance}"
|
112
109
|
end
|
113
110
|
end
|
111
|
+
|
112
|
+
def slot_type_values(slot_type)
|
113
|
+
bindings = Set.new
|
114
|
+
@intents.values.each do |intent|
|
115
|
+
intent.slots.each do |slot|
|
116
|
+
if slot.type.to_s == slot_type.to_s
|
117
|
+
bindings += slot.bindings
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
bindings.to_a
|
122
|
+
end
|
123
|
+
|
124
|
+
def custom_slot_types
|
125
|
+
slots = collect_slot_types
|
126
|
+
custom_types = slots.values.select do |x|
|
127
|
+
AlexaGenerator::Slot::SlotType.custom?(x)
|
128
|
+
end
|
129
|
+
Set.new(custom_types).to_a
|
130
|
+
end
|
114
131
|
|
115
132
|
def collect_slot_types
|
116
133
|
out = {}
|
data/lib/alexa_generator/slot.rb
CHANGED
@@ -10,6 +10,10 @@ module AlexaGenerator
|
|
10
10
|
def self.literal?(value)
|
11
11
|
[:LITERAL, LITERAL].include?(value.to_sym)
|
12
12
|
end
|
13
|
+
|
14
|
+
def self.custom?(value)
|
15
|
+
!literal?(value) && !value.to_s.start_with?('AMAZON.')
|
16
|
+
end
|
13
17
|
end
|
14
18
|
|
15
19
|
class Builder
|
@@ -30,15 +34,16 @@ module AlexaGenerator
|
|
30
34
|
end
|
31
35
|
|
32
36
|
def create
|
33
|
-
Slot.new(@name, @type)
|
37
|
+
Slot.new(@name, @type, @bindings)
|
34
38
|
end
|
35
39
|
end
|
36
40
|
|
37
|
-
attr_reader :name, :type
|
41
|
+
attr_reader :name, :type, :bindings
|
38
42
|
|
39
|
-
def initialize(name, type)
|
43
|
+
def initialize(name, type, bindings)
|
40
44
|
@name = name.to_sym
|
41
45
|
@type = type
|
46
|
+
@bindings = bindings
|
42
47
|
end
|
43
48
|
|
44
49
|
def self.build(name, type, &block)
|
@@ -140,11 +140,6 @@ describe AlexaGenerator::InteractionModel do
|
|
140
140
|
end
|
141
141
|
|
142
142
|
context 'with a single template' do
|
143
|
-
intents = [
|
144
|
-
AlexaGenerator::Intent.new(
|
145
|
-
:MyIntent, [ AlexaGenerator::Slot.new(:SlotOne, AlexaGenerator::Slot::SlotType::LITERAL) ]
|
146
|
-
)
|
147
|
-
]
|
148
143
|
utterance_templates = [
|
149
144
|
AlexaGenerator::SampleUtteranceTemplate.new( :MyIntent, 'Alexa, please {SlotOne}')
|
150
145
|
]
|
@@ -152,6 +147,11 @@ describe AlexaGenerator::InteractionModel do
|
|
152
147
|
AlexaGenerator::SlotBinding.new( :SlotOne, 'make me a sandwich' ),
|
153
148
|
AlexaGenerator::SlotBinding.new( :SlotOne, 'fix my motorcycle' )
|
154
149
|
]
|
150
|
+
intents = [
|
151
|
+
AlexaGenerator::Intent.new(
|
152
|
+
:MyIntent, [ AlexaGenerator::Slot.new(:SlotOne, AlexaGenerator::Slot::SlotType::LITERAL, slot_bindings) ]
|
153
|
+
)
|
154
|
+
]
|
155
155
|
|
156
156
|
it 'should produce bound utterances' do
|
157
157
|
actual = AlexaGenerator::InteractionModel.new(intents, utterance_templates, slot_bindings).sample_utterances(:MyIntent)
|
@@ -163,28 +163,32 @@ describe AlexaGenerator::InteractionModel do
|
|
163
163
|
end
|
164
164
|
|
165
165
|
context 'with multiple templates' do
|
166
|
+
s1_bindings = [
|
167
|
+
AlexaGenerator::SlotBinding.new( :SlotOne, 'make me a sandwich' ),
|
168
|
+
AlexaGenerator::SlotBinding.new( :SlotOne, 'fix my motorcycle' )
|
169
|
+
]
|
170
|
+
s2_bindings = [
|
171
|
+
AlexaGenerator::SlotBinding.new( :SlotTwo, 'one' ),
|
172
|
+
AlexaGenerator::SlotBinding.new( :SlotTwo, 'two' ),
|
173
|
+
]
|
174
|
+
s3_bindings = [
|
175
|
+
AlexaGenerator::SlotBinding.new( :SlotThree, '6 a.m.' ),
|
176
|
+
AlexaGenerator::SlotBinding.new( :SlotThree, 'noon' ),
|
177
|
+
]
|
178
|
+
|
166
179
|
intents = [
|
167
180
|
AlexaGenerator::Intent.new(
|
168
181
|
:MyIntent, [
|
169
|
-
AlexaGenerator::Slot.new(:SlotOne, AlexaGenerator::Slot::SlotType::LITERAL),
|
170
|
-
AlexaGenerator::Slot.new(:SlotTwo, AlexaGenerator::Slot::SlotType::NUMBER),
|
171
|
-
AlexaGenerator::Slot.new(:SlotThree, AlexaGenerator::Slot::SlotType::TIME),
|
182
|
+
AlexaGenerator::Slot.new(:SlotOne, AlexaGenerator::Slot::SlotType::LITERAL, s1_bindings),
|
183
|
+
AlexaGenerator::Slot.new(:SlotTwo, AlexaGenerator::Slot::SlotType::NUMBER, s2_bindings),
|
184
|
+
AlexaGenerator::Slot.new(:SlotThree, AlexaGenerator::Slot::SlotType::TIME, s3_bindings),
|
172
185
|
],
|
173
186
|
)
|
174
187
|
]
|
175
188
|
utterance_templates = [
|
176
189
|
AlexaGenerator::SampleUtteranceTemplate.new( :MyIntent, 'Alexa, please {SlotOne} {SlotTwo} at {SlotThree}')
|
177
190
|
]
|
178
|
-
slot_bindings =
|
179
|
-
AlexaGenerator::SlotBinding.new( :SlotOne, 'make me a sandwich' ),
|
180
|
-
AlexaGenerator::SlotBinding.new( :SlotOne, 'fix my motorcycle' ),
|
181
|
-
|
182
|
-
AlexaGenerator::SlotBinding.new( :SlotTwo, 'one' ),
|
183
|
-
AlexaGenerator::SlotBinding.new( :SlotTwo, 'two' ),
|
184
|
-
|
185
|
-
AlexaGenerator::SlotBinding.new( :SlotThree, '6 a.m.' ),
|
186
|
-
AlexaGenerator::SlotBinding.new( :SlotThree, 'noon' ),
|
187
|
-
]
|
191
|
+
slot_bindings = s1_bindings + s2_bindings + s3_bindings
|
188
192
|
|
189
193
|
it 'should produce bound utterances' do
|
190
194
|
actual = AlexaGenerator::InteractionModel.new(intents, utterance_templates, slot_bindings).sample_utterances(:MyIntent)
|
@@ -195,4 +199,36 @@ describe AlexaGenerator::InteractionModel do
|
|
195
199
|
expect(actual).to include('MyIntent Alexa, please {make me a sandwich|SlotOne} {SlotTwo} at {SlotThree}')
|
196
200
|
end
|
197
201
|
end
|
202
|
+
|
203
|
+
context 'with custom slot types' do
|
204
|
+
model = AlexaGenerator::InteractionModel.build do |iface|
|
205
|
+
iface.add_intent(:IntentOne) do |intent|
|
206
|
+
intent.add_slot(:SlotOne, 'SlotType1') do |slot|
|
207
|
+
slot.add_bindings(*%w(value1 value2 value3))
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
iface.add_intent(:IntentTwo) do |intent|
|
212
|
+
intent.add_slot(:SlotA, 'SlotType1') do |slot|
|
213
|
+
slot.add_binding('value4')
|
214
|
+
end
|
215
|
+
|
216
|
+
intent.add_slot(:SlotB, :SlotType2) do |slot|
|
217
|
+
slot.add_binding('valueA')
|
218
|
+
end
|
219
|
+
|
220
|
+
intent.add_slot(:SlabC, AlexaGenerator::Slot::SlotType::NUMBER)
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
it 'should map slot bindings appropriately' do
|
225
|
+
expect(model.custom_slot_types).to contain_exactly(*%w(SlotType1 SlotType2))
|
226
|
+
|
227
|
+
type1_bindings = model.slot_type_values('SlotType1')
|
228
|
+
expect(type1_bindings).to contain_exactly(*%w(value1 value2 value3 value4))
|
229
|
+
|
230
|
+
type2_bindings = model.slot_type_values('SlotType2')
|
231
|
+
expect(type2_bindings).to contain_exactly(*%w(valueA))
|
232
|
+
end
|
233
|
+
end
|
198
234
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alexa_generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christopher Mullins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|