X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/4343ca5fb6cc86eb887951f4fe16063bab29a238..0cb73c3dde36d0078f3c1aa4200f2edcb5ceed38:/chain.go diff --git a/chain.go b/chain.go index 23c7dec..f201812 100644 --- a/chain.go +++ b/chain.go @@ -22,10 +22,10 @@ type ChainClient interface { // answer. The replies, the tool calls, and the results go to the log of tools // as they happen. The thoughts never do. // -// Each later request begins with the whole input of the request before it, -// then its output items, then the tool results. The output items hold the -// reasoning with its encrypted content, because the calls do not store it. So -// each request begins with all of the previous one and reads it from the prompt +// Each later request begins with the whole input of the request before it, then +// its output items, then the tool results. The output items hold the reasoning +// with its encrypted content, because the calls do not store it. So each +// request begins with all of the previous one and reads it from the prompt // cache. The messages of take join each later request after the tool results. type Chain struct { client ChainClient @@ -35,9 +35,23 @@ type Chain struct { images *ImageStore } +// ChainFunctionCall holds the fields of a function call output item. +type ChainFunctionCall struct { + Type string `json:"type"` + Name string `json:"name"` + Arguments string `json:"arguments"` + CallID string `json:"call_id"` +} + +// ChainFunctionCallOutput is the input item with the result of a function call. +type ChainFunctionCallOutput struct { + Type string `json:"type"` + CallID string `json:"call_id"` + Output any `json:"output"` +} + // Run runs the chain from input, the input of its first request, and returns -// the text of the final answer. An error of a log write wraps -// errChainLogWrite. +// the text of the final answer. An error of a log write wraps errChainLogWrite. func (c *Chain) Run(ctx context.Context, input []any) (string, error) { request := c.request for request.Turn = "first"; ; request.Turn = "next" { @@ -61,9 +75,9 @@ func (c *Chain) Run(ctx context.Context, input []any) (string, error) { } // handle logs the replies of response and runs its tool calls. It returns the -// input of the next request: input, the output items, the tool results, and -// the messages of take. After the final answer it returns no input, and the -// replies of the answer as its text. +// input of the next request: input, the output items, the tool results, and 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 @@ -134,22 +148,6 @@ func (c *Chain) handle(ctx context.Context, input []any, response ModelResponse) return input, "", nil } -// ChainFunctionCall holds the fields of a function call output item. -type ChainFunctionCall struct { - Type string `json:"type"` - Name string `json:"name"` - Arguments string `json:"arguments"` - CallID string `json:"call_id"` -} - -// ChainFunctionCallOutput is the input item with the result of a function -// call. -type ChainFunctionCallOutput struct { - Type string `json:"type"` - CallID string `json:"call_id"` - Output any `json:"output"` -} - // chainInputItem returns an output item as an input item for the next request. // The calls do not store their items, so the item goes back whole, without its // id.