aws-lex-conversation 1.1.0 → 2.1.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
  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