]> git.giacomolli.uk - onechat/blobdiff - responses.go
Send the cache key in the session_id header
[onechat] / responses.go
index cdc1558195e159cd111f0e4968f8e9f5d9aea941..096439f5cc9564d92f8fcfed7636ae60960c91a6 100644 (file)
@@ -48,8 +48,10 @@ type apiKey string
 // Client sends model calls to a Responses endpoint for one agent. The ChatGPT
 // backend and the OpenAI API take the same request body and differ only in the
 // URL and the credentials. Every call sends the fixed cache key of the agent,
-// so the turns and the compactions of the agent share one prompt cache. Every
-// call is recorded in the usage file.
+// so the turns and the compactions of the agent share one prompt cache. The
+// ChatGPT backend caches only with the key in the session_id header, so a call
+// to it sends the key there and in the body. Every call is recorded in the
+// usage file.
 //
 // The request never holds max_output_tokens or metadata, because the ChatGPT
 // backend refuses them. It sets store to false, so the client sends the whole
@@ -217,6 +219,11 @@ func (c *Client) Create(ctx context.Context, request Request) (Response, error)
                return Response{}, fmt.Errorf("authorize model call: %w", err)
        }
 
+       _, chatgpt := c.auth.(*chatgptAuth)
+       if chatgpt {
+               httpRequest.Header.Set("session_id", c.cacheKey)
+       }
+
        record := usageRecord{
                Date:  time.Now().Format(time.RFC3339Nano),
                Model: request.Model,