openai-assistant 0.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 47c4f3c25796b691c23177c0305accd4d4eb10d13f3d5dd8d5828d6070a7f801
4
- data.tar.gz: 22cdf48b820eed695c042ecb9f5892ff8cc05c78547a6d98c95de0a7591c1435
3
+ metadata.gz: 30d997127785423573776d064b5a0096f121df245af1c56511be53563b342505
4
+ data.tar.gz: 166a91a99f0caf0f5b08c9de791531c9f16c9493d2ffa1395db11237c982f620
5
5
  SHA512:
6
- metadata.gz: be4e756a8888af5c0b1f0247a6a17bd1e02cbdc636f43f28b84c2a7c91dd1644d981357c8ead3d81b6cb5831f35b220a6e881d8fbefb5aaa36f0349130995ff9
7
- data.tar.gz: 25566590081132fb1526f6970a472b2ca348881931e8052270aad14557fa53fb6e3020f56705866ed488dac04947d69bba7c32ea3b99f5eb3c3f355c0fc1f65a
6
+ metadata.gz: c5f306812242afaac48bd3da55e0280a36877238052ebdd5e75942d68bdf68cdbfc9a81d1c0ebeb2b9d8abd4b10644bdfaef37b1b22ba8580a5a00222a597693
7
+ data.tar.gz: 8aa5092ad31e0372595baf420020f8d953a500dce327cab67c9344221c7aceca230d4150ef11637304f8558eebcd7d32506ceb533a7de1f7e7647dd5c53dac96
data/lib/http/http.rb ADDED
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "net/http"
4
+ require "json"
5
+
6
+ module Http
7
+ # An http client
8
+ class Client
9
+ def call_post(_url, req_body, headers)
10
+ http = Net::HTTP.new(_url.host, _url.port)
11
+ http.use_ssl = true
12
+ request = Net::HTTP::Post.new(_url.path, headers)
13
+ request.body = req_body unless req_body.nil?
14
+ http.request(request)
15
+ end
16
+
17
+ def call_delete(_url, headers)
18
+ http = Net::HTTP.new(_url.host, _url.port)
19
+ http.use_ssl = true
20
+ request = Net::HTTP::Delete.new(_url.path, headers)
21
+ http.request(request)
22
+ end
23
+
24
+ def call_get(_url, headers)
25
+ http = Net::HTTP.new(_url.host, _url.port)
26
+ http.use_ssl = true
27
+ request = Net::HTTP::Get.new(_url.path, headers)
28
+ http.request(request)
29
+ end
30
+ end
31
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Openai
4
- class Assistant
5
- VERSION = "0.4.0"
4
+ class Assistant < Openai::Base
5
+ VERSION = "0.6.0"
6
6
  end
7
7
  end
@@ -2,94 +2,65 @@
2
2
 
3
3
  require_relative "assistant/version"
4
4
  require_relative "assistant_obj"
5
+ require_relative "base"
6
+ require_relative "../http/http"
5
7
  require "json"
6
8
  require "net/http"
7
- require "rest-client"
9
+ require "uri"
10
+
8
11
  module Openai
9
12
  # An openai assistant
10
- class Assistant
11
- @openai_api_key = nil
12
- @openai_url = nil
13
-
14
- # @param api_key [String] The api key of openai
13
+ class Assistant < Base
14
+ # @param api_key [String] The api key of openai\
15
15
  def initialize(api_key = "")
16
- @openai_api_key = api_key
17
- # hard the host because if the official docs change the host, maybe it will change another
18
- # we need to update this gem for any change
19
- @openai_url = "https://api.openai.com/v1/assistants"
16
+ super(api_key)
20
17
  end
21
18
 
22
19
  # @param api_key [String] The api key of openai
23
20
  def self.setup(api_key = "")
24
- @openai_api_key = api_key
25
- @openai_url = "https://api.openai.com/v1/assistants"
21
+ initialize(api_key)
26
22
  end
27
23
 
28
24
  # @param model [String] Select model of the assistant. refer on: https://platform.openai.com/docs/api-reference/models/list.
29
25
  # @param instructions [String] The system instructions that the assistant uses.
30
26
  # @return [Openai::AssistantObj] A new response object of assistant.
31
27
  def create_assistant(model, instructions)
32
- url = @openai_url
33
- headers = {
34
- "Authorization": "Bearer #{@openai_api_key}",
35
- "OpenAI-Beta": "assistants=v1",
36
- "Content-Type": "application/json"
37
- }
28
+ url = URI.parse(@openai_url)
38
29
  req_body = {
39
30
  "instructions": instructions,
40
31
  "name": "assistant",
41
32
  "tools": [{ "type": "code_interpreter" }],
42
33
  "model": model
43
- }
44
- begin
45
- resp = RestClient.post(url, req_body.to_json, headers)
46
- rescue RestClient::ExceptionWithResponse => e
47
- resp = e.response
48
- end
49
- unless resp.code == 200
50
- parsed = JSON.parse(resp.body)
34
+ }.to_json
35
+ response = @http_client.call_post(url, req_body, default_headers)
36
+ unless response.code == "200"
37
+ parsed = JSON.parse(response.body)
51
38
  return parsed["error"]["code"]
52
39
  end
