Created
September 1, 2026 23:41
-
-
Save tlkahn/f4a033bbd5879228686c5c487a7380ac to your computer and use it in GitHub Desktop.
plantuml from stream-demo.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="DESCRIPTION" height="627px" preserveAspectRatio="none" style="width:1219px;height:627px;background:#FFFFFF;" version="1.1" viewBox="0 0 1219 627" width="1219px" zoomAndPan="magnify"><defs/><g><g class="title" data-source-line="1"><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="700" lengthAdjust="spacing" textLength="543.9902" x="334.2478" y="23.5352">The stream: relations between the two threads, the mailbox and the stream</text></g><!--entity CLIENT--><g class="entity" data-qualified-name="CLIENT" data-source-line="3" id="ent0001"><ellipse cx="808.5652" cy="51.4883" fill="#F1F1F1" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M808.5652,59.4883 L808.5652,86.4883 M795.5652,67.4883 L821.5652,67.4883 M808.5652,86.4883 L795.5652,101.4883 M808.5652,86.4883 L821.5652,101.4883" fill="none" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="77.1504" x="769.99" y="116.5234">HTTP client</text></g><!--entity NET--><g class="entity" data-qualified-name="NET" data-source-line="5" id="ent0002"><rect fill="#F1F1F1" height="46.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="128.9014" x="744.11" y="196.4783"/><rect fill="#F1F1F1" height="10" style="stroke:#181818;stroke-width:0.5;" width="15" x="853.0114" y="201.4783"/><rect fill="#F1F1F1" height="2" style="stroke:#181818;stroke-width:0.5;" width="4" x="851.0114" y="203.4783"/><rect fill="#F1F1F1" height="2" style="stroke:#181818;stroke-width:0.5;" width="4" x="851.0114" y="207.4783"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="88.9014" x="759.11" y="230.0134">Network side</text></g><g class="entity" data-qualified-name="GMN3" data-source-line="7" id="ent0004"><path d="M907.6,199.4083 L907.6,215.7183 L873.08,219.7183 L907.6,223.7183 L907.6,240.0294 A0,0 0 0 0 907.6,240.0294 L1171.5248,240.0294 A0,0 0 0 0 1171.5248,240.0294 L1171.5248,209.4083 L1161.5248,199.4083 L907.6,199.4083 A0,0 0 0 0 907.6,199.4083" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M1161.5248,199.4083 L1161.5248,209.4083 L1171.5248,209.4083 L1161.5248,199.4083" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="163.3125" x="913.6" y="216.9766">client thread in the demo;</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="242.9248" x="913.6" y="232.2872">single libuv event-loop thread in mlxd</text></g><!--entity MB--><g class="entity" data-qualified-name="MB" data-source-line="11" id="ent0006"><rect fill="#F1F1F1" height="46.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="151.2686" x="182.93" y="319.9683"/><rect fill="#F1F1F1" height="10" style="stroke:#181818;stroke-width:0.5;" width="15" x="314.1986" y="324.9683"/><rect fill="#F1F1F1" height="2" style="stroke:#181818;stroke-width:0.5;" width="4" x="312.1986" y="326.9683"/><rect fill="#F1F1F1" height="2" style="stroke:#181818;stroke-width:0.5;" width="4" x="312.1986" y="330.9683"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="111.2686" x="197.93" y="353.5034">Mailbox (Queue)</text></g><g class="entity" data-qualified-name="GMN7" data-source-line="13" id="ent0008"><path d="M368.73,322.8983 L368.73,339.2083 L334.3,343.2083 L368.73,347.2083 L368.73,363.5194 A0,0 0 0 0 368.73,363.5194 L642.3985,363.5194 A0,0 0 0 0 642.3985,363.5194 L642.3985,332.8983 L632.3985,322.8983 L368.73,322.8983 A0,0 0 0 0 368.73,322.8983" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M632.3985,322.8983 L632.3985,332.8983 L642.3985,332.8983 L632.3985,322.8983" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="252.6685" x="374.73" y="340.4666">commands go DOWN: generate, embed,</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="168.7334" x="374.73" y="355.7772">load, unload, reclaim, stop</text></g><!--entity ENG--><g class="entity" data-qualified-name="ENG" data-source-line="17" id="ent0010"><rect fill="#F1F1F1" height="46.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="133.9668" x="191.58" y="443.4483"/><rect fill="#F1F1F1" height="10" style="stroke:#181818;stroke-width:0.5;" width="15" x="305.5468" y="448.4483"/><rect fill="#F1F1F1" height="2" style="stroke:#181818;stroke-width:0.5;" width="4" x="303.5468" y="450.4483"/><rect fill="#F1F1F1" height="2" style="stroke:#181818;stroke-width:0.5;" width="4" x="303.5468" y="454.4483"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="93.9668" x="206.58" y="476.9834">Engine thread</text></g><g class="entity" data-qualified-name="GMN11" data-source-line="19" id="ent0012"><path d="M360.94,446.3883 L360.94,462.6983 L325.8,466.6983 L360.94,470.6983 L360.94,487.0094 A0,0 0 0 0 360.94,487.0094 L612.1822,487.0094 A0,0 0 0 0 612.1822,487.0094 L612.1822,456.3883 L602.1822,446.3883 L360.94,446.3883 A0,0 0 0 0 360.94,446.3883" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M602.1822,446.3883 L602.1822,456.3883 L612.1822,456.3883 L602.1822,446.3883" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="230.2422" x="366.94" y="463.9566">sole GPU caller, including every free;</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="213.6431" x="366.94" y="479.2672">sleeps in the demo (forward pass)</text></g><!--entity GPU--><g class="entity" data-qualified-name="GPU" data-source-line="23" id="ent0014"><rect fill="#F1F1F1" height="46.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="122.0654" x="47.53" y="566.9383"/><rect fill="#F1F1F1" height="10" style="stroke:#181818;stroke-width:0.5;" width="15" x="149.5954" y="571.9383"/><rect fill="#F1F1F1" height="2" style="stroke:#181818;stroke-width:0.5;" width="4" x="147.5954" y="573.9383"/><rect fill="#F1F1F1" height="2" style="stroke:#181818;stroke-width:0.5;" width="4" x="147.5954" y="577.9383"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="82.0654" x="62.53" y="600.4734">GPU (mlx-c)</text></g><!--entity STR--><g class="entity" data-qualified-name="STR" data-source-line="24" id="ent0015"><rect fill="#F1F1F1" height="46.4883" rx="2.5" ry="2.5" style="stroke:#181818;stroke-width:0.5;" width="87.1064" x="652.01" y="566.9383"/><rect fill="#F1F1F1" height="10" style="stroke:#181818;stroke-width:0.5;" width="15" x="719.1164" y="571.9383"/><rect fill="#F1F1F1" height="2" style="stroke:#181818;stroke-width:0.5;" width="4" x="717.1164" y="573.9383"/><rect fill="#F1F1F1" height="2" style="stroke:#181818;stroke-width:0.5;" width="4" x="717.1164" y="577.9383"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="47.1064" x="667.01" y="600.4734">Stream</text></g><g class="entity" data-qualified-name="GMN16" data-source-line="26" id="ent0017"><path d="M773.83,569.8783 L773.83,586.1883 L739.31,590.1883 L773.83,594.1883 L773.83,610.4994 A0,0 0 0 0 773.83,610.4994 L1017.29,610.4994 A0,0 0 0 0 1017.29,610.4994 L1017.29,579.8783 L1007.29,569.8783 L773.83,569.8783 A0,0 0 0 0 773.83,569.8783" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M1007.29,569.8783 L1007.29,579.8783 L1017.29,579.8783 L1007.29,569.8783" fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="216.6646" x="779.83" y="587.4466">per-request queue; chunks go UP:</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="222.46" x="779.83" y="602.7572">token(id), done(reason); cancel flag</text></g><!--link CLIENT to NET--><g class="link" data-entity-1="ent0001" data-entity-2="ent0002" data-link-type="dependency" data-source-line="30" id="lnk19"><path d="M808.56,119.8883 C808.56,144.3483 808.56,170.4183 808.56,191.1283" fill="none" id="CLIENT-to-NET" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="808.56,196.1283,812.56,187.1283,808.56,191.1283,804.56,187.1283,808.56,196.1283" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="258.5654" x="809.56" y="163.0466">generate(prompt) { on_token / on_done }</text></g><!--link NET to MB--><g class="link" data-entity-1="ent0002" data-entity-2="ent0006" data-link-type="dependency" data-source-line="31" id="lnk20"><path d="M743.76,234.3483 C655.1,253.0883 491.07,288.1383 351.56,319.9683 C346.06,321.2183 345.2482,321.3878 339.5282,322.7278" fill="none" id="NET-to-MB" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="334.66,323.8683,344.3351,325.71,339.5282,322.7278,342.5104,317.9209,334.66,323.8683" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="88.4419" x="552.95" y="286.5366">queue << req</text></g><!--link MB to ENG--><g class="link" data-entity-1="ent0006" data-entity-2="ent0010" data-link-type="dependency" data-source-line="32" id="lnk21"><path d="M258.56,366.7783 C258.56,388.5983 258.56,416.4683 258.56,438.2483" fill="none" id="MB-to-ENG" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="258.56,443.2483,262.56,434.2483,258.56,438.2483,254.56,434.2483,258.56,443.2483" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="140.6958" x="259.56" y="410.0166">pop (single consumer)</text></g><!--link ENG to GPU--><g class="link" data-entity-1="ent0010" data-entity-2="ent0014" data-link-type="dependency" data-source-line="33" id="lnk22"><path d="M191.32,473.1983 C128.62,479.8883 41.67,493.6883 20.56,519.9383 C6,538.0383 19.7723,552.0247 43.3323,564.2547" fill="none" id="ENG-to-GPU" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="47.77,566.5583,41.625,558.8616,43.3323,564.2547,37.9392,565.9619,47.77,566.5583" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="127.1309" x="21.56" y="533.5066">forward pass (sleep)</text></g><!--link GPU to ENG--><g class="link" data-entity-1="ent0014" data-entity-2="ent0010" data-link-type="dependency" data-source-line="34" id="lnk23"><path d="M134.13,566.6483 C149.91,552.9083 170.68,535.1383 189.56,519.9383 C201.97,509.9583 211.9308,502.2793 224.0308,493.1993" fill="none" id="GPU-to-ENG" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="228.03,490.1983,218.4306,492.4008,224.0308,493.1993,223.2323,498.7996,228.03,490.1983" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="58.4365" x="190.56" y="533.5066">token ids</text></g><!--link ENG to STR--><g class="link" data-entity-1="ent0010" data-entity-2="ent0015" data-link-type="dependency" data-source-line="35" id="lnk24"><path d="M262.68,490.3583 C266.76,505.9883 274.65,525.8683 289.56,536.9383 C346.11,578.9483 553.5607,587.1428 646.5307,588.7328" fill="none" id="ENG-to-STR" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="651.53,588.8183,642.5997,584.665,646.5307,588.7328,642.4629,592.6638,651.53,588.8183" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="140.3657" x="290.56" y="533.5066">push chunk + wakeup</text></g><!--link ENG to STR--><g class="link" data-entity-1="ent0010" data-entity-2="ent0015" data-link-type="dependency" data-source-line="38" id="lnk27"><path d="M325.81,486.3883 C366.88,498.0283 415.28,512.2083 435.56,519.9383 C452.1,526.2383 454.85,531.1183 471.56,536.9383 C532.65,558.2183 601.2112,572.591 646.9312,580.931" fill="none" id="ENG-to-STR-1" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="651.85,581.8283,643.7139,576.2781,646.9312,580.931,642.2783,584.1483,651.85,581.8283" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="196.5044" x="472.56" y="533.5066">finish(reason) even after cancel</text></g><!--link STR to NET--><g class="link" data-entity-1="ent0015" data-entity-2="ent0002" data-link-type="dependency" data-source-line="36" id="lnk25"><path d="M734.72,566.5983 C780.34,537.7583 853.32,483.1183 883.56,413.4483 C909.94,352.6883 862.551,283.231 832.231,247.041" fill="none" id="STR-to-NET" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="829.02,243.2083,831.7337,252.6759,832.231,247.041,837.866,247.5383,829.02,243.2083" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="116.3525" x="889.7" y="410.0166">next_chunk drains</text></g><!--link NET to STR--><g class="link" data-entity-1="ent0002" data-entity-2="ent0015" data-link-type="dependency" data-source-line="37" id="lnk26"><path d="M786.35,243.2783 C757.27,274.5583 707.75,334.3283 688.56,396.4483 C670.28,455.6383 681.0203,525.0419 688.9703,561.7019" fill="none" id="NET-to-STR" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="690.03,566.5883,692.0318,556.945,688.9703,561.7019,684.2135,558.6404,690.03,566.5883" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="185.377" x="689.56" y="410.0166">cancel! (flag the engine polls)</text></g><!--link STR to NET--><g class="link" data-entity-1="ent0015" data-entity-2="ent0002" data-link-type="dependency" data-source-line="39" id="lnk28"><path d="M739.54,571.7883 C819.88,538.9783 984.89,466.4983 1014.56,413.4483 C1056.64,338.2183 948.0881,277.3024 873.2681,245.3424" fill="none" id="STR-to-NET-1" style="stroke:#181818;stroke-width:1;"/><polygon fill="#181818" points="868.67,243.3783,875.3752,250.5921,873.2681,245.3424,878.5178,243.2352,868.67,243.3783" style="stroke:#181818;stroke-width:1;stroke-linejoin:miter;stroke-miterlimit:10;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="181.4858" x="1022" y="410.0166">done chunk always delivered</text></g></g></svg> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment