openai.rb 0.0.5 → 0.0.6
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 +4 -4
- data/.github/workflows/main.yml +1 -1
- data/.rubocop.yml +3 -0
- data/.ruby-version +1 -1
- data/Gemfile +2 -2
- data/Gemfile.lock +26 -22
- data/lib/openai/api/cache.rb +7 -7
- data/lib/openai/api/resource.rb +14 -17
- data/lib/openai/api/response.rb +2 -2
- data/lib/openai/chat.rb +8 -7
- data/lib/openai/version.rb +1 -1
- data/lib/openai.rb +1 -1
- data/openai.gemspec +3 -2
- data/spec/shared/api_resource_context.rb +2 -2
- data/spec/unit/openai/api/audio_spec.rb +2 -2
- data/spec/unit/openai/api/chat_completions_spec.rb +22 -22
- data/spec/unit/openai/api/completions_spec.rb +22 -22
- data/spec/unit/openai/api/edits_spec.rb +9 -9
- data/spec/unit/openai/api/embeddings_spec.rb +9 -9
- data/spec/unit/openai/api/files_spec.rb +29 -29
- data/spec/unit/openai/api/fine_tunes_spec.rb +114 -114
- data/spec/unit/openai/api/images_spec.rb +8 -8
- data/spec/unit/openai/api/models_spec.rb +4 -4
- data/spec/unit/openai/api/moderations_spec.rb +20 -20
- data/spec/unit/openai/api/response_spec.rb +7 -7
- data/spec/unit/openai/chat_spec.rb +1 -1
- data/spec/unit/openai_spec.rb +19 -19
- metadata +11 -10
@@ -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
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
-
|
54
|
+
data: [
|
55
55
|
{
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
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
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
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
|
-
|
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
|
-
|
98
|
-
|
99
|
-
|
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
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
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
|
-
|
10
|
-
|
9
|
+
object: 'list',
|
10
|
+
data: [
|
11
11
|
{
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
65
|
+
id: 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',
|
66
|
+
object: 'fine-tune',
|
67
|
+
model: 'curie',
|
68
|
+
created_at: 1_614_807_352,
|
69
|
+
events: [
|
70
70
|
{
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
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
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
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
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
84
|
+
organization_id: 'org-...',
|
85
|
+
result_files: [],
|
86
|
+
status: 'pending',
|
87
|
+
validation_files: [],
|
88
|
+
training_files: [
|
89
89
|
{
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
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
|
-
|
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
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
138
|
+
id: 'ft-AF1WoRqd3aJAHsqc9NY7iL8F',
|
139
|
+
object: 'fine-tune',
|
140
|
+
model: 'curie',
|
141
|
+
created_at: 1_614_807_352,
|
142
|
+
events: [
|
143
143
|
{
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
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
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
150
|
+
object: 'fine-tune-event',
|
151
|
+
created_at: 1_614_807_356,
|
152
|
+
level: 'info',
|
153
|
+
message: 'Job started.'
|
154
154
|
},
|
155
155
|
{
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
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
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
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
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
168
|
+
object: 'fine-tune-event',
|
169
|
+
created_at: 1_614_807_864,
|
170
|
+
level: 'info',
|
171
|
+
message: 'Job succeeded.'
|
172
172
|
}
|
173
173
|
],
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
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
|
-
|
182
|
-
|
181
|
+
organization_id: 'org-...',
|
182
|
+
result_files: [
|
183
183
|
{
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
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
|
-
|
193
|
-
|
194
|
-
|
192
|
+
status: 'succeeded',
|
193
|
+
validation_files: [],
|
194
|
+
training_files: [
|
195
195
|
{
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
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
|
-
|
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
|
-
|
250
|
-
|
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
|
-
|
270
|
-
|
269
|
+
object: 'list',
|
270
|
+
data: [
|
271
271
|
{
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
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
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
278
|
+
object: 'fine-tune-event',
|
279
|
+
created_at: 1_614_807_356,
|
280
|
+
level: 'info',
|
281
|
+
message: 'Job started.'
|
282
282
|
},
|
283
283
|
{
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
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
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
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
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
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
|
-
|
44
|
-
|
43
|
+
created: 1_589_478_378,
|
44
|
+
data: [
|
45
45
|
{
|
46
|
-
|
46
|
+
url: 'https://...'
|
47
47
|
},
|
48
48
|
{
|
49
|
-
|
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
|
-
|
94
|
-
|
93
|
+
created: 1_589_478_378,
|
94
|
+
data: [
|
95
95
|
{
|
96
|
-
|
96
|
+
url: 'https://...'
|
97
97
|
},
|
98
98
|
{
|
99
|
-
|
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
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
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
|
-
|
11
|
-
|
12
|
-
|
10
|
+
id: 'modr-5MWoLO',
|
11
|
+
model: 'text-moderation-001',
|
12
|
+
results: [
|
13
13
|
{
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
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
|
-
|
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
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
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
|
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')
|
data/spec/unit/openai_spec.rb
CHANGED
@@ -7,22 +7,22 @@ RSpec.describe OpenAI do
|
|
7
7
|
|
8
8
|
let(:response_body) do
|
9
9
|
{
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
id: 'cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7',
|
11
|
+
object: 'text_completion',
|
12
|
+
created: 1_589_478_378,
|
13
|
+
model: 'text-davinci-003',
|
14
|
+
choices: [
|
15
15
|
{
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
text: "\n\nThis is indeed a test",
|
17
|
+
index: 0,
|
18
|
+
logprobs: nil,
|
19
|
+
finish_reason: 'length'
|
20
20
|
}
|
21
21
|
],
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
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:
|
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
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
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.
|
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-
|
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.
|
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.
|
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
|
-
|
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
|
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.
|
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: []
|