nlu_adapter 0.1.4 → 0.1.5

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: 7499fe30c4727e84ae33be8b0e3905d921942daa4b74cac9105105e473107160
4
- data.tar.gz: 2cdb76a1ba9593b53d80d5f32b3be140c38d629e376c9abbd6893ff1ae1669d6
3
+ metadata.gz: 25db10d98a5439cbbc18327adba57ed9422211b2088644d950d9172cb8ed210f
4
+ data.tar.gz: 4ccf19d8a3633de04e0764fa74c374d185e3182dece8750cb3d9a7931a07167a
5
5
  SHA512:
6
- metadata.gz: d0f35e5f09313ba18410c8ccf9d07ae4ea4ecb6cb217cf348e0cfccb8af0600e01262911e0890a706360b0c650ad9a9f395cf86273af9fa541065dec0098f854
7
- data.tar.gz: 1d350b886b3154d973a5aef113cd505311ecc544037f7250f2f7a5da0b1691e6e87b7c9b91ed6c51fd116527c7207a1c78585705944cc0c566067007fdc7d606
6
+ metadata.gz: a6184e011cda087ec1e98cb5a81da9f3e01a982e05fdb7d75946bc2a3e083573f61a1992139533f2d73f6b4a42c4b1de73f36fcf30c68189e1b45347e7a3eee6
7
+ data.tar.gz: 136be99c729217c0e7af0e24c7fc5401dad0f311dc60045b58b8490b48ee160d4a871d72fc156f61cb2e5ed823ca23c97e3b507e07ce3b4fea82d3effb9b4a0e
data/.yardopts CHANGED
@@ -6,3 +6,4 @@ CODE_OF_CONDUCT.md
6
6
  LICENSE
7
7
  docs/dialogflow.md
8
8
  docs/lex.md
9
+ docs/watson_assistant.md
data/CHANGELOG.md CHANGED
@@ -1,8 +1,14 @@
1
- 0.1.4
1
+ 0.1.5 (22/Feb/2019)
2
+ ---
3
+ * Added IBM Watson Assistant
4
+ * Updated documentation
5
+
6
+ 0.1.4 (19/Jan/2019)
2
7
  ---
3
8
  * Fixed a bad push
9
+ * Note/Update: It was not bad! www.rubydoc.info was not refreshing for some strange reason
4
10
 
5
- 0.1.3
11
+ 0.1.3 (19/Jan/2019)
6
12
  ---
7
13
  * New functionalities:
8
14
  * bulk_parse - parse multiple texts
data/README.md CHANGED
@@ -31,6 +31,7 @@ NLU Service | Intent | Intet Collection | Intent identification
31
31
  ----------- | ------ | ---------------- | ---------------------
