exa-ai 0.5.0 → 0.6.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.
Files changed (53) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -0
  3. data/exe/exa-ai +55 -1
  4. data/exe/exa-ai-import-create +235 -0
  5. data/exe/exa-ai-import-delete +92 -0
  6. data/exe/exa-ai-import-get +92 -0
  7. data/exe/exa-ai-import-list +72 -0
  8. data/exe/exa-ai-import-update +164 -0
  9. data/exe/exa-ai-monitor-create +223 -0
  10. data/exe/exa-ai-monitor-delete +101 -0
  11. data/exe/exa-ai-monitor-get +92 -0
  12. data/exe/exa-ai-monitor-list +90 -0
  13. data/exe/exa-ai-monitor-runs-get +103 -0
  14. data/exe/exa-ai-monitor-runs-list +110 -0
  15. data/exe/exa-ai-monitor-update +207 -0
  16. data/exe/exa-ai-webset-create +43 -6
  17. data/lib/exa/cli/base.rb +8 -2
  18. data/lib/exa/cli/formatters/answer_formatter.rb +2 -0
  19. data/lib/exa/cli/formatters/contents_formatter.rb +2 -0
  20. data/lib/exa/cli/formatters/context_formatter.rb +2 -0
  21. data/lib/exa/cli/formatters/enrichment_formatter.rb +4 -0
  22. data/lib/exa/cli/formatters/import_formatter.rb +85 -0
  23. data/lib/exa/cli/formatters/monitor_formatter.rb +81 -0
  24. data/lib/exa/cli/formatters/monitor_run_formatter.rb +75 -0
  25. data/lib/exa/cli/formatters/research_formatter.rb +4 -0
  26. data/lib/exa/cli/formatters/search_formatter.rb +2 -0
  27. data/lib/exa/cli/formatters/webset_formatter.rb +4 -0
  28. data/lib/exa/cli/formatters/webset_item_formatter.rb +4 -0
  29. data/lib/exa/client.rb +137 -0
  30. data/lib/exa/constants/websets.rb +19 -0
  31. data/lib/exa/resources/import.rb +86 -0
  32. data/lib/exa/resources/import_collection.rb +33 -0
  33. data/lib/exa/resources/monitor.rb +48 -0
  34. data/lib/exa/resources/monitor_collection.rb +30 -0
  35. data/lib/exa/resources/monitor_run.rb +52 -0
  36. data/lib/exa/resources/monitor_run_collection.rb +30 -0
  37. data/lib/exa/services/websets/create_validator.rb +5 -3
  38. data/lib/exa/services/websets/import_create.rb +40 -0
  39. data/lib/exa/services/websets/import_delete.rb +37 -0
  40. data/lib/exa/services/websets/import_get.rb +37 -0
  41. data/lib/exa/services/websets/import_list.rb +25 -0
  42. data/lib/exa/services/websets/import_update.rb +38 -0
  43. data/lib/exa/services/websets/import_upload.rb +58 -0
  44. data/lib/exa/services/websets/monitors/create.rb +42 -0
  45. data/lib/exa/services/websets/monitors/delete.rb +32 -0
  46. data/lib/exa/services/websets/monitors/get.rb +33 -0
  47. data/lib/exa/services/websets/monitors/list.rb +27 -0
  48. data/lib/exa/services/websets/monitors/runs/get.rb +37 -0
  49. data/lib/exa/services/websets/monitors/runs/list.rb +30 -0
  50. data/lib/exa/services/websets/monitors/update.rb +33 -0
  51. data/lib/exa/version.rb +1 -1
  52. data/lib/exa.rb +23 -0
  53. metadata +50 -1
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Exa
4
+ module Services
5
+ module Websets
6
+ class CreateImport
7
+ def initialize(connection, **params)
8
+ @connection = connection
9
+ @params = params
10
+ end
11
+
12
+ def call
13
+ response = @connection.post(
14
+ "/websets/v0/imports",
15
+ @params
16
+ )
17
+ body = response.body
18
+
19
+ Resources::Import.new(
20
+ id: body["id"],
21
+ object: body["object"],
22
+ status: body["status"],
23
+ format: body["format"],
24
+ entity: body["entity"],
25
+ title: body["title"],
26
+ count: body["count"],
27
+ metadata: body["metadata"],
28
+ failed_reason: body["failedReason"],
29
+ failed_at: body["failedAt"],
30
+ failed_message: body["failedMessage"],
31
+ created_at: body["createdAt"],
32
+ updated_at: body["updatedAt"],
33
+ upload_url: body["uploadUrl"],
34
+ upload_valid_until: body["uploadValidUntil"]
35
+ )
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Exa
4
+ module Services
5
+ module Websets
6
+ class DeleteImport
7
+ def initialize(connection, id:)
8
+ @connection = connection
9
+ @id = id
10
+ end
11
+
12
+ def call
13
+ response = @connection.delete("/websets/v0/imports/#{@id}")
14
+ body = response.body
15
+
16
+ Resources::Import.new(
17
+ id: body["id"],
18
+ object: body["object"],
19
+ status: body["status"],
20
+ format: body["format"],
21
+ entity: body["entity"],
22
+ title: body["title"],
23
+ count: body["count"],
24
+ metadata: body["metadata"],
25
+ failed_reason: body["failedReason"],
26
+ failed_at: body["failedAt"],
27
+ failed_message: body["failedMessage"],
28
+ created_at: body["createdAt"],
29
+ updated_at: body["updatedAt"],
30
+ upload_url: body["uploadUrl"],
31
+ upload_valid_until: body["uploadValidUntil"]
32
+ )
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Exa
4
+ module Services
5
+ module Websets
6
+ class GetImport
7
+ def initialize(connection, id:)
8
+ @connection = connection
9
+ @id = id
10
+ end
11
+
12
+ def call
13
+ response = @connection.get("/websets/v0/imports/#{@id}")
14
+ body = response.body
15
+
16
+ Resources::Import.new(
17
+ id: body["id"],
18
+ object: body["object"],
19
+ status: body["status"],
20
+ format: body["format"],
21
+ entity: body["entity"],
22
+ title: body["title"],
23
+ count: body["count"],
24
+ metadata: body["metadata"],
25
+ failed_reason: body["failedReason"],
26
+ failed_at: body["failedAt"],
27
+ failed_message: body["failedMessage"],
28
+ created_at: body["createdAt"],
29
+ updated_at: body["updatedAt"],
30
+ upload_url: body["uploadUrl"],
31
+ upload_valid_until: body["uploadValidUntil"]
32
+ )
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Exa
4
+ module Services
5
+ module Websets
6
+ class ListImports
7
+ def initialize(connection, **params)
8
+ @connection = connection
9
+ @params = params
10
+ end
11
+
12
+ def call
13
+ response = @connection.get("/websets/v0/imports", @params)
14
+ body = response.body
15
+
16
+ Resources::ImportCollection.new(
17
+ data: body["data"],
18
+ has_more: body["hasMore"],
19
+ next_cursor: body["nextCursor"]
20
+ )
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Exa
4
+ module Services
5
+ module Websets
6
+ class UpdateImport
7
+ def initialize(connection, id:, **params)
8
+ @connection = connection
9
+ @id = id
10
+ @params = params
11
+ end
12
+
13
+ def call
14
+ response = @connection.patch("/websets/v0/imports/#{@id}", @params)
15
+ body = response.body
16
+
17
+ Resources::Import.new(
18
+ id: body["id"],
19
+ object: body["object"],
20
+ status: body["status"],
21
+ format: body["format"],
22
+ entity: body["entity"],
23
+ title: body["title"],
24
+ count: body["count"],
25
+ metadata: body["metadata"],
26
+ failed_reason: body["failedReason"],
27
+ failed_at: body["failedAt"],
28
+ failed_message: body["failedMessage"],
29
+ created_at: body["createdAt"],
30
+ updated_at: body["updatedAt"],
31
+ upload_url: body["uploadUrl"],
32
+ upload_valid_until: body["uploadValidUntil"]
33
+ )
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "faraday"
4
+
5
+ module Exa
6
+ module Services
7
+ module Websets
8
+ class UploadImport
9
+ def initialize(connection, file_path:, **params)
10
+ @connection = connection
11
+ @file_path = file_path
12
+ @params = params
13
+ end
14
+
15
+ def call
16
+ validate_file!
17
+
18
+ # Infer file size
19
+ file_size = File.size(@file_path)
20
+
21
+ # Create import with inferred size
22
+ import = CreateImport.new(@connection, size: file_size, **@params).call
23
+
24
+ # Upload file to the upload URL
25
+ upload_file(import.upload_url)
26
+
27
+ # Return the import resource
28
+ import
29
+ end
30
+
31
+ private
32
+
33
+ def validate_file!
34
+ unless File.exist?(@file_path)
35
+ raise Error, "File not found: #{@file_path}"
36
+ end
37
+
38
+ unless File.readable?(@file_path)
39
+ raise Error, "Permission denied: file is not readable: #{@file_path}"
40
+ end
41
+ end
42
+
43
+ def upload_file(upload_url)
44
+ file_content = File.read(@file_path)
45
+
46
+ upload_connection = Faraday.new do |f|
47
+ f.adapter Faraday.default_adapter
48
+ end
49
+
50
+ upload_connection.put(upload_url) do |req|
51
+ req.headers["Content-Type"] = "text/csv"
52
+ req.body = file_content
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Exa
4
+ module Services
5
+ module Websets
6
+ module Monitors
7
+ class Create
8
+ def initialize(connection, webset_id:, cadence:, behavior:, **params)
9
+ @connection = connection
10
+ @webset_id = webset_id
11
+ @cadence = cadence
12
+ @behavior = behavior
13
+ @params = params
14
+ end
15
+
16
+ def call
17
+ response = @connection.post(
18
+ "/websets/v0/monitors",
19
+ {
20
+ websetId: @webset_id,
21
+ cadence: @cadence,
22
+ behavior: @behavior
23
+ }.merge(@params)
24
+ )
25
+ body = response.body
26
+
27
+ Resources::Monitor.new(
28
+ id: body["id"],
29
+ object: body["object"],
30
+ status: body["status"],
31
+ webset_id: body["websetId"],
32
+ cadence: body["cadence"],
33
+ behavior: body["behavior"],
34
+ created_at: body["createdAt"],
35
+ updated_at: body["updatedAt"]
36
+ )
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Exa
4
+ module Services
5
+ module Websets
6
+ module Monitors
7
+ class Delete
8
+ def initialize(connection, id:)
9
+ @connection = connection
10
+ @id = id
11
+ end
12
+
13
+ def call
14
+ response = @connection.delete("/websets/v0/monitors/#{@id}")
15
+ body = response.body
16
+
17
+ Resources::Monitor.new(
18
+ id: body["id"],
19
+ object: body["object"],
20
+ status: body["status"],
21
+ webset_id: body["websetId"],
22
+ cadence: body["cadence"],
23
+ behavior: body["behavior"],
24
+ created_at: body["createdAt"],
25
+ updated_at: body["updatedAt"]
26
+ )
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Exa
4
+ module Services
5
+ module Websets
6
+ module Monitors
7
+ class Get
8
+ def initialize(connection, id:, **params)
9
+ @connection = connection
10
+ @id = id
11
+ @params = params
12
+ end
13
+
14
+ def call
15
+ response = @connection.get("/websets/v0/monitors/#{@id}", @params)
16
+ body = response.body
17
+
18
+ Resources::Monitor.new(
19
+ id: body["id"],
20
+ object: body["object"],
21
+ status: body["status"],
22
+ webset_id: body["websetId"],
23
+ cadence: body["cadence"],
24
+ behavior: body["behavior"],
25
+ created_at: body["createdAt"],
26
+ updated_at: body["updatedAt"]
27
+ )
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Exa
4
+ module Services
5
+ module Websets
6
+ module Monitors
7
+ class List
8
+ def initialize(connection, **params)
9
+ @connection = connection
10
+ @params = params
11
+ end
12
+
13
+ def call
14
+ response = @connection.get("/websets/v0/monitors", @params)
15
+ body = response.body
16
+
17
+ Resources::MonitorCollection.new(
18
+ data: body["data"],
19
+ has_more: body["hasMore"],
20
+ next_cursor: body["nextCursor"]
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Exa
4
+ module Services
5
+ module Websets
6
+ module Monitors
7
+ module Runs
8
+ class Get
9
+ def initialize(connection, monitor_id:, id:, **params)
10
+ @connection = connection
11
+ @monitor_id = monitor_id
12
+ @id = id
13
+ @params = params
14
+ end
15
+
16
+ def call
17
+ response = @connection.get("/websets/v0/monitors/#{@monitor_id}/runs/#{@id}", @params)
18
+ body = response.body
19
+
20
+ Resources::MonitorRun.new(
21
+ id: body["id"],
22
+ object: body["object"],
23
+ monitor_id: body["monitorId"],
24
+ status: body["status"],
25
+ created_at: body["createdAt"],
26
+ updated_at: body["updatedAt"],
27
+ completed_at: body["completedAt"],
28
+ failed_at: body["failedAt"],
29
+ failed_reason: body["failedReason"]
30
+ )
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Exa
4
+ module Services
5
+ module Websets
6
+ module Monitors
7
+ module Runs
8
+ class List
9
+ def initialize(connection, monitor_id:, **params)
10
+ @connection = connection
11
+ @monitor_id = monitor_id
12
+ @params = params
13
+ end
14
+
15
+ def call
16
+ response = @connection.get("/websets/v0/monitors/#{@monitor_id}/runs", @params)
17
+ body = response.body
18
+
19
+ Resources::MonitorRunCollection.new(
20
+ data: body["data"],
21
+ has_more: body["hasMore"],
22
+ next_cursor: body["nextCursor"]
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Exa
4
+ module Services
5
+ module Websets
6
+ module Monitors
7
+ class Update
8
+ def initialize(connection, id:, **params)
9
+ @connection = connection
10
+ @id = id
11
+ @params = params
12
+ end
13
+
14
+ def call
15
+ response = @connection.patch("/websets/v0/monitors/#{@id}", @params)
16
+ body = response.body
17
+
18
+ Resources::Monitor.new(
19
+ id: body["id"],
20
+ object: body["object"],
21
+ status: body["status"],
22
+ webset_id: body["websetId"],
23
+ cadence: body["cadence"],
24
+ behavior: body["behavior"],
25
+ created_at: body["createdAt"],
26
+ updated_at: body["updatedAt"]
27
+ )
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
data/lib/exa/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Exa
4
- VERSION = "0.5.0"
4
+ VERSION = "0.6.0"
5
5
  end
data/lib/exa.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative "exa/version"
4
4
  require_relative "exa/error"
5
+ require_relative "exa/constants/websets"
5
6
  require_relative "exa/middleware/raise_error"
6
7
  require_relative "exa/connection"
7
8
  require_relative "exa/resources/search_result"
@@ -16,6 +17,12 @@ require_relative "exa/resources/webset"
16
17
  require_relative "exa/resources/webset_search"
17
18
  require_relative "exa/resources/webset_enrichment"
18
19
  require_relative "exa/resources/webset_enrichment_collection"
20
+ require_relative "exa/resources/import"
21
+ require_relative "exa/resources/import_collection"
22
+ require_relative "exa/resources/monitor"
23
+ require_relative "exa/resources/monitor_collection"
24
+ require_relative "exa/resources/monitor_run"
25
+ require_relative "exa/resources/monitor_run_collection"
19
26
  require_relative "exa/services/search"
20
27
  require_relative "exa/services/find_similar"
21
28
  require_relative "exa/services/get_contents"
@@ -42,6 +49,19 @@ require_relative "exa/services/websets/cancel_enrichment"
42
49
  require_relative "exa/services/websets/get_item"
43
50
  require_relative "exa/services/websets/delete_item"
44
51
  require_relative "exa/services/websets/list_items"
52
+ require_relative "exa/services/websets/import_create"
53
+ require_relative "exa/services/websets/import_upload"
54
+ require_relative "exa/services/websets/import_list"
55
+ require_relative "exa/services/websets/import_get"
56
+ require_relative "exa/services/websets/import_update"
57
+ require_relative "exa/services/websets/import_delete"
58
+ require_relative "exa/services/websets/monitors/create"
59
+ require_relative "exa/services/websets/monitors/list"
60
+ require_relative "exa/services/websets/monitors/get"
61
+ require_relative "exa/services/websets/monitors/update"
62
+ require_relative "exa/services/websets/monitors/delete"
63
+ require_relative "exa/services/websets/monitors/runs/list"
64
+ require_relative "exa/services/websets/monitors/runs/get"
45
65
  require_relative "exa/client"
46
66
  require_relative "exa/cli/base"
47
67
  require_relative "exa/cli/polling"
@@ -54,6 +74,9 @@ require_relative "exa/cli/formatters/answer_formatter"
54
74
  require_relative "exa/cli/formatters/webset_formatter"
55
75
  require_relative "exa/cli/formatters/webset_item_formatter"
56
76
  require_relative "exa/cli/formatters/enrichment_formatter"
77
+ require_relative "exa/cli/formatters/import_formatter"
78
+ require_relative "exa/cli/formatters/monitor_formatter"
79
+ require_relative "exa/cli/formatters/monitor_run_formatter"
57
80
 
58
81
  module Exa
59
82
  # Module-level configuration
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exa-ai
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Jackson
@@ -37,6 +37,20 @@ dependencies:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
39
  version: '2.0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: toon-ruby
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '0.1'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '0.1'
40
54
  - !ruby/object:Gem::Dependency
41
55
  name: minitest
42
56
  requirement: !ruby/object:Gem::Requirement
@@ -149,6 +163,18 @@ files:
149
163
  - exe/exa-ai-enrichment-update
150
164
  - exe/exa-ai-find-similar
151
165
  - exe/exa-ai-get-contents
166
+ - exe/exa-ai-import-create
167
+ - exe/exa-ai-import-delete
168
+ - exe/exa-ai-import-get
169
+ - exe/exa-ai-import-list
170
+ - exe/exa-ai-import-update
171
+ - exe/exa-ai-monitor-create
172
+ - exe/exa-ai-monitor-delete
173
+ - exe/exa-ai-monitor-get
174
+ - exe/exa-ai-monitor-list
175
+ - exe/exa-ai-monitor-runs-get
176
+ - exe/exa-ai-monitor-runs-list
177
+ - exe/exa-ai-monitor-update
152
178
  - exe/exa-ai-research-get
153
179
  - exe/exa-ai-research-list
154
180
  - exe/exa-ai-research-start
@@ -173,6 +199,9 @@ files:
173
199
  - lib/exa/cli/formatters/contents_formatter.rb
174
200
  - lib/exa/cli/formatters/context_formatter.rb
175
201
  - lib/exa/cli/formatters/enrichment_formatter.rb
202
+ - lib/exa/cli/formatters/import_formatter.rb
203
+ - lib/exa/cli/formatters/monitor_formatter.rb
204
+ - lib/exa/cli/formatters/monitor_run_formatter.rb
176
205
  - lib/exa/cli/formatters/research_formatter.rb
177
206
  - lib/exa/cli/formatters/search_formatter.rb
178
207
  - lib/exa/cli/formatters/webset_formatter.rb
@@ -180,12 +209,19 @@ files:
180
209
  - lib/exa/cli/polling.rb
181
210
  - lib/exa/client.rb
182
211
  - lib/exa/connection.rb
212
+ - lib/exa/constants/websets.rb
183
213
  - lib/exa/error.rb
184
214
  - lib/exa/middleware/raise_error.rb
185
215
  - lib/exa/resources/answer.rb
186
216
  - lib/exa/resources/contents_result.rb
187
217
  - lib/exa/resources/context_result.rb
188
218
  - lib/exa/resources/find_similar_result.rb
219
+ - lib/exa/resources/import.rb
220
+ - lib/exa/resources/import_collection.rb
221
+ - lib/exa/resources/monitor.rb
222
+ - lib/exa/resources/monitor_collection.rb
223
+ - lib/exa/resources/monitor_run.rb
224
+ - lib/exa/resources/monitor_run_collection.rb
189
225
  - lib/exa/resources/research_list.rb
190
226
  - lib/exa/resources/research_task.rb
191
227
  - lib/exa/resources/search_result.rb
@@ -217,8 +253,21 @@ files:
217
253
  - lib/exa/services/websets/delete_item.rb
218
254
  - lib/exa/services/websets/get_item.rb
219
255
  - lib/exa/services/websets/get_search.rb
256
+ - lib/exa/services/websets/import_create.rb
257
+ - lib/exa/services/websets/import_delete.rb
258
+ - lib/exa/services/websets/import_get.rb
259
+ - lib/exa/services/websets/import_list.rb
260
+ - lib/exa/services/websets/import_update.rb
261
+ - lib/exa/services/websets/import_upload.rb
220
262
  - lib/exa/services/websets/list.rb
221
263
  - lib/exa/services/websets/list_items.rb
264
+ - lib/exa/services/websets/monitors/create.rb
265
+ - lib/exa/services/websets/monitors/delete.rb
266
+ - lib/exa/services/websets/monitors/get.rb
267
+ - lib/exa/services/websets/monitors/list.rb
268
+ - lib/exa/services/websets/monitors/runs/get.rb
269
+ - lib/exa/services/websets/monitors/runs/list.rb
270
+ - lib/exa/services/websets/monitors/update.rb
222
271
  - lib/exa/services/websets/retrieve.rb
223
272
  - lib/exa/services/websets/retrieve_enrichment.rb
224
273
  - lib/exa/services/websets/update.rb