ruby-openai 1.0.0 → 1.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4f49ef2d01087a09b453513bf5b4d19fa76ac1e650a96234be40cfe88ca70141
4
- data.tar.gz: aa28c65f90677820fbc035c5f1dfaa885fdeb7ab5f613da746566f4a27194df5
3
+ metadata.gz: 9fb70b90b84ff4b23bf8e9ed757ae39b82adf291e5bdcb07b8f0ef5ccbe12394
4
+ data.tar.gz: 5391b9437fd05d7da1783e5ac960b216a7ad326f22a509ad28a21eb879bdf4a8
5
5
  SHA512:
6
- metadata.gz: 8575de950acf0ad5c6439f59bd8718cd4ffdade7527ad8f5177ea95a35821bdf7d7f9535a105183dadb357f6ba322a14ba43bbbbae49dd4f782c646f9ced8a4d
7
- data.tar.gz: 3f09519f5d3c364d03f9d4bb18269fe63e2670566884b099bf1c9862126c8fc10fcf30ac1774c699f8fc7c0f7fb1c57d5f677434e825421f76a5b9c6e0be13ed
6
+ metadata.gz: 5cbf287bf8bfc9e1b949bc050ea456d62c5259a5316710db7a617126a7a3b018707c78c03d508a5619ac024a5767865f7e98925e5c6e867dc8cb1f3687e3b9c6
7
+ data.tar.gz: a45ed235da6d261371ae6f1b26ae45ea2f28dd9ca3f9b362b66045d851666ea1b72e89c0253d64830183c6bae6c3c8093f7c586c65aed940b5b3003d9b652399
data/.rubocop.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  AllCops:
2
2
  TargetRubyVersion: 2.7
3
-
4
3
  NewCops: enable
4
+ SuggestExtensions: false
5
5
 
6
6
  Style/Documentation:
7
7
  # Skips checking to make sure top level modules / classes have a comment.
data/CHANGELOG.md CHANGED
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.1.0] - 2021-04-07
9
+
10
+ ### Added
11
+
12
+ - Add Client#files to allow file upload.
13
+ - Add Client#search(file:) so you can search a file.
14
+
8
15
  ## [1.0.0] - 2021-02-01
9
16
 
10
17
  ### Removed
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,3 @@
1
+ ## Contributing
2
+
3
+ Bug reports and pull requests are welcome on GitHub at https://github.com/alexrudall/ruby-openai. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/alexrudall/ruby-openai/blob/main/CODE_OF_CONDUCT.md).
data/Gemfile CHANGED
@@ -6,6 +6,6 @@ gemspec
6
6
  gem "byebug", "~> 11.1.3"
7
7
  gem "rake", "~> 13.0"
8
8
  gem "rspec", "~> 3.10"
9
- gem "rubocop", "~> 1.9.0"
9
+ gem "rubocop", "~> 1.12.1"
10
10
  gem "vcr", "~> 6.0.0"
11
- gem "webmock", "~> 3.11.2"
11
+ gem "webmock", "~> 3.12.2"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ruby-openai (1.0.0)
4
+ ruby-openai (1.1.0)
5
5
  dotenv (~> 2.7.6)
6
6
  httparty (~> 0.18.1)
7
7
 
@@ -30,7 +30,7 @@ GEM
30
30
  public_suffix (4.0.6)
31
31
  rainbow (3.0.0)
32
32
  rake (13.0.3)
33
- regexp_parser (2.0.3)
33
+ regexp_parser (2.1.1)
34
34
  rexml (3.2.4)
35
35
  rspec (3.10.0)
36
36
  rspec-core (~> 3.10.0)
@@ -45,7 +45,7 @@ GEM
45
45
  diff-lcs (>= 1.2.0, < 2.0)
46
46
  rspec-support (~> 3.10.0)
47
47
  rspec-support (3.10.1)
48
- rubocop (1.9.0)
48
+ rubocop (1.12.1)
49
49
  parallel (~> 1.10)
50
50
  parser (>= 3.0.0.0)
51
51
  rainbow (>= 2.2.2, < 4.0)
@@ -59,7 +59,7 @@ GEM
59
59
  ruby-progressbar (1.11.0)
60
60
  unicode-display_width (2.0.0)
61
61
  vcr (6.0.0)
62
- webmock (3.11.2)
62
+ webmock (3.12.2)
63
63
  addressable (>= 2.3.6)
64
64
  crack (>= 0.3.2)
65
65
  hashdiff (>= 0.4.0, < 2.0.0)
@@ -71,10 +71,10 @@ DEPENDENCIES
71
71
  byebug (~> 11.1.3)
72
72
  rake (~> 13.0)
73
73
  rspec (~> 3.10)
74
- rubocop (~> 1.9.0)
74
+ rubocop (~> 1.12.1)
75
75
  ruby-openai!
76
76
  vcr (~> 6.0.0)
77
- webmock (~> 3.11.2)
77
+ webmock (~> 3.12.2)
78
78
 
79
79
  BUNDLED WITH
80
80
  2.2.3
data/README.md CHANGED
@@ -58,6 +58,24 @@ The engine options are currently "ada", "babbage", "curie" and "davinci". Hit th
58
58
  => [", there lived a great"]
