+
    –°³jHa  ã                  óÄ  € ^ RI Ht ^ RIt^ RIHt ^ RIHt ^ RIHtHtH	t	H
t
HtHtHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHtHtHtHtHt ]'       d	   ^ R
IHtHt ]P8                  ! ]4      tRtRt Rt!Rt"Rt# ! R R]4      t$ ! R R]4      t% ! R R]4      t& ! R R]4      t' ! R R]4      t( ! R R]4      t) ! R R]4      t* ! R R]4      t+R t, ! R! R"]4      t-R# R$ lt.R# )%é    )ÚannotationsN)ÚTYPE_CHECKING)Útabulate)ÚDebugHandlerÚ	fetch_allÚformat_fetch_summaryÚformat_jsonÚNavLinkÚResponseÚRoute)Útcpstore_client)Úbuild_db)Ú	JobConfig)Ú
CollectiveÚDatabaseÚGroupÚ
MembershipÚNCCLCall)ÚFrontendServerÚHTTPRequestHandlerz—
{% extends "base.html" %}
{% block header %}
  <h1>{% block title %}Index{% endblock %}</h1>
{% endblock %}
{% block content %}
Hi
{% endblock %}
    aQ  
{% extends "base.html" %}
{% block header %}
    <h1>{% block title %}py-spy Stack Traces{% endblock %}</h1>
{% endblock %}
{% block content %}
    <form action="" method="get">
        <input type="checkbox" id="native" name="native" value="1"/>
        <label for="native">Native</label>
        <input type="checkbox" id="subprocesses" name="subprocesses" value="1"/>
        <label for="subprocesses">Subprocesses</label>
        <input type="submit" value="Submit">
    </form>

    {% for i, (addr, resp) in enumerate(zip(addrs, resps)) %}
        <h2>Rank {{ i }}: {{ addr }}</h2>
        {% if resp.status_code != 200 %}
            <p>Failed to fetch: status={{ resp.status_code }}</p>
            <pre>{{ resp.text }}</pre>
        {% else %}
            <pre>{{ resp.text }}</pre>
        {% endif %}
    {% endfor %}
{% endblock %}
    a«  
{% extends "base.html" %}
{% block header %}
    <h1>{% block title %}{{ title }}{% endblock %}</h1>
{% endblock %}
{% block content %}
    {% if fetch_summary %}<pre>{{ fetch_summary }}</pre>{% endif %}
    <h2>Groups</h2>
    {{ groups | safe }}
    <h2>Memberships</h2>
    {{ memberships | safe }}
    <h2>Collectives</h2>
    {{ collectives | safe }}
    <h2>NCCL Calls</h2>
    {{ ncclcalls | safe }}
{% endblock %}
    aÂ  
{% extends "base.html" %}
{% block header %}
    <h1>{% block title %}torch.profiler{% endblock %}</h1>
{% endblock %}

{% block content %}
    <form action="" method="get">
        <label for="duration">Duration (seconds):</label>
        <input type="number" id="duration" name="duration" value="{{ duration }}" min="1" max="60">
        <input type="submit" value="Submit">
    </form>

    <script>
    function stringToArrayBuffer(str) {
        const encoder = new TextEncoder();
        return encoder.encode(str).buffer;
    }
    async function openPerfetto(data) {
        const ui = window.open('https://ui.perfetto.dev/#!/');
        if (!ui) { alert('Popup blocked. Allow popups for this page and click again.'); return; }

        // Perfetto readiness handshake: PING until we receive PONG
        await new Promise((resolve, reject) => {
        const onMsg = (e) => {
            if (e.source === ui && e.data === 'PONG') {
            window.removeEventListener('message', onMsg);
            clearInterval(pinger);
            resolve();
            }
        };
        window.addEventListener('message', onMsg);
        const pinger = setInterval(() => { try { ui.postMessage('PING', '*'); } catch (_e) {} }, 250);
        setTimeout(() => { clearInterval(pinger); window.removeEventListener('message', onMsg); reject(); }, 20000);
        }).catch(() => { alert('Perfetto UI did not respond. Try again.'); return; });

        ui.postMessage({
        perfetto: {
            buffer: stringToArrayBuffer(JSON.stringify(data)),
            title: "torch profiler",
            fileName: "trace.json",
        }
        }, '*');
    }
    </script>

    {% for i, (addr, resp) in enumerate(zip(addrs, resps)) %}
        <h2>Rank {{ i }}: {{ addr }}</h2>
        {% if resp.status_code != 200 %}
            <p>Failed to fetch: status={{ resp.status_code }}</p>
            <pre>{{ resp.text }}</pre>
        {% else %}
            <script>
            function run{{ i }}() {
                var data = {{ resp.text | safe }};
                openPerfetto(data);
            }
            </script>

            <button onclick="run{{ i }}()">View {{ i }}</button>
        {% endif %}
    {% endfor %}
{% endblock %}
    a  
{% extends "base.html" %}
{% block header %}
    <h1>{% block title %}TCPStore Keys{% endblock %}</h1>
{% endblock %}
{% block content %}
    <pre>
    {% for k, v in zip(keys, values) -%}
{{ k }}: {{ v | truncate(100) }}
    {% endfor %}
    </pre>
{% endblock %}
    c                  óF   € ] tR t^³tR R ltR R ltR R ltR R ltR	tR
# )ÚIndexHandlerc               ó   € V ^8„  d   QhRR/# ©é   Úreturnzlist[Route]© )Úformats   "Úh/home/luca/screen-checking/.venv/lib/python3.14/site-packages/torch/distributed/debug/_debug_handlers.pyÚ__annotate__ÚIndexHandler.__annotate__´   s   € ÷ *ñ *˜ñ *ó    c                	ó0   € \        R V P                  4      .# )Ú/©r   Ú_handle©Úselfs   &r   ÚroutesÚIndexHandler.routes´   s   € Ü�c˜4Ÿ<™<Ó(Ð)Ð)r"   c               ó   € V ^8„  d   QhRR/# ©r   r   zlist[NavLink]r   )r   s   "r   r    r!   ·   s   € ÷ &ñ &˜=ñ &r"   c                	ó   € \        R R4      .# )r$   ÚHome©r
   r'   s   &r   Ú	nav_linksÚIndexHandler.nav_links·   s   € Ü˜˜VÓ$Ð%Ð%r"   c               ó   € V ^8„  d   QhRR/# ©r   r   zdict[str, str]r   )r   s   "r   r    r!   º   s   € ÷ .ñ .˜>ñ .r"   c                	ó   € R \         /# ©z
