openai_ruby 0.3.1 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a4c166c6a904ae2e24c863aa5fc906f92ae6be0a01b239524c5f6ceb9f1db125
4
- data.tar.gz: ce98d485c2a40eda5dd2139721bd4507e7eb9b7e947757cfe790e6061c4534a6
3
+ metadata.gz: 33013deb6a09941565ac13e9b3ee5de96d220b54c5c18f691201312237625ed1
4
+ data.tar.gz: f0e635b8af085b9111f83e3575e125a6de7a931793df2f75cca27f84abb6ccac
5
5
  SHA512:
6
- metadata.gz: e3e938b3e14930e9c12f5b4aa68e1f56e528e298a48089a6a0e96a2ae0dddff6ce6a54b66cfeec0f09512dc7d62a65117f889606bfe9570d133c629e022853c0
7
- data.tar.gz: acad979520949c2d763f3834f97411b44a0532795451af51f63e72737957cae79bc219b421ed41187f3352232600914cf52e9e79fbc7f1dc1bc9234a741ce276
6
+ metadata.gz: e8b07aafb4694d054618c56808fd8e9fd12d246f24003c5d8ad1672dff02a75e9c91c2d656f0e537e9f25dfe2d1402a84ec3f0d0f8491a1310b06c936b483b09
7
+ data.tar.gz: f32b7a3a048742c1d2ec478ede1082176ad00a7351ee7b9de094ab2e2315e7153b2de3c641d5474ba85109b21eddbe334209c4800060dd87bb89e8433e553765
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![Build Status](https://travis-ci.org/renny-ren/openai_ruby.svg?branch=main)](https://travis-ci.org/renny-ren/openai_ruby)
5
5
  [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/renny-ren/openai_ruby/blob/main/LICENSE)
6
6
 
7
- This is a Ruby wrapper for [OpenAI API](https://openai.com/api/), which provides convenient access to the OpenAI API from applications written in Ruby.
7
+ This is a Ruby wrapper for [OpenAI API](https://platform.openai.com/docs/api-reference), which provides convenient access to the OpenAI API from applications written in Ruby.
8
8
 
9
9
  Let's build next-gen apps with OpenAI’s powerful models.
10
10
 
@@ -30,27 +30,52 @@ create a client like this:
30
30
  client = OpenAI::Client.new("your OpenAI key here")
31
31
  ```
32
32
 
33
- ### Completion
33
+ ### Completion
34
+ https://platform.openai.com/docs/api-reference/completions
34
35
 
35
36
  ```ruby
36
- res = client.create_completion(
37
- model: "text-davinci-003", # The model which will generate the completion
38
- prompt: "Hello, who are you?",
39
- max_tokens: 100 # The maximum number of tokens to generate
40
- temperature: 0.5, # Control randomness
41
- top_p: 1,
42
- frequency_penalty: 0,
43
- presence_penalty: 0,
44
- stop: "\n"
45
- )
46
- p res.status # 200
37
+ # params = {
38
+ # model: "text-davinci-003",
39
+ # prompt: "Hello, who are you?",
40
+ # max_tokens: 100,
41
+ # temperature: 0.5,
42
+ # frequency_penalty: 0,
43
+ # presence_penalty: 0,
44
+ # }
45
+ res = client.create_completion(params)
47
46
  response = JSON.parse(res.body)
48
47
 
49
48
  p response.dig("choices", 0, "text") # "I am an AI created by OpenAI."
50
49
  p response.dig('usage', 'total_tokens') # 18
51
50
  ```
52
51
 
52
+ ### Chat Completion
53
+ https://platform.openai.com/docs/api-reference/chat/create
54
+
55
+ If you set `stream` param to `true`, a block will be called with the chunk data:
56
+
57
+ ```ruby
58
+ # params = {
59
+ # model: "gpt-3.5-turbo",
60
+ # prompt: "Hello",
61
+ # max_tokens: 100,
62
+ # temperature: 1,
63
+ # stream: true,
64
+ # }
65
+ res = client.create_chat_completion(params) do |chunk, overall_received_bytes, env|
66
+ data = chunk[/data: (.*)\n\n$/, 1]
67
+ p data # {"id":"chatcmpl-6xcOWMQcilJUwJiosi7Rht6Fvuu3D","object":"chat.completion.chunk","created":1679666960,"model":"gpt-3.5-turbo-0301","choices":[{"delta":{"content":"Hello"},"index":0,"finish_reason":null}]}
68
+ if data == "[DONE]"
69
+ # the stream is end
70
+ else
71
+ response = JSON.parse(data)
72
+ p response.dig("choices", 0, "text") # "Hello"
73
+ end
74
+ end
75
+ ```
76
+
53
77
  ### Edit
78
+ https://platform.openai.com/docs/api-reference/edits
54
79
 
55
80
  ```ruby
56
81
  res = client.create_edit(
@@ -18,6 +18,21 @@ module OpenAI
18
18
  )
19
19
  end
20
20
 
21
+ def create_chat_completion(params = {})
22
+ if params[:stream]
23
+ connection.post("/v1/chat/completions") do |req|
24
+ req.body = params.to_json
25
+ req.options.on_data = proc do |chunk, overall_received_bytes, env|
26
+ if block_given?
27
+ yield(chunk, overall_received_bytes, env)
28
+ end
29
+ end
30
+ end
31
+ else
32
+ connection.post("/v1/chat/completions", params.to_json, headers)
33
+ end
34
+ end
35
+
21
36
  def create_edit(params = {})
22
37
  Faraday.post(
23
38
  "#{BASE_URL}/v1/edits",
@@ -28,6 +43,10 @@ module OpenAI
28
43
 
29
44
  private
30
45
 
46
+ def connection
47
+ Faraday.new(url: BASE_URL, headers: headers)
48
+ end
49
+
31
50
  def headers
32
51
  {
33
52
  "Content-Type" => "application/json",
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module OpenAI
4
- VERSION = "0.3.1"
4
+ VERSION = "0.3.3"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openai_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Renny Ren
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-02-15 00:00:00.000000000 Z
11
+ date: 2023-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -42,7 +42,6 @@ files:
42
42
  - lib/openai_ruby.rb
43
43
  - lib/openai_ruby/client.rb
44
44
  - lib/openai_ruby/version.rb
45
- - openai_ruby.gemspec
46
45
  - sig/openai_ruby/ruby.rbs
47
46
  homepage: https://github.com/renny-ren/openai_ruby
48
47
  licenses:
data/openai_ruby.gemspec DELETED
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "lib/openai_ruby/version"
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = "openai_ruby"
7
- spec.version = OpenAI::VERSION
8
- spec.authors = ["Renny Ren"]
9
- spec.email = ["rennyrjh@gmail.com"]
10
-
11
- spec.summary = "A Ruby wrapper for OpenAI API"
12
- spec.homepage = "https://github.com/renny-ren/openai_ruby"
13
- spec.license = "MIT"
14
- spec.required_ruby_version = ">= 2.6.0"
15
-
16
- spec.metadata["homepage_uri"] = spec.homepage
17
- spec.metadata["source_code_uri"] = "https://github.com/renny-ren/openai_ruby"
18
- spec.metadata["changelog_uri"] = "https://github.com/renny-ren/openai_ruby/blob/main/CHANGELOG.md"
19
-
20
- # Specify which files should be added to the gem when it is released.
21
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
- spec.files = Dir.chdir(__dir__) do
23
- `git ls-files -z`.split("\x0").reject do |f|
24
- (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
25
- end
26
- end
27
-
28
- spec.bindir = "exe"
29
- spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
30
- spec.require_paths = ["lib"]
31
-
32
- spec.add_dependency "faraday", "~> 2.7"
33
-
34
- # For more information and examples about making a new gem, check out our
35
- # guide at: https://bundler.io/guides/creating_gem.html
36
- end