wit_bot 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/examples/bot.rb +20 -0
- data/examples/bot/bot.rb +38 -0
- data/lib/wit_bot.rb +3 -0
- data/lib/wit_bot/bot/base.rb +45 -0
- data/lib/wit_bot/bot/conversation/base.rb +44 -0
- data/lib/wit_bot/bot/conversation/participant.rb +28 -0
- data/lib/wit_bot/bot/models/message.rb +12 -0
- data/lib/wit_bot/models/context.rb +7 -3
- data/lib/wit_bot/models/message.rb +5 -1
- data/lib/wit_bot/models/message_thread.rb +14 -5
- data/lib/wit_bot/models/outcome.rb +1 -1
- data/lib/wit_bot/models/wit/entity/entity_model.rb +6 -2
- data/lib/wit_bot/version.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 549a0b5878b37d6cad5a60ce08cf73d24e6c00f5
|
4
|
+
data.tar.gz: f0a17fab1335c1df10d6f1613bf82ae8e423e29b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98de64370554a72a83b26f0600512c2e80e165885b61a5238da82b7406bc0be094ed3284d597d0043cb9570eb4a1e9b02f46c44ce09abfe9e257cdd90e26388c
|
7
|
+
data.tar.gz: f18fddda7d520c9999b5236e1c896a8a7fb3a90b9c05d6f17ffb44840bb77dfca8df39fc5c56d9863cad30e232c9b6e1f11209204845e82900ecb1c7e0f322b9
|
data/examples/bot.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#require 'wit_bot'
|
2
|
+
|
3
|
+
require_relative '../lib/wit_bot'
|
4
|
+
|
5
|
+
require_relative 'bot/bot'
|
6
|
+
|
7
|
+
WitBot.configure do |c|
|
8
|
+
c.token = ENV['WIT_ACCESS_TOKEN'] # Create a wit bot and set the token here
|
9
|
+
end
|
10
|
+
|
11
|
+
WitBot.config
|
12
|
+
|
13
|
+
conversation = WitBot::Bot::Conversation::Base.new
|
14
|
+
|
15
|
+
bot = Bot.new conversation
|
16
|
+
|
17
|
+
loop do
|
18
|
+
print 'Input: '
|
19
|
+
conversation.send_message gets.chomp
|
20
|
+
end
|
data/examples/bot/bot.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
class Bot < WitBot::Bot::Base
|
2
|
+
intents :Test, :login, :missing_pin
|
3
|
+
|
4
|
+
protected
|
5
|
+
|
6
|
+
def on_output(message)
|
7
|
+
puts "Output: #{message.text}"
|
8
|
+
end
|
9
|
+
|
10
|
+
def on_missing_pin(message)
|
11
|
+
puts 'Pin used to be missing.'
|
12
|
+
login message.outcome
|
13
|
+
end
|
14
|
+
|
15
|
+
def on_login(message)
|
16
|
+
login message.outcome
|
17
|
+
end
|
18
|
+
|
19
|
+
def login(outcome)
|
20
|
+
if (pin_code = outcome.entities[:pin_code])
|
21
|
+
output "Logged you in with the pin code: #{pin_code}"
|
22
|
+
else
|
23
|
+
conversation.thread.context.state << :missing_pin
|
24
|
+
output 'Please include a pin code.'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def on_Test(message)
|
29
|
+
outcome = message.outcome
|
30
|
+
|
31
|
+
thing = outcome.entities["thing"]
|
32
|
+
adjective = outcome.entities["adjective"]
|
33
|
+
|
34
|
+
msg = "Yup, that #{thing || 'thing'} is #{adjective || 'a word'}."
|
35
|
+
|
36
|
+
output msg
|
37
|
+
end
|
38
|
+
end
|
data/lib/wit_bot.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
require 'active_support/core_ext/hash/indifferent_access'
|
2
2
|
require 'active_support/core_ext/module/attribute_accessors'
|
3
|
+
require 'active_support/ordered_hash'
|
4
|
+
require 'active_support/concern'
|
3
5
|
require 'http'
|
4
6
|
require 'require_all'
|
7
|
+
require 'observer'
|
5
8
|
|
6
9
|
module WitBot
|
7
10
|
class << self
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module WitBot
|
2
|
+
module Bot
|
3
|
+
class Base < WitBot::Bot::Conversation::Participant
|
4
|
+
def initialize(conversation)
|
5
|
+
super conversation
|
6
|
+
end
|
7
|
+
|
8
|
+
class << self
|
9
|
+
@@intents = []
|
10
|
+
def intents(*args)
|
11
|
+
if args.empty?
|
12
|
+
@@intents.map! do |intent|
|
13
|
+
if intent.is_a? WitBot::WitModel::Intent
|
14
|
+
intent
|
15
|
+
else
|
16
|
+
WitBot::WitModel::Intent.find intent
|
17
|
+
end
|
18
|
+
end
|
19
|
+
else
|
20
|
+
@@intents.concat args
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def intents
|
26
|
+
self.class.intents
|
27
|
+
end
|
28
|
+
|
29
|
+
def intent_names
|
30
|
+
intents.map { |intent| intent.name }
|
31
|
+
end
|
32
|
+
|
33
|
+
def on_input(message)
|
34
|
+
outcome = message.outcome
|
35
|
+
intent = outcome.intent
|
36
|
+
intent_name = intent.name.to_sym
|
37
|
+
|
38
|
+
if intent_names.include? intent_name
|
39
|
+
method_name = "on_#{intent_name}".to_sym
|
40
|
+
self.send method_name, message if self.respond_to? method_name, true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module WitBot
|
2
|
+
module Bot
|
3
|
+
module Conversation
|
4
|
+
class Base
|
5
|
+
include Observable
|
6
|
+
|
7
|
+
def metadata
|
8
|
+
thread.metadata
|
9
|
+
end
|
10
|
+
|
11
|
+
def thread
|
12
|
+
@thread ||= MessageThread.new("#{self.class.name}-#{SecureRandom.uuid}")
|
13
|
+
end
|
14
|
+
|
15
|
+
def messages(user: true, bot: true)
|
16
|
+
thread.messages_list user, bot
|
17
|
+
end
|
18
|
+
|
19
|
+
def send_message(text, sender=nil)
|
20
|
+
sender && sender.bot? ? output(text) : input(text)
|
21
|
+
end
|
22
|
+
|
23
|
+
def input(input)
|
24
|
+
message = thread.create_message input
|
25
|
+
message.send 1, false
|
26
|
+
changed
|
27
|
+
notify_observers :input, message
|
28
|
+
message
|
29
|
+
end
|
30
|
+
|
31
|
+
def listen_with(listener_class)
|
32
|
+
listener_class.new self
|
33
|
+
end
|
34
|
+
|
35
|
+
def output(text)
|
36
|
+
message = thread.create_bot_message text
|
37
|
+
changed
|
38
|
+
notify_observers :output, message
|
39
|
+
message
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module WitBot
|
2
|
+
module Bot
|
3
|
+
module Conversation
|
4
|
+
class Participant
|
5
|
+
attr_reader :conversation
|
6
|
+
|
7
|
+
def initialize(conversation)
|
8
|
+
@conversation = conversation
|
9
|
+
@conversation.add_observer self
|
10
|
+
end
|
11
|
+
def bot?
|
12
|
+
true
|
13
|
+
end
|
14
|
+
def output(text)
|
15
|
+
@conversation.send_message text, self
|
16
|
+
end
|
17
|
+
def update(type, message)
|
18
|
+
case type
|
19
|
+
when :input
|
20
|
+
self.on_input message if self.respond_to? :on_input, true
|
21
|
+
when :output
|
22
|
+
self.on_output message if self.respond_to? :on_output, true
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -1,7 +1,11 @@
|
|
1
1
|
module WitBot
|
2
2
|
class Context
|
3
|
-
attr_accessor :
|
4
|
-
attr_writer :hash, :entities
|
3
|
+
attr_accessor :reference_time, :location
|
4
|
+
attr_writer :hash, :entities, :state
|
5
|
+
|
6
|
+
def state
|
7
|
+
@state ||= []
|
8
|
+
end
|
5
9
|
|
6
10
|
def empty?
|
7
11
|
as_json.empty?
|
@@ -13,7 +17,7 @@ module WitBot
|
|
13
17
|
|
14
18
|
def as_json
|
15
19
|
h = {}
|
16
|
-
h[:state] = state if state
|
20
|
+
h[:state] = state if state && !state.empty?
|
17
21
|
h[:reference_time] = reference_time.iso8601 if reference_time
|
18
22
|
h[:entities] = entities if @entities
|
19
23
|
h[:location] = location if location
|
@@ -11,6 +11,10 @@ module WitBot
|
|
11
11
|
@outcomes = @_outcomes = nil
|
12
12
|
end
|
13
13
|
|
14
|
+
def bot?
|
15
|
+
false
|
16
|
+
end
|
17
|
+
|
14
18
|
def params(p=nil)
|
15
19
|
params = {
|
16
20
|
q: text,
|
@@ -25,7 +29,7 @@ module WitBot
|
|
25
29
|
response = MessageRequest.new.request(self, n)
|
26
30
|
|
27
31
|
@sent = true
|
28
|
-
|
32
|
+
thread.reset_context unless keep_context
|
29
33
|
|
30
34
|
@_text = response['_text']
|
31
35
|
@_outcomes = response['outcomes']
|
@@ -1,22 +1,31 @@
|
|
1
1
|
module WitBot
|
2
2
|
class MessageThread
|
3
|
-
|
3
|
+
attr_accessor :metadata
|
4
|
+
|
5
|
+
attr_reader :id, :messages, :bot_messages
|
4
6
|
|
5
7
|
def initialize(id=SecureRandom.uuid)
|
6
8
|
@id = id
|
7
|
-
@messages =
|
9
|
+
@messages = ActiveSupport::OrderedHash.new
|
10
|
+
@bot_messages = ActiveSupport::OrderedHash.new
|
8
11
|
end
|
9
12
|
|
10
13
|
def message(id)
|
11
14
|
messages[id]
|
12
15
|
end
|
13
16
|
|
14
|
-
def messages_list
|
15
|
-
|
17
|
+
def messages_list(user: true, bot: false)
|
18
|
+
bot_messages = bot ? @bot_messages.values : []
|
19
|
+
user_messages = user ? @messages.values : []
|
20
|
+
bot_messages + user_messages
|
16
21
|
end
|
17
22
|
|
18
23
|
def create_message(text, id=SecureRandom.uuid)
|
19
|
-
WitBot::Message.new self, text, id: id
|
24
|
+
@messages[id] = WitBot::Message.new self, text, id: id
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_bot_message(text, id=SecureRandom.uuid)
|
28
|
+
@bot_messages[id] = WitBot::Bot::Message.new self, text, id: id
|
20
29
|
end
|
21
30
|
|
22
31
|
def context
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module WitBot
|
2
2
|
class EntityModel
|
3
3
|
attr_accessor :others
|
4
|
-
attr_reader :entity, :role, :raw
|
4
|
+
attr_reader :entity, :role, :raw, :value
|
5
5
|
|
6
6
|
def initialize(entity, role, raw)
|
7
7
|
@entity = entity
|
@@ -10,12 +10,16 @@ module WitBot
|
|
10
10
|
|
11
11
|
@value = case @raw[:type].to_sym
|
12
12
|
when :value
|
13
|
-
|
13
|
+
@raw[:value].to_s
|
14
14
|
else
|
15
15
|
@raw[:value]
|
16
16
|
end
|
17
17
|
|
18
18
|
@others = []
|
19
19
|
end
|
20
|
+
|
21
|
+
def to_s
|
22
|
+
value.to_s
|
23
|
+
end
|
20
24
|
end
|
21
25
|
end
|
data/lib/wit_bot/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wit_bot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben (@penne12_)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -206,9 +206,15 @@ files:
|
|
206
206
|
- bin/console
|
207
207
|
- bin/setup
|
208
208
|
- bin/wit
|
209
|
+
- examples/bot.rb
|
210
|
+
- examples/bot/bot.rb
|
209
211
|
- examples/simple.rb
|
210
212
|
- examples/thread.rb
|
211
213
|
- lib/wit_bot.rb
|
214
|
+
- lib/wit_bot/bot/base.rb
|
215
|
+
- lib/wit_bot/bot/conversation/base.rb
|
216
|
+
- lib/wit_bot/bot/conversation/participant.rb
|
217
|
+
- lib/wit_bot/bot/models/message.rb
|
212
218
|
- lib/wit_bot/configuration.rb
|
213
219
|
- lib/wit_bot/errors/low_confidence_error.rb
|
214
220
|
- lib/wit_bot/errors/wit_bot_error.rb
|