aws-lex-conversation 1.1.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 113a515e1c05389f5ab8d57fae23a54fc6cc212645d2bea1e091c5f750aabe08
4
- data.tar.gz: b9233099ad5faae9ce4c530565be798703d5bfedccd981ab6835a8b6c01d5f82
3
+ metadata.gz: 50a4b4cc2a28aa4251723f715953de0a102e7cabb0268db095e50470e49e2772
4
+ data.tar.gz: a5bd7550ef4a7391c0d9221ac86b3c1760053b03dda9932d8416778f4ea319e5
5
5
  SHA512:
6
- metadata.gz: b712aef8787b4b0754b420027abddcee9ea51fe030c590c0caea229629099542d44979d1b8bf6b5a1e29a5bbf37c6ec10c33ac9493fbffbeeb6b84deb9daaaf3
7
- data.tar.gz: 0cf7de36b758c798068ac23b4d1e73b07252b9ed39ed36bebdd648d0aa060088bfd5c77ea21fed00c8338ca9a434c540f0c5fd08f695011705672c24c7bfb926
6
+ metadata.gz: 48883e2e7ce637dc0b6a327bdf839b9e233a3a1bc06f99b318f5bdbf83e91c762fb8c2bbe1ffc597ac8a6900d7a01ee4dfab7a67a52c2f941595754e13f8cb06
7
+ data.tar.gz: 3bf93255a75da95213ffc74a7a3a86785bba94ea70d758c53dbad1c351b3567f5bb6f23adffafbf67e7581ad9f4a9ece31a489ef35b9cd3ad31311121a209105
data/.rubocop.yml CHANGED
@@ -5,25 +5,42 @@ AllCops:
5
5
  Exclude:
6
6
  - 'bin/**/*'
7
7
  - 'vendor/**/*'
8
- Documentation:
9
- Enabled: false
8
+ SuggestExtensions: false
10
9
  Gemspec/RequiredRubyVersion:
11
10
  Enabled: false
11
+ Layout/FirstArrayElementIndentation:
12
+ Enabled: false
13
+ Layout/LineLength:
14
+ Max: 130
15
+ Layout/MultilineMethodCallIndentation:
16
+ Enabled: false
17
+ Layout/SpaceAroundOperators:
18
+ Enabled: false
19
+ Metrics/AbcSize:
20
+ Max: 20
12
21
  Metrics/ClassLength:
13
22
  Max: 150
14
23
  Metrics/BlockLength:
15
24
  Exclude:
16
25
  - 'spec/**/*'
17
26
  - '*.gemspec'
18
- Metrics/LineLength:
19
- Max: 130
20
27
  Metrics/MethodLength:
21
28
  Max: 25
22
29
  Naming/FileName:
23
30
  Enabled: true
24
31
  Exclude:
25
32
  - lib/aws-lex-conversation.rb
33
+ Style/Alias:
34
+ EnforcedStyle: prefer_alias_method
35
+ Style/Documentation:
36
+ Enabled: false
37
+ Style/DocumentDynamicEvalDefinition:
38
+ Enabled: false
26
39
  Style/Lambda:
27
40
  EnforcedStyle: literal
28
41
  Style/GuardClause:
29
42
  Enabled: false