index.html)ÚINDEX_TEMPLATEr'   s   &r   Ú	templatesÚIndexHandler.templatesº   s   € ØœnÐ-Ð-r"   c               ó    € V ^8„  d   QhRRRR/# ©r   Úreqr   r   Úbytesr   )r   s   "r   r    r!   ½   s   € ÷ :ñ :Ð-ð :°%ñ :r"   c                	ó8   € VP                   P                  R 4      # r5   )ÚfrontendÚrender_template)r(   r;   s   &&r   r&   ÚIndexHandler._handle½   s   € Ø�|‰|×+Ñ+¨LÓ9Ð9r"   r   N©	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r)   r0   r7   r&   Ú__static_attributes__r   r"   r   r   r   ³   s   † õ*õ&õ.÷:ñ :r"   r   c                  óR   € ] tR t^ÁtR R ltR R ltR R ltR R ltR	 R
 ltRt	R# )ÚStacksHandlerc               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r    ÚStacksHandler.__annotate__Â   s   € ÷ 0ñ 0˜ñ 0r"   c                	ó0   € \        R V P                  4      .# )ú/stacksr%   r'   s   &r   r)   ÚStacksHandler.routesÂ   s   € Ü�i §¡Ó.Ð/Ð/r"   c               ó   € V ^8„  d   QhRR/# r,   r   )r   s   "r   r    rJ   Å   s   € ÷ ;ñ ;˜=ñ ;r"   c                	ó   € \        R R4      .# )rL   zPython Stack Tracesr/   r'   s   &r   r0   ÚStacksHandler.nav_linksÅ   s   € Ü˜	Ð#8Ó9Ð:Ð:r"   c               ó    € V ^8„  d   QhRRRR/# r:   r   )r   s   "r   r    rJ   È   ó   € ÷ 
ñ 
Ð-ð 
°%ñ 
r"   c                	óp   € \        R V P                  R7      w  r#VP                  P                  RRW#R7      # )Údump_traceback©Útimeoutzraw_resp.htmlÚStacks©ÚtitleÚaddrsÚresps©r   Úfetch_timeoutr>   r?   ©r(   r;   rZ   r[   s   &&  r   r&   ÚStacksHandler._handleÈ   s:   € Ü Ð!1¸4×;MÑ;MÔN‰ˆØ�|‰|×+Ñ+Ø 8°5ð ,ó 
ð 	
r"   c               ó   € V ^8„  d   QhRR/# ©r   r   z
str | Noner   )r   s   "r   r    rJ   Î   s   € ÷  ñ  �jñ  r"   c                	óª  € \        R V P                  R7      w  r. p\        W4      pV'       d#   VP                  V4       VP                  R4       \	        \        W4      4       F[  w  pw  rgVP                  RV RV R24       TP                  VP                  ^È8X  d   VP                  MRVP                   24       K]  	  RP                  V4      # )rT   rU   Ú ú	=== Rank ú: ú ===úError: Ú
©	r   r]   r   ÚappendÚ	enumerateÚzipÚstatus_codeÚtextÚjoin©r(   rZ   r[   ÚpartsÚsummaryÚiÚaddrÚresps   &       r   ÚdumpÚStacksHandler.dumpÎ   s·   € Ü Ð!1¸4×;MÑ;MÔN‰ˆØˆÜ& uÓ4ˆßØ�L‰L˜Ô!Ø�L‰L˜ÔÜ(¬¨UÓ):Ö;‰OˆA‰|�Ø�L‰L˜9 Q C r¨$¨¨tÐ4Ô5Ø�L‰LØ!×-Ñ-°Ô4�—	’	¸GÀD×DTÑDTÐCUÐ:Vöñ  <ð
 �y‰y˜ÓÐr"   c               ó   € V ^8„  d   QhRR/# ©r   r   Ústrr   )r   s   "r   r    rJ   Ü   s   € ÷ ñ ˜sñ r"   c                	ó   € R # )Ústacksr   r'   s   &r   Údump_filenameÚStacksHandler.dump_filenameÜ   s   € Ùr"   r   N©
rB   rC   rD   rE   r)   r0   r&   rv   r}   rF   r   r"   r   rH   rH   Á   s    † õ0õ;õ
õ ÷ñ r"   rH   c                  ó^   € ] tR t^àtR R ltR R ltR R ltR R ltR	 R
 ltR R lt	Rt
