]> git.giacomolli.uk - onechat/blobdiff - model.go
Record the subagent name in the usage records
[onechat] / model.go
index 04b15563304af5720269f7a72272a41382952c95..f15be221e2d494e977595d3437d274029eb85552 100644 (file)
--- a/model.go
+++ b/model.go
@@ -218,6 +218,7 @@ func (c *ModelClient) Create(ctx context.Context, request ModelRequest) (ModelRe
        }
 
        record.Turn = request.Turn
        }
 
        record.Turn = request.Turn
+       record.Agent = request.Agent
        response, err := c.send(httpRequest, &record)
        if err != nil {
                record.Error = err.Error()
        response, err := c.send(httpRequest, &record)
        if err != nil {
                record.Error = err.Error()
@@ -302,8 +303,9 @@ type ModelOutputItem struct {
 // ModelRequest is one model call. Input holds the input items in order, such as
 // modelUserMessage 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
 // ModelRequest is one model call. Input holds the input items in order, such as
 // modelUserMessage 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 or next. Node and Turn go only to the usage file, never to the
-// endpoint.
+// turn: first or next. Agent names the subagent that makes the call, or is
+// empty for a call of the agent itself. Node, Turn, and Agent go only to the
+// usage file, never to the endpoint.
 type ModelRequest struct {
        Model        string
        Effort       string
 type ModelRequest struct {
        Model        string
        Effort       string
@@ -312,6 +314,7 @@ type ModelRequest struct {
        Input        []any
        Node         *NodeKey
        Turn         string
        Input        []any
        Node         *NodeKey
        Turn         string
+       Agent        string
 }
 
 // ModelResponse is the result of a model call. Output holds the output items as
 }
 
 // ModelResponse is the result of a model call. Output holds the output items as
@@ -342,14 +345,16 @@ type ModelReasoning struct {
 // ModelUsageRecord is one line of usage.jsonl. Date is the start of the call,
 // and Seconds its length. Node is the node [l, i] of a compaction. Status is
 // the HTTP status, or 0 when no response came. TextBytes is the size of the
 // ModelUsageRecord is one line of usage.jsonl. Date is the start of the call,
 // and Seconds its length. Node is the node [l, i] of a compaction. Status is
 // the HTTP status, or 0 when no response came. TextBytes is the size of the
-// text of the reply. Turn names the request of a turn. Quota holds the
-// x-codex-* headers of the response, without the turn state.
+// text of the reply. Turn names the request of a turn. Agent names the subagent
+// of the call. Quota holds the x-codex-* headers of the response, without the
+// turn state.
 type ModelUsageRecord struct {
        Date         string            `json:"date"`
        Seconds      float64           `json:"seconds"`
        Model        string            `json:"model"`
        Node         *[2]int           `json:"node,omitempty"`
        Turn         string            `json:"turn,omitempty"`
 type ModelUsageRecord struct {
        Date         string            `json:"date"`
        Seconds      float64           `json:"seconds"`
        Model        string            `json:"model"`
        Node         *[2]int           `json:"node,omitempty"`
        Turn         string            `json:"turn,omitempty"`
+       Agent        string            `json:"agent,omitempty"`
        Status       int               `json:"status"`
        InputTokens  int               `json:"input_tokens"`
        CachedTokens int               `json:"cached_tokens"`
        Status       int               `json:"status"`
        InputTokens  int               `json:"input_tokens"`
        CachedTokens int               `json:"cached_tokens"`