class Aws::Lex::Conversation::Simulator
Attributes
lex[RW]
Public Class Methods
new(opts = {})
click to toggle source
# File lib/aws/lex/conversation/simulator.rb, line 9 def initialize(opts = {}) self.lex = opts.fetch(:lex) do Type::Event.shrink_wrap( bot: default_bot, inputMode: 'Text', inputTranscript: '', interpretations: [], invocationSource: 'DialogCodeHook', messageVersion: '1.0', requestAttributes: {}, responseContentType: 'text/plain; charset=utf-8', sessionId: '1234567890000', sessionState: default_session_state ) end interpretation(name: 'SIMULATION') end
Public Instance Methods
bot(opts = {})
click to toggle source
# File lib/aws/lex/conversation/simulator.rb, line 31 def bot(opts = {}) changes = { aliasName: opts[:alias_name], aliasId: opts[:alias_id], name: opts[:name], version: opts[:version], localeId: opts[:locale_id], id: opts[:id] }.compact lex.bot = Type::Bot.shrink_wrap(lex.bot.to_lex.merge(changes)) self end
context(opts = {})
click to toggle source
rubocop:enable Metrics/AbcSize
# File lib/aws/lex/conversation/simulator.rb, line 82 def context(opts = {}) data = { name: opts.fetch(:name), contextAttributes: opts.fetch(:context_attributes) { {} }, timeToLive: { timeToLiveInSeconds: opts.fetch(:seconds) { 600 }, turnsToLive: opts.fetch(:turns) { 100 } } } context = Type::Context.shrink_wrap(data) lex.session_state.active_contexts.delete_if { |c| c.name == context.name } lex.session_state.active_contexts << context self end
event()
click to toggle source
# File lib/aws/lex/conversation/simulator.rb, line 27 def event lex.to_lex end
input_mode(mode)
click to toggle source
# File lib/aws/lex/conversation/simulator.rb, line 118 def input_mode(mode) lex.input_mode = Type::InputMode.new(mode) self end
intent(opts = {})
click to toggle source
# File lib/aws/lex/conversation/simulator.rb, line 49 def intent(opts = {}) data = default_intent(opts) intent = Type::Intent.shrink_wrap(data) lex.session_state.intent = intent interpretation(data) end
interpretation(opts = {})
click to toggle source
rubocop:disable Metrics/AbcSize
# File lib/aws/lex/conversation/simulator.rb, line 57 def interpretation(opts = {}) name = opts.fetch(:name) slots = opts.fetch(:slots) { {} } sentiment_score = opts.dig(:sentiment_response, :sentiment_score) sentiment = opts.dig(:sentiment_response, :sentiment) sentiment_response = opts[:sentiment_response] && { sentiment: sentiment, sentimentScore: sentiment_score } data = { intent: default_intent(opts), sentimentResponse: sentiment_response, nluConfidence: opts[:nlu_confidence] }.compact lex.interpretations.delete_if { |i| i.intent.name == name } lex.interpretations << Type::Interpretation.shrink_wrap(data) slots.each do |key, value| slot_data = { name: key }.merge(value) slot(slot_data) end reset_computed_properties! self end
invocation_source(source)
click to toggle source
# File lib/aws/lex/conversation/simulator.rb, line 113 def invocation_source(source) lex.invocation_source = Type::InvocationSource.new(source) self end
session(data)
click to toggle source
# File lib/aws/lex/conversation/simulator.rb, line 123 def session(data) lex.session_state.session_attributes.merge!(Type::SessionAttributes[data]) self end
slot(opts = {})
click to toggle source
# File lib/aws/lex/conversation/simulator.rb, line 97 def slot(opts = {}) name = opts.fetch(:name).to_sym raw_slots = { shape: opts.fetch(:shape) { 'Scalar' }, value: { originalValue: opts.fetch(:original_value) { opts.fetch(:value) }, resolvedValues: opts.fetch(:resolved_values) { [opts.fetch(:value)] }, interpretedValue: opts.fetch(:interpreted_value) { opts.fetch(:value) } } } lex.session_state.intent.raw_slots[name] = raw_slots current_interpretation.intent.raw_slots[name] = raw_slots reset_computed_properties! self end
transcript(message)
click to toggle source
# File lib/aws/lex/conversation/simulator.rb, line 44 def transcript(message) lex.input_transcript = message self end
Private Instance Methods
current_interpretation()
click to toggle source
# File lib/aws/lex/conversation/simulator.rb, line 130 def current_interpretation lex.interpretations.find { |i| i.intent.name == lex.session_state.intent.name } end
default_bot()
click to toggle source
# File lib/aws/lex/conversation/simulator.rb, line 149 def default_bot { aliasId: 'TSTALIASID', aliasName: 'TestBotAlias', id: 'BOT_ID', localeId: 'en_US', name: 'SIMULATOR', version: 'DRAFT' } end
default_intent(opts = {})
click to toggle source
# File lib/aws/lex/conversation/simulator.rb, line 174 def default_intent(opts = {}) { confirmationState: opts.fetch(:confirmation_state) { 'None' }, kendraResponse: opts[:kendra_response], name: opts.fetch(:name), nluConfidence: opts[:nlu_confidence], originatingRequestId: opts.fetch(:originating_request_id) { SecureRandom.uuid }, slots: opts.fetch(:slots) { {} }, state: opts.fetch(:state) { 'InProgress' } }.compact end
default_session_state()
click to toggle source
# File lib/aws/lex/conversation/simulator.rb, line 160 def default_session_state { activeContexts: [], sessionAttributes: {}, intent: { confirmationState: 'None', name: 'SIMULATION', slots: {}, state: 'InProgress', originatingRequestId: SecureRandom.uuid } } end
reset_computed_properties!()
click to toggle source
computed properties are memoized using instance variables, so we must uncache the values when things change
# File lib/aws/lex/conversation/simulator.rb, line 136 def reset_computed_properties! %w[ @alternate_intents @current_intent @intents ].each do |variable| lex.instance_variable_set(variable, nil) end lex.session_state.intent.instance_variable_set('@slots', nil) current_interpretation.intent.instance_variable_set('@slots', nil) end