R# )ÚPySpyHandlerc               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r    ÚPySpyHandler.__annotate__á   s   € ÷ 4ñ 4˜ñ 4r"   c                	ó0   € \        R V P                  4      .# )ú/pyspy_dumpr%   r'   s   &r   r)   ÚPySpyHandler.routesá   s   € Ü�m T§\¡\Ó2Ð3Ð3r"   c               ó   € V ^8„  d   QhRR/# r,   r   )r   s   "r   r    rƒ   ä   s   € ÷ 9ñ 9˜=ñ 9r"   c                	ó   € \        R R4      .# )r…   zpy-spy Stacksr/   r'   s   &r   r0   ÚPySpyHandler.nav_linksä   s   € Ü˜ Ó7Ð8Ð8r"   c               ó   € V ^8„  d   QhRR/# r3   r   )r   s   "r   r    rƒ   ç   s   € ÷ 8ñ 8˜>ñ 8r"   c                	ó   € R \         /# )úpyspy_dump.html)ÚPYSPY_DUMP_TEMPLATEr'   s   &r   r7   ÚPySpyHandler.templatesç   s   € Ø!Ô#6Ð7Ð7r"   c               ó    € V ^8„  d   QhRRRR/# r:   r   )r   s   "r   r    rƒ   ê   s   € ÷ 	
ñ 	
Ð-ð 	
°%ñ 	
r"   c                	ó¼   € VP                  4       pR V9  d   V'       d   RV 2MRp\        RW P                  R7      w  r4VP                  P	                  RVVR7      # )Únonblockingznonblocking=1&únonblocking=1Ú
pyspy_dumprU   rŒ   ©rZ   r[   )Úget_raw_queryr   r]   r>   r?   )r(   r;   ÚqueryrZ   r[   s   &&   r   r&   ÚPySpyHandler._handleê   sa   € Ø×!Ñ!Ó#ˆØ Ô%ß05�n U GÑ,¸?ˆEÜ  ¨u×>PÑ>PÔQ‰ˆØ�|‰|×+Ñ+ØØØð ,ó 
ð 	
r"   c               ó   € V ^8„  d   QhRR/# ra   r   )r   s   "r   r    rƒ   õ   s   € ÷  ñ  �jñ  r"   c                	ó¬  € \        R RV P                  R7      w  r. p\        W4      pV'       d#   VP                  V4       VP                  R4       \	        \        W4      4       F[  w  pw  rgVP                  RV RV R24       TP                  VP                  ^È8X  d   VP                  MRVP                   24       K]  	  RP                  V4      # )	r“   r’   rU   rc   rd   re   rf   rg   rh   ri   rp   s   &       r   rv   ÚPySpyHandler.dumpõ   s½   € Ü Ø˜/°4×3EÑ3Eô
‰ˆð ˆÜ& uÓ4ˆßØ�L‰L˜Ô!Ø�L‰L˜ÔÜ(¬¨UÓ):Ö;‰OˆA‰|�Ø�L‰L˜9 Q C r¨$¨¨tÐ4Ô5Ø�L‰LØ!×-Ñ-°Ô4�—	’	¸GÀD×DTÑDTÐCUÐ:Vöñ  <ð
 �y‰y˜ÓÐr"   c               ó   € V ^8„  d   QhRR/# ry   r   )r   s   "r   r    rƒ     s   € ÷ ñ ˜sñ r"   c                	ó   € R # )r“   r   r'   s   &r   r}   ÚPySpyHandler.dump_filename  s   € Ùr"   r   N©rB   rC   rD   rE   r)   r0   r7   r&   rv   r}   rF   r   r"   r   r�   r�   à   s%   † õ4õ9õ8õ	
õ ÷ ñ r"   r�   c                  ó¤   € ] tR tRtR R ltR R ltR R lt]R R	 l4       tR
 R lt	R R lt
R R ltR R ltR R ltR R ltR R ltRtR# )ÚFlightRecorderHandleri	  c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r    Ú"FlightRecorderHandler.__annotate__
  s   € ÷ 
ñ 
˜ñ 
r"   c                	ó®   € \        R V P                  4      \        RV P                  4      \        RV P                  4      \        RV P                  4      .# )ú	/fr_traceú/fr_trace_jsonú/fr_trace_ncclú/fr_trace_nccl_json)r   Ú_handle_fr_traceÚ_handle_fr_trace_jsonÚ_handle_fr_trace_ncclÚ_handle_fr_trace_nccl_jsonr'   s   &r   r)   ÚFlightRecorderHandler.routes
  sO   € ä�+˜t×4Ñ4Ó5ÜÐ" D×$>Ñ$>Ó?ÜÐ" D×$>Ñ$>Ó?ÜÐ'¨×)HÑ)HÓIð	
ð 	
r"   c               ó   € V ^8„  d   QhRR/# r,   r   )r   s   "r   r    r¢     s   € ÷ 
ñ 
˜=ñ 
r"   c                	ó^   € \        R R4      \        RR4      \        RR4      \        RR4      .# )r¤   zFlightRecorder CPUr¥   ú(JSON)r¦   úFlightRecorder NCCLr§   r/   r'   s   &r   r0   ÚFlightRecorderHandler.nav_links  s9   € ä�KÐ!5Ó6ÜÐ$ hÓ/ÜÐ$Ð&;Ó<ÜÐ)¨8Ó4ð	
ð 	
r"   c               ó   € V ^8„  d   QhRR/# r3   r   )r   s   "r   r    r¢     ó   € ÷ 4ñ 4˜>ñ 4r"   c                	ó   € R \         /# ©úfr_trace.html©ÚFR_TRACE_TEMPLATEr'   s   &r   r7   ÚFlightRecorderHandler.templates  ó   € ØÔ!2Ð3Ð3r"   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rZ   ú	list[str]r[   úlist[Response]r   r   r   )r   s   "r   r    r¢     s!   € ÷ 0ñ 0˜ð 0¨>ð 0¸hñ 0r"   c                	ó˜  € \        4       pVP                  . R 7      pRVn        RVn        / p\	        V4       FH  w  rVVP
                  ^È8w  d   K  RVRW,          /VP                  4       CpRV9  d   . VR&   WtRV R2&   KJ  	  V'       g   \        R4      h\        \        VP                  4       4      4      R,          p\        WCV4      # ))ÚargsTÚrankÚ	host_nameÚentriesz.jsonzAll workers failed to respondÚversion)r   Ú
parse_argsÚallow_incomplete_ranksÚverboserk   rm   ÚjsonÚRuntimeErrorÚnextÚiterÚvaluesr   )	rZ   r[   Úconfigr¿   ÚdetailsrÀ   ru   rv   rÃ   s	   &&       r   Ú	_build_dbÚFlightRecorderHandler._build_db  sÒ   € ä“ˆØ× Ñ  bÐ Ó)ˆØ&*ˆÔ#ØˆŒàˆÜ# EÖ*‰JˆDØ×Ñ 3Ô&Ùà˜Ø˜U�[ðð —)‘)“+ðˆDð
  Ô$Ø"$��Y‘Ø*.�d˜4˜& Ð&Ó'ñ +÷ ÜÐ>Ó?Ð?ä”t˜GŸN™NÓ,Ó-Ó.¨yÕ9ˆä˜ wÓ/Ð/r"   c               ó(   € V ^8„  d   QhRRRRRRRR/# ©	r   Úserverr   rZ   r¼   r[   r½   r   r<   r   )r   s   "r   r    r¢   8  ó,   € ÷ 
ñ 
Ø$ð
Ø-6ð
Ø?Mð
à	ñ
r"   c                	ó†  € V P                  W#4      pVP                  R R\        W#4      \        VP                  \
        P                  RR7      \        VP                  \        P                  RR7      \        VP                  \        P                  RR7      \        VP                  \        P                  RR7      R7      # )r¶   ÚFlightRecorderÚhtml©ÚheadersÚtablefmt©rY   Úfetch_summaryÚgroupsÚmembershipsÚcollectivesÚ	ncclcalls)rÎ   r?   r   r   rÜ   r   Ú_fieldsrÝ   r   rÞ   r   rß   r   ©r(   rÒ   rZ   r[   Údbs   &&&& r   Ú_render_tablesÚ$FlightRecorderHandler._render_tables8  s™   € ð �^‰^˜EÓ)ˆØ×%Ñ%ØØ"Ü.¨uÓ<Ü˜BŸI™I¬u¯}©}ÀvÔNÜ Ø—‘¬