43
+ Style/RedundantFetchBlock:
44
+ Enabled: false
45
+ Style/SlicingWithRange:
46
+ Enabled: false
data/CHANGELOG.md ADDED
@@ -0,0 +1,24 @@
1
+ # 2.0.0 - August 19, 2020
2
+
3
+ * **breaking change:** Rename `Aws::Lex::Conversation::Type::CurrentIntent` to `Aws::Lex::Conversation::Type::Intent`.
4
+ * **breaking change:** Built-in handlers now default the `options` attribute to an empty hash.
5
+ * Add Lex NLU model improvement functionality (see: https://aws.amazon.com/about-aws/whats-new/2020/08/amazon-lex-launches-accuracy-improvements-and-confidence-scores/).
6
+ * Add the `intent_confidence` method to the conversation class that may be used as follows:
7
+
8
+ ```ruby
9
+ # NOTE: Lex model improvements must be enabled on the bot to get confidence data.
10
+ # SEE: https://aws.amazon.com/about-aws/whats-new/2020/08/amazon-lex-launches-accuracy-improvements-and-confidence-scores/
11
+ conversation.intent_confidence.ambiguous? # true/false
12
+ conversation.intent_confidence.unambiguous? # true/false
13
+ conversation.intent_confidence.candidates # [...] the array contains the current_intent and all similar intents
14
+ conversation.intent_confidence.similar_alternates # [...] the array doesn't contain the current_intent
15
+ ```
16
+
17
+ * The calculation used to determine intent ambiguity by default looks for confidence scores that are within a standard deviation of the current intent's confidence score.
18
+ * You can pass your own static `threshold` parameter if you wish to change this behaviour:
19
+
20
+ ```ruby
21
+ conversation.intent_confidence.ambiguous?(threshold: 0.4) # true/false
22
+ ```
23
+
24
+ * Implement a built-in `SlotResolution` handler that is intended to act as the initial handler in the chain. This handler will resolve all slot values to their top resolution, then call the successor handler.
data/Gemfile CHANGED
@@ -8,5 +8,5 @@ gem 'factory_bot'
8
8
  gem 'pry'
9
9
  gem 'rake'
10
10
  gem 'rspec'
11
- gem 'rubocop', '0.85.1'
11
+ gem 'rubocop', '~> 1.9', require: false
12
12
  gem 'simplecov'
data/README.md CHANGED
@@ -58,13 +58,13 @@ The first handler that returns `true` for the `will_respond?` method will provid
58
58
  ```ruby
59
59
  class SayHello < Aws::Lex::Conversation::Handler::Base
60
60
  def will_respond?(conversation)
61
- conversation.lex.incovation_source.dialog_code_hook? && # callback is for DialogCodeHook (i.e. validation)
61
+ conversation.lex.invocation_source.dialog_code_hook? && # callback is for DialogCodeHook (i.e. validation)
62
62
  conversation.lex.current_intent.name == 'SayHello' && # Lex has routed to the 'SayHello' intent
63
- conversation.slots[:name] # our expected slot value is set
63
+ conversation.slots[:name].filled? # our expected slot value is set
64
64
  end
65
65
 
66
66
  def response(conversation)
67
- name = conversation.slots[:name]
67
+ name = conversation.slots[:name].value
68
68
 
69
69
  # NOTE: you can use the Type::* classes if you wish. The final output
70
70
  # will be normalized to a value that complies with the Lex response format.
@@ -141,6 +141,34 @@ conversation.handlers = [
141
141
  conversation.respond # => { dialogAction: { type: 'Delegate' } }
142
142
  ```
143
143
 
144
+ ### `Aws::Lex::Conversation::Handler::SlotResolution`
145
+
146
+ This handler will set all slot values equal to their top resolution in the input event. The handler then calls the next handler in the chain for a response.
147
+
148
+ **NOTE:** This handler must not be the final handler in the chain. An exception of type `Aws::Lex::Conversation::Exception::MissingHandler` will be raised if there is no successor handler.
149
+
150
+ | Option | Required | Description | Default Value |
151
+ |------------------|----------|--------------------------------------------------------------|-------------------------------------|
152
+ | respond_on | No | A callable that provides the condition for `will_handle?`. | `->(c) { true }` |
153
+
154
+ i.e.
155
+
156
+ ```ruby
157
+ conversation = Aws::Lex::Conversation.new(event: event, context: context)
158
+ conversation.handlers = [
159
+ {
160
+ handler: Aws::Lex::Conversation::Handler::SlotResolution
161
+ },
162
+ {
163
+ handler: Aws::Lex::Conversation::Handler::Delegate,
164
+ options: {
165
+ respond_on: ->(c) { true }
166
+ }
167
+ }
168
+ ]
169
+ conversation.respond # => { dialogAction: { type: 'Delegate' } }
170
+ ```
171
+
144
172
  ## Development
145
173
 
146
174
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -42,6 +42,10 @@ module Aws
42
42
  chain.first.handle(self)
43
43
  end
44
44
 
45
+ def intent_confidence
46
+ @intent_confidence ||= Type::IntentConfidence.new(event: lex)
47
+ end
48
+
45
49
  def intent_name
46
50
  lex.current_intent.name
47
51
  end
@@ -4,6 +4,7 @@ require 'json'
4
4
  require 'shrink/wrap'
5
5
 
6
6
  require_relative 'version'
7
+ require_relative 'exception/missing_handler'
7
8
  require_relative 'response/base'
8
9
  require_relative 'response/close'
9
10
  require_relative 'response/confirm_intent'
@@ -24,11 +25,14 @@ require_relative 'type/invocation_source'
24
25
  require_relative 'type/dialog_action_type'
25
26
  require_relative 'type/confirmation_status'
26
27
  require_relative 'type/fulfillment_state'
28
+ require_relative 'type/intent_confidence'
29
+ require_relative 'type/time_to_live'
27
30
  require_relative 'type/recent_intent_summary_view'
28
31
  require_relative 'type/slot'
29
32
  require_relative 'type/slot_resolution'
30
33
  require_relative 'type/slot_detail'
31
- require_relative 'type/current_intent'
34
+ require_relative 'type/context'
35
+ require_relative 'type/intent'
32
36
  require_relative 'type/output_dialog_mode'
33
37
  require_relative 'type/bot'
34
38
  require_relative 'type/message/content_type'
@@ -42,3 +46,4 @@ require_relative 'type/event'
42
46
  require_relative 'handler/base'
43
47
  require_relative 'handler/echo'
44
48
  require_relative 'handler/delegate'
49
+ require_relative 'handler/slot_resolution'
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aws
4
+ module Lex
5
+ class Conversation
6
+ module Exception
7
+ class MissingHandler < StandardError
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -9,7 +9,7 @@ module Aws
9
9
 
10
10
  def initialize(opts = {})
11
11
  self.successor = opts[:successor]
12
- self.options = opts[:options]
12
+ self.options = opts[:options] || {}
13
13
  end
14
14
 
15
15
  def will_respond?(conversation)
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aws
4
+ module Lex
5
+ class Conversation
6
+ module Handler
7
+ class SlotResolution < Base
8
+ def will_respond?(conversation)
9
+ # respond by default unless told otherwise
10
+ callable = options.fetch(:respond_on) { ->(_c) { true } }
11
+ callable.call(conversation)
12
+ end
13
+
14
+ def response(conversation)
15
+ # resolve all slots to their top resolution
16
+ conversation.slots.values.each(&:resolve!)
17
+
18
+ unless successor
19
+ msg = 'Handler `SlotResolution` must not be the final handler in the chain'
20
+ raise Exception::MissingHandler, msg
21
+ end
22
+
23
+ # call the next handler in the chain
24
+ successor.handle(conversation)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -5,11 +5,16 @@ module Aws
5
5
  class Conversation
6
6
  module Response
7
7
  class Base
8
- attr_accessor :session_attributes, :recent_intent_summary_view
8
+ attr_accessor(
9
+ :active_contexts,
10
+ :recent_intent_summary_view,
11
+ :session_attributes
12
+ )
9
13
 
10
14
  def initialize(opts = {})
11
- self.session_attributes = opts[:session_attributes]
15
+ self.active_contexts = opts[:active_contexts]
12
16
  self.recent_intent_summary_view = opts[:recent_intent_summary_view]
17
+ self.session_attributes = opts[:session_attributes]
13
18
  end
14
19
 
15
20
  def dialog_action
@@ -18,9 +23,10 @@ module Aws
18
23
 
19
24
  def to_lex
20
25
  Type::Response.new(
21
- session_attributes: session_attributes,
26
+ active_contexts: active_contexts,
27
+ dialog_action: dialog_action,
22
28
  recent_intent_summary_view: recent_intent_summary_view,
23
- dialog_action: dialog_action
29
+ session_attributes: session_attributes
24
30
  ).to_lex
25
31
  end
26
32
  end
@@ -20,7 +20,7 @@ module Aws
20
20
  fulfillmentState: fulfillment_state,
21
21
  message: message,
22
22
  responseCard: response_card
23
- }.reject { |_, v| v.nil? }
23
+ }.compact
24
24
  end