53
- parse_assistant_object(JSON.parse(resp.body))
40
+ parse_assistant_object(JSON.parse(response.body))
54
41
  end
55
42
 
56
43
  # @param assistant_id [String] The id of assistant after create
57
44
  # @return [Openai::AssistantObj] A new response object of assistant.
58
45
  def retrieve_assistant(assistant_id)
59
46
  url = "#{@openai_url}/#{assistant_id}"
60
- headers = {
61
- "Authorization": "Bearer #{@openai_api_key}",
62
- "OpenAI-Beta": "assistants=v1",
63
- "Content-Type": "application/json"
64
- }
65
- begin
66
- resp = RestClient.get(url, headers)
67
- rescue RestClient::ExceptionWithResponse => e
68
- resp = e.response
69
- end
70
- unless resp.code == 200
71
- parsed = JSON.parse(resp.body)
47
+ uri = URI(url)
48
+ response = @http_client.call_get(uri, default_headers)
49
+ unless response.code == "200"
50
+ parsed = JSON.parse(response.body)
72
51
  return parsed["error"]["code"]
73
52
  end
74
- parse_assistant_object(JSON.parse(resp.body))
53
+ parse_assistant_object(JSON.parse(response.body))
75
54
  end
76
55
 
77
56
  # @param assistant_id [String] The id of assistant after create
78
57
  # @return [String] Message delete the assistant ok or not
79
58
  def delete_assistant(assistant_id)
80
59
  url = "#{@openai_url}/#{assistant_id}"
81
- headers = {
82
- "Authorization": "Bearer #{@openai_api_key}",
83
- "OpenAI-Beta": "assistants=v1",
84
- "Content-Type": "application/json"
85
- }
86
- begin
87
- resp = RestClient.delete(url, headers)
88
- rescue RestClient::ExceptionWithResponse => e
89
- resp = e.response
90
- end
91
- parsed = JSON.parse(resp.body)
92
- return parsed["error"]["code"] unless resp.code == 200
60
+ uri = URI(url)
61
+ response = @http_client.call_delete(uri, default_headers)
62
+ parsed = JSON.parse(response.body)
63
+ return parsed["error"]["code"] unless response.code == "200"
93
64
 
94
65
  parsed["deleted"]
95
66
  end
@@ -97,18 +68,10 @@ module Openai
97
68
  # @return [Array<Openai::AssistantObj>] List all assistant
98
69
  def list_assistant
99
70
  url = @openai_url
100
- headers = {
101
- "Authorization": "Bearer #{@openai_api_key}",
102
- "OpenAI-Beta": "assistants=v1",
103
- "Content-Type": "application/json"
104
- }
105
- begin
106
- resp = RestClient.get(url, headers)
107
- rescue RestClient::ExceptionWithResponse => e
108
- resp = e.response
109
- end
110
- parsed = JSON.parse(resp.body)
111
- return parsed["error"]["code"] unless resp.code == 200
71
+ uri = URI(url)
72
+ response = @http_client.call_get(uri, default_headers)
73
+ parsed = JSON.parse(response.body)
74
+ return parsed["error"]["code"] unless response.code == "200"
112
75
 
113
76
  assistants = []
114
77
  parsed["data"].each do |ast|
@@ -116,7 +79,8 @@ module Openai
116
79
  end
117
80
  end
118
81
 
119
- # @return private
82
+ private
83
+
120
84
  def parse_assistant_object(data)
121
85
  Openai::AssistantObj.new(
122
86
  id: data["id"],
@@ -131,5 +95,13 @@ module Openai
131
95
  metadata: data["metadata"]
132
96
  )
133
97
  end
98
+
99
+ def default_headers
100
+ {
101
+ "Authorization": "Bearer #{@openai_api_key}",
102
+ "OpenAI-Beta": "assistants=v1",
103
+ "Content-Type": "application/json"
104
+ }
105
+ end
134
106
  end
135
107
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../http/http"
4
+
5
+ module Openai
6
+ # Base class of openai
7
+ class Base
8
+ @openai_api_key = nil
9
+ @openai_url = nil
10
+ @http_client = nil
11
+
12
+ def initialize(api_key = "")
13
+ @openai_api_key = api_key
14
+ # hard the host because if the official docs change the host, maybe it will change another
15
+ # we need to update this gem for any change
16
+ @openai_url = "https://api.openai.com/v1/assistants"
17
+ @http_client = Http::Client.new
18
+ end
19
+ end
20
+ end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "lib/openai/base"
3
4
  require_relative "lib/openai/assistant/version"
4
5
 
5
6
  Gem::Specification.new do |spec|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openai-assistant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - duonghds
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-11-29 00:00:00.000000000 Z
11
+ date: 2023-11-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -38,9 +38,11 @@ files:
38
38
  - LICENSE.txt
39
39
  - README.md
40
40
  - Rakefile
41
+ - lib/http/http.rb
41
42
  - lib/openai/assistant.rb
42
43
  - lib/openai/assistant/version.rb
43
44
  - lib/openai/assistant_obj.rb
45
+ - lib/openai/base.rb
44
46
  - openai-assistant.gemspec
45
47
  - sig/openai/assistant.rbs
46
48
  homepage: https://rubygems.org/