×(:Ñ(:ÀVôô !Ø—‘¬
×(:Ñ(:ÀVôô ˜rŸ|™|´X×5EÑ5EÐPVÔWð &ó 
ð 	
r"   c               ó    € V ^8„  d   QhRRRR/# r:   r   )r   s   "r   r    r¢   J  s   € ÷ Eñ EÐ$6ð E¸5ñ Er"   c                	ó€   € \        R V P                  R7      w  r#V P                  VP                  V\	        V4      4      # )Úfr_trace_jsonrU   ©r   r]   rã   r>   Úlistr^   s   &&  r   r¨   Ú&FlightRecorderHandler._handle_fr_traceJ  s3   € Ü  ¸$×:LÑ:LÔM‰ˆØ×"Ñ" 3§<¡<°¼¸U»ÓDÐDr"   c               ó    € V ^8„  d   QhRRRR/# r:   r   )r   s   "r   r    r¢   N  s   € ÷ 
ñ 
Ð);ð 
Àñ 
r"   c                	ór   € \        R V P                  R7      w  r#VP                  P                  RRVVR7      # )rç   rU   újson_resp.htmlrÕ   rX   r\   r^   s   &&  r   r©   Ú+FlightRecorderHandler._handle_fr_trace_jsonN  s>   € Ü  ¸$×:LÑ:LÔM‰ˆØ�|‰|×+Ñ+ØØ"ØØð	 ,ó 
ð 	
r"   c               ó    € V ^8„  d   QhRRRR/# r:   r   )r   s   "r   r    r¢   W  s   € ÷ Eñ EÐ);ð EÀñ Er"   c                	ó‚   € \        R RV P                  R7      w  r#V P                  VP                  V\	        V4      4      # )Údump_nccl_trace_jsonúonlyactive=truerU   rè   r^   s   &&  r   rª   Ú+FlightRecorderHandler._handle_fr_trace_ncclW  s;   € Ü Ø"Ð$5¸t×?QÑ?Qô
‰ˆð ×"Ñ" 3§<¡<°¼¸U»ÓDÐDr"   c               ó    € V ^8„  d   QhRRRR/# r:   r   )r   s   "r   r    r¢   ]  s   € ÷ 	
ñ 	
Ð.@ð 	
ÀUñ 	
r"   c                	ót   € \        R RV P                  R7      w  r#VP                  P                  RRVVR7      # )rñ   rò   rU   rí   r°   rX   r\   r^   s   &&  r   r«   Ú0FlightRecorderHandler._handle_fr_trace_nccl_json]  sF   € Ü Ø"Ð$5¸t×?QÑ?Qô
‰ˆð �|‰|×+Ñ+ØØ'ØØð	 ,ó 
ð 	
r"   c               ó   € V ^8„  d   QhRR/# ra   r   )r   s   "r   r    r¢   h  s   € ÷ 9 ñ 9 �jñ 9 r"   c                	ó,  € . p\        R V P                  R7      w  r#\        W#4      pV'       d#   VP                  V4       VP                  R4       V P	                  W#4      pVP                  RR\        VP                  \        P                  RR7      R\        VP                  \        P                  RR7      R\        VP                  \        P                  RR7      R	\        VP                  \        P                  RR7      .	4        \        R
RV P                  R7      w  rgV P	                  Wg4      pVP                  RRR\        VP                  \        P                  RR7      R\        VP                  \        P                  RR7      R\        VP                  \        P                  RR7      R	\        VP                  \        P                  RR7      .
4       RP#                  V4      #   \          d    TP                  R4        L/i ; i)rç   rU   rc   z=== FR Trace ===ú--- Groups ---Úplainr×   ú--- Memberships ---ú--- Collectives ---ú--- NCCL Calls ---rñ   rò   z=== FR Trace NCCL ===z1
=== FR Trace NCCL ===
Failed to fetch NCCL tracerh   )r   r]   r   rj   rÎ   Úextendr   rÜ   r   rà   rÝ   r   rÞ   r   rß   r   Ú	Exceptionro   )	r(   rq   rZ   r[   rr   râ   Ú
nccl_addrsÚ
nccl_respsÚnccl_dbs	   &        r   rv   ÚFlightRecorderHandler.dumph  s¸  € Øˆä  ¸$×:LÑ:LÔM‰ˆÜ& uÓ4ˆßØ�L‰L˜Ô!Ø�L‰L˜ÔØ�^‰^˜EÓ)ˆØ�‰à"Ø Ü˜Ÿ™¬E¯M©MÀGÔLØ%Ü˜Ÿ™´×1CÑ1CÈgÔVØ%Ü˜Ÿ™´×1CÑ1CÈgÔVØ$Ü˜Ÿ™¬x×/?Ñ/?È'ÔRð
ô	
ð 	PÜ%.Ø&Ð(9À4×CUÑCUô&Ñ"ˆJð —n‘n ZÓ<ˆGØ�L‰LàØ+Ø$Ü˜WŸ^™^´U·]±]ÈWÔUØ)ÜØ×+Ñ+Ü *× 2Ñ 2Ø!(ôð
 *ÜØ×+Ñ+Ü *× 2Ñ 2Ø!(ôð
 )ÜØ×)Ñ)Ü (× 0Ñ 0Ø!(ôð%ôð: �y‰y˜ÓÐøô ô 	PØ�L‰LÐNÖOð	Pús   ÄCG4 Ç4HÈHc               ó   € V ^8„  d   QhRR/# ry   r   )r   s   "r   r    r¢   £  ó   € ÷ ñ ˜sñ r"   c                	ó   € R # )Úfr_tracer   r'   s   &r   r}   Ú#FlightRecorderHandler.dump_filename£  ó   € Ùr"   r   N)rB   rC   rD   rE   r)   r0   r7   ÚstaticmethodrÎ   rã   r¨   r©   rª   r«   rv   r}   rF   r   r"   r   r    r    	  sP   † õ
õ
õ4ð ô0ó ð0õ4
õ$Eõ
õEõ	
õ9 ÷vñ r"   r    c                  óF   € ] tR tRtR R ltR R ltR R ltR R	 ltR
tR# )ÚProfilerHandleri§  c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r    ÚProfilerHandler.__annotate__¨  s   € ÷ 1ñ 1˜ñ 1r"   c                	ó0   € \        R V P                  4      .# )ú/profiler%   r'   s   &r   r)   ÚProfilerHandler.routes¨  s   € Ü�j $§,¡,Ó/Ð0Ð0r"   c               ó   € V ^8„  d   QhRR/# r,   r   )r   s   "r   r    r  «  s   € ÷ 7ñ 7˜=ñ 7r"   c                	ó   € \        R R4      .# )r  ztorch profilerr/   r'   s   &r   r0   ÚProfilerHandler.nav_links«  s   € Ü˜
Ð$4Ó5Ð6Ð6r"   c               ó   € V ^8„  d   QhRR/# r3   r   )r   s   "r   r    r  ®  s   € ÷ 2ñ 2˜>ñ 2r"   c                	ó   € R \         /# )úprofile.html)ÚPROFILE_TEMPLATEr'   s   &r   r7   ÚProfilerHandler.templates®  s   € ØÔ 0Ð1Ð1r"   c               ó    € V ^8„  d   QhRRRR/# r:   r   )r   s   "r   r    r  ±  s   € ÷ Vñ VÐ-ð V°%ñ Vr"   c                	ó¦   € VP                  R R\        R7      p\        RRV 2V P                  R7      w  r4VP                  P                  RW4R7      # )Údurationg      ð?)ÚdefaultÚtypeÚtorch_profilez	duration=rU   r  r”   )Úget_query_argÚfloatr   r]   r>   r?   )r(   r;   r  rZ   r[   s   &&   r   r&   ÚProfilerHandler._handle±  sU   € Ø×$Ñ$ Z¸Ä5Ð$ÓIˆÜ Ø˜y¨¨
Ð3¸T×=OÑ=Oô
‰ˆð �|‰|×+Ñ+¨NÀ%Ð+ÓUÐUr"   r   NrA   r   r"   r   r  r  §  s   † õ1õ7õ2÷Vñ Vr"   r  c                  óR   € ] tR tRtR R ltR R ltR R ltR R	 ltR
 R ltRt	R# )ÚWaitCountersHandleri¹  c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r    Ú WaitCountersHandler.__annotate__º  s   € ÷ 7ñ 7˜ñ 7r"   c                	ó0   € \        R V P                  4      .# )ú/wait_countersr%   r'   s   &r   r)   ÚWaitCountersHandler.routesº  s   € ÜÐ&¨¯©Ó5Ð6Ð6r"   c               ó   € V ^8„  d   QhRR/# r,   r   )r   s   "r   r    r&  ½  s   € ÷ <ñ <˜=ñ <r"   c                	ó   € \        R R4      .# )r(  úWait Countersr/   r'   s   &r   r0   ÚWaitCountersHandler.nav_links½  s   € ÜÐ(¨/Ó:Ð;Ð;r"   c               ó    € V ^8„  d   QhRRRR/# r:   r   )r   s   "r   r    r&  À  rR   r"   c                	óp   € \        R V P                  R7      w  r#VP                  P                  RRW#R7      # )Úwait_counter_valuesrU   rí   r,  rX   r\   r^   s   &&  r   r&   ÚWaitCountersHandler._handleÀ  s:   € Ü Ð!6À×@RÑ@RÔS‰ˆØ�|‰|×+Ñ+Ø O¸5ð ,ó 
ð 	
r"   c               ó   € V ^8„  d   QhRR/# ra   r   )r   s   "r   r    r&  Æ  s   € ÷  ñ  �jñ  r"   c                	óÞ  € \        R V P                  R7      w  r. p\        W4      pV'       d#   VP                  V4       VP                  R4       \	        \        W4      4       Fu  w  pw  rgVP                  RV RV R24       VP                  ^È8X  d'   VP                  \        VP                  4      4       KW  VP                  RVP                   24       Kw  	  RP                  V4      # )r0  rU   rc   rd   re   rf   rg   rh   )
r   r]   r   rj   rk   rl   rm   r	   rn   ro   rp   s   &       r   rv   ÚWaitCountersHandler.dumpÆ  sÄ   € Ü Ð!6À×@RÑ@RÔS‰ˆØˆÜ& uÓ4ˆßØ�L‰L˜Ô!Ø�L‰L˜ÔÜ(¬¨UÓ):Ö;‰OˆA‰|�Ø�L‰L˜9 Q C r¨$¨¨tÐ4Ô5Ø×Ñ 3Ô&Ø—‘œ[¨¯©Ó3Ö4à—‘˜w t×'7Ñ'7Ð&8Ð9Ö:ñ  <ð �y‰y˜ÓÐr"   c               ó   € V ^8„  d   QhRR/# ry   r   )r   s   "r   r    r&  Õ  s   € ÷ ñ ˜sñ r"   c                	ó   € R # )Úwait_countersr   r'   s   &r   r}   Ú!WaitCountersHandler.dump_filenameÕ  s   € Ùr"   r   Nr   r   r"   r   r$  r$  ¹  s    † õ7õ<õ
õ ÷ñ r"   r$  c                  ó^   € ] tR tRtR R ltR R ltR R ltR R	 ltR
 R ltR R lt	Rt
R# )ÚTCPStoreHandleriÙ  c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r    ÚTCPStoreHandler.__annotate__Ú  s   € ÷ 2ñ 2˜ñ 2r"   c                	ó0   € \        R V P                  4      .# )ú	/tcpstorer%   r'   s   &r   r)   ÚTCPStoreHandler.routesÚ  s   € Ü�k 4§<¡<Ó0Ð1Ð1r"   c               ó   € V ^8„  d   QhRR/# r,   r   )r   s   "r   r    r<  Ý  s   € ÷ 2ñ 2˜=ñ 2r"   c                	ó   € \        R R4      .# )r>  ÚTCPStorer/   r'   s   &r   r0   ÚTCPStoreHandler.nav_linksÝ  s   € Ü˜ ZÓ0Ð1Ð1r"   c               ó   € V ^8„  d   QhRR/# r3   r   )r   s   "r   r    r<  à  r³   r"   c                	ó   € R \         /# )útcpstore.html)ÚTCPSTORE_TEMPLATEr'   s   &r   r7   ÚTCPStoreHandler.templatesà  rº   r"   c               ó    € V ^8„  d   QhRRRR/# r:   r   )r   s   "r   r    r<  ã  s   € ÷ Wñ WÐ-ð W°%ñ Wr"   c                	óð   € \        R R7      pVP                  4       pVP                  4        VP                  V4       Uu. uF  p\	        V4      NK  	  ppVP
                  P                  RW5R7      # u upi )rc   ©ÚprefixrF  )ÚkeysrË   )r   Ú	list_keysÚsortÚ	multi_getÚreprr>   r?   )r(   r;   ÚstorerM  ÚvrË   s   &&    r   r&   ÚTCPStoreHandler._handleã  sc   € Ü rÔ*ˆØ�‰Ó ˆØ�	‰	ŒØ#(§?¡?°4Ô#8Ó9Ñ#8˜a”$�q–'Ñ#8ˆÐ9Ø�|‰|×+Ñ+¨OÀ$Ð+ÓVÐVùò :s   Á A3c               ó   € V ^8„  d   QhRR/# ra   r   )r   s   "r   r    r<  ê  s   € ÷  ñ  �jñ  r"   c                	ó*  € \        R R7      pVP                  4       pVP                  4        VP                  V4       Uu. uF  p\	        V4      NK  	  pp\        W$4       UUu. uF  w  rSV RV 2NK  	  pppRP                  V4      # u upi u uppi )rc   rK  re   rh   )r   rN  rO  rP  rQ  rl   ro   )r(   rR  rM  rS  rË   Úkrq   s   &      r   rv   ÚTCPStoreHandler.dumpê  s‚   € Ü rÔ*ˆØ�‰Ó ˆØ�	‰	ŒØ#(§?¡?°4Ô#8Ó9Ñ#8˜a”$�q–'Ñ#8ˆÐ9Ü),¨TÔ):Ô;Ñ):¡ �A�3�b˜˜“Ñ):ˆÑ;Ø�y‰y˜ÓÐùò :ùÛ;s   Á B
Á$Bc               ó   € V ^8„  d   QhRR/# ry   r   )r   s   "r   r    r<  ò  r  r"   c                	ó   € R # )Útcpstorer   r'   s   &r   r}   ÚTCPStoreHandler.dump_filenameò  r	  r"   r   Nrž   r   r"   r   r:  r:  Ù  s&   † õ2õ2õ4õWõ ÷ñ r"   r:  c                  óz   € ] tR tRtRtR R ltR R ltR R ltR	 R
 ltR R lt	R R lt
R R ltR R ltRtR# )ÚTorchCommsFlightRecorderHandleriö  z1Handler for TorchComms FlightRecorder trace data.c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r    Ú,TorchCommsFlightRecorderHandler.__annotate__ù  s   € ÷ 
ñ 
˜ñ 
r"   c                	óZ   € \        R V P                  4      \        RV P                  4      .# )ú/torchcomms_fr_traceú/torchcomms_fr_trace_json)r   Ú_handle_torchcomms_fr_traceÚ _handle_torchcomms_fr_trace_jsonr'   s   &r   r)   Ú&TorchCommsFlightRecorderHandler.routesù  s.   € äÐ(¨$×*JÑ*JÓKÜÐ-¨t×/TÑ/TÓUð
ð 	
r"   c               ó   € V ^8„  d   QhRR/# r,   r   )r   s   "r   r    r`  ÿ  s   € ÷ 
ñ 
˜=ñ 
r"   c                	ó2   € \        R R4      \        RR4      .# )rb  zTorchComms FRrc  r¯   r/   r'   s   &r   r0   Ú)TorchCommsFlightRecorderHandler.nav_linksÿ  s"   € äÐ*¨OÓ<ÜÐ/°Ó:ð
ð 	
r"   c               ó   € V ^8„  d   QhRR/# r3   r   )r   s   "r   r    r`    r³   r"   c                	ó   € R \         /# rµ   r·   r'   s   &r   r7   Ú)TorchCommsFlightRecorderHandler.templates  rº   r"   c               ó    € V ^8„  d   QhRRRR/# r:   r   )r   s   "r   r    r`    s   € ÷ Eñ EÐ/Að EÀeñ Er"   c                	ó‚   € \        R RV P                  R7      w  r#V P                  VP                  V\	        V4      4      # )Útorchcomms_fr_trace_jsonrò   rU   rè   r^   s   &&  r   rd  Ú;TorchCommsFlightRecorderHandler._handle_torchcomms_fr_trace  s;   € Ü Ø&Ð(9À4×CUÑCUô
‰ˆð ×"Ñ" 3§<¡<°¼¸U»ÓDÐDr"   c               ó    € V ^8„  d   QhRRRR/# r:   r   )r   s   "r   r    r`    s   € ÷ 	
ñ 	
Ð4Fð 	
È5ñ 	
r"   c                	ót   € \        R RV P                  R7      w  r#VP                  P                  RRVVR7      # )ro  rò   rU   rí   úTorchComms FlightRecorderrX   r\   r^   s   &&  r   re  Ú@TorchCommsFlightRecorderHandler._handle_torchcomms_fr_trace_json  sF   € Ü Ø&Ð(9À4×CUÑCUô
‰ˆð �|‰|×+Ñ+ØØ-ØØð	 ,ó 
ð 	
r"   c               ó(   € V ^8„  d   QhRRRRRRRR/# rÑ   r   )r   s   "r   r    r`    rÓ   r"   c                	óŽ  € \         P                  W#4      pVP                  R R\        W#4      \	        VP
                  \        P                  RR7      \	        VP                  \        P                  RR7      \	        VP                  \        P                  RR7      \	        VP                  \        P                  RR7      R7      # )r¶   rs  rÖ   r×   rÚ   )r    rÎ   r?   r   r   rÜ   r   rà   rÝ   r   rÞ   r   rß   r   rá   s   &&&& r   rã   Ú.TorchCommsFlightRecorderHandler._render_tables  s›   € ô #×,Ñ,¨UÓ:ˆØ×%Ñ%ØØ-Ü.¨uÓ<Ü˜BŸI™I¬u¯}©}ÀvÔNÜ Ø—‘¬
×(:Ñ(:ÀVôô !Ø—‘¬
×(:Ñ(:ÀVôô ˜rŸ|™|´X×5EÑ5EÐPVÔWð &ó 
ð 	
r"   c               ó   € V ^8„  d   QhRR/# ra   r   )r   s   "r   r    r`  +  s   € ÷  ñ  �jñ  r"   c                	óB  € \        R V P                  R7      w  r. p\        W4      pV'       d#   VP                  V4       VP                  R4       \        P                  W4      pVP                  RR\        VP                  \        P                  RR7      R\        VP                  \        P                  RR7      R\        VP                  \        P                  RR7      R	\        VP                  \         P                  RR7      .	4       R
P#                  V4      # )ro  rU   rc   z=== TorchComms FR Trace ===rù   rú   r×   rû   rü   rý   rh   )r   r]   r   rj   r    rÎ   rþ   r   rÜ   r   rà   rÝ   r   rÞ   r   rß   r   ro   )r(   rZ   r[   rq   rr   râ   s   &     r   rv   Ú$TorchCommsFlightRecorderHandler.dump+  sØ   € Ü Ð!;ÀT×EWÑEWÔX‰ˆØˆÜ& uÓ4ˆßØ�L‰L˜Ô!Ø�L‰L˜ÔÜ"×,Ñ,¨UÓ:ˆØ�‰à-Ø Ü˜Ÿ™¬E¯M©MÀGÔLØ%Ü˜Ÿ™´×1CÑ1CÈgÔVØ%Ü˜Ÿ™´×1CÑ1CÈgÔVØ$Ü˜Ÿ™¬x×/?Ñ/?È'ÔRð
ô	
ð �y‰y˜ÓÐr"   c               ó   € V ^8„  d   QhRR/# ry   r   )r   s   "r   r    r`  B  s   € ÷ %ñ %˜sñ %r"   c                	ó   € R # )Útorchcomms_fr_tracer   r'   s   &r   r}   Ú-TorchCommsFlightRecorderHandler.dump_filenameB  s   € Ù$r"   r   N)rB   rC   rD   rE   Ú__doc__r)   r0   r7   rd  re  rã   rv   r}   rF   r   r"   r   r^  r^  ö  s3   † Ù;õ
õ
õ4õEõ	
õ
õ$ ÷.%ñ %r"   r^  aV  
{% extends "base.html" %}
{% block header %}
    <h1>{% block title %}TorchComms Health Check{% endblock %}</h1>
{% endblock %}
{% block content %}
    <h2>Health Status</h2>
    {% if fetch_summary %}<pre>{{ fetch_summary }}</pre>{% endif %}
    {% for i, (addr, resp) in enumerate(zip(addrs, resps)) %}
        <h3>Rank {{ i }}: {{ addr }}</h3>
        {% if resp.status_code != 200 %}
            <p>Failed to fetch: status={{ resp.status_code }}</p>
            <pre>{{ resp.text }}</pre>
        {% else %}
            <pre>{{ resp.text }}</pre>
        {% endif %}
    {% endfor %}
    {% if dump_triggered %}
        <h2>Flight Recorder Dump (triggered by unhealthy rank)</h2>
        {% for i, (addr, resp) in enumerate(zip(dump_addrs, dump_resps)) %}
            <h3>Rank {{ i }}: {{ addr }}</h3>
            {% if resp.status_code != 200 %}
                <p>Failed to dump: status={{ resp.status_code }}</p>
                <pre>{{ resp.text }}</pre>
            {% else %}
                <pre>{{ resp.text }}</pre>
            {% endif %}
        {% endfor %}
    {% endif %}
{% endblock %}
    c                  óx   € ] tR tRtRtR R ltR R ltR R lt]R	 R
 l4       t	R R lt
R R ltR R ltRtR# )ÚTorchCommsHealthCheckHandlerig  zBHealth check that detects watchdog timeouts and triggers FR dumps.c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r    Ú)TorchCommsHealthCheckHandler.__annotate__j  s   € ÷ Añ A˜ñ Ar"   c                	ó0   € \        R V P                  4      .# )ú/torchcomms_health_checkr%   r'   s   &r   r)   Ú#TorchCommsHealthCheckHandler.routesj  s   € ÜÐ0°$·,±,Ó?Ð@Ð@r"   c               ó   € V ^8„  d   QhRR/# r,   r   )r   s   "r   r    rƒ  m  s   € ÷ Jñ J˜=ñ Jr"   c                	ó   € \        R R4      .# )r…  zTorchComms Healthr/   r'   s   &r   r0   Ú&TorchCommsHealthCheckHandler.nav_linksm  s   € ÜÐ2Ð4GÓHÐIÐIr"   c               ó   € V ^8„  d   QhRR/# r3   r   )r   s   "r   r    rƒ  p  s   € ÷ Gñ G˜>ñ Gr"   c                	ó   € R \         /# )útorchcomms_health_check.html)ÚHEALTH_CHECK_TEMPLATEr'   s   &r   r7   Ú&TorchCommsHealthCheckHandler.templatesp  s   € Ø.Ô0EÐFÐFr"   c               ó    € V ^8„  d   QhRRRR/# )r   r[   r½   r   Úboolr   )r   s   "r   r    rƒ  t  s   € ÷ ñ ˜nð °ñ r"   c                óä   € V  FB  pVP                   ^È8X  g   K   VP                  4       pTP                  RR4      '       d   KA   R# 	  R#   \         d    \        P	                  R4        Kk  i ; i)a—  Return True if any rank explicitly reports itself as unhealthy.

Only responses with a 200 status code are inspected.  Non-200
responses (connection errors, timeouts, etc.) are intentionally
ignored so that a single unreachable rank does not trigger an
expensive Flight Recorder dump across the entire job.  A dump is
only triggered when a rank is reachable *and* positively reports
``{"healthy": false}``.
zGfailed to parse health check response as JSON; treating rank as healthyÚhealthyTF)rm   rÇ   rÿ   ÚloggerÚ	exceptionÚget)r[   ru   Údatas   &  r   Ú_any_unhealthyÚ+TorchCommsHealthCheckHandler._any_unhealthys  sp   € ó ˆDØ×Ñ 3Ö&ðØŸ9™9›;�Dð —x‘x 	¨4×0Ô0Úñ ñ øô !ô Ü×$Ñ$ð3ôò ðús   šAÁ A/Á.A/c               ó    € V ^8„  d   QhRRRR/# r:   r   )r   s   "r   r    rƒ  Œ  s   € ÷ 
ñ 
Ð-ð 
°%ñ 
r"   c           
     	óú   € \        R V P                  R7      w  r#Rp. p. pV P                  V4      '       d   \        RV P                  R7      w  rVRpVP                  P	                  R\        W#4      VVVVVR7      # )Útorchcomms_health_checkrU   FÚtorchcomms_fr_dump_fileTrŒ  )rÛ   rZ   r[   Údump_triggeredÚ
dump_addrsÚ
dump_resps)r   r]   r—  r>   r?   r   )r(   r;   rZ   r[   r�  rž  rŸ  s   &&     r   r&   Ú$TorchCommsHealthCheckHandler._handleŒ  sŒ   € Ü Ð!:ÀD×DVÑDVÔW‰ˆØˆØ "ˆ
Ø%'ˆ
Ø×Ñ˜u×%Ò%Ü%.Ø)°4×3EÑ3Eô&Ñ"ˆJð "ˆNØ�|‰|×+Ñ+Ø*Ü.¨uÓ<ØØØ)Ø!Ø!ð ,ó 
ð 	
r"   c               ó   € V ^8„  d   QhRR/# ra   r   )r   s   "r   r    rƒ     s   € ÷  ñ  �jñ  r"   c                	ó4  € \        R V P                  R7      w  r. p\        W4      pV'       d#   VP                  V4       VP                  R4       \	        \        W4      4       F[  w  pw  rgVP                  RV RV R24       TP                  VP                  ^È8X  d   VP                  MRVP                   24       K]  	  V P                  V4      '       d¯   VP                  R4       VP                  R4       \        RV P                  R7      w  r‰\	        \        W‰4      4       F[  w  pw  rgVP                  R	V RV R
24       TP                  VP                  ^È8X  d   VP                  MRVP                   24       K]  	  RP                  V4      # )r›  rU   rc   rd   re   rf   rg   z3=== Unhealthy rank detected, triggering FR dump ===rœ  z	--- Rank z ---rh   )
r   r]   r   rj   rk   rl   rm   rn   r—  ro   )
r(   rZ   r[   rq   rr   rs   rt   ru   rž  rŸ  s
   &         r   rv   Ú!TorchCommsHealthCheckHandler.dump   sg  € Ü Ð!:ÀD×DVÑDVÔW‰ˆØˆÜ& uÓ4ˆßØ�L‰L˜Ô!Ø�L‰L˜ÔÜ(¬¨UÓ):Ö;‰OˆA‰|�Ø�L‰L˜9 Q C r¨$¨¨tÐ4Ô5Ø�L‰LØ!×-Ñ-°Ô4�—	’	¸GÀD×DTÑDTÐCUÐ:Vöñ  <ð
 ×Ñ˜u×%Ò%Ø�L‰L˜ÔØ�L‰LÐNÔOÜ%.Ø)°4×3EÑ3Eô&Ñ"ˆJô $-¬S°Ó-HÖ#I‘�‘<�DØ—‘˜y¨¨¨2¨d¨V°4Ð8Ô9Ø—‘à×'Ñ'¨3Ô.ð —I’Ià" 4×#3Ñ#3Ð"4Ð5öñ $Jð �y‰y˜ÓÐr"   c               ó   € V ^8„  d   QhRR/# ry   r   )r   s   "r   r    rƒ  »  s   € ÷ )ñ )˜sñ )r"   c                	ó   € R # )r›  r   r'   s   &r   r}   Ú*TorchCommsHealthCheckHandler.dump_filename»  s   € Ù(r"   r   N)rB   rC   rD   rE   r  r)   r0   r7   r
  r—  r&   rv   r}   rF   r   r"   r   r�  r�  g  s?   † ÙLõAõJõGð ôó ðõ0
õ( ÷6)ñ )r"   r�  c               ó   € V ^8„  d   QhRR/# )r   r   zlist[DebugHandler]r   )r   s   "r   r    r    ¿  s   € ÷ ñ Ð,ñ r"   c            
     ó¨   € \        4       \        4       \        4       \        4       \	        4       \        4       \        4       \        4       \        4       .	# )N)	r   rH   r�   r    r^  r�  r  r$  r:  r   r"   r   Údefault_handlersr©  ¿  s?   € ä‹Ü‹Ü‹ÜÓÜ'Ó)Ü$Ó&ÜÓÜÓÜÓð
ð 
r"   )/Ú
__future__r   ÚloggingÚtypingr   r   Ú!torch.distributed.debug._frontendr   r   r   r	   r
   r   r   Útorch.distributed.debug._storer   Ú4torch.distributed.flight_recorder.components.builderr   Ú;torch.distributed.flight_recorder.components.config_managerr   Ú2torch.distributed.flight_recorder.components.typesr   r   r   r   r   r   r   Ú	getLoggerrB   r“  r6   r�   r¸   r  rG  r   rH   r�   r    r  r$  r:  r^  r�  r�  r©  r   r"   r   Ú<module>r³     sþ   ðÝ "ã Ý  å ÷÷ ñ õ ;Ý IÝ Q÷õ ÷ ßTð 
×	Ò	˜8Ó	$€ð€ðÐ ð4Ð ð$?Ð ðBÐ ô(:�<ô :ô�Lô ô>&�<ô &ôR[˜Lô [ô|V�lô Vô$˜,ô ô@�lô ô:M% lô M%ð`Ð ôBU) <ô U)÷pr"   