gpt-function 0.4.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +15 -9
- data/lib/gpt_function/batch.rb +24 -10
- data/lib/gpt_function/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61133cf0bb081bfcc03dc1e0b2a69bbc7f043c7dc6fd9c5e56d0d9734c975575
|
4
|
+
data.tar.gz: b153cad22540e8b2ad46293c8dffc1aa63b27d48f87a60cb46a9d6cc869abc5d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69fed6886b79e1b3e0034d3de36273b0bddc6b1ff59bb03067b737621ee85030ad334ceea48d72b9173025661f92f3f05d396d921720a4ee45a9f74dc7e9da50
|
7
|
+
data.tar.gz: f375fa50fc60c54663e8c488385541caa711ee97cae76495c885b734ce826fe79dc703d13f3594e54a7d44371be6e1f7458990a527b1095fe562a7195b011df4
|
data/README.md
CHANGED
@@ -4,11 +4,6 @@
|
|
4
4
|
|
5
5
|
你可以確保每次呼叫 GPT 函數時,接近 100% 都會得到相同的結果。
|
6
6
|
|
7
|
-
目前能夠使用的模型有:
|
8
|
-
|
9
|
-
- gpt-4-1106-preview
|
10
|
-
- gpt-3.5-turbo-1106
|
11
|
-
|
12
7
|
|
13
8
|
## Installation
|
14
9
|
|
@@ -99,20 +94,31 @@ end
|
|
99
94
|
Batch Storage 整合 Active Record 的範例:
|
100
95
|
|
101
96
|
```ruby
|
102
|
-
class
|
97
|
+
class BatchStatus < ApplicationRecord
|
103
98
|
class << self
|
104
99
|
def enqueue(hash)
|
105
|
-
|
100
|
+
model = BatchStatus.new
|
101
|
+
model.batch_id = hash[:id]
|
102
|
+
model.status = hash[:status]
|
103
|
+
model.request_counts_completed = hash[:request_counts_completed]
|
104
|
+
model.request_counts_failed = hash[:request_counts_failed]
|
105
|
+
model.request_counts_total = hash[:request_counts_total]
|
106
|
+
model.metadata = hash[:metadata]
|
107
|
+
model.payload = hash
|
108
|
+
model.save
|
106
109
|
true
|
107
110
|
end
|
108
111
|
|
109
112
|
def dequeue
|
110
|
-
first
|
113
|
+
model = first
|
114
|
+
model.destroy
|
115
|
+
model.payload
|
111
116
|
end
|
112
117
|
end
|
113
118
|
end
|
114
119
|
|
115
|
-
|
120
|
+
|
121
|
+
GptFunction.configure(api_key: '...', model: 'gpt-4o-mini', batch_storage: BatchStatus)
|
116
122
|
```
|
117
123
|
|
118
124
|
## License
|
data/lib/gpt_function/batch.rb
CHANGED
@@ -28,8 +28,7 @@ class GptFunction
|
|
28
28
|
attr_reader :request_counts_completed
|
29
29
|
attr_reader :request_counts_failed
|
30
30
|
|
31
|
-
attr_reader :
|
32
|
-
attr_reader :metadata_batch_description
|
31
|
+
attr_reader :metadata
|
33
32
|
|
34
33
|
def initialize(hash)
|
35
34
|
@id = hash["id"]
|
@@ -55,8 +54,7 @@ class GptFunction
|
|
55
54
|
@request_counts_completed = hash.dig("request_counts", "completed")
|
56
55
|
@request_counts_failed = hash.dig("request_counts", "failed")
|
57
56
|
|
58
|
-
@
|
59
|
-
@metadata_batch_description = hash.dig("metadata", "batch_description")
|
57
|
+
@metadata = hash.dig("metadata")
|
60
58
|
end
|
61
59
|
|
62
60
|
def to_hash
|
@@ -82,8 +80,7 @@ class GptFunction
|
|
82
80
|
request_counts_total: request_counts_total,
|
83
81
|
request_counts_completed: request_counts_completed,
|
84
82
|
request_counts_failed: request_counts_failed,
|
85
|
-
|
86
|
-
metadata_batch_description: metadata_batch_description,
|
83
|
+
metadata: metadata
|
87
84
|
}
|
88
85
|
end
|
89
86
|
|
@@ -105,6 +102,11 @@ class GptFunction
|
|
105
102
|
@output_file ||= File.from_id(output_file_id)
|
106
103
|
end
|
107
104
|
|
105
|
+
def error_file
|
106
|
+
return nil if error_file_id.nil?
|
107
|
+
@error_file ||= File.from_id(error_file_id)
|
108
|
+
end
|
109
|
+
|
108
110
|
def input_jsonl
|
109
111
|
@input_jsonl ||= input_file&.jsonl || []
|
110
112
|
end
|
@@ -170,6 +172,10 @@ class GptFunction
|
|
170
172
|
["failed", "completed", "expired", "cancelled"].include? status
|
171
173
|
end
|
172
174
|
|
175
|
+
def auto_delete
|
176
|
+
metadata&.dig("auto_delete") || false
|
177
|
+
end
|
178
|
+
|
173
179
|
class << self
|
174
180
|
def list(limit: 20, after: nil)
|
175
181
|
# 創建批次請求
|
@@ -189,7 +195,7 @@ class GptFunction
|
|
189
195
|
end
|
190
196
|
end
|
191
197
|
|
192
|
-
def create(requests)
|
198
|
+
def create(requests, metadata: nil)
|
193
199
|
requests = requests.each_with_index.map do |request, index|
|
194
200
|
{
|
195
201
|
custom_id: "request-#{index + 1}",
|
@@ -206,11 +212,13 @@ class GptFunction
|
|
206
212
|
uri = URI('https://api.openai.com/v1/batches')
|
207
213
|
request = Net::HTTP::Post.new(uri, 'Content-Type' => 'application/json')
|
208
214
|
request['Authorization'] = "Bearer #{GptFunction.api_key}"
|
209
|
-
|
215
|
+
body = {
|
210
216
|
input_file_id: file.id,
|
211
217
|
endpoint: '/v1/chat/completions',
|
212
218
|
completion_window: '24h'
|
213
|
-
}
|
219
|
+
}
|
220
|
+
body[:metadata] = metadata unless metadata.nil?
|
221
|
+
request.body = body.to_json
|
214
222
|
|
215
223
|
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
|
216
224
|
http.request(request)
|
@@ -288,7 +296,13 @@ class GptFunction
|
|
288
296
|
yield batch
|
289
297
|
|
290
298
|
# 如果 batch 還未處理完成,將批次請求重新加入 Storage
|
291
|
-
batch.
|
299
|
+
if batch.is_processed && auto_delete
|
300
|
+
batch&.input_file&.delete rescue nil
|
301
|
+
batch&.output_file&.delete rescue nil
|
302
|
+
batch&.error_file&.delete rescue nil
|
303
|
+
else
|
304
|
+
batch.enqueue
|
305
|
+
end
|
292
306
|
end
|
293
307
|
|
294
308
|
true
|
data/lib/gpt_function/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gpt-function
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- etrex kuo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-08-
|
11
|
+
date: 2024-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dotenv
|