<svg aria-roledescription="flowchart-v2" viewBox="-7.500000476837158 -8 1012.0625610351562 1735.14306640625" style="" xmlns="http://www.w3.org/2000/svg" width="996" height="1719" id="render_svg_3128"><style>#render_svg_3128{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#render_svg_3128 .error-icon{fill:#552222;}#render_svg_3128 .error-text{fill:#552222;stroke:#552222;}#render_svg_3128 .edge-thickness-normal{stroke-width:2px;}#render_svg_3128 .edge-thickness-thick{stroke-width:3.5px;}#render_svg_3128 .edge-pattern-solid{stroke-dasharray:0;}#render_svg_3128 .edge-pattern-dashed{stroke-dasharray:3;}#render_svg_3128 .edge-pattern-dotted{stroke-dasharray:2;}#render_svg_3128 .marker{fill:#333333;stroke:#333333;}#render_svg_3128 .marker.cross{stroke:#333333;}#render_svg_3128 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#render_svg_3128 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#render_svg_3128 .cluster-label text{fill:#333;}#render_svg_3128 .cluster-label span{color:#333;}#render_svg_3128 .label text,#render_svg_3128 span{fill:#333;color:#333;}#render_svg_3128 .node rect,#render_svg_3128 .node circle,#render_svg_3128 .node ellipse,#render_svg_3128 .node polygon,#render_svg_3128 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#render_svg_3128 .node .label{text-align:center;}#render_svg_3128 .node.clickable{cursor:pointer;}#render_svg_3128 .arrowheadPath{fill:#333333;}#render_svg_3128 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#render_svg_3128 .flowchart-link{stroke:#333333;fill:none;}#render_svg_3128 .edgeLabel{background-color:#e8e8e8;text-align:center;}#render_svg_3128 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#render_svg_3128 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#render_svg_3128 .cluster text{fill:#333;}#render_svg_3128 .cluster span{color:#333;}#render_svg_3128 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#render_svg_3128 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#render_svg_3128 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#render_svg_3128 .frontend&gt;*{fill:#f9d6d2!important;stroke:#d36159!important;stroke-width:2px!important;}#render_svg_3128 .frontend span{fill:#f9d6d2!important;stroke:#d36159!important;stroke-width:2px!important;}#render_svg_3128 .backend&gt;*{fill:#d4f4dd!important;stroke:#57a870!important;stroke-width:2px!important;}#render_svg_3128 .backend span{fill:#d4f4dd!important;stroke:#57a870!important;stroke-width:2px!important;}#render_svg_3128 .database&gt;*{fill:#d0e1f9!important;stroke:#4d76b0!important;stroke-width:2px!important;}#render_svg_3128 .database span{fill:#d0e1f9!important;stroke:#4d76b0!important;stroke-width:2px!important;}#render_svg_3128 .external&gt;*{fill:#f9f7d9!important;stroke:#b0af4a!important;stroke-width:2px!important;}#render_svg_3128 .external span{fill:#f9f7d9!important;stroke:#b0af4a!important;stroke-width:2px!important;}#render_svg_3128 .middleware&gt;*{fill:#e3d0f9!important;stroke:#8049b0!important;stroke-width:2px!important;}#render_svg_3128 .middleware span{fill:#e3d0f9!important;stroke:#8049b0!important;stroke-width:2px!important;}#render_svg_3128 .deployment&gt;*{fill:#f9e0d0!important;stroke:#b07a49!important;stroke-width:2px!important;}#render_svg_3128 .deployment span{fill:#f9e0d0!important;stroke:#b07a49!important;stroke-width:2px!important;}</style><g><marker orient="auto" markerHeight="12" markerWidth="12" markerUnits="userSpaceOnUse" refY="5" refX="10" viewBox="0 0 10 10" class="marker flowchart" id="flowchart-pointEnd"><path style="stroke-width: 1; stroke-dasharray: 1, 0;" class="arrowMarkerPath" d="M 0 0 L 10 5 L 0 10 z"/></marker><marker orient="auto" markerHeight="12" markerWidth="12" markerUnits="userSpaceOnUse" refY="5" refX="0" viewBox="0 0 10 10" class="marker flowchart" id="flowchart-pointStart"><path style="stroke-width: 1; stroke-dasharray: 1, 0;" class="arrowMarkerPath" d="M 0 5 L 10 10 L 10 0 z"/></marker><marker orient="auto" markerHeight="11" markerWidth="11" markerUnits="userSpaceOnUse" refY="5" refX="11" viewBox="0 0 10 10" class="marker flowchart" id="flowchart-circleEnd"><circle style="stroke-width: 1; stroke-dasharray: 1, 0;" class="arrowMarkerPath" r="5" cy="5" cx="5"/></marker><marker orient="auto" markerHeight="11" markerWidth="11" markerUnits="userSpaceOnUse" refY="5" refX="-1" viewBox="0 0 10 10" class="marker flowchart" id="flowchart-circleStart"><circle style="stroke-width: 1; stroke-dasharray: 1, 0;" class="arrowMarkerPath" r="5" cy="5" cx="5"/></marker><marker orient="auto" markerHeight="11" markerWidth="11" markerUnits="userSpaceOnUse" refY="5.2" refX="12" viewBox="0 0 11 11" class="marker cross flowchart" id="flowchart-crossEnd"><path style="stroke-width: 2; stroke-dasharray: 1, 0;" class="arrowMarkerPath" d="M 1,1 l 9,9 M 10,1 l -9,9"/></marker><marker orient="auto" markerHeight="11" markerWidth="11" markerUnits="userSpaceOnUse" refY="5.2" refX="-1" viewBox="0 0 11 11" class="marker cross flowchart" id="flowchart-crossStart"><path style="stroke-width: 2; stroke-dasharray: 1, 0;" class="arrowMarkerPath" d="M 1,1 l 9,9 M 10,1 l -9,9"/></marker><g class="root"><g class="clusters"/><g class="edgePaths"><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-Client LE-FrontEnd" id="L-Client-FrontEnd-0" d="M484.23802453949605,58.28571319580078L509.1001431302441,66.61904652913411C533.9622617209922,74.95237986246745,583.6864989024883,91.61904652913411,608.5486174932363,104.11904652913411C633.4107360839844,116.61904652913411,633.4107360839844,124.95237986246745,633.4107360839844,129.11904652913412L633.4107360839844,133.28571319580078"/><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-Client LE-BackEnd" id="L-Client-BackEnd-0" d="M384.9316226773008,58.28571319580078L360.06950408655274,66.61904652913411C335.2073854958047,74.95237986246745,285.4831483143086,91.61904652913411,260.6210297235605,124.94047546386719C235.7589111328125,158.26190439860025,235.7589111328125,208.23809560139975,235.7589111328125,258.2142868041992C235.7589111328125,308.1904780069987,235.7589111328125,358.16666920979816,241.284484291038,387.32143147786456C246.81005744926358,416.47619374593097,257.86120376571466,424.80952707926434,263.3867769239402,428.97619374593097L268.91235008216574,433.14286041259766"/><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-FrontEnd LE-BackEnd" id="L-FrontEnd-BackEnd-0" d="M633.4107360839844,383.14286041259766L633.4107360839844,387.30952707926434C633.4107360839844,391.47619374593097,633.4107360839844,399.80952707926434,627.8851629257589,408.14286041259766C622.3595897675333,416.47619374593097,611.3084434510822,424.80952707926434,605.7828702928567,428.97619374593097L600.2572971346311,433.14286041259766"/><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-BackEnd LE-RelaySystem" id="L-BackEnd-RelaySystem-0" d="M575.2559411014859,683.0000076293945L579.9476592512382,687.1666742960612C584.6393774009906,691.3333409627279,594.0228137004952,699.6666742960612,598.7145318502477,708.0000076293945C603.40625,716.3333409627279,603.40625,724.6666742960612,603.40625,728.8333409627279L603.40625,733.0000076293945"/><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-BackEnd LE-Storage" id="L-BackEnd-Storage-0" d="M293.9137061153111,683.0000076293945L289.2219879655587,687.1666742960612C284.5302698158063,691.3333409627279,275.14683351630157,699.6666742960612,270.45511536654925,773.5122400919596C265.7633972167969,847.357805887858,265.7633972167969,986.7156041463217,265.7633972167969,1056.3945032755535L265.7633972167969,1126.0734024047852"/><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-RelaySystem LE-AIExternalServices" id="L-RelaySystem-AIExternalServices-0" d="M603.40625,1635.8571243286133L603.40625,1640.02379099528C603.40625,1644.1904576619465,603.40625,1652.52379099528,603.40625,1660.8571243286133C603.40625,1669.1904576619465,603.40625,1677.52379099528,603.40625,1681.6904576619465L603.40625,1685.8571243286133"/></g><g class="edgeLabels"><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g transform="translate(-7.5, -8)" class="root"><g class="clusters"><g id="Deployment" class="cluster deployment"><rect height="83.28571319580078" width="317.64286041259766" y="8" x="8" ry="0" rx="0" style=""/><g transform="translate(123.9464225769043, 8)" class="cluster-label"><foreignObject height="18.285715103149414" width="85.75001525878906"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Deployment</span></div></foreignObject></g></g></g><g class="edgePaths"/><g class="edgeLabels"/><g class="nodes"><g transform="translate(75.16964340209961, 49.64285659790039)" id="flowchart-Docker-241" class="node default deployment"><rect height="33.285715103149414" width="64.33928680419922" y="-16.642857551574707" x="-32.16964340209961" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-24.66964340209961, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="49.33928680419922"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Docker</span></div></foreignObject></g></g><g transform="translate(223.99107360839844, 49.64285659790039)" id="flowchart-DockerCompose-242" class="node default deployment"><rect height="33.285715103149414" width="133.30357360839844" y="-16.642857551574707" x="-66.65178680419922" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-59.15178680419922, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="118.30357360839844"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Docker Compose</span></div></foreignObject></g></g></g></g><g transform="translate(107.74554443359375, 1118.0734024047852)" class="root"><g class="clusters"><g id="Storage" class="cluster database database"><rect height="116.7103271484375" width="301.03572845458984" y="8" x="8" ry="0" rx="0" style=""/><g transform="translate(112.6160774230957, 8)" class="cluster-label"><foreignObject height="18.285715103149414" width="91.80357360839844"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Data Storage</span></div></foreignObject></g></g></g><g class="edgePaths"/><g class="edgeLabels"/><g class="nodes"><g transform="translate(83.25, 66.35516357421875)" id="flowchart-Database-239" class="node default database"><path transform="translate(-40.25,-31.33263857347252)" d="M 0,9.793187347931873 a 40.25,9.793187347931873 0,0,0 80.5 0 a 40.25,9.793187347931873 0,0,0 -80.5 0 l 0,43.07890245108129 a 40.25,9.793187347931873 0,0,0 80.5 0 l 0,-43.07890245108129" style=""/><g transform="translate(-32.75, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="65.5"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Database</span></div></foreignObject></g></g><g transform="translate(223.76786422729492, 66.35516357421875)" id="flowchart-Redis-240" class="node default database"><path transform="translate(-50.26786422729492,-33.35901087628487)" d="M 0,11.144102216473438 a 50.26786422729492,11.144102216473438 0,0,0 100.53572845458984 0 a 50.26786422729492,11.144102216473438 0,0,0 -100.53572845458984 0 l 0,44.429817319622856 a 50.26786422729492,11.144102216473438 0,0,0 100.53572845458984 0 l 0,-44.429817319622856" style=""/><g transform="translate(-42.76786422729492, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="85.53572845458984"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Redis Cache</span></div></foreignObject></g></g></g></g><g transform="translate(458.78125, 725.0000076293945)" class="root"><g class="clusters"><g id="RelaySystem" class="cluster middleware middleware"><rect height="902.8571395874023" width="274.25" y="8" x="8" ry="0" rx="0" style=""/><g transform="translate(88.94642639160156, 8)" class="cluster-label"><foreignObject height="18.285715103149414" width="112.35714721679688"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">AI Relay System</span></div></foreignObject></g></g></g><g class="edgePaths"><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-RelayRouter LE-RelayHandler" id="L-RelayRouter-RelayHandler-0" d="M145.125,66.28571319580078L145.125,70.45237986246745C145.125,74.61904652913411,145.125,82.95237986246745,145.125,91.28571319580078C145.125,99.61904652913411,145.125,107.95237986246745,145.125,112.11904652913411L145.125,116.28571319580078"/><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-RelayHandler LE-AdapterLayer" id="L-RelayHandler-AdapterLayer-0" d="M145.125,149.57142639160156L145.125,153.73809305826822C145.125,157.9047597249349,145.125,166.23809305826822,145.125,174.57142639160156C145.125,182.9047597249349,145.125,191.23809305826822,145.125,195.4047597249349L145.125,199.57142639160156"/><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-AdapterLayer LE-AIChannels" id="L-AdapterLayer-AIChannels-0" d="M145.125,232.85713958740234L145.125,237.023806254069C145.125,241.1904729207357,145.125,249.523806254069,145.125,257.85713958740234C145.125,266.19047292073566,145.125,274.52380625406903,145.125,278.69047292073566L145.125,282.85713958740234"/></g><g class="edgeLabels"><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g transform="translate(145.125, 49.64285659790039)" id="flowchart-RelayRouter-223" class="node default middleware"><rect height="33.285715103149414" width="105.50894165039062" y="-16.642857551574707" x="-52.75447082519531" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-45.25447082519531, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="90.50894165039062"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Relay Router</span></div></foreignObject></g></g><g transform="translate(145.125, 132.92856979370117)" id="flowchart-RelayHandler-224" class="node default middleware"><rect height="33.285715103149414" width="120.90178680419922" y="-16.642857551574707" x="-60.45089340209961" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-52.95089340209961, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="105.90178680419922"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Relay Handlers</span></div></foreignObject></g></g><g transform="translate(145.125, 216.21428298950195)" id="flowchart-AdapterLayer-225" class="node default middleware"><rect height="33.285715103149414" width="124.67857360839844" y="-16.642857551574707" x="-62.33928680419922" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-54.83928680419922, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="109.67857360839844"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Model Adapters</span></div></foreignObject></g></g><g transform="translate(35.5, 274.85713958740234)" class="root"><g class="clusters"><g id="AIChannels" class="cluster middleware middleware"><rect height="602.9999923706055" width="204.25" y="8" x="8" ry="0" rx="0" style=""/><g transform="translate(40.45088195800781, 8)" class="cluster-label"><foreignObject height="18.285715103149414" width="139.34823608398438"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">AI Service Channels</span></div></foreignObject></g></g></g><g class="edgePaths"/><g class="edgeLabels"/><g class="nodes"><g transform="translate(110.125, 59.64285659790039)" id="flowchart-OpenAI-226" class="node default default"><rect height="33.285715103149414" width="66.06250762939453" y="-16.642857551574707" x="-33.031253814697266" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-25.531253814697266, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="51.06250762939453"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">OpenAI</span></div></foreignObject></g></g><g transform="translate(110.125, 142.92856979370117)" id="flowchart-Claude-227" class="node default default"><rect height="33.285715103149414" width="64.08036422729492" y="-16.642857551574707" x="-32.04018211364746" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-24.54018211364746, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="49.08036422729492"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Claude</span></div></foreignObject></g></g><g transform="translate(110.125, 226.21428298950195)" id="flowchart-Gemini-228" class="node default default"><rect height="33.285715103149414" width="65.69643020629883" y="-16.642857551574707" x="-32.848215103149414" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-25.348215103149414, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="50.69643020629883"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Gemini</span></div></foreignObject></g></g><g transform="translate(110.125, 309.49999618530273)" id="flowchart-Midjourney-229" class="node default default"><rect height="33.285715103149414" width="94.60714721679688" y="-16.642857551574707" x="-47.30357360839844" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-39.80357360839844, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="79.60714721679688"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Midjourney</span></div></foreignObject></g></g><g transform="translate(110.125, 392.7857093811035)" id="flowchart-Baidu-230" class="node default default"><rect height="33.285715103149414" width="54.6875" y="-16.642857551574707" x="-27.34375" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-19.84375, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="39.6875"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Baidu</span></div></foreignObject></g></g><g transform="translate(110.125, 476.0714225769043)" id="flowchart-Zhipu-231" class="node default default"><rect height="33.285715103149414" width="54.76786422729492" y="-16.642857551574707" x="-27.38393211364746" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-19.88393211364746, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="39.76786422729492"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Zhipu</span></div></foreignObject></g></g><g transform="translate(110.125, 559.3571357727051)" id="flowchart-OtherAI-232" class="node default default"><rect height="33.285715103149414" width="154.25" y="-16.642857551574707" x="-77.125" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-69.625, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="139.25"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Other AI Services...</span></div></foreignObject></g></g></g></g></g></g><g transform="translate(222.29574584960938, 425.14286041259766)" class="root"><g class="clusters"><g id="BackEnd" class="cluster backend backend"><rect height="249.85713958740234" width="409.5781440734863" y="8" x="8" ry="0" rx="0" style=""/><g transform="translate(164.88281440734863, 8)" class="cluster-label"><foreignObject height="18.285715103149414" width="95.81251525878906"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Backend (Go)</span></div></foreignObject></g></g></g><g class="edgePaths"><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-Router LE-Controller" id="L-Router-Controller-0" d="M196.74554824829102,65.10364939071371L187.95574124654135,69.46732669156155C179.16593424479166,73.8310039924094,161.58632024129233,82.55835859410509,152.79651323954263,91.0887025616196C144.00670623779297,99.61904652913411,144.00670623779297,107.95237986246745,144.00670623779297,112.11904652913411L144.00670623779297,116.28571319580078"/><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-Controller LE-Service" id="L-Controller-Service-0" d="M120.3323838453118,149.57142639160156L114.40533584195906,153.73809305826822C108.4782878386063,157.9047597249349,96.62419183190082,166.23809305826822,90.69714382854806,174.57142639160156C84.77009582519531,182.9047597249349,84.77009582519531,191.23809305826822,84.77009582519531,195.4047597249349L84.77009582519531,199.57142639160156"/><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-Controller LE-Model" id="L-Controller-Model-0" d="M185.30786267550008,149.57142639160156L195.6479236386817,153.73809305826822C205.98798460186333,157.9047597249349,226.66810652822656,166.23809305826822,237.00816749140822,174.57142639160156C247.34822845458984,182.9047597249349,247.34822845458984,191.23809305826822,247.34822845458984,195.4047597249349L247.34822845458984,199.57142639160156"/><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-Router LE-Middleware" id="L-Router-Middleware-0" d="M259.03126525878906,65.10364939071371L267.82107226053876,69.46732669156155C276.6108792622884,73.8310039924094,294.1904932657878,82.55835859410509,302.9803002675374,91.0887025616196C311.7701072692871,99.61904652913411,311.7701072692871,107.95237986246745,311.7701072692871,112.11904652913411L311.7701072692871,116.28571319580078"/></g><g class="edgeLabels"><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g transform="translate(227.88840675354004, 49.64285659790039)" id="flowchart-Router-210" class="node default backend"><rect height="33.285715103149414" width="62.28572082519531" y="-16.642857551574707" x="-31.142860412597656" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-23.642860412597656, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="47.28572082519531"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Router</span></div></foreignObject></g></g><g transform="translate(144.00670623779297, 132.92856979370117)" id="flowchart-Controller-211" class="node default backend"><rect height="33.285715103149414" width="93.91072845458984" y="-16.642857551574707" x="-46.95536422729492" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-39.45536422729492, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="78.91072845458984"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Controllers</span></div></foreignObject></g></g><g transform="translate(84.77009582519531, 216.21428298950195)" id="flowchart-Service-213" class="node default backend"><rect height="33.285715103149414" width="73.16965103149414" y="-16.642857551574707" x="-36.58482551574707" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-29.08482551574707, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="58.16965103149414"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Services</span></div></foreignObject></g></g><g transform="translate(247.34822845458984, 216.21428298950195)" id="flowchart-Model-214" class="node default backend"><rect height="33.285715103149414" width="63.77678680419922" y="-16.642857551574707" x="-31.88839340209961" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-24.38839340209961, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="48.77678680419922"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Models</span></div></foreignObject></g></g><g transform="translate(311.7701072692871, 132.92856979370117)" id="flowchart-Middleware-212" class="node default backend"><rect height="33.285715103149414" width="141.61607360839844" y="-16.642857551574707" x="-70.80803680419922" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-63.30803680419922, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="126.61607360839844"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Middleware Layer</span></div></foreignObject></g></g></g></g><g transform="translate(263.2589111328125, 125.28571319580078)" class="root"><g class="clusters"><g id="FrontEnd" class="cluster frontend frontend"><rect height="249.85713958740234" width="725.3036575317383" y="8" x="8" ry="0" rx="0" style=""/><g transform="translate(309.9955711364746, 8)" class="cluster-label"><foreignObject height="18.285715103149414" width="121.31251525878906"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Frontend (React)</span></div></foreignObject></g></g></g><g class="edgePaths"><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-WebApp LE-Pages" id="L-WebApp-Pages-0" d="M339.82593154907227,61.37285537582293L312.0744406382243,66.35833167915257C284.3229497273763,71.3438079824822,228.81996790568033,81.3147605891415,201.06847699483237,90.4669035591378C173.31698608398438,99.61904652913411,173.31698608398438,107.95237986246745,173.31698608398438,112.11904652913411L173.31698608398438,116.28571319580078"/><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-WebApp LE-Components" id="L-WebApp-Components-0" d="M405.1205863952637,66.28571319580078L405.1205863952637,70.45237986246745C405.1205863952637,74.61904652913411,405.1205863952637,82.95237986246745,405.1205863952637,91.28571319580078C405.1205863952637,99.61904652913411,405.1205863952637,107.95237986246745,405.1205863952637,112.11904652913411L405.1205863952637,116.28571319580078"/><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-Pages LE-Context" id="L-Pages-Context-0" d="M173.31698608398438,149.57142639160156L173.31698608398438,153.73809305826822C173.31698608398438,157.9047597249349,173.31698608398438,166.23809305826822,184.91379299803057,174.57142639160156C196.51059991207674,182.9047597249349,219.70421374016914,191.23809305826822,231.30102065421534,195.4047597249349L242.8978275682615,199.57142639160156"/><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-Components LE-Context" id="L-Components-Context-0" d="M405.1205863952637,149.57142639160156L405.1205863952637,153.73809305826822C405.1205863952637,157.9047597249349,405.1205863952637,166.23809305826822,393.52377948121745,174.57142639160156C381.9269725671713,182.9047597249349,358.73335873907894,191.23809305826822,347.1365518250327,195.4047597249349L335.53974491098654,199.57142639160156"/><path marker-end="url(#flowchart-pointEnd)" style="fill:none;" class="edge-thickness-normal edge-pattern-solid flowchart-link LS-WebApp LE-i18n" id="L-WebApp-i18n-0" d="M470.4152412414551,63.42175094527435L492.4219392140706,68.06574465369542C514.4286371866862,72.70973836211648,558.4420331319174,81.99772577895864,580.4487311045328,90.80838615404639C602.4554290771484,99.61904652913411,602.4554290771484,107.95237986246745,602.4554290771484,112.11904652913411L602.4554290771484,116.28571319580078"/></g><g class="edgeLabels"><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g transform="translate(0, 0)" class="label"><foreignObject height="0" width="0"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g transform="translate(405.1205863952637, 49.64285659790039)" id="flowchart-WebApp-196" class="node default frontend"><rect height="33.285715103149414" width="130.58930206298828" y="-16.642857551574707" x="-65.29465103149414" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-57.79465103149414, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="115.58930206298828"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Web Application</span></div></foreignObject></g></g><g transform="translate(173.31698608398438, 132.92856979370117)" id="flowchart-Pages-197" class="node default frontend"><rect height="33.285715103149414" width="260.6339569091797" y="-16.642857551574707" x="-130.31697845458984" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-122.81697845458984, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="245.6339569091797"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Pages (User, Channel, Token, etc.)</span></div></foreignObject></g></g><g transform="translate(405.1205863952637, 132.92856979370117)" id="flowchart-Components-198" class="node default frontend"><rect height="33.285715103149414" width="102.97322845458984" y="-16.642857551574707" x="-51.48661422729492" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-43.98661422729492, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="87.97322845458984"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Components</span></div></foreignObject></g></g><g transform="translate(289.218786239624, 216.21428298950195)" id="flowchart-Context-199" class="node default frontend"><rect height="33.285715103149414" width="231.29464721679688" y="-16.642857551574707" x="-115.64732360839844" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-108.14732360839844, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="216.29464721679688"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Context (User, Theme, Status)</span></div></foreignObject></g></g><g transform="translate(602.4554290771484, 132.92856979370117)" id="flowchart-i18n-200" class="node default frontend"><rect height="33.285715103149414" width="191.6964569091797" y="-16.642857551574707" x="-95.84822845458984" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-88.34822845458984, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="176.6964569091797"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">i18n Internationalization</span></div></foreignObject></g></g></g></g><g transform="translate(434.58482360839844, 41.64285659790039)" id="flowchart-Client-195" class="node default default"><rect height="33.285715103149414" width="133.88394403457642" y="-16.642857551574707" x="-66.94197201728821" ry="16.642857551574707" rx="16.642857551574707" style=""/><g transform="translate(-55.28125762939453, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="110.56251525878906"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">Client Requests</span></div></foreignObject></g></g><g transform="translate(603.40625, 1702.4999809265137)" id="flowchart-AIExternalServices-254" class="node default external"><rect height="33.285715103149414" width="182.3125" y="-16.642857551574707" x="-91.15625" ry="0" rx="0" style="" class="basic label-container"/><g transform="translate(-83.65625, -9.142857551574707)" style="" class="label"><foreignObject height="18.285715103149414" width="167.3125"><div style="display: inline-block; white-space: nowrap;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel">External AI Service APIs</span></div></foreignObject></g></g></g></g></g></svg>