25
25
  end
26
26
  end
@@ -22,7 +22,7 @@ module Aws
22
22
  slots: slots,
23
23
  message: message,
24
24
  responseCard: response_card
25
- }.reject { |_, v| v.nil? }
25
+ }.compact
26
26
  end
27
27
  end
28
28
  end
@@ -20,7 +20,7 @@ module Aws
20
20
  slots: slots,
21
21
  kendraQueryRequestPayload: kendra_query_request_payload,
22
22
  kendraQueryFilterString: kendra_query_filter_string
23
- }.reject { |_, v| v.nil? }
23
+ }.compact
24
24
  end
25
25
  end
26
26
  end
@@ -18,7 +18,7 @@ module Aws
18
18
  type: 'ElicitIntent',
19
19
  message: message,
20
20
  responseCard: response_card
21
- }.reject { |_, v| v.nil? }
21
+ }.compact
22
22
  end
23
23
  end
24
24
  end
@@ -24,7 +24,7 @@ module Aws
24
24
  slotToElicit: slot_to_elicit,
25
25
  message: message,
26
26
  responseCard: response_card
27
- }.reject { |_, v| v.nil? }
27
+ }.compact
28
28
  end
29
29
  end
30
30
  end
@@ -45,7 +45,11 @@ module Aws
45
45
  end
