@@ -638,6 +638,13 @@ def readyz(request: Request):
638638 return JSONResponse (json , status_code = status )
639639
640640
641+ def _sanitize_for_json (value ):
642+ """Convert infinite values to None for JSON serialization."""
643+ if isinstance (value , (int , float )) and math .isinf (value ):
644+ return None
645+ return value
646+
647+
641648async def resourcez (request : Request ):
642649 _ensure_limiter ()
643650 assert limiter is not None
@@ -664,16 +671,16 @@ async def resourcez(request: Request):
664671 "has_disconnected" : len ([k for k in contexts if kernel_context .PageStatus .DISCONNECTED in k .page_status .values ()]),
665672 "has_closed" : len ([k for k in contexts if kernel_context .PageStatus .CLOSED in k .page_status .values ()]),
666673 "limiter" : {
667- "total_tokens" : limiter .total_tokens ,
668- "borrowed_tokens" : limiter .borrowed_tokens ,
669- "available_tokens" : limiter .available_tokens ,
674+ "total_tokens" : _sanitize_for_json ( limiter .total_tokens ) ,
675+ "borrowed_tokens" : _sanitize_for_json ( limiter .borrowed_tokens ) ,
676+ "available_tokens" : _sanitize_for_json ( limiter .available_tokens ) ,
670677 },
671678 }
672679 default_limiter = anyio .to_thread .current_default_thread_limiter ()
673680 data ["anyio.to_thread.limiter" ] = {
674- "total_tokens" : default_limiter .total_tokens ,
675- "borrowed_tokens" : default_limiter .borrowed_tokens ,
676- "available_tokens" : default_limiter .available_tokens ,
681+ "total_tokens" : _sanitize_for_json ( default_limiter .total_tokens ) ,
682+ "borrowed_tokens" : _sanitize_for_json ( default_limiter .borrowed_tokens ) ,
683+ "available_tokens" : _sanitize_for_json ( default_limiter .available_tokens ) ,
677684 }
678685 if verbose :
679686 try :
0 commit comments