59
59
  ```
60
60
 
61
+ ### Files
62
+
63
+ Put your data in a `.jsonl` file like this:
64
+
65
+ ```
66
+ {"text": "puppy A is happy", "metadata": "emotional state of puppy A"}
67
+ {"text": "puppy B is sad", "metadata": "emotional state of puppy B"}
68
+ ```
69
+
70
+ and pass the path to `client.files.upload` to upload it to OpenAI, and then interact with it:
71
+
72
+ ```
73
+ client.files.upload(parameters: { file: 'path/to/puppy.jsonl', purpose: 'search' })
74
+ client.files.list
75
+ client.files.retrieve(id: 123)
76
+ client.files.delete(id: 123)
77
+ ```
78
+
61
79
  ### Search
62
80
 
63
81
  Pass documents and a query string to get semantic search scores against each document:
@@ -68,6 +86,12 @@ Pass documents and a query string to get semantic search scores against each doc
68
86
  => [202.0, 48.052, 19.247]
69
87
  ```
70
88
 
89
+ You can alternatively search using the ID of a file you've uploaded:
90
+
91
+ ```
92
+ client.search(engine: "ada", file: "abc123", query: "happy")
93
+ ```
94
+
71
95
  ## Development
72
96
 
73
97
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/lib/ruby/openai.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "httparty"
2
+ require "ruby/openai/files"
2
3
  require "ruby/openai/client"
3
4
  require "ruby/openai/version"
4
5
  require "dotenv/load"
@@ -18,16 +18,18 @@ module OpenAI
18
18
  )
19
19
  end
20
20
 
21
- def search(engine:, documents:, query:, version: default_version)
21
+ def files
22
+ @files ||= OpenAI::Files.new(access_token: @access_token)
23
+ end
24
+
25
+ def search(engine:, query:, documents: nil, file: nil, version: default_version)
22
26
  self.class.post(
23
27
  "/#{version}/engines/#{engine}/search",
24
28
  headers: {
25
29
  "Content-Type" => "application/json",
26
30
  "Authorization" => "Bearer #{@access_token}"
27
31
  },
28
- body: {
29
- documents: documents, query: query
30
- }.to_json
32
+ body: { query: query }.merge(documents_or_file(documents: documents, file: file)).to_json
31
33
  )
32
34
  end
33
35
 
@@ -36,5 +38,9 @@ module OpenAI
36
38
  def default_version
37
39
  "v1".freeze
38
40
  end
41
+
42
+ def documents_or_file(documents: nil, file: nil)
43
+ documents ? { documents: documents } : { file: file }
44
+ end
39
45
  end
40
46
  end
@@ -0,0 +1,57 @@
1
+ module OpenAI
2
+ class Files
3
+ include HTTParty
4
+ base_uri "https://api.openai.com"
5
+
6
+ def initialize(access_token: nil)
7
+ @access_token = access_token || ENV["OPENAI_ACCESS_TOKEN"]
8
+ end
9
+
10
+ def list(version: default_version)
11
+ self.class.get(
12
+ "/#{version}/files",
13
+ headers: {
14
+ "Content-Type" => "application/json",
15
+ "Authorization" => "Bearer #{@access_token}"
16
+ }
17
+ )
18
+ end
19
+
20
+ def upload(version: default_version, parameters: {})
21
+ self.class.post(
22
+ "/#{version}/files",
23
+ headers: {
24
+ "Content-Type" => "application/json",
25
+ "Authorization" => "Bearer #{@access_token}"
26
+ },
27
+ body: parameters.merge(file: File.open(parameters[:file]))
28
+ )
29
+ end
30
+
31
+ def retrieve(id:, version: default_version)
32
+ self.class.get(
33
+ "/#{version}/files/#{id}",
34
+ headers: {
35
+ "Content-Type" => "application/json",
36
+ "Authorization" => "Bearer #{@access_token}"
37
+ }
38
+ )
39
+ end
40
+
41
+ def delete(id:, version: default_version)
42
+ self.class.delete(
43
+ "/#{version}/files/#{id}",
44
+ headers: {
45
+ "Content-Type" => "application/json",
46
+ "Authorization" => "Bearer #{@access_token}"
47
+ }
48
+ )
49
+ end
50
+
51
+ private
52
+
53
+ def default_version
54
+ "v1".freeze
55
+ end
56
+ end
57
+ end
@@ -1,5 +1,5 @@
1
1
  module Ruby
2
2
  module OpenAI
3
- VERSION = "1.0.0".freeze
3
+ VERSION = "1.1.0".freeze
4
4
  end
5
5
  end
@@ -0,0 +1,5 @@
1
+ ## All Submissions:
2
+
3
+ * [ ] Have you followed the guidelines in our [Contributing document](../blob/main/CONTRIBUTING.md)?
4
+ * [ ] Have you checked to ensure there aren't other open [Pull Requests](../pulls) for the same update/change?
5
+ * [ ] Have you added an explanation of what your changes do and why you'd like us to include them?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-openai
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-01 00:00:00.000000000 Z
11
+ date: 2021-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -54,6 +54,7 @@ files:
54
54
  - ".travis.yml"
55
55
  - CHANGELOG.md
56
56
  - CODE_OF_CONDUCT.md
57
+ - CONTRIBUTING.md
57
58
  - Gemfile
58
59
  - Gemfile.lock
59
60
  - LICENSE.txt
@@ -63,7 +64,9 @@ files:
63
64
  - bin/setup
64
65
  - lib/ruby/openai.rb
65
66
  - lib/ruby/openai/client.rb
67
+ - lib/ruby/openai/files.rb
66
68
  - lib/ruby/openai/version.rb
69
+ - pull_request_template.md
67
70
  - ruby-openai.gemspec
68
71
  homepage: https://github.com/alexrudall/ruby-openai
69
72
  licenses: