@@ -11,6 +11,7 @@ import (
11
11
"os"
12
12
"sort"
13
13
"strings"
14
+ "sync/atomic"
14
15
15
16
"github.com/acorn-io/gptscript/pkg/cache"
16
17
"github.com/acorn-io/gptscript/pkg/hash"
@@ -27,11 +28,14 @@ const (
27
28
)
28
29
29
30
var (
30
- key = os .Getenv ("OPENAI_API_KEY" )
31
- url = os .Getenv ("OPENAI_URL" )
31
+ key = os .Getenv ("OPENAI_API_KEY" )
32
+ url = os .Getenv ("OPENAI_URL" )
33
+ transactionID int64
32
34
)
33
35
34
36
type Client struct {
37
+ url string
38
+ key string
35
39
c * openai.Client
36
40
cache * cache.Client
37
41
}
@@ -107,7 +111,11 @@ func (c *Client) ListModules(ctx context.Context) (result []string, _ error) {
107
111
}
108
112
109
113
func (c * Client ) cacheKey (request openai.ChatCompletionRequest ) string {
110
- return hash .Encode (request )
114
+ return hash .Encode (map [string ]any {
115
+ "url" : c .url ,
116
+ "key" : c .key ,
117
+ "request" : request ,
118
+ })
111
119
}
112
120
113
121
func (c * Client ) seed (request openai.ChatCompletionRequest ) int {
@@ -231,11 +239,12 @@ func toMessages(ctx context.Context, cache *cache.Client, request types.Completi
231
239
}
232
240
233
241
type Status struct {
234
- Request any
235
- Response any
236
- Cached bool
237
- Chunks any
238
- PartialResponse * types.CompletionMessage
242
+ OpenAITransactionID string
243
+ Request any
244
+ Response any
245
+ Cached bool
246
+ Chunks any
247
+ PartialResponse * types.CompletionMessage
239
248
}
240
249
241
250
func (c * Client ) Call (ctx context.Context , messageRequest types.CompletionRequest , status chan <- Status ) (* types.CompletionMessage , error ) {
@@ -281,8 +290,10 @@ func (c *Client) Call(ctx context.Context, messageRequest types.CompletionReques
281
290
}
282
291
}
283
292
293
+ id := fmt .Sprint (atomic .AddInt64 (& transactionID , 1 ))
284
294
status <- Status {
285
- Request : request ,
295
+ OpenAITransactionID : id ,
296
+ Request : request ,
286
297
}
287
298
288
299
var cacheResponse bool
@@ -291,7 +302,7 @@ func (c *Client) Call(ctx context.Context, messageRequest types.CompletionReques
291
302
if err != nil {
292
303
return nil , err
293
304
} else if ! ok {
294
- response , err = c .call (ctx , request , status )
305
+ response , err = c .call (ctx , request , id , status )
295
306
if err != nil {
296
307
return nil , err
297
308
}
@@ -305,9 +316,10 @@ func (c *Client) Call(ctx context.Context, messageRequest types.CompletionReques
305
316
}
306
317
307
318
status <- Status {
308
- Chunks : response ,
309
- Response : result ,
310
- Cached : cacheResponse ,
319
+ OpenAITransactionID : id ,
320
+ Chunks : response ,
321
+ Response : result ,
322
+ Cached : cacheResponse ,
311
323
}
312
324
313
325
return & result , nil
@@ -391,7 +403,7 @@ func (c *Client) store(ctx context.Context, key string, responses []openai.ChatC
391
403
return c .cache .Store (ctx , key , buf .Bytes ())
392
404
}
393
405
394
- func (c * Client ) call (ctx context.Context , request openai.ChatCompletionRequest , partial chan <- Status ) (responses []openai.ChatCompletionStreamResponse , _ error ) {
406
+ func (c * Client ) call (ctx context.Context , request openai.ChatCompletionRequest , transactionID string , partial chan <- Status ) (responses []openai.ChatCompletionStreamResponse , _ error ) {
395
407
cacheKey := c .cacheKey (request )
396
408
request .Stream = true
397
409
@@ -404,6 +416,7 @@ func (c *Client) call(ctx context.Context, request openai.ChatCompletionRequest,
404
416
}
405
417
406
418
partial <- Status {
419
+ OpenAITransactionID : transactionID ,
407
420
PartialResponse : & types.CompletionMessage {
408
421
Role : types .CompletionMessageRoleTypeAssistant ,
409
422
Content : types .Text (msg + "Waiting for model response...\n " ),
@@ -429,7 +442,8 @@ func (c *Client) call(ctx context.Context, request openai.ChatCompletionRequest,
429
442
if partial != nil {
430
443
partialMessage = appendMessage (partialMessage , response )
431
444
partial <- Status {
432
- PartialResponse : & partialMessage ,
445
+ OpenAITransactionID : transactionID ,
446
+ PartialResponse : & partialMessage ,
433
447
}
434
448
}
435
449
responses = append (responses , response )
0 commit comments