Skip to content

Commit f9cf79d

Browse files
bug: fix anthropic model provider
1 parent 640cbe3 commit f9cf79d

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

pkg/openai/client.go

+23-5
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func toToolCall(call types.CompletionToolCall) openai.ToolCall {
212212
}
213213
}
214214

215-
func toMessages(request types.CompletionRequest) (result []openai.ChatCompletionMessage, err error) {
215+
func toMessages(request types.CompletionRequest, compat bool) (result []openai.ChatCompletionMessage, err error) {
216216
var (
217217
systemPrompts []string
218218
msgs []types.CompletionMessage
@@ -237,9 +237,23 @@ func toMessages(request types.CompletionRequest) (result []openai.ChatCompletion
237237
})
238238
}
239239

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+
}
243257
}
244258

245259
for _, message := range msgs {
@@ -288,7 +302,7 @@ func (c *Client) Call(ctx context.Context, messageRequest types.CompletionReques
288302
if messageRequest.Model == "" {
289303
messageRequest.Model = c.defaultModel
290304
}
291-
msgs, err := toMessages(messageRequest)
305+
msgs, err := toMessages(messageRequest, !c.setSeed)
292306
if err != nil {
293307
return nil, err
294308
}
@@ -368,6 +382,10 @@ func (c *Client) Call(ctx context.Context, messageRequest types.CompletionReques
368382
}
369383
}
370384

385+
if result.Role == "" {
386+
result.Role = types.CompletionMessageRoleTypeAssistant
387+
}
388+
371389
var usage types.Usage
372390
if !cacheResponse {
373391
usage = result.Usage

pkg/types/completion.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ type CompletionMessageRoleType string
5050

5151
type CompletionMessage struct {
5252
Role CompletionMessageRoleType `json:"role,omitempty"`
53-
Content []ContentPart `json:"content,omitempty" column:"name=Message,jsonpath=.spec.content"`
53+
Content []ContentPart `json:"content,omitempty"`
5454
// ToolCall should be set for only messages of type "tool" and Content[0].Text should be set as the
5555
// result of the call describe by this field
5656
ToolCall *CompletionToolCall `json:"toolCall,omitempty"`

0 commit comments

Comments
 (0)