@@ -709,6 +709,35 @@ data: [DONE]
709709 assert .Equal (t , 0 , metrics [0 ].OutputTokens )
710710 })
711711
712+ t .Run ("v1/responses format with nested response.usage" , func (t * testing.T ) {
713+ mm := newMetricsMonitor (testLogger , 10 , 0 )
714+
715+ // v1/responses SSE format: usage is nested under response.usage
716+ responseBody := "event: response.completed\n " +
717+ `data: {"type":"response.completed","response":{"id":"resp_abc","object":"response","created_at":1773416985,"status":"completed","model":"test-model","output":[],"usage":{"input_tokens":17,"output_tokens":23,"total_tokens":40}}}` +
718+ "\n \n "
719+
720+ nextHandler := func (modelID string , w http.ResponseWriter , r * http.Request ) error {
721+ w .Header ().Set ("Content-Type" , "text/event-stream" )
722+ w .WriteHeader (http .StatusOK )
723+ w .Write ([]byte (responseBody ))
724+ return nil
725+ }
726+
727+ req := httptest .NewRequest ("POST" , "/v1/responses" , nil )
728+ rec := httptest .NewRecorder ()
729+ ginCtx , _ := gin .CreateTestContext (rec )
730+
731+ err := mm .wrapHandler ("test-model" , ginCtx .Writer , req , nextHandler )
732+ assert .NoError (t , err )
733+
734+ metrics := mm .getMetrics ()
735+ assert .Equal (t , 1 , len (metrics ))
736+ assert .Equal (t , "test-model" , metrics [0 ].Model )
737+ assert .Equal (t , 17 , metrics [0 ].InputTokens )
738+ assert .Equal (t , 23 , metrics [0 ].OutputTokens )
739+ })
740+
712741 t .Run ("handles empty streaming response records minimal metrics" , func (t * testing.T ) {
713742 mm := newMetricsMonitor (testLogger , 10 , 0 )
714743
0 commit comments