update docs
This commit is contained in:
199
docs/architecture/01-architecture.svg
Normal file
199
docs/architecture/01-architecture.svg
Normal file
@@ -0,0 +1,199 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
||||
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by graphviz version 14.1.2 (0)
|
||||
-->
|
||||
<!-- Title: mpr_architecture Pages: 1 -->
|
||||
<svg width="939pt" height="685pt"
|
||||
viewBox="0.00 0.00 939.00 685.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 680.5)">
|
||||
<title>mpr_architecture</title>
|
||||
<polygon fill="#0a0e17" stroke="none" points="-4,4 -4,-680.5 935.39,-680.5 935.39,4 -4,4"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="465.7" y="-657.3" font-family="Helvetica,sans-Serif" font-size="16.00" fill="#0066ff">System Architecture</text>
|
||||
<g id="clust1" class="cluster">
|
||||
<title>cluster_browser</title>
|
||||
<polygon fill="#0a0e17" stroke="#1e2a4a" stroke-dasharray="5,2" points="8,-507 8,-641 383.51,-641 383.51,-507 8,-507"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="195.75" y="-621.8" font-family="Helvetica,sans-Serif" font-size="16.00" fill="#8892a8">Browser</text>
|
||||
</g>
|
||||
<g id="clust2" class="cluster">
|
||||
<title>cluster_k8s</title>
|
||||
<polygon fill="#0a0e17" stroke="#0066ff" stroke-dasharray="5,2" points="225.75,-213 225.75,-499 895.21,-499 895.21,-213 225.75,-213"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="560.48" y="-479.8" font-family="Helvetica,sans-Serif" font-size="16.00" fill="#0066ff">K8s cluster (Kind in dev)</text>
|
||||
</g>
|
||||
<g id="clust3" class="cluster">
|
||||
<title>cluster_data</title>
|
||||
<polygon fill="#0a0e17" stroke="#1e2a4a" stroke-dasharray="5,2" points="762.96,-221 762.96,-463 887.21,-463 887.21,-221 762.96,-221"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-443.8" font-family="Helvetica,sans-Serif" font-size="16.00" fill="#4a5568">Data plane</text>
|
||||
</g>
|
||||
<g id="clust4" class="cluster">
|
||||
<title>cluster_gpu</title>
|
||||
<polygon fill="#0a0e17" stroke="#1e2a4a" stroke-dasharray="5,2" points="738.58,-113 738.58,-205 911.58,-205 911.58,-113 738.58,-113"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-185.8" font-family="Helvetica,sans-Serif" font-size="16.00" fill="#8892a8">GPU host (LAN)</text>
|
||||
</g>
|
||||
<g id="clust5" class="cluster">
|
||||
<title>cluster_cloud</title>
|
||||
<polygon fill="#0a0e17" stroke="#1e2a4a" stroke-dasharray="5,2" points="726.77,-8 726.77,-105 923.39,-105 923.39,-8 726.77,-8"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-85.8" font-family="Helvetica,sans-Serif" font-size="16.00" fill="#8892a8">Cloud VLM providers</text>
|
||||
</g>
|
||||
<!-- ui -->
|
||||
<g id="node1" class="node">
|
||||
<title>ui</title>
|
||||
<polygon fill="#121829" stroke="#1e2a4a" points="147.12,-605 17.12,-605 17.12,-569 147.12,-569 147.12,-605"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="82.12" y="-590.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">detection-app</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="82.12" y="-576.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">(Vue 3 + @vue-flow)</text>
|
||||
</g>
|
||||
<!-- wasm -->
|
||||
<g id="node2" class="node">
|
||||
<title>wasm</title>
|
||||
<polygon fill="#1a1a3a" stroke="#1e2a4a" points="375.51,-605 248.51,-605 248.51,-569 375.51,-569 375.51,-605"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="312.01" y="-590.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0066ff">OpenCV WASM</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="312.01" y="-576.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#0066ff">(edge / field stages)</text>
|
||||
</g>
|
||||
<!-- ui->wasm -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>ui->wasm</title>
|
||||
<path fill="none" stroke="#0066ff" d="M147.51,-587C175.4,-587 208.2,-587 237.08,-587"/>
|
||||
<polygon fill="#0066ff" stroke="#0066ff" points="236.84,-590.5 246.84,-587 236.84,-583.5 236.84,-590.5"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="191" y="-589.7" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8892a8">worker</text>
|
||||
</g>
|
||||
<!-- gateway -->
|
||||
<g id="node4" class="node">
|
||||
<title>gateway</title>
|
||||
<polygon fill="#0d1a33" stroke="#1e2a4a" points="390.27,-334.9 390.27,-357.1 344.42,-372.79 279.59,-372.79 233.75,-357.1 233.75,-334.9 279.59,-319.21 344.42,-319.21 390.27,-334.9"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="312.01" y="-349.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">Envoy Gateway</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="312.01" y="-335.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">port 8080</text>
|
||||
</g>
|
||||
<!-- ui->gateway -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>ui->gateway</title>
|
||||
<path fill="none" stroke="#4a5568" d="M134.59,-568.56C139.39,-566 144.03,-563.15 148.25,-560 213.28,-511.53 265.01,-430.28 291.54,-383.07"/>
|
||||
<polygon fill="#4a5568" stroke="#4a5568" points="294.46,-385.02 296.24,-374.58 288.33,-381.63 294.46,-385.02"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="191" y="-544.3" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8892a8">HTTP / SSE</text>
|
||||
</g>
|
||||
<!-- chunker -->
|
||||
<g id="node3" class="node">
|
||||
<title>chunker</title>
|
||||
<polygon fill="#121829" stroke="#1e2a4a" points="148.25,-551 16,-551 16,-515 148.25,-515 148.25,-551"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="82.12" y="-536.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#8892a8">chunker UI</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="82.12" y="-522.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#8892a8">(standalone test util)</text>
|
||||
</g>
|
||||
<!-- chunker->gateway -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>chunker->gateway</title>
|
||||
<path fill="none" stroke="#4a5568" d="M105.39,-514.73C143.45,-483.5 221.58,-419.39 269.81,-379.81"/>
|
||||
<polygon fill="#4a5568" stroke="#4a5568" points="271.77,-382.72 277.28,-373.67 267.33,-377.31 271.77,-382.72"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="191" y="-464.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8892a8">HTTP</text>
|
||||
</g>
|
||||
<!-- ui_pod -->
|
||||
<g id="node5" class="node">
|
||||
<title>ui_pod</title>
|
||||
<polygon fill="#121829" stroke="#1e2a4a" points="622.27,-271 517.02,-271 517.02,-235 622.27,-235 622.27,-271"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="569.64" y="-256.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">detection-ui pod</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="569.64" y="-242.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">(Vite :5175)</text>
|
||||
</g>
|
||||
<!-- gateway->ui_pod -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>gateway->ui_pod</title>
|
||||
<path fill="none" stroke="#4a5568" d="M359.58,-324.11C374.93,-317.22 392.19,-309.84 408.27,-303.75 440.13,-291.68 476.26,-280.08 506.15,-271.01"/>
|
||||
<polygon fill="#4a5568" stroke="#4a5568" points="506.85,-274.46 515.41,-268.23 504.83,-267.76 506.85,-274.46"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="453.64" y="-306.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8892a8">/  /detection/*</text>
|
||||
</g>
|
||||
<!-- api -->
|
||||
<g id="node6" class="node">
|
||||
<title>api</title>
|
||||
<polygon fill="#121829" stroke="#1e2a4a" points="618.89,-325 520.39,-325 520.39,-289 618.89,-289 618.89,-325"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="569.64" y="-310.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">FastAPI</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="569.64" y="-296.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">:8702 /detect/*</text>
|
||||
</g>
|
||||
<!-- gateway->api -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>gateway->api</title>
|
||||
<path fill="none" stroke="#0066ff" d="M389.71,-334.3C427.93,-328.47 473.45,-321.52 509.01,-316.1"/>
|
||||
<polygon fill="#0066ff" stroke="#0066ff" points="509.33,-319.59 518.69,-314.62 508.27,-312.67 509.33,-319.59"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="453.64" y="-345.09" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8892a8">/api/*</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="453.64" y="-333.84" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8892a8">/api/detect/stream/*</text>
|
||||
</g>
|
||||
<!-- pg -->
|
||||
<g id="node7" class="node">
|
||||
<title>pg</title>
|
||||
<path fill="#121829" stroke="#1e2a4a" d="M870.21,-421.28C870.21,-424.63 849.98,-427.34 825.08,-427.34 800.18,-427.34 779.96,-424.63 779.96,-421.28 779.96,-421.28 779.96,-366.72 779.96,-366.72 779.96,-363.37 800.18,-360.66 825.08,-360.66 849.98,-360.66 870.21,-363.37 870.21,-366.72 870.21,-366.72 870.21,-421.28 870.21,-421.28"/>
|
||||
<path fill="none" stroke="#1e2a4a" d="M870.21,-421.28C870.21,-417.94 849.98,-415.22 825.08,-415.22 800.18,-415.22 779.96,-417.94 779.96,-421.28"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-403.8" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">PostgreSQL</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-390.3" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">jobs · profiles</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-376.8" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">checkpoints</text>
|
||||
</g>
|
||||
<!-- api->pg -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>api->pg</title>
|
||||
<path fill="none" stroke="#4a5568" d="M619.25,-325.41C626.29,-328 633.45,-330.6 640.27,-333 683.23,-348.14 732.2,-364.34 768.79,-376.24"/>
|
||||
<polygon fill="#4a5568" stroke="#4a5568" points="767.7,-379.57 778.29,-379.32 769.86,-372.91 767.7,-379.57"/>
|
||||
</g>
|
||||
<!-- redis -->
|
||||
<g id="node8" class="node">
|
||||
<title>redis</title>
|
||||
<path fill="#121829" stroke="#1e2a4a" d="M869.46,-338.69C869.46,-341.1 849.57,-343.06 825.08,-343.06 800.6,-343.06 780.71,-341.1 780.71,-338.69 780.71,-338.69 780.71,-299.31 780.71,-299.31 780.71,-296.9 800.6,-294.94 825.08,-294.94 849.57,-294.94 869.46,-296.9 869.46,-299.31 869.46,-299.31 869.46,-338.69 869.46,-338.69"/>
|
||||
<path fill="none" stroke="#1e2a4a" d="M869.46,-338.69C869.46,-336.27 849.57,-334.31 825.08,-334.31 800.6,-334.31 780.71,-336.27 780.71,-338.69"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-322.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">Redis</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-308.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">(SSE fan-out)</text>
|
||||
</g>
|
||||
<!-- api->redis -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>api->redis</title>
|
||||
<path fill="none" stroke="#4a5568" stroke-dasharray="1,5" d="M619.3,-312.35C626.33,-312.99 633.48,-313.57 640.27,-314 683.39,-316.75 732.3,-317.99 768.82,-318.55"/>
|
||||
<polygon fill="#4a5568" stroke="#4a5568" points="768.65,-322.05 778.7,-318.68 768.75,-315.05 768.65,-322.05"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="678.52" y="-320.07" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8892a8">publish events</text>
|
||||
</g>
|
||||
<!-- minio -->
|
||||
<g id="node9" class="node">
|
||||
<title>minio</title>
|
||||
<path fill="#121829" stroke="#1e2a4a" d="M879.21,-272.69C879.21,-275.1 854.95,-277.06 825.08,-277.06 795.22,-277.06 770.96,-275.1 770.96,-272.69 770.96,-272.69 770.96,-233.31 770.96,-233.31 770.96,-230.9 795.22,-228.94 825.08,-228.94 854.95,-228.94 879.21,-230.9 879.21,-233.31 879.21,-233.31 879.21,-272.69 879.21,-272.69"/>
|
||||
<path fill="none" stroke="#1e2a4a" d="M879.21,-272.69C879.21,-270.27 854.95,-268.31 825.08,-268.31 795.22,-268.31 770.96,-270.27 770.96,-272.69"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-256.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">MinIO</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-242.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">media · overlays</text>
|
||||
</g>
|
||||
<!-- api->minio -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>api->minio</title>
|
||||
<path fill="none" stroke="#4a5568" d="M619.05,-289.76C626.12,-287.56 633.34,-285.47 640.27,-283.75 679.36,-274.02 723.92,-266.48 759.37,-261.3"/>
|
||||
<polygon fill="#4a5568" stroke="#4a5568" points="759.64,-264.8 769.04,-259.92 758.65,-257.87 759.64,-264.8"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="678.52" y="-286.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8892a8">frames · overlays</text>
|
||||
</g>
|
||||
<!-- gpu -->
|
||||
<g id="node10" class="node">
|
||||
<title>gpu</title>
|
||||
<polygon fill="#1a3a1a" stroke="#1e2a4a" points="903.58,-169.25 746.58,-169.25 746.58,-120.75 903.58,-120.75 903.58,-169.25"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-154.8" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#00c853">inference server</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-141.3" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#00c853">YOLO · OCR · VLM</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-127.8" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#00c853">edge · field segmentation</text>
|
||||
</g>
|
||||
<!-- api->gpu -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>api->gpu</title>
|
||||
<path fill="none" stroke="#00c853" d="M612.14,-288.56C615.81,-285.99 619.26,-283.14 622.27,-280 635.32,-266.35 627.22,-255.16 640.27,-241.5 668.36,-212.08 707.41,-189.85 742.29,-174.18"/>
|
||||
<polygon fill="#00c853" stroke="#00c853" points="743.33,-177.54 751.1,-170.34 740.53,-171.13 743.33,-177.54"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="678.52" y="-255.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8892a8">HTTP</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="678.52" y="-244.2" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8892a8">INFERENCE_URL</text>
|
||||
</g>
|
||||
<!-- cloud -->
|
||||
<g id="node11" class="node">
|
||||
<title>cloud</title>
|
||||
<polygon fill="#243056" stroke="#1e2a4a" points="915.39,-31.9 915.39,-54.1 862.49,-69.79 787.67,-69.79 734.77,-54.1 734.77,-31.9 787.67,-16.21 862.49,-16.21 915.39,-31.9"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-46.05" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">Anthropic · Gemini</text>
|
||||
<text xml:space="preserve" text-anchor="middle" x="825.08" y="-32.55" font-family="Helvetica,sans-Serif" font-size="11.00" fill="#e8eaf0">OpenAI · Groq</text>
|
||||
</g>
|
||||
<!-- api->cloud -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>api->cloud</title>
|
||||
<path fill="none" stroke="#4a5568" stroke-dasharray="5,2" d="M613.8,-288.76C616.99,-286.18 619.89,-283.27 622.27,-280 650.42,-241.25 615.31,-214.63 640.27,-173.75 665.29,-132.76 687.66,-136.87 726.77,-109 742.32,-97.91 759.51,-86.11 775.06,-75.6"/>
|
||||
<polygon fill="#4a5568" stroke="#4a5568" points="776.9,-78.58 783.24,-70.09 772.99,-72.77 776.9,-78.58"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="678.52" y="-176.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8892a8">VLM escalation</text>
|
||||
</g>
|
||||
<!-- redis->api -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>redis->api</title>
|
||||
<path fill="none" stroke="#8892a8" stroke-dasharray="5,2" d="M780.44,-309.86C761.04,-306.25 737.86,-302.53 716.77,-300.75 682.89,-297.89 674.23,-299.23 640.27,-300.75 637.08,-300.89 633.82,-301.07 630.53,-301.28"/>
|
||||
<polygon fill="#8892a8" stroke="#8892a8" points="630.54,-297.77 620.81,-301.97 631.03,-304.75 630.54,-297.77"/>
|
||||
<text xml:space="preserve" text-anchor="middle" x="678.52" y="-303.45" font-family="Helvetica,sans-Serif" font-size="9.00" fill="#8892a8">SSE consumer</text>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 15 KiB |
Reference in New Issue
Block a user