@@ -212,7 +212,7 @@ func toToolCall(call types.CompletionToolCall) openai.ToolCall {
212
212
}
213
213
}
214
214
215
- func toMessages (request types.CompletionRequest ) (result []openai.ChatCompletionMessage , err error ) {
215
+ func toMessages (request types.CompletionRequest , compat bool ) (result []openai.ChatCompletionMessage , err error ) {
216
216
var (
217
217
systemPrompts []string
218
218
msgs []types.CompletionMessage
@@ -237,9 +237,23 @@ func toMessages(request types.CompletionRequest) (result []openai.ChatCompletion
237
237
})
238
238
}
239
239
240
- // Never send only a system message
241
- if len (msgs ) == 1 && msgs [0 ].Role == types .CompletionMessageRoleTypeSystem {
242
- msgs [0 ].Role = types .CompletionMessageRoleTypeUser
240
+ if compat {
241
+ // This is terrible hack to deal with APIs that strictly want: (system, user | user) (assistant, user)* assistant?
242
+ // Two scenarios where this breaks with GPTScript is just sending system, or sending system, assistant
243
+
244
+ // Don't send just a system message
245
+ if len (msgs ) == 1 && msgs [0 ].Role == types .CompletionMessageRoleTypeSystem {
246
+ msgs [0 ].Role = types .CompletionMessageRoleTypeUser
247
+ }
248
+
249
+ // Don't send system, assistant. If so, insert a user message that just has "."
250
+ if len (msgs ) > 1 && msgs [0 ].Role == types .CompletionMessageRoleTypeSystem &&
251
+ msgs [1 ].Role == types .CompletionMessageRoleTypeAssistant {
252
+ msgs = slices .Insert (msgs , 1 , types.CompletionMessage {
253
+ Role : types .CompletionMessageRoleTypeUser ,
254
+ Content : types .Text ("." ),
255
+ })
256
+ }
243
257
}
244
258
245
259
for _ , message := range msgs {
@@ -288,7 +302,7 @@ func (c *Client) Call(ctx context.Context, messageRequest types.CompletionReques
288
302
if messageRequest .Model == "" {
289
303
messageRequest .Model = c .defaultModel
290
304
}
291
- msgs , err := toMessages (messageRequest )
305
+ msgs , err := toMessages (messageRequest , ! c . setSeed )
292
306
if err != nil {
293
307
return nil , err
294
308
}
@@ -368,6 +382,10 @@ func (c *Client) Call(ctx context.Context, messageRequest types.CompletionReques
368
382
}
369
383
}
370
384
385
+ if result .Role == "" {
386
+ result .Role = types .CompletionMessageRoleTypeAssistant
387
+ }
388
+
371
389
var usage types.Usage
372
390
if ! cacheResponse {
373
391
usage = result .Usage
0 commit comments