X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/d9fddc0f506eb4ead7049f5638674b2b8773fcaa..4c199e7d93b6a4529ed5956807911b5f6c5489a7:/chain.go?ds=inline diff --git a/chain.go b/chain.go index 0211787..c4a4302 100644 --- a/chain.go +++ b/chain.go @@ -47,6 +47,7 @@ func (c *Chain) Run(ctx context.Context, input []any) (string, error) { } var text string + input, text, err = c.handle(ctx, input, response) if err != nil { return "", err @@ -63,8 +64,11 @@ func (c *Chain) Run(ctx context.Context, input []any) (string, error) { // the messages of take. After the final answer it returns no input, and the // replies of the answer as its text. func (c *Chain) handle(ctx context.Context, input []any, response ModelResponse) ([]any, string, error) { - var outputs []any - var replies []string + var ( + outputs []any + replies []string + ) + for _, raw := range response.Output { item, err := chainInputItem(raw) if err != nil { @@ -74,6 +78,7 @@ func (c *Chain) handle(ctx context.Context, input []any, response ModelResponse) input = append(input, item) var call ChainFunctionCall + err = json.Unmarshal(raw, &call) if err != nil { return nil, "", fmt.Errorf("decode output item: %w", err) @@ -144,6 +149,7 @@ type ChainFunctionCallOutput struct { // id. func chainInputItem(raw json.RawMessage) (map[string]any, error) { var item map[string]any + err := json.Unmarshal(raw, &item) if err != nil { return nil, fmt.Errorf("decode output item: %w", err)