32
32
  [Aws Lex](https://aws.amazon.com/lex/) ([doc](docs/lex.md)) | C,R,U | C,R,U | Yes
33
33
  [Google Dialogflow](https://dialogflow.com/) ([doc](docs/dialogflow.md)) | C,R,U | To-Do | Yes
34
+ [IBM Watson Assistant](https://cloud.ibm.com/catalog/services/watson-assistant) ([doc](docs/watson_assistant.md)) | C,R,U | To-Do | Yes
34
35
 
35
36
  ## Classification metrics
36
37
  ### Supported intent classification metrics
data/docs/dialogflow.md CHANGED
@@ -1,13 +1,17 @@
1
+ # @markup markdown
2
+
1
3
  # NluAdapter::Dialogflow
2
4
 
3
5
  Adapter for Google Dialogflow
4
6
 
5
7
  ## Setup
6
8
 
9
+ Please check the [documentation](https://dialogflow.com/).
7
10
 
8
11
  ## Examples
9
12
 
10
- 1. Parse a text and identify intent from an existing Lex bot
13
+ 1. Parse a text and identify intent from an existing Dialogflow bot
14
+
11
15
  ```ruby
12
16
  require 'nlu_adapter'
13
17
 
@@ -20,6 +24,7 @@ puts d.parse('I want to book a hotel')
20
24
  {:intent_name=>"BookHotel"}
21
25
  ```
22
26
  2. Create an intent
27
+
23
28
  ```ruby
24
29
  require 'nlu_adapter'
25
30
 
@@ -35,6 +40,7 @@ d.create_intent(i)
35
40
  Create an Agent from Dialogflow console.
36
41
 
37
42
  ## Running examples
43
+
38
44
  ```bash
39
45
  $ cat test-df-1.rb
40
46
  require 'nlu_adapter'
data/docs/lex.md CHANGED
@@ -1,12 +1,17 @@
1
+ # @markup markdown
2
+
1
3
  # NluAdapter::Lex
2
4
 
3
5
  Adapter for Aws Lex
4
6
 
5
7
  ## Setup
6
8
 
9
+ Please check the [documentation](https://aws.amazon.com/lex/).
10
+
7
11
  ## Examples
8
12
 
9
13
  1. Parse a text and identify intent from an existing Lex bot
14
+
10
15
  ```ruby
11
16
  require 'nlu_adapter'
12
17
 
@@ -19,6 +24,7 @@ puts l.parse('I want to book a hotel')
19
24
  {:intent_name=>"BookHotel"}
20
25
  ```
21
26
  2. Create an intent
27
+
22
28
  ```ruby
23
29
  require 'nlu_adapter'
24
30
 
@@ -30,6 +36,7 @@ l.create_intent(i)
30
36
  ```
31
37
 
32
38
  3. Create an intent collection
39
+
33
40
  ```ruby
34
41
 
35
42
  require 'nlu_adapter'
@@ -45,6 +52,7 @@ l.create_intent_collection(ic)
45
52
  ```
46
53
 
47
54
  ## Running examples
55
+
48
56
  ```bash
49
57
  $ cat test-lex-1.rb
50
58
  require 'nlu_adapter'
@@ -0,0 +1,64 @@
1
+ # @markup markdown
2
+
3
+ # NluAdapter::WatsonAssistant
4
+
5
+ Adapter for IBM Watson Assistant
6
+
7
+ ## Setup
8
+
9
+ Please check the [Getting started tutorial](https://cloud.ibm.com/docs/services/assistant/getting-started.html#getting-started)
10
+
11
+ * To get the API details
12
+ * Go to [resources list](https://cloud.ibm.com/resources)
13
+ * Select the desired service from the Services section
14
+ * Download / Copy the API Key & URL
15
+ * Click on the Launch tool to go to IBM Watson Assistant
16
+ * Select the Skills tab
17
+ * Click on the vertical ... icon for the desired skill
18
+ * Then click on View API Details from the menu
19
+ * Copy the Workspace ID
20
+
21
+ * To create intents
22
+ * In the above step instead of clicking on the vertical ... icon, click the skill name
23
+
24
+ ## Examples
25
+
26
+ 1. Parse a text and identify intent from an existing skill
27
+
28
+ ```ruby
29
+ require 'nlu_adapter'
30
+
31
+ wa = NluAdapter.new(:WatsonAssistant, {url: 'https://gateway-lon.watsonplatform.net/assistant/api', version: '2018-09-20'})
32
+
33
+ puts wa.parse('I want to book a hotel')
34
+
35
+ ```
36
+ ```
37
+ {:intent_name=>"BookHotel"}
38
+ ```
39
+ 2. Create an intent
40
+
41
+ ```ruby
42
+ require 'nlu_adapter'
43
+
44
+ wa = NluAdapter.new(:WatsonAssistant, {url: 'https://gateway-lon.watsonplatform.net/assistant/api', version: '2018-09-20'})
45
+ i = wa.new_intent('BookHotel', ['please book a hotel', 'I want to book a hotel'])
46
+
47
+ wa.create_intent(i)
48
+
49
+ ```
50
+
51
+ ## Running examples
52
+
53
+ ```bash
54
+ $ cat test-wa-1.rb
55
+ require 'nlu_adapter'
56
+
57
+ wa = NluAdapter.new(:WatsonAssistant, {url: 'https://gateway-lon.watsonplatform.net/assistant/api', version: '2018-09-20'})
58
+
59
+ puts wa.parse('I want to book a hotel')
60
+
61
+ $ WATSON_API_KEY='XXX' WATSON_WORKSPACE_ID='YYY' ruby ./test-wa-1.rb
62
+ {:intent_name=>"BookHotel"}
63
+
64
+ ```
data/lib/nlu_adapter.rb CHANGED
@@ -6,8 +6,9 @@ module NluAdapter
6
6
  autoload :ParseHelper, 'nlu_adapter/parse_helper'
7
7
  autoload :Metrics, 'nlu_adapter/metrics'
8
8
  module Adapters
9
- autoload :Lex, 'nlu_adapter/lex'
9
+ autoload :Lex, 'nlu_adapter/lex'
10
10
  autoload :Dialogflow, 'nlu_adapter/dialogflow'
11
+ autoload :WatsonAssistant, 'nlu_adapter/watson_assistant'
11
12
  end
12
13
 
13
14
  def self.new(name, options = {})
@@ -1,3 +1,3 @@
1
1
  module NluAdapter
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
@@ -0,0 +1,157 @@
1
+ require "ibm_watson/assistant_v1"
2
+
3
+
4
+ module NluAdapter
5
+ module Adapters
6
+ # IBM Watson Assistant wrapper class
7
+ #
8
+ class WatsonAssistant
9
+ include ParseHelper
10
+
11
+ include IBMWatson
12
+
13
+ # Constructor
14
+ def initialize(options = {})
15
+ @url = options[:url] || "https://gateway-lon.watsonplatform.net/assistant/api"
16
+ @version = options[:version] || "2018-09-20"
17
+ @workspace_id = ENV["WATSON_WORKSPACE_ID"]
18
+ begin
19
+ @assistant = AssistantV1.new(
20
+ iam_apikey: ENV["WATSON_API_KEY"],
21
+ version: @version,
22
+ url: @url
23
+ )
24
+ rescue WatsonApiException => ex
25
+ puts "Error: #{ex.inspect}"
26
+ end
27
+ end
28
+
29
+ # Understand a given text
30
+ #
31
+ # @param text [String] a text to parse using the NLU provider
32
+ # @return [Json] return the identified intent name
33
+ #
34
+ def parse(text)
35
+ intent_name = nil
36
+ begin
37
+ response = @assistant.message(
38
+ workspace_id: @workspace_id,
39
+ input: {
40
+ text: text
41
+ }
42
+ )
43
+
44
+ intent_name = response.result["intents"][0]["intent"]
45
+ rescue WatsonApiException => ex
46
+ puts "Error: #{ex.inspect}"
47
+ end
48
+ return { intent_name: intent_name}
49
+ end
50
+
51
+ # Get an instance of Intent, if it exists else nil
52
+ #
53
+ # @param name [String] name of the intent
54
+ # @return [Intent] intent object
55
+ #
56
+ def get_intent(name)
57
+ begin
58
+ response = @assistant.get_intent(
59
+ workspace_id: @workspace_id,
60
+ intent: name,
61
+ export: true
62
+ )
63
+
64
+ return Intent.new({id: response.result['intent'], #for is update check
65
+ name: response.result['intent'],
66
+ description: response.result['description'],
67
+ utterences: response.result['examples'].map { |e| e['text']} })
68
+
69
+ rescue WatsonApiException => ex
70
+ puts "Error: #{ex.inspect}"
71
+ end
72
+ return nil
73
+ end
74
+
75
+ # Get a new instance of Intent
76
+ #
77
+ # @param name [String] name of the intent
78
+ # @param utterences [Array] phrases for training
79
+ # @return [Intent] Intent object
80
+ #
81
+ def new_intent(name, description, utterences = [])
82
+ i = get_intent(name)
83
+
84
+ i = Intent.new if !i
85
+ i.name = name
86
+ i.description = description
87
+ i.utterences = utterences
88
+
89
+ return i
90
+ end
91
+
92
+ # Given an Intent object, create/update it in Dialogflow
93
+ #
94
+ # @param intent [Intent] Intent object
95
+ # @return [Intent] Intent object
96
+ #
97
+ # @todo convert response -> Intent
98
+ #
99
+ def create_intent(intent)
100
+ #check: to create / update
101
+ i = intent.to_h
102
+ if !intent.id
103
+ response = @assistant.create_intent(
104
+ workspace_id: @workspace_id,
105
+ intent: i[:name],
106
+ description: i[:description],
107
+ examples: i[:examples]
108
+ )
109
+ else
110
+ response = @assistant.update_intent(
111
+ workspace_id: @workspace_id,
112
+ intent: intent.id,
113
+ new_examples: i[:examples],
114
+ new_description: i[:description],
115
+ new_intent: i[:name]
116
+ )
117
+
118
+ end
119
+ end
120
+
121
+
122
+ # Class represents Intent in an IntentCollection
123
+ class Intent
124
+ include NluAdapterIntent
125
+ attr_accessor :id, :description
126
+
127
+ # Constructor
128
+ def initialize(options = {})
129
+ @id = options[:id] #check for is update
130
+ @name = options[:name]
131
+ @description = options[:description]
132
+ @utterences = options[:utterences]
133
+ end
134
+
135
+ # Convert self to Hash
136
+ # @return [Hash] ruby hash
137
+ #
138
+ def to_h
139
+ {
140
+ name: @name,
141
+ description: @description,
142
+ examples: @utterences.map {|u| {"text" => u } }
143
+ }
144
+ end
145
+
146
+ # convert self to json
147
+ # @return [json] json
148
+ #
149
+ def to_json
150
+ to_h.to_json
151
+ end
152
+
153
+ end
154
+
155
+ end
156
+ end
157
+ end
data/nlu_adapter.gemspec CHANGED
@@ -49,4 +49,8 @@ Gem::Specification.new do |spec|
49
49
 
50
50
  #An implementation of Matrix and Vector classes.
51
51
  spec.add_dependency('matrix', '~> 0.1.0')
52
+
53
+ #Official client library to use the IBM Watson Services
54
+ spec.add_dependency('ibm_watson', '~> 0.12.0')
55
+
52
56
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nlu_adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Girish Nair
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-18 00:00:00.000000000 Z
11
+ date: 2019-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: 0.1.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: ibm_watson
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 0.12.0
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 0.12.0
111
125
  description: An adapter for various NLU web services like Aws Lex, Google Dialogflow
112
126
  etc.
113
127
  email:
@@ -130,6 +144,7 @@ files:
130
144
  - bin/setup
131
145
  - docs/dialogflow.md
132
146
  - docs/lex.md
147
+ - docs/watson_assistant.md
133
148
  - entrypoint.sh
134
149
  - lib/nlu_adapter.rb
135
150
  - lib/nlu_adapter/dialogflow.rb
@@ -139,6 +154,7 @@ files:
139
154
  - lib/nlu_adapter/metrics.rb
140
155
  - lib/nlu_adapter/parse_helper.rb
141
156
  - lib/nlu_adapter/version.rb
157
+ - lib/nlu_adapter/watson_assistant.rb
142
158
  - nlu_adapter.gemspec
143
159
  homepage: https://rubygems.org/gems/nlu_adapter
144
160
  licenses: