openai.rb 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -9,12 +9,12 @@ RSpec.describe OpenAI::API, '#files' do
9
9
  context 'when creating a file' do
10
10
  let(:response_body) do
11
11
  {
12
- "id": 'file-XjGxS3KTG0uNmNOK362iJua3',
13
- "object": 'file',
14
- "bytes": 140,
15
- "created_at": 1_613_779_121,
16
- "filename": 'sample.jsonl',
17
- "purpose": 'fine-tune'
12
+ id: 'file-XjGxS3KTG0uNmNOK362iJua3',
13
+ object: 'file',
14
+ bytes: 140,
15
+ created_at: 1_613_779_121,
16
+ filename: 'sample.jsonl',
17
+ purpose: 'fine-tune'
18
18
  }
19
19
  end
20
20
 
@@ -51,25 +51,25 @@ RSpec.describe OpenAI::API, '#files' do
51
51
  context 'when listing a file' do
52
52
  let(:response_body) do
53
53
  {
54
- "data": [
54
+ data: [
55
55
  {
56
- "id": 'file-ccdDZrC3iZVNiQVeEA6Z66wf',
57
- "object": 'file',
58
- "bytes": 175,
59
- "created_at": 1_613_677_385,
60
- "filename": 'train.jsonl',
61
- "purpose": 'search'
56
+ id: 'file-ccdDZrC3iZVNiQVeEA6Z66wf',
57
+ object: 'file',
58
+ bytes: 175,
59
+ created_at: 1_613_677_385,
60
+ filename: 'train.jsonl',
61
+ purpose: 'search'
62
62
  },
63
63
  {
64
- "id": 'file-XjGxS3KTG0uNmNOK362iJua3',
65
- "object": 'file',
66
- "bytes": 140,
67
- "created_at": 1_613_779_121,
68
- "filename": 'puppy.jsonl',
69
- "purpose": 'search'
64
+ id: 'file-XjGxS3KTG0uNmNOK362iJua3',
65
+ object: 'file',
66
+ bytes: 140,
67
+ created_at: 1_613_779_121,
68
+ filename: 'puppy.jsonl',
69
+ purpose: 'search'
70
70
  }
71
71
  ],
72
- "object": 'list'
72
+ object: 'list'
73
73
  }
74
74
  end
75
75
 
@@ -94,9 +94,9 @@ RSpec.describe OpenAI::API, '#files' do
94
94
  context 'when deleting a file' do
95
95
  let(:response_body) do
96
96
  {
97
- "id": 'file-XjGxS3KTG0uNmNOK362iJua3',
98
- "object": 'file',
99
- "deleted": true
97
+ id: 'file-XjGxS3KTG0uNmNOK362iJua3',
98
+ object: 'file',
99
+ deleted: true
100
100
  }
101
101
  end
102
102
 
@@ -116,12 +116,12 @@ RSpec.describe OpenAI::API, '#files' do
116
116
  context 'when fetching a file' do
117
117
  let(:response_body) do
118
118
  {
119
- "id": 'file-XjGxS3KTG0uNmNOK362iJua3',
120
- "object": 'file',
121
- "bytes": 140,
122
- "created_at": 1_613_779_657,
123
- "filename": 'mydata.jsonl',
124
- "purpose": 'fine-tune'
119
+ id: 'file-XjGxS3KTG0uNmNOK362iJua3',
120
+ object: 'file',
121
+ bytes: 140,
122
+ created_at: 1_613_779_657,
123
+ filename: 'mydata.jsonl',
124
+ purpose: 'fine-tune'
125
125
  }
126
126
  end
127
127
 
@@ -6,21 +6,21 @@ RSpec.describe OpenAI::API, '#fine_tunes' do
6
6
  let(:resource) { api.fine_tunes }
7
7
  let(:response_body) do
8
8
  {
9
- "object": 'list',
10
- "data": [
9
+ object: 'list',
10
+ data: [
11
11
  {
12
- "id": 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',
13
- "object": 'fine-tune',
14
- "model": 'curie',
15
- "created_at": 1_614_807_352,
16
- "fine_tuned_model": nil,
17
- "hyperparams": {},
18
- "organization_id": 'org-...',
19
- "result_files": [],
20
- "status": 'pending',
21
- "validation_files": [],
22
- "training_files": [{}],
23
- "updated_at": 1_614_807_352
12
+ id: 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',
13
+ object: 'fine-tune',
14
+ model: 'curie',
15
+ created_at: 1_614_807_352,
16
+ fine_tuned_model: nil,
17
+ hyperparams: {},
18
+ organization_id: 'org-...',
19
+ result_files: [],
20
+ status: 'pending',
21
+ validation_files: [],
22
+ training_files: [{}],
23
+ updated_at: 1_614_807_352
24
24
  },
25
25
  {},
26
26
  {}
@@ -62,40 +62,40 @@ RSpec.describe OpenAI::API, '#fine_tunes' do
62
62
  context 'when creating a fine-tune' do
63
63
  let(:response_body) do
64
64
  {
65
- "id": 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',
66
- "object": 'fine-tune',
67
- "model": 'curie',
68
- "created_at": 1_614_807_352,
69
- "events": [
65
+ id: 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',
66
+ object: 'fine-tune',
67
+ model: 'curie',
68
+ created_at: 1_614_807_352,
69
+ events: [
70
70
  {
71
- "object": 'fine-tune-event',
72
- "created_at": 1_614_807_352,
73
- "level": 'info',
74
- "message": 'Job enqueued. Waiting for jobs ahead to complete. Queue number: 0.'
71
+ object: 'fine-tune-event',
72
+ created_at: 1_614_807_352,
73
+ level: 'info',
74
+ message: 'Job enqueued. Waiting for jobs ahead to complete. Queue number: 0.'
75
75
  }
76
76
  ],
77
- "fine_tuned_model": nil,
78
- "hyperparams": {
79
- "batch_size": 4,
80
- "learning_rate_multiplier": 0.1,
81
- "n_epochs": 4,
82
- "prompt_loss_weight": 0.1
77
+ fine_tuned_model: nil,
78
+ hyperparams: {
79
+ batch_size: 4,
80
+ learning_rate_multiplier: 0.1,
81
+ n_epochs: 4,
82
+ prompt_loss_weight: 0.1
83
83
  },
84
- "organization_id": 'org-...',
85
- "result_files": [],
86
- "status": 'pending',
87
- "validation_files": [],
88
- "training_files": [
84
+ organization_id: 'org-...',
85
+ result_files: [],
86
+ status: 'pending',
87
+ validation_files: [],
88
+ training_files: [
89
89
  {
90
- "id": 'file-XGinujblHPwGLSztz8cPS8XY',
91
- "object": 'file',
92
- "bytes": 1_547_276,
93
- "created_at": 1_610_062_281,
94
- "filename": 'my-data-train.jsonl',
95
- "purpose": 'fine-tune-train'
90
+ id: 'file-XGinujblHPwGLSztz8cPS8XY',
91
+ object: 'file',
92
+ bytes: 1_547_276,
93
+ created_at: 1_610_062_281,
94
+ filename: 'my-data-train.jsonl',
95
+ purpose: 'fine-tune-train'
96
96
  }
97
97
  ],
98
- "updated_at": 1_614_807_352
98
+ updated_at: 1_614_807_352
99
99
  }
100
100
  end
101
101
 
@@ -135,73 +135,73 @@ RSpec.describe OpenAI::API, '#fine_tunes' do
135
135
  context 'when fetching a fine tune' do
136
136
  let(:response_body) do
137
137
  {
138
- "id": 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',
139
- "object": 'fine-tune',
140
- "model": 'curie',
141
- "created_at": 1_614_807_352,
142
- "events": [
138
+ id: 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',
139
+ object: 'fine-tune',
140
+ model: 'curie',
141
+ created_at: 1_614_807_352,
142
+ events: [
143
143
  {
144
- "object": 'fine-tune-event',
145
- "created_at": 1_614_807_352,
146
- "level": 'info',
147
- "message": 'Job enqueued. Waiting for jobs ahead to complete. Queue number: 0.'
144
+ object: 'fine-tune-event',
145
+ created_at: 1_614_807_352,
146
+ level: 'info',
147
+ message: 'Job enqueued. Waiting for jobs ahead to complete. Queue number: 0.'
148
148
  },
149
149
  {
150
- "object": 'fine-tune-event',
151
- "created_at": 1_614_807_356,
152
- "level": 'info',
153
- "message": 'Job started.'
150
+ object: 'fine-tune-event',
151
+ created_at: 1_614_807_356,
152
+ level: 'info',
153
+ message: 'Job started.'
154
154
  },
155
155
  {
156
- "object": 'fine-tune-event',
157
- "created_at": 1_614_807_861,
158
- "level": 'info',
159
- "message": 'Uploaded snapshot: curie:ft-acmeco-2021-03-03-21-44-20.'
156
+ object: 'fine-tune-event',
157
+ created_at: 1_614_807_861,
158
+ level: 'info',
159
+ message: 'Uploaded snapshot: curie:ft-acmeco-2021-03-03-21-44-20.'
160
160
  },
161
161
  {
162
- "object": 'fine-tune-event',
163
- "created_at": 1_614_807_864,
164
- "level": 'info',
165
- "message": 'Uploaded result files: file-QQm6ZpqdNwAaVC3aSz5sWwLT.'
162
+ object: 'fine-tune-event',
163
+ created_at: 1_614_807_864,
164
+ level: 'info',
165
+ message: 'Uploaded result files: file-QQm6ZpqdNwAaVC3aSz5sWwLT.'
166
166
  },
167
167
  {
168
- "object": 'fine-tune-event',
169
- "created_at": 1_614_807_864,
170
- "level": 'info',
171
- "message": 'Job succeeded.'
168
+ object: 'fine-tune-event',
169
+ created_at: 1_614_807_864,
170
+ level: 'info',
171
+ message: 'Job succeeded.'
172
172
  }
173
173
  ],
174
- "fine_tuned_model": 'curie:ft-acmeco-2021-03-03-21-44-20',
175
- "hyperparams": {
176
- "batch_size": 4,
177
- "learning_rate_multiplier": 0.1,
178
- "n_epochs": 4,
179
- "prompt_loss_weight": 0.1
174
+ fine_tuned_model: 'curie:ft-acmeco-2021-03-03-21-44-20',
175
+ hyperparams: {
176
+ batch_size: 4,
177
+ learning_rate_multiplier: 0.1,
178
+ n_epochs: 4,
179
+ prompt_loss_weight: 0.1
180
180
  },
181
- "organization_id": 'org-...',
182
- "result_files": [
181
+ organization_id: 'org-...',
182
+ result_files: [
183
183
  {
184
- "id": 'file-QQm6ZpqdNwAaVC3aSz5sWwLT',
185
- "object": 'file',
186
- "bytes": 81_509,
187
- "created_at": 1_614_807_863,
188
- "filename": 'compiled_results.csv',
189
- "purpose": 'fine-tune-results'
184
+ id: 'file-QQm6ZpqdNwAaVC3aSz5sWwLT',
185
+ object: 'file',
186
+ bytes: 81_509,
187
+ created_at: 1_614_807_863,
188
+ filename: 'compiled_results.csv',
189
+ purpose: 'fine-tune-results'
190
190
  }
191
191
  ],
192
- "status": 'succeeded',
193
- "validation_files": [],
194
- "training_files": [
192
+ status: 'succeeded',
193
+ validation_files: [],
194
+ training_files: [
195
195
  {
196
- "id": 'file-XGinujblHPwGLSztz8cPS8XY',
197
- "object": 'file',
198
- "bytes": 1_547_276,
199
- "created_at": 1_610_062_281,
200
- "filename": 'my-data-train.jsonl',
201
- "purpose": 'fine-tune-train'
196
+ id: 'file-XGinujblHPwGLSztz8cPS8XY',
197
+ object: 'file',
198
+ bytes: 1_547_276,
199
+ created_at: 1_610_062_281,
200
+ filename: 'my-data-train.jsonl',
201
+ purpose: 'fine-tune-train'
202
202
  }
203
203
  ],
204
- "updated_at": 1_614_807_865
204
+ updated_at: 1_614_807_865
205
205
  }
206
206
  end
207
207
 
@@ -246,8 +246,8 @@ RSpec.describe OpenAI::API, '#fine_tunes' do
246
246
  context 'when canceling a fine-tune' do
247
247
  let(:response_body) do
248
248
  {
249
- "id": 'ft-xhrpBbvVUzYGo8oUO1FY4nI7',
250
- "status": 'cancelled'
249
+ id: 'ft-xhrpBbvVUzYGo8oUO1FY4nI7',
250
+ status: 'cancelled'
251
251
  }
252
252
  end
253
253
 
@@ -266,37 +266,37 @@ RSpec.describe OpenAI::API, '#fine_tunes' do
266
266
  context 'when listing fine-tune events' do
267
267
  let(:response_body) do
268
268
  {
269
- "object": 'list',
270
- "data": [
269
+ object: 'list',
270
+ data: [
271
271
  {
272
- "object": 'fine-tune-event',
273
- "created_at": 1_614_807_352,
274
- "level": 'info',
275
- "message": 'Job enqueued. Waiting for jobs ahead to complete. Queue number: 0.'
272
+ object: 'fine-tune-event',
273
+ created_at: 1_614_807_352,
274
+ level: 'info',
275
+ message: 'Job enqueued. Waiting for jobs ahead to complete. Queue number: 0.'
276
276
  },
277
277
  {
278
- "object": 'fine-tune-event',
279
- "created_at": 1_614_807_356,
280
- "level": 'info',
281
- "message": 'Job started.'
278
+ object: 'fine-tune-event',
279
+ created_at: 1_614_807_356,
280
+ level: 'info',
281
+ message: 'Job started.'
282
282
  },
283
283
  {
284
- "object": 'fine-tune-event',
285
- "created_at": 1_614_807_861,
286
- "level": 'info',
287
- "message": 'Uploaded snapshot: curie:ft-acmeco-2021-03-03-21-44-20.'
284
+ object: 'fine-tune-event',
285
+ created_at: 1_614_807_861,
286
+ level: 'info',
287
+ message: 'Uploaded snapshot: curie:ft-acmeco-2021-03-03-21-44-20.'
288
288
  },
289
289
  {
290
- "object": 'fine-tune-event',
291
- "created_at": 1_614_807_864,
292
- "level": 'info',
293
- "message": 'Uploaded result files: file-QQm6ZpqdNwAaVC3aSz5sWwLT.'
290
+ object: 'fine-tune-event',
291
+ created_at: 1_614_807_864,
292
+ level: 'info',
293
+ message: 'Uploaded result files: file-QQm6ZpqdNwAaVC3aSz5sWwLT.'
294
294
  },
295
295
  {
296
- "object": 'fine-tune-event',
297
- "created_at": 1_614_807_864,
298
- "level": 'info',
299
- "message": 'Job succeeded.'
296
+ object: 'fine-tune-event',
297
+ created_at: 1_614_807_864,
298
+ level: 'info',
299
+ message: 'Job succeeded.'
300
300
  }
301
301
  ]
302
302
  }
@@ -40,13 +40,13 @@ RSpec.describe OpenAI::API, '#images' do
40
40
 
41
41
  let(:response_body) do
42
42
  {
43
- "created": 1_589_478_378,
44
- "data": [
43
+ created: 1_589_478_378,
44
+ data: [
45
45
  {
46
- "url": 'https://...'
46
+ url: 'https://...'
47
47
  },
48
48
  {
49
- "url": 'https://...'
49
+ url: 'https://...'
50
50
  }
51
51
  ]
52
52
  }
@@ -90,13 +90,13 @@ RSpec.describe OpenAI::API, '#images' do
90
90
  context 'when creating image variations' do
91
91
  let(:response_body) do
92
92
  {
93
- "created": 1_589_478_378,
94
- "data": [
93
+ created: 1_589_478_378,
94
+ data: [
95
95
  {
96
- "url": 'https://...'
96
+ url: 'https://...'
97
97
  },
98
98
  {
99
- "url": 'https://...'
99
+ url: 'https://...'
100
100
  }
101
101
  ]
102
102
  }
@@ -61,10 +61,10 @@ RSpec.describe OpenAI::API, '#models' do
61
61
  context 'when retrieving a model' do
62
62
  let(:response_body) do
63
63
  {
64
- "id": 'text-davinci-002',
65
- "object": 'model',
66
- "owned_by": 'openai',
67
- "permission": %w[
64
+ id: 'text-davinci-002',
65
+ object: 'model',
66
+ owned_by: 'openai',
67
+ permission: %w[
68
68
  query
69
69
  completions
70
70
  models:read
@@ -7,29 +7,29 @@ RSpec.describe OpenAI::API, '#moderations' do
7
7
 
8
8
  let(:response_body) do
9
9
  {
10
- "id": 'modr-5MWoLO',
11
- "model": 'text-moderation-001',
12
- "results": [
10
+ id: 'modr-5MWoLO',
11
+ model: 'text-moderation-001',
12
+ results: [
13
13
  {
14
- "categories": {
15
- "hate": false,
16
- "hate/threatening": true,
17
- "self-harm": false,
18
- "sexual": false,
19
- "sexual/minors": false,
20
- "violence": true,
21
- "violence/graphic": false
14
+ categories: {
15
+ hate: false,
16
+ 'hate/threatening': true,
17
+ 'self-harm': false,
18
+ sexual: false,
19
+ 'sexual/minors': false,
20
+ violence: true,
21
+ 'violence/graphic': false
22
22
  },
23
- "category_scores": {
24
- "hate": 0.22714105248451233,
25
- "hate/threatening": 0.4132447838783264,
26
- "self-harm": 0.005232391878962517,
27
- "sexual": 0.01407341007143259,
28
- "sexual/minors": 0.0038522258400917053,
29
- "violence": 0.9223177433013916,
30
- "violence/graphic": 0.036865197122097015
23
+ category_scores: {
24
+ hate: 0.22714105248451233,
25
+ 'hate/threatening': 0.4132447838783264,
26
+ 'self-harm': 0.005232391878962517,
27
+ sexual: 0.01407341007143259,
28
+ 'sexual/minors': 0.0038522258400917053,
29
+ violence: 0.9223177433013916,
30
+ 'violence/graphic': 0.036865197122097015
31
31
  },
32
- "flagged": true
32
+ flagged: true
33
33
  }
34
34
  ]
35
35
  }
@@ -87,13 +87,13 @@ RSpec.describe OpenAI::API::Response do
87
87
 
88
88
  it 'defines a nice clean inspect method' do
89
89
  expect(sample_response.inspect).to eql(
90
- '#<OpenAISpec::SampleResponse::Post ' \
91
- 'created_at=1234 ' \
92
- 'text="This is a post" ' \
93
- 'comments=[] ' \
94
- 'author=#<OpenAISpec::SampleResponse::User username="carl"> ' \
95
- 'co_author=nil ' \
96
- 'subtitle=nil>'
90
+ '#<OpenAISpec::SampleResponse::Post ' \
91
+ 'created_at=1234 ' \
92
+ 'text="This is a post" ' \
93
+ 'comments=[] ' \
94
+ 'author=#<OpenAISpec::SampleResponse::User username="carl"> ' \
95
+ 'co_author=nil ' \
96
+ 'subtitle=nil>'
97
97
  )
98
98
  end
99
99
 
@@ -7,7 +7,7 @@ RSpec.describe OpenAI::Chat do
7
7
 
8
8
  describe 'initialization and adding messages' do
9
9
  it 'initializes with messages and adds user, system, and assistant messages' do
10
- chat = OpenAI::Chat.new(messages: messages, settings: settings, openai: openai)
10
+ chat = OpenAI::Chat.new(messages:, settings:, openai:)
11
11
 
12
12
  expect(chat.messages.count).to eq(1)
13
13
  expect(chat.messages.first.role).to eq('user')
@@ -7,22 +7,22 @@ RSpec.describe OpenAI do
7
7
 
8
8
  let(:response_body) do
9
9
  {
10
- "id": 'cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7',
11
- "object": 'text_completion',
12
- "created": 1_589_478_378,
13
- "model": 'text-davinci-003',
14
- "choices": [
10
+ id: 'cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7',
11
+ object: 'text_completion',
12
+ created: 1_589_478_378,
13
+ model: 'text-davinci-003',
14
+ choices: [
15
15
  {
16
- "text": "\n\nThis is indeed a test",
17
- "index": 0,
18
- "logprobs": nil,
19
- "finish_reason": 'length'
16
+ text: "\n\nThis is indeed a test",
17
+ index: 0,
18
+ logprobs: nil,
19
+ finish_reason: 'length'
20
20
  }
21
21
  ],
22
- "usage": {
23
- "prompt_tokens": 5,
24
- "completion_tokens": 7,
25
- "total_tokens": 12
22
+ usage: {
23
+ prompt_tokens: 5,
24
+ completion_tokens: 7,
25
+ total_tokens: 12
26
26
  }
27
27
  }
28
28
  end
@@ -42,7 +42,7 @@ RSpec.describe OpenAI do
42
42
  OpenAI::API::Client.new(
43
43
  'sk-123',
44
44
  organization_id: 'org-123',
45
- http: http
45
+ http:
46
46
  )
47
47
  end
48
48
 
@@ -59,11 +59,11 @@ RSpec.describe OpenAI do
59
59
  context 'when the request is not 2xx' do
60
60
  let(:response_body) do
61
61
  {
62
- "error": {
63
- "message": "You didn't provide an API key.",
64
- "type": 'invalid_request_error',
65
- "param": nil,
66
- "code": nil
62
+ error: {
63
+ message: "You didn't provide an API key.",
64
+ type: 'invalid_request_error',
65
+ param: nil,
66
+ code: nil
67
67
  }
68
68
  }
69
69
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openai.rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - John
8
8
  - Backus
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-04-05 00:00:00.000000000 Z
12
+ date: 2023-10-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: abstract_type
@@ -107,14 +107,14 @@ dependencies:
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.0.3
110
+ version: 0.0.6
111
111
  type: :runtime
112
112
  prerelease: false
113
113
  version_requirements: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 0.0.3
117
+ version: 0.0.6
118
118
  description: OpenAI Ruby Wrapper
119
119
  email:
120
120
  - johncbackus@gmail.com
@@ -167,8 +167,9 @@ files:
167
167
  - spec/unit/openai_spec.rb
168
168
  homepage: https://github.com/backus/openai-ruby
169
169
  licenses: []
170
- metadata: {}
171
- post_install_message:
170
+ metadata:
171
+ rubygems_mfa_required: 'true'
172
+ post_install_message:
172
173
  rdoc_options: []
173
174
  require_paths:
174
175
  - lib
@@ -176,15 +177,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
176
177
  requirements:
177
178
  - - ">="
178
179
  - !ruby/object:Gem::Version
179
- version: '2.7'
180
+ version: '3.2'
180
181
  required_rubygems_version: !ruby/object:Gem::Requirement
181
182
  requirements:
182
183
  - - ">="
183
184
  - !ruby/object:Gem::Version
184
185
  version: '0'
185
186
  requirements: []
186
- rubygems_version: 3.1.6
187
- signing_key:
187
+ rubygems_version: 3.4.10
188
+ signing_key:
188
189
  specification_version: 4
189
190
  summary: OpenAI Ruby Wrapper
190
191
  test_files: []