diff --git a/go.mod b/go.mod index 1c2e595e..0ad40a1f 100644 --- a/go.mod +++ b/go.mod @@ -16,6 +16,7 @@ require ( github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 github.com/gptscript-ai/chat-completion-client v0.0.0-20240515050533-bdef9f2226a9 github.com/hexops/autogold/v2 v2.2.1 + github.com/hexops/valast v1.4.4 github.com/jaytaylor/html2text v0.0.0-20230321000545-74c2419ad056 github.com/mholt/archiver/v4 v4.0.0-alpha.8 github.com/olahol/melody v1.1.4 @@ -48,7 +49,6 @@ require ( github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hexops/autogold v1.3.1 // indirect github.com/hexops/gotextdiff v1.0.3 // indirect - github.com/hexops/valast v1.4.4 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/invopop/yaml v0.2.0 // indirect github.com/josharian/intern v1.0.0 // indirect diff --git a/pkg/openai/client.go b/pkg/openai/client.go index 000b94e1..c1787497 100644 --- a/pkg/openai/client.go +++ b/pkg/openai/client.go @@ -414,8 +414,8 @@ func appendMessage(msg types.CompletionMessage, response openai.ChatCompletionSt delta := response.Choices[0].Delta msg.Role = types.CompletionMessageRoleType(override(string(msg.Role), delta.Role)) - for _, tool := range delta.ToolCalls { - idx := 0 + for i, tool := range delta.ToolCalls { + idx := i if tool.Index != nil { idx = *tool.Index } @@ -484,6 +484,7 @@ func (c *Client) call(ctx context.Context, request openai.ChatCompletionRequest, slog.Debug("calling openai", "message", request.Messages) if !streamResponse { + request.StreamOptions = nil resp, err := c.c.CreateChatCompletion(ctx, request) if err != nil { return nil, err diff --git a/pkg/openai/client_test.go b/pkg/openai/client_test.go new file mode 100644 index 00000000..30f1705b --- /dev/null +++ b/pkg/openai/client_test.go @@ -0,0 +1,50 @@ +package openai + +import ( + "testing" + + openai "github.com/gptscript-ai/chat-completion-client" + "github.com/gptscript-ai/gptscript/pkg/types" + "github.com/hexops/autogold/v2" + "github.com/hexops/valast" +) + +func Test_appendMessage(t *testing.T) { + autogold.Expect(types.CompletionMessage{Content: []types.ContentPart{ + {ToolCall: &types.CompletionToolCall{ + Index: valast.Ptr(0), + Function: types.CompletionFunctionCall{ + Name: "foo", + Arguments: "bar", + }, + }}, + {ToolCall: &types.CompletionToolCall{ + Index: valast.Ptr(1), + Function: types.CompletionFunctionCall{ + Name: "foo", + Arguments: "bar", + }, + }}, + }}).Equal(t, appendMessage(types.CompletionMessage{}, openai.ChatCompletionStreamResponse{ + Choices: []openai.ChatCompletionStreamChoice{ + { + Delta: openai.ChatCompletionStreamChoiceDelta{ + ToolCalls: []openai.ToolCall{ + { + Function: openai.FunctionCall{ + Name: "foo", + Arguments: "bar", + }, + }, + { + Function: openai.FunctionCall{ + Name: "foo", + Arguments: "bar", + }, + }, + }, + }, + }, + }, + })) +}