46
46
 
47
47
  def elicitation_content
48
- first_elicitation? ? message : follow_up_message
48
+ first_elicitation? ? compose_message(message) : compose_message(follow_up_message)
49
+ end
50
+
51
+ def compose_message(msg)
52
+ msg.is_a?(Proc) ? msg.call(conversation) : msg
49
53
  end
50
54
 
51
55
  def increment_slot_elicitations!
@@ -8,17 +8,19 @@ module Aws
8
8
  module Responses
9
9
  def close(opts = {})
10
10
  params = {
11
- session_attributes: lex.session_attributes,
12
- recent_intent_summary_view: lex.recent_intent_summary_view
11
+ active_contexts: lex.active_contexts,
12
+ recent_intent_summary_view: lex.recent_intent_summary_view,
13
+ session_attributes: lex.session_attributes
13
14
  }.merge(opts)
14
15
  Response::Close.new(params).to_lex
15
16
  end
16
17
 
17
18
  def confirm_intent(opts = {})
18
19
  params = {
19
- session_attributes: lex.session_attributes,
20
- recent_intent_summary_view: lex.recent_intent_summary_view,
20
+ active_contexts: lex.active_contexts,
21
21
  intent_name: lex.current_intent.name,
22
+ recent_intent_summary_view: lex.recent_intent_summary_view,
23
+ session_attributes: lex.session_attributes,
22
24
  slots: lex.current_intent.slots
23
25
  }.merge(opts)
24
26
  Response::ConfirmIntent.new(params).to_lex
@@ -26,8 +28,9 @@ module Aws
26
28
 
27
29
  def delegate(opts = {})
28
30
  params = {
29
- session_attributes: lex.session_attributes,
31
+ active_contexts: lex.active_contexts,
30
32
  recent_intent_summary_view: lex.recent_intent_summary_view,
33
+ session_attributes: lex.session_attributes,
31
34
  slots: lex.current_intent.slots
32
35
  }.merge(opts)
33
36
  Response::Delegate.new(params).to_lex
@@ -35,18 +38,20 @@ module Aws
35
38
 
36
39
  def elicit_intent(opts = {})
37
40
  params = {
38
- session_attributes: lex.session_attributes,
39
- recent_intent_summary_view: lex.recent_intent_summary_view
41
+ active_contexts: lex.active_contexts,
42
+ recent_intent_summary_view: lex.recent_intent_summary_view,
43
+ session_attributes: lex.session_attributes
40
44
  }.merge(opts)
41
45
  Response::ElicitIntent.new(params).to_lex
42
46
  end
43
47
 
44
48
  def elicit_slot(opts = {})
45
49
  params = {
46
- session_attributes: lex.session_attributes,
50
+ active_contexts: lex.active_contexts,
51
+ intent_name: lex.current_intent.name,
47
52
  recent_intent_summary_view: lex.recent_intent_summary_view,
48
- slots: lex.current_intent.slots,
49
- intent_name: lex.current_intent.name
53
+ session_attributes: lex.session_attributes,
54
+ slots: lex.current_intent.slots
50
55
  }.merge(opts)
51
56
  Response::ElicitSlot.new(params).to_lex
52
57
  end
@@ -53,8 +53,12 @@ module Aws
53
53
  end
54
54
 
55
55
  module ClassMethods
56
- def integer!
57
- ->(v) { v.to_i }
56
+ def integer!(nilable: false)
57
+ nilable ? ->(v) { v&.to_i } : ->(v) { v.to_i }
58
+ end
59
+
60
+ def float!(nilable: false)
61
+ nilable ? ->(v) { v&.to_f } : ->(v) { v.to_f }
58
62
  end
59
63
 
60
64
  def symbolize_hash!
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aws
4
+ module Lex
5
+ class Conversation
6
+ module Type
7
+ class Context
8
+ include Base
9
+
10
+ required :time_to_live
11
+ required :name
12
+ required :parameters
13
+
14
+ coerce(
15
+ time_to_live: TimeToLive,
16
+ parameters: symbolize_hash!
17
+ )
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -7,6 +7,8 @@ module Aws
7
7
  class Event
8
8
  include Base
9
9
 
10
+ required :active_contexts, default: -> { [] }
11
+ required :alternative_intents, default: -> { [] }
10
12
  required :current_intent
