wit 7.0.0 → 7.0.1
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/CHANGES.md +3 -0
- data/README.md +38 -0
- data/lib/wit.rb +60 -18
- data/wit.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94c89f68746b71c5af51cd31f5479780820a01ec01401adc6234dfcab54460d6
|
4
|
+
data.tar.gz: e364ac9ca54797c85bd098279e4add1360b4c3e1a63e1f5ddf2f7ac94dd1411d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbe3df4df740ddbdae3bb8c021de7d4caf4d280454a85ac2ad07e45e49018b265e86e9a94f0da7c7b69760e5942d2f7fd47103dd58ea5a7430bc43ab93ab0121
|
7
|
+
data.tar.gz: c934ff92d4d252af1dcf57b6582612b0ea229d9d441a4507efeffa1d7a7749af07819ee36ccd7dbe55f85906c7973f30aecf08bad5120c8a7fa05293e873717b
|
data/CHANGES.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
## v7.0.1
|
2
|
+
- Updating encode function to encode more special characters that could be passed in when constructing a request URL.
|
3
|
+
|
1
4
|
## v7.0.0
|
2
5
|
- Updated API version to latest: `20200513`. Browse the latest HTTP API documentation [here](https://wit.ai/docs/http/20200513#get__message_link).
|
3
6
|
- Added intents and traits CRUD methods.
|
data/README.md
CHANGED
@@ -47,6 +47,44 @@ client = Wit.new(access_token: access_token)
|
|
47
47
|
client.message('set an alarm tomorrow at 7am')
|
48
48
|
```
|
49
49
|
|
50
|
+
### Create new App Using the Access Token
|
51
|
+
|
52
|
+
Creates new app using the server token.
|
53
|
+
See [POST /apps](https://wit.ai/docs/http/20200513#post__apps_link).
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
new_app_payload = {name: "new-app-1", lang: "en", private: true}
|
57
|
+
# set_new_app_token will make the client use the new app's token.
|
58
|
+
# that flag is set to false by default.
|
59
|
+
client.create_new_app(new_app_payload, set_new_app_token = true)
|
60
|
+
```
|
61
|
+
|
62
|
+
### Train the app programatically using '/utterances'
|
63
|
+
|
64
|
+
Trains and annotates an utterance or more.
|
65
|
+
See [POST /utterances](https://wit.ai/docs/http/20200513#post__utterances_link).
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
# you have to create the intent and entity before using any of them.
|
69
|
+
utterance_payload = {
|
70
|
+
text: "I want to fly to china",
|
71
|
+
intent: "flight_request",
|
72
|
+
entities: [
|
73
|
+
{
|
74
|
+
"entity": "wit$location:to",
|
75
|
+
"start": 17,
|
76
|
+
"end": 22,
|
77
|
+
"body": "china",
|
78
|
+
"entities": []
|
79
|
+
}
|
80
|
+
],
|
81
|
+
traits: []
|
82
|
+
}
|
83
|
+
|
84
|
+
# utterance payload can be a list of utterances or a single one
|
85
|
+
client.post_utterances(utterance_payload)
|
86
|
+
```
|
87
|
+
|
50
88
|
### .message()
|
51
89
|
|
52
90
|
The Wit [message API](https://wit.ai/docs/http/20200513#get-intent-via-text-link).
|
data/lib/wit.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
2
2
|
|
3
|
+
require 'cgi'
|
3
4
|
require 'json'
|
4
5
|
require 'logger'
|
5
6
|
require 'net/http'
|
@@ -59,12 +60,30 @@ class Wit
|
|
59
60
|
puts
|
60
61
|
end
|
61
62
|
|
63
|
+
def create_new_app(payload, set_new_app_token = false)
|
64
|
+
response = req(logger, @access_token, Net::HTTP::Post, "/apps", {}, payload)
|
65
|
+
@access_token = response['access_token'] if set_new_app_token
|
66
|
+
return response
|
67
|
+
end
|
68
|
+
|
69
|
+
def post_utterances(payload)
|
70
|
+
payload = [payload] if payload.is_a? Hash
|
71
|
+
|
72
|
+
payload.each do |utterance|
|
73
|
+
unless utterance[:entities].empty?
|
74
|
+
utterance[:entities] = validate_entities utterance[:entities]
|
75
|
+
end
|
76
|
+
validate_payload utterance
|
77
|
+
end
|
78
|
+
req(logger, @access_token, Net::HTTP::Post, "/utterances", {}, payload)
|
79
|
+
end
|
80
|
+
|
62
81
|
def get_intents
|
63
82
|
req(logger, @access_token, Net::HTTP::Get, "/intents")
|
64
83
|
end
|
65
84
|
|
66
85
|
def get_intent(intent)
|
67
|
-
req(logger, @access_token, Net::HTTP::Get, "/intents/#{
|
86
|
+
req(logger, @access_token, Net::HTTP::Get, "/intents/#{CGI::escape(intent)}")
|
68
87
|
end
|
69
88
|
|
70
89
|
def post_intents(payload)
|
@@ -72,7 +91,7 @@ class Wit
|
|
72
91
|
end
|
73
92
|
|
74
93
|
def delete_intents(intent)
|
75
|
-
req(logger, @access_token, Net::HTTP::Delete, "/intents/#{
|
94
|
+
req(logger, @access_token, Net::HTTP::Delete, "/intents/#{CGI::escape(intent)}")
|
76
95
|
end
|
77
96
|
|
78
97
|
def get_entities
|
@@ -86,37 +105,37 @@ class Wit
|
|
86
105
|
end
|
87
106
|
|
88
107
|
def get_entity(entity)
|
89
|
-
req(logger, @access_token, Net::HTTP::Get, "/entities/#{
|
108
|
+
req(logger, @access_token, Net::HTTP::Get, "/entities/#{CGI::escape(entity)}")
|
90
109
|
end
|
91
110
|
|
92
111
|
def put_entities(entity, payload)
|
93
112
|
payload = payload.map {|k, v| [(k.to_sym rescue k), v]}.to_h.reject{ |k| ![:name, :roles, :lookups, :keywords].include?(k) }
|
94
113
|
validate_payload payload
|
95
|
-
req(logger, @access_token, Net::HTTP::Put, "/entities/#{
|
114
|
+
req(logger, @access_token, Net::HTTP::Put, "/entities/#{CGI::escape(entity)}", {}, payload)
|
96
115
|
end
|
97
116
|
|
98
117
|
def delete_entities(entity)
|
99
|
-
req(logger, @access_token, Net::HTTP::Delete, "/entities/#{
|
118
|
+
req(logger, @access_token, Net::HTTP::Delete, "/entities/#{CGI::escape(entity)}")
|
100
119
|
end
|
101
120
|
|
102
121
|
def post_entities_keywords(entity, payload)
|
103
122
|
payload = payload.map {|k, v| [(k.to_sym rescue k), v]}.to_h.reject{ |k| ![:keyword, :synonyms].include?(k) }
|
104
123
|
validate_payload payload
|
105
|
-
req(logger, @access_token, Net::HTTP::Post, "/entities/#{
|
124
|
+
req(logger, @access_token, Net::HTTP::Post, "/entities/#{CGI::escape(entity)}/keywords", {}, payload)
|
106
125
|
end
|
107
126
|
|
108
127
|
def delete_entities_keywords(entity, keyword)
|
109
|
-
req(logger, @access_token, Net::HTTP::Delete, "/entities/#{
|
128
|
+
req(logger, @access_token, Net::HTTP::Delete, "/entities/#{CGI::escape(entity)}/keywords/#{CGI::escape(keyword)}")
|
110
129
|
end
|
111
130
|
|
112
131
|
def post_entities_keywords_synonyms(entity, keyword, payload)
|
113
132
|
payload = payload.map {|k, v| [(k.to_sym rescue k), v]}.to_h.reject{ |k| ![:synonym].include?(k) }
|
114
133
|
validate_payload payload
|
115
|
-
req(logger,@access_token, Net::HTTP::Post, "/entities/#{
|
134
|
+
req(logger,@access_token, Net::HTTP::Post, "/entities/#{CGI::escape(entity)}/keywords/#{CGI::escape(keyword)}/synonyms", {}, payload)
|
116
135
|
end
|
117
136
|
|
118
137
|
def delete_entities_keywords_synonyms(entity, keyword, synonym)
|
119
|
-
req(logger,@access_token, Net::HTTP::Delete, "/entities/#{
|
138
|
+
req(logger,@access_token, Net::HTTP::Delete, "/entities/#{CGI::escape(entity)}/keywords/#{CGI::escape(keyword)}/synonyms/#{CGI::escape(synonym)}")
|
120
139
|
end
|
121
140
|
|
122
141
|
def get_traits
|
@@ -124,7 +143,7 @@ class Wit
|
|
124
143
|
end
|
125
144
|
|
126
145
|
def get_trait(trait)
|
127
|
-
req(logger, @access_token, Net::HTTP::Get, "/traits/#{
|
146
|
+
req(logger, @access_token, Net::HTTP::Get, "/traits/#{CGI::escape(trait)}")
|
128
147
|
end
|
129
148
|
|
130
149
|
def post_traits(payload)
|
@@ -132,15 +151,15 @@ class Wit
|
|
132
151
|
end
|
133
152
|
|
134
153
|
def post_traits_values(trait, payload)
|
135
|
-
req(logger, @access_token, Net::HTTP::Post, "/traits/#{
|
154
|
+
req(logger, @access_token, Net::HTTP::Post, "/traits/#{CGI::escape(trait)}/values", {}, payload)
|
136
155
|
end
|
137
156
|
|
138
157
|
def delete_traits_values(trait, value)
|
139
|
-
req(logger, @access_token, Net::HTTP::Delete, "/traits/#{
|
158
|
+
req(logger, @access_token, Net::HTTP::Delete, "/traits/#{CGI::escape(trait)}/values/#{CGI::escape(value)}")
|
140
159
|
end
|
141
160
|
|
142
161
|
def delete_traits(trait)
|
143
|
-
req(logger, @access_token, Net::HTTP::Delete, "/traits/#{
|
162
|
+
req(logger, @access_token, Net::HTTP::Delete, "/traits/#{CGI::escape(trait)}")
|
144
163
|
end
|
145
164
|
|
146
165
|
private
|
@@ -152,12 +171,37 @@ class Wit
|
|
152
171
|
roles: Array,
|
153
172
|
lookups: Array,
|
154
173
|
keywords: Array,
|
174
|
+
text: String,
|
175
|
+
intent: String,
|
176
|
+
entities: Array,
|
177
|
+
traits: Array
|
155
178
|
}
|
156
179
|
payload.each do |k, v|
|
157
180
|
raise Error.new("#{k.to_s} in request body must be #{key_types[k].to_s} type") unless key_types[k] == v.class
|
158
181
|
end
|
159
182
|
end
|
160
183
|
|
184
|
+
def validate_entities(entities)
|
185
|
+
entity_keys = {
|
186
|
+
entity: String,
|
187
|
+
start: Integer,
|
188
|
+
end: Integer,
|
189
|
+
body: String,
|
190
|
+
entities: Array
|
191
|
+
}
|
192
|
+
entities.each do |entity|
|
193
|
+
entity = entity.map {|k, v| [(k.to_sym rescue k), v]}.to_h.reject{ |k| !entity_keys.keys.include?(k) }
|
194
|
+
entity.each do |k, v|
|
195
|
+
if k == :entities && !v.empty?
|
196
|
+
validate_entities(v)
|
197
|
+
end
|
198
|
+
raise Error.new("#{k.to_s} in entities body must be #{entity_keys[k].to_s} type") unless entity_keys[k] == v.class
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
return entities
|
203
|
+
end
|
204
|
+
|
161
205
|
def req(logger, access_token, meth_class, path, params={}, payload={})
|
162
206
|
uri = URI(WIT_API_HOST + path)
|
163
207
|
uri.query = URI.encode_www_form(params)
|
@@ -172,12 +216,10 @@ class Wit
|
|
172
216
|
|
173
217
|
Net::HTTP.start(uri.host, uri.port, {:use_ssl => uri.scheme == 'https'}) do |http|
|
174
218
|
rsp = http.request(request)
|
175
|
-
if rsp.code.to_i != 200
|
176
|
-
raise Error.new("HTTP error code=#{rsp.code}")
|
177
|
-
end
|
178
219
|
json = JSON.parse(rsp.body)
|
179
|
-
if
|
180
|
-
|
220
|
+
if rsp.code.to_i != 200
|
221
|
+
error_msg = (json.is_a?(Hash) and json.has_key?('error')) ? json['error'] : json
|
222
|
+
raise Error.new("Wit responded with an error: #{error_msg}")
|
181
223
|
end
|
182
224
|
logger.debug("#{meth_class} #{uri} #{json}")
|
183
225
|
json
|
data/wit.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.
|
4
|
+
version: 7.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- The Wit Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Ruby SDK for Wit.ai
|
14
14
|
email: help@wit.ai
|
@@ -50,7 +50,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
50
50
|
- !ruby/object:Gem::Version
|
51
51
|
version: '0'
|
52
52
|
requirements: []
|
53
|
-
rubygems_version: 3.
|
53
|
+
rubygems_version: 3.0.3.1
|
54
54
|
signing_key:
|
55
55
|
specification_version: 4
|
56
56
|
summary: Ruby SDK for Wit.ai
|