]> git.giacomolli.uk - onechat/blobdiff - responses.go
Send the replies to Telegram with their formats
[onechat] / responses.go
index 19ab6a1eda6bb54043f34f09c5eed89485bd8258..0ba4955128b491911b1f77f7d92d2ab95c930f89 100644 (file)
@@ -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":