X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/e0ab6220b6fd35f7e92a04e4bf149940185713ab..97729fc59a2fbd73e3f8a424cae4c825f5ba885b:/responses.go?ds=inline diff --git a/responses.go b/responses.go index 19ab6a1..0ba4955 100644 --- a/responses.go +++ b/responses.go @@ -74,9 +74,8 @@ type Client struct { // Request is one model call. Input holds the input items in order, such as // userMessage values or output items of an earlier response. Node names the // node that a compaction builds, or is nil. Turn names the request of a turn: -// first, next, or warmup. Node and Turn go only to the usage file, never to the -// endpoint. A call with StopAtOutput ends at the first output item, after the -// endpoint has read the whole input, and gives no output and no usage. +// first or next. Node and Turn go only to the usage file, never to the +// endpoint. type Request struct { Model string Effort string @@ -85,7 +84,6 @@ type Request struct { Input []any Node *nodeKey Turn string - StopAtOutput bool } // Tool is the definition of a function tool. @@ -263,7 +261,7 @@ func (c *Client) Create(ctx context.Context, request Request) (Response, error) } record.Turn = request.Turn - response, err := c.send(httpRequest, &record, request.StopAtOutput) + response, err := c.send(httpRequest, &record) if err != nil { record.Error = err.Error() } @@ -279,7 +277,7 @@ func (c *Client) Create(ctx context.Context, request Request) (Response, error) // send makes the HTTP call and reads its stream. It puts the status and the // quota headers into record. -func (c *Client) send(httpRequest *http.Request, record *usageRecord, stopAtOutput bool) (response Response, err error) { +func (c *Client) send(httpRequest *http.Request, record *usageRecord) (response Response, err error) { httpResponse, err := c.http.Do(httpRequest) if err != nil { return Response{}, fmt.Errorf("send model call: %w", err) @@ -298,7 +296,7 @@ func (c *Client) send(httpRequest *http.Request, record *usageRecord, stopAtOutp return Response{}, errors.Join(err, readErr) } - return readStream(httpResponse.Body, stopAtOutput) + return readStream(httpResponse.Body) } // usageLog appends one JSON line for each model call to usage.jsonl. Calls can @@ -406,9 +404,8 @@ func quotaHeaders(header http.Header) map[string]string { // readStream reads the server-sent events of a call until the response // completes. The output items come from the output_item.done events, or from -// the completed response when the stream sent none. With stopAtOutput it ends -// at the first output item. -func readStream(stream io.Reader, stopAtOutput bool) (Response, error) { +// the completed response when the stream sent none. +func readStream(stream io.Reader) (Response, error) { var response Response reader := bufio.NewReader(stream) var data bytes.Buffer @@ -426,7 +423,7 @@ func readStream(stream io.Reader, stopAtOutput bool) (Response, error) { data.WriteByte('\n') } } else if data.Len() > 0 { - done, eventErr := readEvent(&response, data.Bytes(), stopAtOutput) + done, eventErr := readEvent(&response, data.Bytes()) data.Reset() if eventErr != nil || done { return response, eventErr @@ -441,7 +438,7 @@ func readStream(stream io.Reader, stopAtOutput bool) (Response, error) { // readEvent adds one stream event to response, and tells if it ends the // stream. -func readEvent(response *Response, data []byte, stopAtOutput bool) (bool, error) { +func readEvent(response *Response, data []byte) (bool, error) { var event streamEvent err := json.Unmarshal(data, &event) if err != nil { @@ -449,8 +446,6 @@ func readEvent(response *Response, data []byte, stopAtOutput bool) (bool, error) } switch event.Type { - case "response.output_item.added": - return stopAtOutput, nil case "response.output_item.done": response.Output = append(response.Output, event.Item) case "response.completed":