11
13
  required :bot
12
14
  required :user_id
@@ -20,8 +22,14 @@ module Aws
20
22
  optional :sentiment_response
21
23
  optional :kendra_response
22
24
 
25
+ computed_property :intents, ->(instance) do
26
+ [instance.current_intent] | instance.alternative_intents
27
+ end
28
+
23
29
  coerce(
24
- current_intent: CurrentIntent,
30
+ active_contexts: Array[Context],
31
+ alternative_intents: Array[Intent],
32
+ current_intent: Intent,
25
33
  bot: Bot,
26
34
  invocation_source: InvocationSource,
27
35
  output_dialog_mode: OutputDialogMode,
@@ -4,13 +4,14 @@ module Aws
4
4
  module Lex
5
5
  class Conversation
6
6
  module Type
7
- class CurrentIntent
7
+ class Intent
8
8
  include Base
9
9
 
10
10
  required :name
11
11
  required :raw_slots, from: :slots, virtual: true
12
12
  required :slot_details
13
13
  required :confirmation_status
14
+ optional :nlu_intent_confidence_score
14
15
 
15
16
  computed_property :slots, ->(instance) do
16
17
  instance.raw_slots.each_with_object({}) do |(key, value), hash|
@@ -26,17 +27,20 @@ module Aws
26
27
 
27
28
  class << self
28
29
  def slot_details!
29
- ->(v) do
30
- v.each_with_object({}) do |(key, value), hash|
31
- hash[key.to_sym] = SlotDetail.shrink_wrap(value)
32
- end
30
+ ->(val) do
31
+ val
32
+ .compact
33
+ .each_with_object({}) do |(key, value), hash|
34
+ hash[key.to_sym] = SlotDetail.shrink_wrap(value)
35
+ end
33
36
  end
34
37
  end
35
38
  end
36
39
 
37
40
  coerce(
38
41
  slot_details: slot_details!,
39
- confirmation_status: ConfirmationStatus
42
+ confirmation_status: ConfirmationStatus,
43
+ nlu_intent_confidence_score: float!(nilable: true)
40
44
  )
41
45
  end
42
46
  end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aws
4
+ module Lex
5
+ class Conversation
6
+ module Type
7
+ class IntentConfidence
8
+ include Base
9
+
10
+ required :event
11
+
12
+ def ambiguous?(threshold: standard_deviation)
13
+ candidates(threshold: threshold).size > 1
14
+ end
15
+
16
+ def unambiguous?(threshold: standard_deviation)
17
+ !ambiguous?(threshold: threshold)
18
+ end
19
+
20
+ # NOTE: by default this method looks for candidates
21
+ # with a confidence score within one standard deviation
22
+ # of the current intent. Confidence scores may not be
23
+ # normally distributed, so it's very possible that this
24
+ # method will return abnormal results for skewed sample sets.
25
+ #
26
+ # If you want a consistent threshold for the condition, pass
27
+ # a static `threshold` parameter.
28
+ def candidates(threshold: standard_deviation)
29
+ intents = event.intents.select do |intent|
30
+ diff = event.current_intent
31
+ .nlu_intent_confidence_score
32
+ .to_f
33
+ .-(intent.nlu_intent_confidence_score.to_f)
34
+ .abs
35
+
36
+ diff <= threshold
37
+ end
38
+
39
+ # sort descending
40
+ intents.sort do |a, b|
41
+ b.nlu_intent_confidence_score.to_f <=> a.nlu_intent_confidence_score.to_f
42
+ end
43
+ end
44
+
45
+ def mean
46
+ @mean ||= calculate_mean
47
+ end
48
+
49
+ def similar_alternates(threshold: standard_deviation)
50
+ # remove the first element (current intent) from consideration
51
+ candidates(threshold: threshold)[1..-1]
52
+ end
53
+
54
+ def standard_deviation
55
+ @standard_deviation ||= calculate_standard_deviation
56
+ end
57
+
58
+ private
59
+
60
+ def calculate_mean
61
+ sum = event.intents.sum { |i| i.nlu_intent_confidence_score.to_f }
62
+ sum / event.intents.size
63
+ end
64
+
65
+ def calculate_standard_deviation
66
+ normalized = event.intents.map do |intent|
67
+ (intent.nlu_intent_confidence_score.to_f - mean) ** 2
68
+ end
69
+ normalized_mean = normalized.sum / normalized.size
70
+ Math.sqrt(normalized_mean)
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -10,6 +10,7 @@ module Aws
10
10
  required :dialog_action
11
11
  optional :session_attributes
12
12
  optional :recent_intent_summary_view
13
+ optional :active_contexts
13
14
  end
14
15
  end
15
16
  end
@@ -11,6 +11,10 @@ module Aws
11
11
  required :name
12
12
  required :value
13
13
 
14
+ def as_json(_opts = {})
15
+ to_lex
16
+ end
17
+
14
18
  def to_lex
15
19
  value
16
20
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Aws
4
+ module Lex
5
+ class Conversation
6
+ module Type
7
+ class TimeToLive
8
+ include Base
9
+
10
+ required :time_to_live_in_seconds
11
+ required :turns_to_live
12
+
13
+ coerce(
14
+ time_to_live_in_seconds: integer!,
15
+ turns_to_live: integer!
16
+ )
17
+
18
+ alias_method :seconds, :time_to_live_in_seconds
19
+ alias_method :seconds=, :time_to_live_in_seconds=
20
+ alias_method :turns, :turns_to_live
21
+ alias_method :turns=, :turns_to_live=
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -3,7 +3,7 @@
3
3
  module Aws
4
4
  module Lex
5
5
  class Conversation
6
- VERSION = '1.1.0'
6
+ VERSION = '2.1.0'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-lex-conversation
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jesse Doyle
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: exe
14
14
  cert_chain: []
15
- date: 2020-06-29 00:00:00.000000000 Z
15
+ date: 2021-02-11 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: shrink_wrap
@@ -44,6 +44,7 @@ files:
44
44
  - ".rspec"
45
45
  - ".rubocop.yml"
46
46
  - ".simplecov"
47
+ - CHANGELOG.md
47
48
  - CODE_OF_CONDUCT.md
48
49
  - Gemfile
49
50
  - LICENSE.md
@@ -55,9 +56,11 @@ files:
55
56
  - lib/aws-lex-conversation.rb
56
57
  - lib/aws/lex/conversation.rb
57
58
  - lib/aws/lex/conversation/base.rb
59
+ - lib/aws/lex/conversation/exception/missing_handler.rb
58
60
  - lib/aws/lex/conversation/handler/base.rb
59
61
  - lib/aws/lex/conversation/handler/delegate.rb
60
62
  - lib/aws/lex/conversation/handler/echo.rb
63
+ - lib/aws/lex/conversation/handler/slot_resolution.rb
61
64
  - lib/aws/lex/conversation/response/base.rb
62
65
  - lib/aws/lex/conversation/response/close.rb
63
66
  - lib/aws/lex/conversation/response/confirm_intent.rb
@@ -72,11 +75,13 @@ files:
72
75
  - lib/aws/lex/conversation/type/base.rb
73
76
  - lib/aws/lex/conversation/type/bot.rb
74
77
  - lib/aws/lex/conversation/type/confirmation_status.rb
75
- - lib/aws/lex/conversation/type/current_intent.rb
78
+ - lib/aws/lex/conversation/type/context.rb
76
79
  - lib/aws/lex/conversation/type/dialog_action_type.rb
77
80
  - lib/aws/lex/conversation/type/enumeration.rb
78
81
  - lib/aws/lex/conversation/type/event.rb
79
82
  - lib/aws/lex/conversation/type/fulfillment_state.rb
83
+ - lib/aws/lex/conversation/type/intent.rb
84
+ - lib/aws/lex/conversation/type/intent_confidence.rb
80
85
  - lib/aws/lex/conversation/type/invocation_source.rb
81
86
  - lib/aws/lex/conversation/type/message.rb
82
87
  - lib/aws/lex/conversation/type/message/content_type.rb
@@ -93,6 +98,7 @@ files:
93
98
  - lib/aws/lex/conversation/type/slot.rb
94
99
  - lib/aws/lex/conversation/type/slot_detail.rb
95
100
  - lib/aws/lex/conversation/type/slot_resolution.rb
101
+ - lib/aws/lex/conversation/type/time_to_live.rb
96
102
  - lib/aws/lex/conversation/version.rb
97
103
  homepage: https://github.com/amaabca/aws-lex-conversation
98
104
  licenses:
@@ -114,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
120
  - !ruby/object:Gem::Version
115
121
  version: '0'
116
122
  requirements: []
117
- rubygems_version: 3.1.2
123
+ rubygems_version: 3.1.4
118
124
  signing_key:
119
125
  specification_version: 4
120
126
  summary: AWS Lex Conversation Dialog Management