Refactor the code to make it comply with PEP-8 standards:Convert all class definitions to CamelCase style.
(issue 37)
This commit is contained in:
+46
-46
@@ -1,74 +1,74 @@
|
|||||||
<mxfile host="Electron" modified="2023-08-20T20:43:16.356Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.6.8 Chrome/114.0.5735.289 Electron/25.5.0 Safari/537.36" etag="kwtbDIrkPfCysRMj32zz" version="21.6.8" type="device">
|
<mxfile host="65bd71144e">
|
||||||
<diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">
|
<diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">
|
||||||
<mxGraphModel dx="914" dy="806" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
<mxGraphModel dx="711" dy="944" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
<root>
|
<root>
|
||||||
<mxCell id="WIyWlLk6GJQsqaUBKTNV-0" />
|
<mxCell id="WIyWlLk6GJQsqaUBKTNV-0"/>
|
||||||
<mxCell id="WIyWlLk6GJQsqaUBKTNV-1" parent="WIyWlLk6GJQsqaUBKTNV-0" />
|
<mxCell id="WIyWlLk6GJQsqaUBKTNV-1" parent="WIyWlLk6GJQsqaUBKTNV-0"/>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-37" value="" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-37" value="" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="340" y="345" width="290" height="105" as="geometry" />
|
<mxGeometry x="340" y="345" width="290" height="105" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-36" value="" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-36" value="" style="rounded=0;whiteSpace=wrap;html=1;dashed=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="90" y="345" width="250" height="105" as="geometry" />
|
<mxGeometry x="90" y="345" width="250" height="105" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-1" value="local compute <br>node" style="shape=step;perimeter=stepPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#6d8764;fontColor=#ffffff;strokeColor=#3A5431;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-1" value="local compute <br>node" style="shape=step;perimeter=stepPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#6d8764;fontColor=#ffffff;strokeColor=#3A5431;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="90" y="380" width="120" height="50" as="geometry" />
|
<mxGeometry x="90" y="380" width="120" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="ia-fclrWNqMUroYMcw65-2" target="ia-fclrWNqMUroYMcw65-28">
|
<mxCell id="ia-fclrWNqMUroYMcw65-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="ia-fclrWNqMUroYMcw65-2" target="ia-fclrWNqMUroYMcw65-28" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-2" value="my device<br>&nbsp;compute <br>node" style="shape=step;perimeter=stepPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#6d8764;fontColor=#ffffff;strokeColor=#3A5431;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-2" value="my device<br>&nbsp;compute <br>node" style="shape=step;perimeter=stepPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#6d8764;fontColor=#ffffff;strokeColor=#3A5431;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="210" y="380" width="120" height="50" as="geometry" />
|
<mxGeometry x="210" y="380" width="120" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-3" value="service compute<br>node" style="shape=step;perimeter=stepPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#e3c800;fontColor=#000000;strokeColor=#B09500;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-3" value="service compute<br>node" style="shape=step;perimeter=stepPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#e3c800;fontColor=#000000;strokeColor=#B09500;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="370" y="380" width="120" height="50" as="geometry" />
|
<mxGeometry x="370" y="380" width="120" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-4" value="untruest compute<br>node" style="shape=step;perimeter=stepPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#fa6800;fontColor=#000000;strokeColor=#C73500;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-4" value="untruest compute<br>node" style="shape=step;perimeter=stepPerimeter;whiteSpace=wrap;html=1;fixedSize=1;fillColor=#fa6800;fontColor=#000000;strokeColor=#C73500;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="490" y="380" width="130" height="50" as="geometry" />
|
<mxGeometry x="490" y="380" width="130" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-18" value="TaskParams:json" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-18" value="TaskParams:json" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="280" y="50" width="120" height="40" as="geometry" />
|
<mxGeometry x="280" y="50" width="120" height="40" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-19" value="padding input:buffers" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0050ef;fontColor=#ffffff;strokeColor=#001DBC;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-19" value="padding input:buffers" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0050ef;fontColor=#ffffff;strokeColor=#001DBC;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="280" y="130" width="120" height="70" as="geometry" />
|
<mxGeometry x="280" y="130" width="120" height="70" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-22" value="Refer:Name Data" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#6a00ff;fontColor=#ffffff;strokeColor=#3700CC;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-22" value="Refer:Name Data" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#6a00ff;fontColor=#ffffff;strokeColor=#3700CC;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="280" y="90" width="120" height="40" as="geometry" />
|
<mxGeometry x="280" y="90" width="120" height="40" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-23" value="aios_kernel<br>(scheduler)" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-23" value="aios_kernel<br>(scheduler)" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="280" y="250" width="120" height="50" as="geometry" />
|
<mxGeometry x="280" y="250" width="120" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-24" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="ia-fclrWNqMUroYMcw65-19" target="ia-fclrWNqMUroYMcw65-23">
|
<mxCell id="ia-fclrWNqMUroYMcw65-24" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="ia-fclrWNqMUroYMcw65-19" target="ia-fclrWNqMUroYMcw65-23" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="430" y="240" as="sourcePoint" />
|
<mxPoint x="430" y="240" as="sourcePoint"/>
|
||||||
<mxPoint x="480" y="190" as="targetPoint" />
|
<mxPoint x="480" y="190" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-25" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="ia-fclrWNqMUroYMcw65-23" target="ia-fclrWNqMUroYMcw65-2">
|
<mxCell id="ia-fclrWNqMUroYMcw65-25" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="ia-fclrWNqMUroYMcw65-23" target="ia-fclrWNqMUroYMcw65-2" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="420" y="350" as="sourcePoint" />
|
<mxPoint x="420" y="350" as="sourcePoint"/>
|
||||||
<mxPoint x="470" y="300" as="targetPoint" />
|
<mxPoint x="470" y="300" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-26" value="Owne Nodes" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-26" value="Owne Nodes" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="90" y="345" width="100" height="30" as="geometry" />
|
<mxGeometry x="90" y="345" width="100" height="30" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-27" value="Rental Nodes" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-27" value="Rental Nodes" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="505" y="345" width="100" height="30" as="geometry" />
|
<mxGeometry x="505" y="345" width="100" height="30" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-28" value="ResultParams:json" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-28" value="ResultParams:json" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="280" y="516" width="120" height="40" as="geometry" />
|
<mxGeometry x="280" y="516" width="120" height="40" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-29" value="padding result:buffers" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0050ef;fontColor=#ffffff;strokeColor=#001DBC;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-29" value="padding result:buffers" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#0050ef;fontColor=#ffffff;strokeColor=#001DBC;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="280" y="596" width="120" height="70" as="geometry" />
|
<mxGeometry x="280" y="596" width="120" height="70" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-30" value="Refer:Name Data" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#6a00ff;fontColor=#ffffff;strokeColor=#3700CC;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-30" value="Refer:Name Data" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#6a00ff;fontColor=#ffffff;strokeColor=#3700CC;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="280" y="556" width="120" height="40" as="geometry" />
|
<mxGeometry x="280" y="556" width="120" height="40" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-34" value="有一些任务是可以分割的,这个既可以上层处理分割、合并。也可以由aios_kernel处理" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-34" value="<br><span style="color: rgb(209, 213, 219); font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &quot;Segoe UI&quot;, Roboto, Ubuntu, Cantarell, &quot;Noto Sans&quot;, sans-serif, &quot;Helvetica Neue&quot;, Arial, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Noto Color Emoji&quot;; font-size: 16px;">Some tasks can be divided, and this can be handled either at the higher layer for splitting and merging, or by the aios_kernel.</span>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;labelBackgroundColor=default;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="450" y="80" width="170" height="70" as="geometry" />
|
<mxGeometry x="450" y="80" width="170" height="150" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ia-fclrWNqMUroYMcw65-35" value="调度器的核心是结合已知compute_node的状态,与Refer数据的距离,计算的成本,运行的速度等多种要素,选择一个compute_node完成计算任务。也可包含一定的迭代重试逻辑" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ia-fclrWNqMUroYMcw65-35" value="<span style="color: rgb(209, 213, 219); font-family: Söhne, ui-sans-serif, system-ui, -apple-system, &quot;Segoe UI&quot;, Roboto, Ubuntu, Cantarell, &quot;Noto Sans&quot;, sans-serif, &quot;Helvetica Neue&quot;, Arial, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Noto Color Emoji&quot;; font-size: 16px;">The core of the scheduler is to select a compute_node to complete the computing task based on a variety of factors, such as the known status of the compute_node, the distance to the Refer data, the cost of computation, and the speed of operation. It can also include some iterative retry logic.</span>" style="text;html=1;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;labelBackgroundColor=default;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="450" y="240" width="170" height="70" as="geometry" />
|
<mxGeometry x="450" y="470" width="200" height="250" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
</root>
|
</root>
|
||||||
</mxGraphModel>
|
</mxGraphModel>
|
||||||
|
|||||||
+216
-216
@@ -1,365 +1,365 @@
|
|||||||
<mxfile host="Electron" modified="2023-08-21T08:17:59.615Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/21.6.8 Chrome/114.0.5735.289 Electron/25.5.0 Safari/537.36" etag="B6guG2NTWSku4GvC0ygf" version="21.6.8" type="device" pages="3">
|
<mxfile host="65bd71144e" pages="3">
|
||||||
<diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">
|
<diagram id="C5RBs43oDa-KdzZeNtuy" name="Page-1">
|
||||||
<mxGraphModel dx="981" dy="563" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
<mxGraphModel dx="951" dy="944" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
<root>
|
<root>
|
||||||
<mxCell id="WIyWlLk6GJQsqaUBKTNV-0" />
|
<mxCell id="WIyWlLk6GJQsqaUBKTNV-0"/>
|
||||||
<mxCell id="WIyWlLk6GJQsqaUBKTNV-1" parent="WIyWlLk6GJQsqaUBKTNV-0" />
|
<mxCell id="WIyWlLk6GJQsqaUBKTNV-1" parent="WIyWlLk6GJQsqaUBKTNV-0"/>
|
||||||
<mxCell id="WIyWlLk6GJQsqaUBKTNV-3" value="(chat) message" style="rounded=1;whiteSpace=wrap;html=1;fontSize=12;glass=0;strokeWidth=1;shadow=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
<mxCell id="WIyWlLk6GJQsqaUBKTNV-3" value="(chat) message" style="rounded=1;whiteSpace=wrap;html=1;fontSize=12;glass=0;strokeWidth=1;shadow=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="159" y="330" width="90" height="40" as="geometry" />
|
<mxGeometry x="159" y="330" width="90" height="40" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-0" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="WIyWlLk6GJQsqaUBKTNV-3" target="RbYReh6FQah4Kl5oFyjJ-1">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-0" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="WIyWlLk6GJQsqaUBKTNV-3" target="RbYReh6FQah4Kl5oFyjJ-1" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="279" y="390" as="sourcePoint" />
|
<mxPoint x="279" y="390" as="sourcePoint"/>
|
||||||
<mxPoint x="309" y="350" as="targetPoint" />
|
<mxPoint x="309" y="350" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-1" target="RbYReh6FQah4Kl5oFyjJ-2">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-8" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-1" target="RbYReh6FQah4Kl5oFyjJ-2" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-14" value="message" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-1" target="RbYReh6FQah4Kl5oFyjJ-13">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-14" value="message" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-1" target="RbYReh6FQah4Kl5oFyjJ-13" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-1" value="Workflow" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#6d8764;fontColor=#ffffff;strokeColor=#3A5431;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-1" value="Workflow" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#6d8764;fontColor=#ffffff;strokeColor=#3A5431;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="304" y="320" width="120" height="60" as="geometry" />
|
<mxGeometry x="304" y="320" width="120" height="60" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-2" value="Functions" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-2" value="Functions" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="514" y="320" width="130" height="60" as="geometry" />
|
<mxGeometry x="514" y="320" width="130" height="60" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-6" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-3" target="RbYReh6FQah4Kl5oFyjJ-4">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-6" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-3" target="RbYReh6FQah4Kl5oFyjJ-4" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-3" value="(phicyal / virtual)<br>environment" style="shape=cube;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;darkOpacity=0.05;darkOpacity2=0.1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-3" value="(phicyal / virtual)<br>environment" style="shape=cube;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;darkOpacity=0.05;darkOpacity2=0.1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="304" y="120" width="120" height="80" as="geometry" />
|
<mxGeometry x="304" y="120" width="120" height="80" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-7" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-4" target="RbYReh6FQah4Kl5oFyjJ-1">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-7" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-4" target="RbYReh6FQah4Kl5oFyjJ-1" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-4" value="(event) message" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-4" value="(event) message" style="rounded=1;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="304" y="240" width="120" height="40" as="geometry" />
|
<mxGeometry x="304" y="240" width="120" height="40" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-9" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=120;entryDy=50;entryPerimeter=0;dashed=1;dashPattern=8 8;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-2" target="RbYReh6FQah4Kl5oFyjJ-3">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-9" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=120;entryDy=50;entryPerimeter=0;dashed=1;dashPattern=8 8;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-2" target="RbYReh6FQah4Kl5oFyjJ-3" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="564" y="290" as="sourcePoint" />
|
<mxPoint x="564" y="290" as="sourcePoint"/>
|
||||||
<mxPoint x="614" y="240" as="targetPoint" />
|
<mxPoint x="614" y="240" as="targetPoint"/>
|
||||||
<Array as="points">
|
<Array as="points">
|
||||||
<mxPoint x="579" y="170" />
|
<mxPoint x="579" y="170"/>
|
||||||
</Array>
|
</Array>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-10" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.16;entryY=0.55;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-2" target="RbYReh6FQah4Kl5oFyjJ-11">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-10" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.16;entryY=0.55;entryDx=0;entryDy=0;entryPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-2" target="RbYReh6FQah4Kl5oFyjJ-11" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="684" y="320" as="sourcePoint" />
|
<mxPoint x="684" y="320" as="sourcePoint"/>
|
||||||
<mxPoint x="714" y="350" as="targetPoint" />
|
<mxPoint x="714" y="350" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-11" value="Exist Service" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-11" value="Exist Service" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="689" y="300" width="130" height="90" as="geometry" />
|
<mxGeometry x="689" y="300" width="130" height="90" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-13" value="sub / other workflow" style="whiteSpace=wrap;html=1;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-13" value="sub / other workflow" style="whiteSpace=wrap;html=1;rounded=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="304" y="480" width="120" height="50" as="geometry" />
|
<mxGeometry x="304" y="480" width="120" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-15" value="response message" style="endArrow=classic;html=1;rounded=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-1" target="RbYReh6FQah4Kl5oFyjJ-17">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-15" value="response message" style="endArrow=classic;html=1;rounded=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-1" target="RbYReh6FQah4Kl5oFyjJ-17" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="129" y="480" as="sourcePoint" />
|
<mxPoint x="129" y="480" as="sourcePoint"/>
|
||||||
<mxPoint x="99" y="420" as="targetPoint" />
|
<mxPoint x="99" y="420" as="targetPoint"/>
|
||||||
<Array as="points">
|
<Array as="points">
|
||||||
<mxPoint x="334" y="420" />
|
<mxPoint x="334" y="420"/>
|
||||||
<mxPoint x="49" y="420" />
|
<mxPoint x="49" y="420"/>
|
||||||
</Array>
|
</Array>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-18" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-17" target="WIyWlLk6GJQsqaUBKTNV-3">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-18" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-17" target="WIyWlLk6GJQsqaUBKTNV-3" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-17" value="Personal" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-17" value="Personal" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="9" y="310" width="80" height="80" as="geometry" />
|
<mxGeometry x="9" y="310" width="80" height="80" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-19" value="" style="shape=xor;whiteSpace=wrap;html=1;rotation=-90;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-19" value="" style="shape=xor;whiteSpace=wrap;html=1;rotation=-90;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="309" y="67" width="20" height="20" as="geometry" />
|
<mxGeometry x="309" y="67" width="20" height="20" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-21" value="" style="shape=xor;whiteSpace=wrap;html=1;rotation=-90;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-21" value="" style="shape=xor;whiteSpace=wrap;html=1;rotation=-90;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="347" y="67" width="20" height="20" as="geometry" />
|
<mxGeometry x="347" y="67" width="20" height="20" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-22" value="" style="shape=xor;whiteSpace=wrap;html=1;rotation=-90;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-22" value="" style="shape=xor;whiteSpace=wrap;html=1;rotation=-90;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="386" y="67" width="20" height="20" as="geometry" />
|
<mxGeometry x="386" y="67" width="20" height="20" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-23" value="IoT Devices" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-23" value="IoT Devices" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="240" y="67" width="60" height="30" as="geometry" />
|
<mxGeometry x="240" y="67" width="60" height="30" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-25" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.25;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.122;entryY=0.008;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-19" target="RbYReh6FQah4Kl5oFyjJ-3">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-25" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.25;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.122;entryY=0.008;entryDx=0;entryDy=0;entryPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-19" target="RbYReh6FQah4Kl5oFyjJ-3" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="240" y="170" as="sourcePoint" />
|
<mxPoint x="240" y="170" as="sourcePoint"/>
|
||||||
<mxPoint x="290" y="120" as="targetPoint" />
|
<mxPoint x="290" y="120" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-26" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.25;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0;entryDx=50;entryDy=0;entryPerimeter=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-21">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-26" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.25;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0;entryDx=50;entryDy=0;entryPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-21" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="443" y="120" as="sourcePoint" />
|
<mxPoint x="443" y="120" as="sourcePoint"/>
|
||||||
<mxPoint x="357" y="120.00000000000011" as="targetPoint" />
|
<mxPoint x="357" y="120.00000000000011" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="RbYReh6FQah4Kl5oFyjJ-27" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.25;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.766;entryY=0.02;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-22" target="RbYReh6FQah4Kl5oFyjJ-3">
|
<mxCell id="RbYReh6FQah4Kl5oFyjJ-27" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.25;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.766;entryY=0.02;entryDx=0;entryDy=0;entryPerimeter=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" source="RbYReh6FQah4Kl5oFyjJ-22" target="RbYReh6FQah4Kl5oFyjJ-3" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="430" y="140" as="sourcePoint" />
|
<mxPoint x="430" y="140" as="sourcePoint"/>
|
||||||
<mxPoint x="480" y="90" as="targetPoint" />
|
<mxPoint x="480" y="90" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="HvRWRVSjofeyYJQyU3aa-0" value="Sub workflow is not visiable for others<br><br>Sub worflow can share roles&nbsp;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="HvRWRVSjofeyYJQyU3aa-0" value="Sub workflow is not visiable for others<br><br>Sub worflow can share roles&nbsp;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="160" y="480" width="140" height="70" as="geometry" />
|
<mxGeometry x="160" y="480" width="140" height="70" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="HvRWRVSjofeyYJQyU3aa-1" value="Chat with AI Agent is like chat with a workflow which have only one agent and no rules" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="HvRWRVSjofeyYJQyU3aa-1" value="Chat with AI Agent is like chat with a workflow which have only one agent and no rules" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="70" y="150" width="150" height="80" as="geometry" />
|
<mxGeometry x="70" y="150" width="150" height="80" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ed6Jjq-fMpksm2tlv9Oi-0" value="inner&nbsp;<br>environment" style="shape=cube;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;darkOpacity=0.05;darkOpacity2=0.1;size=10;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ed6Jjq-fMpksm2tlv9Oi-0" value="inner&nbsp;<br>environment" style="shape=cube;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;darkOpacity=0.05;darkOpacity2=0.1;size=10;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="386" y="360" width="84" height="40" as="geometry" />
|
<mxGeometry x="386" y="360" width="84" height="40" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ed6Jjq-fMpksm2tlv9Oi-1" value="Environment could shared with workflows" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ed6Jjq-fMpksm2tlv9Oi-1" value="Environment could shared with workflows" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="440" y="120" width="120" height="30" as="geometry" />
|
<mxGeometry x="440" y="120" width="120" height="30" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="ed6Jjq-fMpksm2tlv9Oi-2" value="Inner environment&nbsp; could be used as Context(FileSystem)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="WIyWlLk6GJQsqaUBKTNV-1">
|
<mxCell id="ed6Jjq-fMpksm2tlv9Oi-2" value="Inner environment&nbsp; could be used as Context(FileSystem)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="WIyWlLk6GJQsqaUBKTNV-1" vertex="1">
|
||||||
<mxGeometry x="413" y="410" width="110" height="30" as="geometry" />
|
<mxGeometry x="413" y="410" width="110" height="30" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
</root>
|
</root>
|
||||||
</mxGraphModel>
|
</mxGraphModel>
|
||||||
</diagram>
|
</diagram>
|
||||||
<diagram id="kWxfmPxtNxOAf0a73TCG" name="Page-2">
|
<diagram id="kWxfmPxtNxOAf0a73TCG" name="Page-2">
|
||||||
<mxGraphModel dx="1421" dy="816" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
<mxGraphModel dx="951" dy="944" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||||
<root>
|
<root>
|
||||||
<mxCell id="0" />
|
<mxCell id="0"/>
|
||||||
<mxCell id="1" parent="0" />
|
<mxCell id="1" parent="0"/>
|
||||||
<mxCell id="VGzDL9xesOOnN_l_G2Ij-1" value="<h1>Workflow rules</h1><p>workflow rules(prompt)</p>" style="text;html=1;strokeColor=none;fillColor=none;spacing=5;spacingTop=-20;whiteSpace=wrap;overflow=hidden;rounded=0;" vertex="1" parent="1">
|
<mxCell id="VGzDL9xesOOnN_l_G2Ij-1" value="<h1>Workflow rules</h1><p>workflow rules(prompt)</p>" style="text;html=1;strokeColor=none;fillColor=none;spacing=5;spacingTop=-20;whiteSpace=wrap;overflow=hidden;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="70" y="800" width="190" height="120" as="geometry" />
|
<mxGeometry x="70" y="800" width="190" height="120" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="VGzDL9xesOOnN_l_G2Ij-2" value="<h1>Workflow roles</h1><p>AI Agent groups</p><p>Project Manager : Alex</p><p>Programer : Bobl</p><p><br></p>" style="text;html=1;strokeColor=none;fillColor=none;spacing=5;spacingTop=-20;whiteSpace=wrap;overflow=hidden;rounded=0;" vertex="1" parent="1">
|
<mxCell id="VGzDL9xesOOnN_l_G2Ij-2" value="<h1>Workflow roles</h1><p>AI Agent groups</p><p>Project Manager : Alex</p><p>Programer : Bobl</p><p><br></p>" style="text;html=1;strokeColor=none;fillColor=none;spacing=5;spacingTop=-20;whiteSpace=wrap;overflow=hidden;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="320" y="790" width="190" height="120" as="geometry" />
|
<mxGeometry x="320" y="790" width="190" height="120" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="41KxsEdFswCCPQnavNoU-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="VGzDL9xesOOnN_l_G2Ij-3" target="VGzDL9xesOOnN_l_G2Ij-4">
|
<mxCell id="41KxsEdFswCCPQnavNoU-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="VGzDL9xesOOnN_l_G2Ij-3" target="VGzDL9xesOOnN_l_G2Ij-4" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="41KxsEdFswCCPQnavNoU-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="VGzDL9xesOOnN_l_G2Ij-3" target="VGzDL9xesOOnN_l_G2Ij-7">
|
<mxCell id="41KxsEdFswCCPQnavNoU-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="VGzDL9xesOOnN_l_G2Ij-3" target="VGzDL9xesOOnN_l_G2Ij-7" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="VGzDL9xesOOnN_l_G2Ij-3" value="Message" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
<mxCell id="VGzDL9xesOOnN_l_G2Ij-3" value="Message" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="340" y="170" width="100" height="40" as="geometry" />
|
<mxGeometry x="340" y="170" width="100" height="40" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="VGzDL9xesOOnN_l_G2Ij-4" value="inner filter&nbsp;" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;" vertex="1" parent="1">
|
<mxCell id="VGzDL9xesOOnN_l_G2Ij-4" value="inner filter&nbsp;" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="150" y="260" width="120" height="50" as="geometry" />
|
<mxGeometry x="150" y="260" width="120" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="VGzDL9xesOOnN_l_G2Ij-5" value="roleA" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
<mxCell id="VGzDL9xesOOnN_l_G2Ij-5" value="roleA" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="80" y="350" width="110" height="60" as="geometry" />
|
<mxGeometry x="80" y="350" width="110" height="60" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="41KxsEdFswCCPQnavNoU-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="VGzDL9xesOOnN_l_G2Ij-6" target="VGzDL9xesOOnN_l_G2Ij-8">
|
<mxCell id="41KxsEdFswCCPQnavNoU-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="VGzDL9xesOOnN_l_G2Ij-6" target="VGzDL9xesOOnN_l_G2Ij-8" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="VGzDL9xesOOnN_l_G2Ij-6" value="roleB" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
<mxCell id="VGzDL9xesOOnN_l_G2Ij-6" value="roleB" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="240" y="350" width="110" height="60" as="geometry" />
|
<mxGeometry x="240" y="350" width="110" height="60" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="41KxsEdFswCCPQnavNoU-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="VGzDL9xesOOnN_l_G2Ij-7">
|
<mxCell id="41KxsEdFswCCPQnavNoU-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="VGzDL9xesOOnN_l_G2Ij-7" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry">
|
<mxGeometry relative="1" as="geometry">
|
||||||
<mxPoint x="570.0344827586209" y="350" as="targetPoint" />
|
<mxPoint x="570.0344827586209" y="350" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="VGzDL9xesOOnN_l_G2Ij-7" value="Workflow rules" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
<mxCell id="VGzDL9xesOOnN_l_G2Ij-7" value="Workflow rules" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="520" y="260" width="100" height="50" as="geometry" />
|
<mxGeometry x="520" y="260" width="100" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="VGzDL9xesOOnN_l_G2Ij-8" value="Final Result of Message" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
<mxCell id="VGzDL9xesOOnN_l_G2Ij-8" value="Final Result of Message" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="340" y="590" width="100" height="50" as="geometry" />
|
<mxGeometry x="340" y="590" width="100" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="41KxsEdFswCCPQnavNoU-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="VGzDL9xesOOnN_l_G2Ij-9" target="VGzDL9xesOOnN_l_G2Ij-8">
|
<mxCell id="41KxsEdFswCCPQnavNoU-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="VGzDL9xesOOnN_l_G2Ij-9" target="VGzDL9xesOOnN_l_G2Ij-8" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="VGzDL9xesOOnN_l_G2Ij-9" value="Result Merge" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
<mxCell id="VGzDL9xesOOnN_l_G2Ij-9" value="Result Merge" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="521" y="530" width="100" height="40" as="geometry" />
|
<mxGeometry x="521" y="530" width="100" height="40" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="41KxsEdFswCCPQnavNoU-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="VGzDL9xesOOnN_l_G2Ij-10" target="VGzDL9xesOOnN_l_G2Ij-9">
|
<mxCell id="41KxsEdFswCCPQnavNoU-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="VGzDL9xesOOnN_l_G2Ij-10" target="VGzDL9xesOOnN_l_G2Ij-9" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="VGzDL9xesOOnN_l_G2Ij-10" value="roleC" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
<mxCell id="VGzDL9xesOOnN_l_G2Ij-10" value="roleC" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="435" y="350" width="110" height="60" as="geometry" />
|
<mxGeometry x="435" y="350" width="110" height="60" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="41KxsEdFswCCPQnavNoU-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="VGzDL9xesOOnN_l_G2Ij-11" target="41KxsEdFswCCPQnavNoU-7">
|
<mxCell id="41KxsEdFswCCPQnavNoU-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="VGzDL9xesOOnN_l_G2Ij-11" target="41KxsEdFswCCPQnavNoU-7" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="VGzDL9xesOOnN_l_G2Ij-11" value="roleD" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
<mxCell id="VGzDL9xesOOnN_l_G2Ij-11" value="roleD" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="595" y="350" width="110" height="60" as="geometry" />
|
<mxGeometry x="595" y="350" width="110" height="60" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="VGzDL9xesOOnN_l_G2Ij-12" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="VGzDL9xesOOnN_l_G2Ij-4" target="VGzDL9xesOOnN_l_G2Ij-5">
|
<mxCell id="VGzDL9xesOOnN_l_G2Ij-12" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0;entryDx=0;entryDy=0;" parent="1" source="VGzDL9xesOOnN_l_G2Ij-4" target="VGzDL9xesOOnN_l_G2Ij-5" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="160" y="510" as="sourcePoint" />
|
<mxPoint x="160" y="510" as="sourcePoint"/>
|
||||||
<mxPoint x="210" y="460" as="targetPoint" />
|
<mxPoint x="210" y="460" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="VGzDL9xesOOnN_l_G2Ij-13" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="VGzDL9xesOOnN_l_G2Ij-4" target="VGzDL9xesOOnN_l_G2Ij-6">
|
<mxCell id="VGzDL9xesOOnN_l_G2Ij-13" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" source="VGzDL9xesOOnN_l_G2Ij-4" target="VGzDL9xesOOnN_l_G2Ij-6" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="210" y="510" as="sourcePoint" />
|
<mxPoint x="210" y="510" as="sourcePoint"/>
|
||||||
<mxPoint x="260" y="460" as="targetPoint" />
|
<mxPoint x="260" y="460" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="41KxsEdFswCCPQnavNoU-1" value="" style="shape=cross;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
<mxCell id="41KxsEdFswCCPQnavNoU-1" value="" style="shape=cross;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="556" y="364" width="30" height="30" as="geometry" />
|
<mxGeometry x="556" y="364" width="30" height="30" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="41KxsEdFswCCPQnavNoU-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="41KxsEdFswCCPQnavNoU-7" target="VGzDL9xesOOnN_l_G2Ij-9">
|
<mxCell id="41KxsEdFswCCPQnavNoU-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="41KxsEdFswCCPQnavNoU-7" target="VGzDL9xesOOnN_l_G2Ij-9" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="41KxsEdFswCCPQnavNoU-7" value="call function or&nbsp;<br>send message" style="shape=parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;html=1;fixedSize=1;" vertex="1" parent="1">
|
<mxCell id="41KxsEdFswCCPQnavNoU-7" value="call function or&nbsp;<br>send message" style="shape=parallelogram;perimeter=parallelogramPerimeter;whiteSpace=wrap;html=1;fixedSize=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="592.5" y="460" width="115" height="30" as="geometry" />
|
<mxGeometry x="592.5" y="460" width="115" height="30" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="q_eHDVuD3DBh6_VEKgap-2" value="message process by filter,select one role do LLM and get RESULT of input" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
<mxCell id="q_eHDVuD3DBh6_VEKgap-2" value="message process by filter,select one role do LLM and get RESULT of input" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="90" y="190" width="165" height="30" as="geometry" />
|
<mxGeometry x="90" y="190" width="165" height="30" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="q_eHDVuD3DBh6_VEKgap-3" value="message process by rules,select mutil role do LLM and merge RESULT of input" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
<mxCell id="q_eHDVuD3DBh6_VEKgap-3" value="message process by rules,select mutil role do LLM and merge RESULT of input" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="510" y="180" width="165" height="30" as="geometry" />
|
<mxGeometry x="510" y="180" width="165" height="30" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="q_eHDVuD3DBh6_VEKgap-5" value="如果一个工作流有3个role参与,每个人都需要调用函数并分析结果,那么要进行至少6次推理" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
<mxCell id="q_eHDVuD3DBh6_VEKgap-5" value="如果一个工作流有3个role参与,每个人都需要调用函数并分析结果,那么要进行至少6次推理" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="483" y="640" width="174" height="40" as="geometry" />
|
<mxGeometry x="483" y="640" width="174" height="40" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="q_eHDVuD3DBh6_VEKgap-6" value="这里是基于规则的合并,给另一个Role合并是多输入Agent流程" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
<mxCell id="q_eHDVuD3DBh6_VEKgap-6" value="这里是基于规则的合并,给另一个Role合并是多输入Agent流程" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="635" y="570" width="160" height="30" as="geometry" />
|
<mxGeometry x="635" y="570" width="160" height="30" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
</root>
|
</root>
|
||||||
</mxGraphModel>
|
</mxGraphModel>
|
||||||
</diagram>
|
</diagram>
|
||||||
<diagram id="7NYJTgo0U9cdVshLy85U" name="Page-3">
|
<diagram id="7NYJTgo0U9cdVshLy85U" name="Page-3">
|
||||||
<mxGraphModel dx="1177" dy="676" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
<mxGraphModel dx="951" dy="944" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||||
<root>
|
<root>
|
||||||
<mxCell id="0" />
|
<mxCell id="0"/>
|
||||||
<mxCell id="1" parent="0" />
|
<mxCell id="1" parent="0"/>
|
||||||
<mxCell id="zJVYyOSlNiCVBlA5jEf0-2" value="Agent Sessions<br>Data" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontSize=11;" vertex="1" parent="1">
|
<mxCell id="zJVYyOSlNiCVBlA5jEf0-2" value="Agent Sessions<br>Data" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontSize=11;" parent="1" vertex="1">
|
||||||
<mxGeometry x="110" y="533" width="80" height="70" as="geometry" />
|
<mxGeometry x="110" y="533" width="80" height="70" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="8StUH8aFnwlRlHm0zShF-2" value="Small LLM, Train With Personal Data" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
|
<mxCell id="8StUH8aFnwlRlHm0zShF-2" value="Small LLM, Train With Personal Data" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="270" y="258" width="140" height="50" as="geometry" />
|
<mxGeometry x="270" y="258" width="140" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="awKuOLItvF_EOGf5wS2x-4" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
<mxCell id="awKuOLItvF_EOGf5wS2x-4" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="20" y="78" width="160" height="360" as="geometry" />
|
<mxGeometry x="20" y="78" width="160" height="360" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="S5MjekdSblNa5itYb4Ee-13" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="8StUH8aFnwlRlHm0zShF-1" target="SPnvrlBiOLhgEaWxmdK3-4">
|
<mxCell id="S5MjekdSblNa5itYb4Ee-13" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="8StUH8aFnwlRlHm0zShF-1" target="SPnvrlBiOLhgEaWxmdK3-4" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="8StUH8aFnwlRlHm0zShF-1" value="LLM<br>(Common Sence)" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
|
<mxCell id="8StUH8aFnwlRlHm0zShF-1" value="LLM<br>(Common Sence)" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="250" y="218" width="140" height="50" as="geometry" />
|
<mxGeometry x="250" y="218" width="140" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="8StUH8aFnwlRlHm0zShF-3" value="ControlNet<br>base on Agent Memory" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
|
<mxCell id="8StUH8aFnwlRlHm0zShF-3" value="ControlNet<br>base on Agent Memory" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="250" y="108" width="140" height="50" as="geometry" />
|
<mxGeometry x="250" y="108" width="140" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="8StUH8aFnwlRlHm0zShF-4" value="Agent人格助记词" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;size=0.25;" vertex="1" parent="1">
|
<mxCell id="8StUH8aFnwlRlHm0zShF-4" value="Agent人格助记词" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;size=0.25;" parent="1" vertex="1">
|
||||||
<mxGeometry x="40" y="108" width="120" height="50" as="geometry" />
|
<mxGeometry x="40" y="108" width="120" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="8StUH8aFnwlRlHm0zShF-5" value="Role助记词" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;size=0.25;" vertex="1" parent="1">
|
<mxCell id="8StUH8aFnwlRlHm0zShF-5" value="Role助记词" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;size=0.25;" parent="1" vertex="1">
|
||||||
<mxGeometry x="40" y="168" width="120" height="50" as="geometry" />
|
<mxGeometry x="40" y="168" width="120" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="8StUH8aFnwlRlHm0zShF-6" value="Workflow Rules助记词" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;size=0.25;" vertex="1" parent="1">
|
<mxCell id="8StUH8aFnwlRlHm0zShF-6" value="Workflow Rules助记词" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;size=0.25;" parent="1" vertex="1">
|
||||||
<mxGeometry x="40" y="235.5" width="120" height="52.5" as="geometry" />
|
<mxGeometry x="40" y="235.5" width="120" height="52.5" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="8StUH8aFnwlRlHm0zShF-7" value="访问Knowlege构造助记词" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;size=0.25;" vertex="1" parent="1">
|
<mxCell id="8StUH8aFnwlRlHm0zShF-7" value="访问Knowlege构造助记词" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;size=0.25;" parent="1" vertex="1">
|
||||||
<mxGeometry x="40" y="378" width="120" height="50" as="geometry" />
|
<mxGeometry x="40" y="378" width="120" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="Tz-ThZOieDqqDBRXvXnh-1" value="Invoke the function and wait for the necessary response." style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;fontSize=11;" vertex="1" parent="1">
|
<mxCell id="Tz-ThZOieDqqDBRXvXnh-1" value="Invoke the function and wait for the necessary response." style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;fontSize=11;" parent="1" vertex="1">
|
||||||
<mxGeometry x="600" y="33" width="110" height="70" as="geometry" />
|
<mxGeometry x="600" y="33" width="110" height="70" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="awKuOLItvF_EOGf5wS2x-2" value="Send Message and wait for the necessary response." style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;glass=0;strokeWidth=1;shadow=0;" vertex="1" parent="1">
|
<mxCell id="awKuOLItvF_EOGf5wS2x-2" value="Send Message and wait for the necessary response." style="rounded=1;whiteSpace=wrap;html=1;fontSize=11;glass=0;strokeWidth=1;shadow=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="610" y="153" width="90" height="70" as="geometry" />
|
<mxGeometry x="610" y="153" width="90" height="70" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="awKuOLItvF_EOGf5wS2x-5" value="Input Prompts" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
<mxCell id="awKuOLItvF_EOGf5wS2x-5" value="Input Prompts" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="60" y="78" width="80" height="30" as="geometry" />
|
<mxGeometry x="60" y="78" width="80" height="30" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="awKuOLItvF_EOGf5wS2x-7" value="Responce Prompts" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
<mxCell id="awKuOLItvF_EOGf5wS2x-7" value="Responce Prompts" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="740" y="103" width="80" height="40" as="geometry" />
|
<mxGeometry x="740" y="103" width="80" height="40" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="S5MjekdSblNa5itYb4Ee-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="awKuOLItvF_EOGf5wS2x-8" target="awKuOLItvF_EOGf5wS2x-9">
|
<mxCell id="S5MjekdSblNa5itYb4Ee-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="awKuOLItvF_EOGf5wS2x-8" target="awKuOLItvF_EOGf5wS2x-9" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="awKuOLItvF_EOGf5wS2x-8" value="LLM Competion" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
|
<mxCell id="awKuOLItvF_EOGf5wS2x-8" value="LLM Competion" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="720" y="226.75" width="120" height="40" as="geometry" />
|
<mxGeometry x="720" y="226.75" width="120" height="40" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="SPnvrlBiOLhgEaWxmdK3-9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="awKuOLItvF_EOGf5wS2x-9" target="SPnvrlBiOLhgEaWxmdK3-1">
|
<mxCell id="SPnvrlBiOLhgEaWxmdK3-9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="awKuOLItvF_EOGf5wS2x-9" target="SPnvrlBiOLhgEaWxmdK3-1" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="awKuOLItvF_EOGf5wS2x-9" value="Final Result<br>Of Message<br>(can be None)" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
<mxCell id="awKuOLItvF_EOGf5wS2x-9" value="Final Result<br>Of Message<br>(can be None)" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="450" y="363" width="120" height="80" as="geometry" />
|
<mxGeometry x="450" y="363" width="120" height="80" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="SPnvrlBiOLhgEaWxmdK3-1" value="Storage Result in agent session and workflow session" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
<mxCell id="SPnvrlBiOLhgEaWxmdK3-1" value="Storage Result in agent session and workflow session" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="450" y="483" width="120" height="60" as="geometry" />
|
<mxGeometry x="450" y="483" width="120" height="60" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="SPnvrlBiOLhgEaWxmdK3-2" value="可用Function助记词" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;size=0.25;" vertex="1" parent="1">
|
<mxCell id="SPnvrlBiOLhgEaWxmdK3-2" value="可用Function助记词" style="shape=document;whiteSpace=wrap;html=1;boundedLbl=1;size=0.25;" parent="1" vertex="1">
|
||||||
<mxGeometry x="40" y="308" width="120" height="50" as="geometry" />
|
<mxGeometry x="40" y="308" width="120" height="50" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="SPnvrlBiOLhgEaWxmdK3-7" value="Yes" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="SPnvrlBiOLhgEaWxmdK3-4" target="SPnvrlBiOLhgEaWxmdK3-6">
|
<mxCell id="SPnvrlBiOLhgEaWxmdK3-7" value="Yes" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="SPnvrlBiOLhgEaWxmdK3-4" target="SPnvrlBiOLhgEaWxmdK3-6" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="SPnvrlBiOLhgEaWxmdK3-8" value="No" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="SPnvrlBiOLhgEaWxmdK3-4" target="awKuOLItvF_EOGf5wS2x-9">
|
<mxCell id="SPnvrlBiOLhgEaWxmdK3-8" value="No" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="SPnvrlBiOLhgEaWxmdK3-4" target="awKuOLItvF_EOGf5wS2x-9" edge="1">
|
||||||
<mxGeometry relative="1" as="geometry" />
|
<mxGeometry relative="1" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="SPnvrlBiOLhgEaWxmdK3-4" value="推理结果<br>需要进一步处理?" style="rhombus;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
<mxCell id="SPnvrlBiOLhgEaWxmdK3-4" value="推理结果<br>需要进一步处理?" style="rhombus;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||||
<mxGeometry x="440" y="203" width="140" height="80" as="geometry" />
|
<mxGeometry x="440" y="203" width="140" height="80" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="SPnvrlBiOLhgEaWxmdK3-6" value="Call Funstion or send message?" style="rhombus;whiteSpace=wrap;html=1;fontSize=11;" vertex="1" parent="1">
|
<mxCell id="SPnvrlBiOLhgEaWxmdK3-6" value="Call Funstion or send message?" style="rhombus;whiteSpace=wrap;html=1;fontSize=11;" parent="1" vertex="1">
|
||||||
<mxGeometry x="440" y="78" width="140" height="80" as="geometry" />
|
<mxGeometry x="440" y="78" width="140" height="80" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="S5MjekdSblNa5itYb4Ee-3" value="Call" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="SPnvrlBiOLhgEaWxmdK3-6" target="Tz-ThZOieDqqDBRXvXnh-1">
|
<mxCell id="S5MjekdSblNa5itYb4Ee-3" value="Call" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="SPnvrlBiOLhgEaWxmdK3-6" target="Tz-ThZOieDqqDBRXvXnh-1" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="410" y="113" as="sourcePoint" />
|
<mxPoint x="410" y="113" as="sourcePoint"/>
|
||||||
<mxPoint x="460" y="63" as="targetPoint" />
|
<mxPoint x="460" y="63" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="S5MjekdSblNa5itYb4Ee-4" value="Send" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="SPnvrlBiOLhgEaWxmdK3-6" target="awKuOLItvF_EOGf5wS2x-2">
|
<mxCell id="S5MjekdSblNa5itYb4Ee-4" value="Send" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="SPnvrlBiOLhgEaWxmdK3-6" target="awKuOLItvF_EOGf5wS2x-2" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="560" y="193" as="sourcePoint" />
|
<mxPoint x="560" y="193" as="sourcePoint"/>
|
||||||
<mxPoint x="610" y="143" as="targetPoint" />
|
<mxPoint x="610" y="143" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="S5MjekdSblNa5itYb4Ee-5" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="awKuOLItvF_EOGf5wS2x-2" target="awKuOLItvF_EOGf5wS2x-7">
|
<mxCell id="S5MjekdSblNa5itYb4Ee-5" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="awKuOLItvF_EOGf5wS2x-2" target="awKuOLItvF_EOGf5wS2x-7" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="720" y="213" as="sourcePoint" />
|
<mxPoint x="720" y="213" as="sourcePoint"/>
|
||||||
<mxPoint x="770" y="163" as="targetPoint" />
|
<mxPoint x="770" y="163" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="S5MjekdSblNa5itYb4Ee-6" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Tz-ThZOieDqqDBRXvXnh-1" target="awKuOLItvF_EOGf5wS2x-7">
|
<mxCell id="S5MjekdSblNa5itYb4Ee-6" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="Tz-ThZOieDqqDBRXvXnh-1" target="awKuOLItvF_EOGf5wS2x-7" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="750" y="93" as="sourcePoint" />
|
<mxPoint x="750" y="93" as="sourcePoint"/>
|
||||||
<mxPoint x="800" y="43" as="targetPoint" />
|
<mxPoint x="800" y="43" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="S5MjekdSblNa5itYb4Ee-7" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="awKuOLItvF_EOGf5wS2x-7" target="awKuOLItvF_EOGf5wS2x-8">
|
<mxCell id="S5MjekdSblNa5itYb4Ee-7" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="awKuOLItvF_EOGf5wS2x-7" target="awKuOLItvF_EOGf5wS2x-8" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="750" y="213" as="sourcePoint" />
|
<mxPoint x="750" y="213" as="sourcePoint"/>
|
||||||
<mxPoint x="800" y="163" as="targetPoint" />
|
<mxPoint x="800" y="163" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="S5MjekdSblNa5itYb4Ee-10" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1">
|
<mxCell id="S5MjekdSblNa5itYb4Ee-10" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="330" y="218" as="sourcePoint" />
|
<mxPoint x="330" y="218" as="sourcePoint"/>
|
||||||
<mxPoint x="330" y="158" as="targetPoint" />
|
<mxPoint x="330" y="158" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="S5MjekdSblNa5itYb4Ee-12" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fillColor=#6d8764;strokeColor=#3A5431;" edge="1" parent="1">
|
<mxCell id="S5MjekdSblNa5itYb4Ee-12" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fillColor=#6d8764;strokeColor=#3A5431;" parent="1" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="200" y="251.75" as="sourcePoint" />
|
<mxPoint x="200" y="251.75" as="sourcePoint"/>
|
||||||
<mxPoint x="240" y="252" as="targetPoint" />
|
<mxPoint x="240" y="252" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="S5MjekdSblNa5itYb4Ee-15" value="Real Time Enviroment Knowlege" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontSize=11;" vertex="1" parent="1">
|
<mxCell id="S5MjekdSblNa5itYb4Ee-15" value="Real Time Enviroment Knowlege" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontSize=11;" parent="1" vertex="1">
|
||||||
<mxGeometry x="10" y="533" width="80" height="70" as="geometry" />
|
<mxGeometry x="10" y="533" width="80" height="70" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="zJVYyOSlNiCVBlA5jEf0-1" value="Workflow Context Data" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontSize=11;" vertex="1" parent="1">
|
<mxCell id="zJVYyOSlNiCVBlA5jEf0-1" value="Workflow Context Data" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontSize=11;" parent="1" vertex="1">
|
||||||
<mxGeometry x="110" y="473" width="80" height="70" as="geometry" />
|
<mxGeometry x="110" y="473" width="80" height="70" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="S5MjekdSblNa5itYb4Ee-14" value="OOD's KnowlegeBase" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontSize=11;" vertex="1" parent="1">
|
<mxCell id="S5MjekdSblNa5itYb4Ee-14" value="OOD's KnowlegeBase" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;fontSize=11;" parent="1" vertex="1">
|
||||||
<mxGeometry x="10" y="473" width="80" height="70" as="geometry" />
|
<mxGeometry x="10" y="473" width="80" height="70" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="zJVYyOSlNiCVBlA5jEf0-3" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fillColor=#647687;strokeColor=#314354;" edge="1" parent="1" target="8StUH8aFnwlRlHm0zShF-7">
|
<mxCell id="zJVYyOSlNiCVBlA5jEf0-3" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fillColor=#647687;strokeColor=#314354;" parent="1" target="8StUH8aFnwlRlHm0zShF-7" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="100" y="463" as="sourcePoint" />
|
<mxPoint x="100" y="463" as="sourcePoint"/>
|
||||||
<mxPoint x="130" y="433" as="targetPoint" />
|
<mxPoint x="130" y="433" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="iPE2hx-tEKFiySbPAp22-1" value="<font style="font-size: 11px;">可用Function受到人格和Workflow的共同影响</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
<mxCell id="iPE2hx-tEKFiySbPAp22-1" value="<font style="font-size: 11px;">可用Function受到人格和Workflow的共同影响</font>" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
|
||||||
<mxGeometry x="190" y="318" width="130" height="30" as="geometry" />
|
<mxGeometry x="190" y="318" width="130" height="30" as="geometry"/>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="iPE2hx-tEKFiySbPAp22-2" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="SPnvrlBiOLhgEaWxmdK3-2" target="iPE2hx-tEKFiySbPAp22-1">
|
<mxCell id="iPE2hx-tEKFiySbPAp22-2" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="SPnvrlBiOLhgEaWxmdK3-2" target="iPE2hx-tEKFiySbPAp22-1" edge="1">
|
||||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
<mxPoint x="230" y="433" as="sourcePoint" />
|
<mxPoint x="230" y="433" as="sourcePoint"/>
|
||||||
<mxPoint x="280" y="383" as="targetPoint" />
|
<mxPoint x="280" y="383" as="targetPoint"/>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
</root>
|
</root>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from .environment import environment,environment_event
|
from .environment import Environment,EnvironmentEvent
|
||||||
from .agent import agent_msg,ai_agent,ai_agent_templete
|
from .agent import AgentMsg,AIAgent,AIAgentTemplete
|
||||||
from .compute_kernel import compute_kernel,compute_task
|
from .compute_kernel import ComputeKernel,ComputeTask
|
||||||
from .compute_node import compute_node,local_compute_node
|
from .compute_node import ComputeNode,LocalComputeNode
|
||||||
from .open_ai_node import open_ai_compute_node
|
from .open_ai_node import OpenAI_ComputeNode
|
||||||
from .role import ai_role,ai_role_group
|
from .role import AIRole,AIRoleGroup
|
||||||
from .workflow import ai_workflow
|
from .workflow import Workflow
|
||||||
@@ -4,7 +4,7 @@ import logging
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class agent_msg:
|
class AgentMsg:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.sender = None
|
self.sender = None
|
||||||
self.target = None
|
self.target = None
|
||||||
@@ -23,7 +23,7 @@ class agent_msg:
|
|||||||
def parser_target(self,target:str) -> None:
|
def parser_target(self,target:str) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class agent_prompt:
|
class AgentPrompt:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -35,18 +35,18 @@ class agent_prompt:
|
|||||||
|
|
||||||
# chat session store the chat history between owner and agent
|
# chat session store the chat history between owner and agent
|
||||||
# chat session might be large, so can read / write at stream mode.
|
# chat session might be large, so can read / write at stream mode.
|
||||||
class ai_chat_session:
|
class AIChatSession:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_owner_id(self) -> str:
|
def get_owner_id(self) -> str:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def append_post(self,msg:agent_msg) -> None:
|
def append_post(self,msg:AgentMsg) -> None:
|
||||||
"""append msg to session, msg is post from session (owner => msg.target)"""
|
"""append msg to session, msg is post from session (owner => msg.target)"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def append_recv(self,msg:agent_msg) -> None:
|
def append_recv(self,msg:AgentMsg) -> None:
|
||||||
"""append msg to session, msg is recv from msg'sender (msg.sender => owner)"""
|
"""append msg to session, msg is recv from msg'sender (msg.sender => owner)"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -56,11 +56,11 @@ class ai_chat_session:
|
|||||||
|
|
||||||
#TODO : add iterator interface for read chat history
|
#TODO : add iterator interface for read chat history
|
||||||
|
|
||||||
class ai_agent_templete:
|
class AIAgentTemplete:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class ai_agent:
|
class AIAgent:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.chat_sessions = None
|
self.chat_sessions = None
|
||||||
self.llm_model_name = None
|
self.llm_model_name = None
|
||||||
@@ -74,10 +74,10 @@ class ai_agent:
|
|||||||
def get_template_id(self) -> str:
|
def get_template_id(self) -> str:
|
||||||
return self.template_id
|
return self.template_id
|
||||||
|
|
||||||
def get_chat_session_for_msg(self,msg:agent_msg) -> ai_chat_session:
|
def get_chat_session_for_msg(self,msg:AgentMsg) -> AIChatSession:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_chat_session(self,sender:str,session_id:str) -> ai_chat_session:
|
def get_chat_session(self,sender:str,session_id:str) -> AIChatSession:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_llm_model_name(self) -> str:
|
def get_llm_model_name(self) -> str:
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
class ai_function:
|
class AIFunction:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.intro : str = None
|
self.intro : str = None
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ class ai_function:
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
# call chain is a combination of ai_function,group of ai_function.
|
# call chain is a combination of ai_function,group of ai_function.
|
||||||
class call_chain:
|
class CallChain:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
# aiso shell like bash of linux
|
# aiso shell like bash of linux
|
||||||
from .workflow import ai_workflow
|
from .workflow import Workflow
|
||||||
|
|
||||||
|
|
||||||
class aios_shell:
|
class AIOS_Shell:
|
||||||
def __init__(self,username:str) -> None:
|
def __init__(self,username:str) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
async def send_msg(self,msg:str,target_workflow:str) -> str:
|
async def send_msg(self,msg:str,target_workflow:str) -> str:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
async def install_workflow(self,workflow_id:ai_workflow) -> None:
|
async def install_workflow(self,workflow_id:Workflow) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -3,25 +3,25 @@ from typing import Optional
|
|||||||
import logging
|
import logging
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from .agent import agent_prompt
|
from .agent import AgentPrompt
|
||||||
from .compute_node import compute_node
|
from .compute_node import ComputeNode
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
# How to dispatch different computing tasks (some tasks may contain a large amount of state for correct execution)
|
# How to dispatch different computing tasks (some tasks may contain a large amount of state for correct execution)
|
||||||
# to suitable computing nodes, achieving a balance of speed, cost, and power consumption,
|
# to suitable computing nodes, achieving a balance of speed, cost, and power consumption,
|
||||||
# is the CORE GOAL of the entire computing task schedule system (aios_kernel).
|
# is the CORE GOAL of the entire computing task schedule system (aios_kernel).
|
||||||
class compute_task(ABC):
|
class ComputeTask(ABC):
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def display(self) -> str:
|
def display(self) -> str:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class compute_kernel:
|
class ComputeKernel:
|
||||||
_instance = None
|
_instance = None
|
||||||
def __new__(cls):
|
def __new__(cls):
|
||||||
if cls._instance is None:
|
if cls._instance is None:
|
||||||
cls._instance = super(compute_kernel, cls).__new__(cls)
|
cls._instance = super(ComputeKernel, cls).__new__(cls)
|
||||||
return cls._instance
|
return cls._instance
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
@@ -29,7 +29,7 @@ class compute_kernel:
|
|||||||
self.is_start = False
|
self.is_start = False
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def run(self,task:compute_task) -> None:
|
def run(self,task:ComputeTask) -> None:
|
||||||
# check there is compute node can support this task
|
# check there is compute node can support this task
|
||||||
if self.is_task_support(task) is False:
|
if self.is_task_support(task) is False:
|
||||||
logger.error(f"task {task.display()} is not support by any compute node")
|
logger.error(f"task {task.display()} is not support by any compute node")
|
||||||
@@ -47,31 +47,31 @@ class compute_kernel:
|
|||||||
async def _run_task_loop():
|
async def _run_task_loop():
|
||||||
while True:
|
while True:
|
||||||
task = self.task_queue.pop(0)
|
task = self.task_queue.pop(0)
|
||||||
c_node:compute_node= await self._schedule(task)
|
c_node:ComputeNode= await self._schedule(task)
|
||||||
c_node.push_task(task)
|
c_node.push_task(task)
|
||||||
|
|
||||||
asyncio.create_task(_run_task_loop())
|
asyncio.create_task(_run_task_loop())
|
||||||
|
|
||||||
|
|
||||||
async def _schedule(self,task) -> compute_node:
|
async def _schedule(self,task) -> ComputeNode:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def add_compute_node(self,node:compute_node):
|
def add_compute_node(self,node:ComputeNode):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def disable_compute_node(self,):
|
def disable_compute_node(self,):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def is_task_support(self,task:compute_task) -> bool:
|
def is_task_support(self,task:ComputeTask) -> bool:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
# friendly interface for use:
|
# friendly interface for use:
|
||||||
def llm_completion(self,prompt:agent_prompt,mode_name:Optional[str] = None,max_token:int = 0) -> compute_task:
|
def llm_completion(self,prompt:AgentPrompt,mode_name:Optional[str] = None,max_token:int = 0) -> ComputeTask:
|
||||||
# craete a llm_work_task ,push on queue's end
|
# craete a llm_work_task ,push on queue's end
|
||||||
# then task_schedule would run this task.(might schedule some work_task to another host)
|
# then task_schedule would run this task.(might schedule some work_task to another host)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
async def do_llm_completion(self,prompt:agent_prompt,mode_name:Optional[str] = None,max_token:int = 0) -> str:
|
async def do_llm_completion(self,prompt:AgentPrompt,mode_name:Optional[str] = None,max_token:int = 0) -> str:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from .compute_kernel import compute_task
|
from .compute_kernel import ComputeTask
|
||||||
|
|
||||||
class compute_node(ABC):
|
class ComputeNode(ABC):
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
async def push_task(self,task:compute_task,proiority:int = 0):
|
async def push_task(self,task:ComputeTask,proiority:int = 0):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
async def remove_task(self,task_id:str):
|
async def remove_task(self,task_id:str):
|
||||||
@@ -38,7 +38,7 @@ class compute_node(ABC):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class local_compute_node(compute_node):
|
class LocalComputeNode(ComputeNode):
|
||||||
def display(self) -> str:
|
def display(self) -> str:
|
||||||
return super().display()
|
return super().display()
|
||||||
|
|
||||||
|
|||||||
@@ -4,14 +4,14 @@
|
|||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from typing import Callable
|
from typing import Callable
|
||||||
|
|
||||||
from .agent import agent_msg
|
from .agent import AgentMsg
|
||||||
|
|
||||||
class environment_event(ABC):
|
class EnvironmentEvent(ABC):
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def display(self) -> str:
|
def display(self) -> str:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class environment:
|
class Environment:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from .compute_node import compute_node
|
from .compute_node import ComputeNode
|
||||||
|
|
||||||
class open_ai_compute_node(compute_node):
|
class OpenAI_ComputeNode(ComputeNode):
|
||||||
def display(self) -> str:
|
def display(self) -> str:
|
||||||
return super().display()
|
return super().display()
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
from .agent import ai_agent
|
from .agent import AIAgent
|
||||||
|
|
||||||
class ai_role:
|
class AIRole:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.agent_instance_id : str = None
|
self.agent_instance_id : str = None
|
||||||
self.role_name : str = None
|
self.role_name : str = None
|
||||||
self.agent : ai_agent = None
|
self.agent : AIAgent = None
|
||||||
self.introduce : str = None
|
self.introduce : str = None
|
||||||
|
|
||||||
def load_from_config(self,config:dict) -> bool:
|
def load_from_config(self,config:dict) -> bool:
|
||||||
@@ -16,7 +16,7 @@ class ai_role:
|
|||||||
def get_name(self) -> str:
|
def get_name(self) -> str:
|
||||||
return self.role_name
|
return self.role_name
|
||||||
|
|
||||||
class ai_role_group:
|
class AIRoleGroup:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.roles : dict[str,str]= None
|
self.roles : dict[str,str]= None
|
||||||
pass
|
pass
|
||||||
|
|||||||
+43
-43
@@ -3,26 +3,26 @@ import logging
|
|||||||
import asyncio
|
import asyncio
|
||||||
from typing import Optional,Tuple
|
from typing import Optional,Tuple
|
||||||
|
|
||||||
from .environment import environment,environment_event
|
from .environment import Environment,EnvironmentEvent
|
||||||
from .agent import agent_prompt,agent_msg,ai_chat_session
|
from .agent import AgentPrompt,AgentMsg,AIChatSession
|
||||||
from .role import ai_role
|
from .role import AIRole
|
||||||
from .ai_function import call_chain
|
from .ai_function import CallChain
|
||||||
from .compute_kernel import compute_kernel
|
from .compute_kernel import ComputeKernel
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class ai_message_filter:
|
class MessageFilter:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
pass
|
pass
|
||||||
def select(self,msg:agent_msg) -> ai_role:
|
def select(self,msg:AgentMsg) -> AIRole:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class ai_workflow:
|
class Workflow:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.rule_prompt : agent_prompt = None
|
self.rule_prompt : AgentPrompt = None
|
||||||
self.workflow_config = None
|
self.workflow_config = None
|
||||||
self.role_group = None
|
self.role_group = None
|
||||||
self.input_filter : ai_message_filter= None
|
self.input_filter : MessageFilter= None
|
||||||
self.msg_queue = []
|
self.msg_queue = []
|
||||||
self.connected_environment = {}
|
self.connected_environment = {}
|
||||||
|
|
||||||
@@ -33,70 +33,70 @@ class ai_workflow:
|
|||||||
# When processing one message, it can process another message at the same time.
|
# When processing one message, it can process another message at the same time.
|
||||||
# chatsession is synchronous, it has to wait for the previous message to finish processing before it can process the next message.
|
# chatsession is synchronous, it has to wait for the previous message to finish processing before it can process the next message.
|
||||||
# Therefore, post a message needs to specify the session_id explicitly, if not specified it will be automatically created by workflow.
|
# Therefore, post a message needs to specify the session_id explicitly, if not specified it will be automatically created by workflow.
|
||||||
def post_msg(self,msg:agent_msg) -> None:
|
def post_msg(self,msg:AgentMsg) -> None:
|
||||||
self.msg_queue.append(msg)
|
self.msg_queue.append(msg)
|
||||||
return
|
return
|
||||||
|
|
||||||
async def send_msg(self,msg:agent_msg) -> str:
|
async def send_msg(self,msg:AgentMsg) -> str:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
async def run(self):
|
async def run(self):
|
||||||
# TODO add tracking design of msg processing
|
# TODO add tracking design of msg processing
|
||||||
while True:
|
while True:
|
||||||
the_msg = await self._pop_msg()
|
the_msg = await self._pop_msg()
|
||||||
chatsession:ai_chat_session = self._get_chat_session_for_msg(the_msg)
|
chatsession:AIChatSession = self._get_chat_session_for_msg(the_msg)
|
||||||
if chatsession is None:
|
if chatsession is None:
|
||||||
logger.error(f"get_chat_session_for_msg return None for :{the_msg}")
|
logger.error(f"get_chat_session_for_msg return None for :{the_msg}")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
chatsession.append_recv(the_msg)
|
chatsession.append_recv(the_msg)
|
||||||
|
|
||||||
async def _process_msg(msg:agent_msg,the_role) -> None:
|
async def _process_msg(msg:AgentMsg,the_role) -> None:
|
||||||
# prompt generat progress is most important part of workflow(app) develope
|
# prompt generat progress is most important part of workflow(app) develope
|
||||||
prompt = agent_prompt()
|
prompt = AgentPrompt()
|
||||||
prompt.append(the_role.get_prompt())
|
prompt.append(the_role.get_prompt())
|
||||||
prompt.append(self.get_workflow_rule_prompt())
|
prompt.append(self.get_workflow_rule_prompt())
|
||||||
prompt.append(self._get_function_prompt(the_role.get_name()))
|
prompt.append(self._get_function_prompt(the_role.get_name()))
|
||||||
prompt.append(self._get_knowlege_prompt(the_role.get_name()))
|
prompt.append(self._get_knowlege_prompt(the_role.get_name()))
|
||||||
prompt.append(await self._get_prompt_from_session(chatsession,the_role.get_name())) # chat context
|
prompt.append(await self._get_prompt_from_session(chatsession,the_role.get_name())) # chat context
|
||||||
|
|
||||||
result = await compute_kernel().do_llm_completion(prompt,the_role.agent.get_llm_model_name(),the_role.agent.get_max_token_size())
|
result = await ComputeKernel().do_llm_completion(prompt,the_role.agent.get_llm_model_name(),the_role.agent.get_max_token_size())
|
||||||
final_result = result
|
final_result = result
|
||||||
result_type : str = self._get_llm_result_type(result)
|
result_type : str = self._get_llm_result_type(result)
|
||||||
is_ignore = False
|
is_ignore = False
|
||||||
match result_type:
|
match result_type:
|
||||||
case "function":
|
case "function":
|
||||||
callchain:call_chain = self._parse_function_call_chain(result)
|
callchain:CallChain = self._parse_function_call_chain(result)
|
||||||
resp = await callchain.exec()
|
resp = await callchain.exec()
|
||||||
if callchain.have_result():
|
if callchain.have_result():
|
||||||
# generator proc resp prompt with WAITING state
|
# generator proc resp prompt with WAITING state
|
||||||
proc_resp_prompt:agent_prompt = self._get_resp_prompt(resp,msg,the_role,prompt,chatsession)
|
proc_resp_prompt:AgentPrompt = self._get_resp_prompt(resp,msg,the_role,prompt,chatsession)
|
||||||
final_result = await compute_kernel().do_llm_completion(proc_resp_prompt,the_role.agent.get_llm_model_name(),the_role.agent.get_max_token_size())
|
final_result = await ComputeKernel().do_llm_completion(proc_resp_prompt,the_role.agent.get_llm_model_name(),the_role.agent.get_max_token_size())
|
||||||
return final_result
|
return final_result
|
||||||
|
|
||||||
|
|
||||||
case "send_message":
|
case "send_message":
|
||||||
# send message to other / sub workflow
|
# send message to other / sub workflow
|
||||||
next_msg:agent_msg = self._parse_to_msg(result)
|
next_msg:AgentMsg = self._parse_to_msg(result)
|
||||||
if next_msg is not None:
|
if next_msg is not None:
|
||||||
# TODO: Next Target can be another role in workflow
|
# TODO: Next Target can be another role in workflow
|
||||||
next_workflow:ai_workflow = self.get_workflow(next_msg.get_target())
|
next_workflow:Workflow = self.get_workflow(next_msg.get_target())
|
||||||
inner_chat_session = the_role.agent.get_chat_session(next_msg.get_target(),next_msg.get_session_id())
|
inner_chat_session = the_role.agent.get_chat_session(next_msg.get_target(),next_msg.get_session_id())
|
||||||
|
|
||||||
inner_chat_session.append_post(next_msg)
|
inner_chat_session.append_post(next_msg)
|
||||||
resp = await next_workflow.send_msg(next_msg)
|
resp = await next_workflow.send_msg(next_msg)
|
||||||
inner_chat_session.append_recv(resp)
|
inner_chat_session.append_recv(resp)
|
||||||
# generator proc resp prompt with WAITING state
|
# generator proc resp prompt with WAITING state
|
||||||
proc_resp_prompt:agent_prompt = self._get_resp_prompt(resp,msg,the_role,prompt,chatsession)
|
proc_resp_prompt:AgentPrompt = self._get_resp_prompt(resp,msg,the_role,prompt,chatsession)
|
||||||
final_result = await compute_kernel().do_llm_completion(proc_resp_prompt,the_role.agent.get_llm_model_name(),the_role.agent.get_max_token_size())
|
final_result = await ComputeKernel().do_llm_completion(proc_resp_prompt,the_role.agent.get_llm_model_name(),the_role.agent.get_max_token_size())
|
||||||
|
|
||||||
return final_result
|
return final_result
|
||||||
|
|
||||||
case "post_message":
|
case "post_message":
|
||||||
# post message to other / sub workflow
|
# post message to other / sub workflow
|
||||||
next_msg:agent_msg = self._parse_to_msg(result)
|
next_msg:AgentMsg = self._parse_to_msg(result)
|
||||||
if next_msg is not None:
|
if next_msg is not None:
|
||||||
next_workflow:ai_workflow = self.get_workflow(next_msg.get_target())
|
next_workflow:Workflow = self.get_workflow(next_msg.get_target())
|
||||||
inner_chat_session = the_role.agent.get_chat_session(next_msg.get_target(),next_msg.get_session_id())
|
inner_chat_session = the_role.agent.get_chat_session(next_msg.get_target(),next_msg.get_session_id())
|
||||||
inner_chat_session.append_post(next_msg)
|
inner_chat_session.append_post(next_msg)
|
||||||
next_workflow.post_msg(next_msg)
|
next_workflow.post_msg(next_msg)
|
||||||
@@ -113,7 +113,7 @@ class ai_workflow:
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
async def _workflow_process_msg(msg:agent_msg) -> None:
|
async def _workflow_process_msg(msg:AgentMsg) -> None:
|
||||||
final_result = None
|
final_result = None
|
||||||
if self.input_filter is not None:
|
if self.input_filter is not None:
|
||||||
select_role = self.input_filter.select(msg)
|
select_role = self.input_filter.select(msg)
|
||||||
@@ -134,7 +134,7 @@ class ai_workflow:
|
|||||||
|
|
||||||
# merge result from all roles
|
# merge result from all roles
|
||||||
# TODO: one input msg can have multiple result msg, at this while ,we only support one result msg
|
# TODO: one input msg can have multiple result msg, at this while ,we only support one result msg
|
||||||
final_result:agent_msg = self._merge_msg_result(results)
|
final_result:AgentMsg = self._merge_msg_result(results)
|
||||||
if chatsession is not None:
|
if chatsession is not None:
|
||||||
chatsession.append_post(final_result)
|
chatsession.append_post(final_result)
|
||||||
|
|
||||||
@@ -144,59 +144,59 @@ class ai_workflow:
|
|||||||
|
|
||||||
asyncio.create_task(_workflow_process_msg(the_msg))
|
asyncio.create_task(_workflow_process_msg(the_msg))
|
||||||
|
|
||||||
async def _pop_msg(self) -> agent_msg:
|
async def _pop_msg(self) -> AgentMsg:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _get_chat_session_for_msg(self,msg:agent_msg) -> ai_chat_session:
|
def _get_chat_session_for_msg(self,msg:AgentMsg) -> AIChatSession:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
async def _get_prompt_from_session(self,chatsession:ai_chat_session,role_name:str) -> agent_prompt:
|
async def _get_prompt_from_session(self,chatsession:AIChatSession,role_name:str) -> AgentPrompt:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _get_msg_queue(self,session_id:str):
|
def _get_msg_queue(self,session_id:str):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _merge_msg_result(self,results:dict) -> agent_msg:
|
def _merge_msg_result(self,results:dict) -> AgentMsg:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _get_function_prompt(self,role_name:str) -> agent_prompt:
|
def _get_function_prompt(self,role_name:str) -> AgentPrompt:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _get_knowlege_prompt(self,role_name:str) -> agent_prompt:
|
def _get_knowlege_prompt(self,role_name:str) -> AgentPrompt:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _get_resp_prompt(self,resp:str,msg:agent_msg,role:ai_role,prompt:agent_prompt,chatsession:ai_chat_session) -> agent_prompt:
|
def _get_resp_prompt(self,resp:str,msg:AgentMsg,role:AIRole,prompt:AgentPrompt,chatsession:AIChatSession) -> AgentPrompt:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_workflow_rule_prompt(self) -> agent_prompt:
|
def get_workflow_rule_prompt(self) -> AgentPrompt:
|
||||||
return self.rule_prompt
|
return self.rule_prompt
|
||||||
|
|
||||||
def _get_llm_result_type(self,llm_resp_str:str) -> str:
|
def _get_llm_result_type(self,llm_resp_str:str) -> str:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _parse_function_call_chain(self,llm_resp_str) -> call_chain:
|
def _parse_function_call_chain(self,llm_resp_str) -> CallChain:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _parse_to_msg(self,llm_resp_str) -> agent_msg:
|
def _parse_to_msg(self,llm_resp_str) -> AgentMsg:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_workflow(self,workflow_name:str) -> ai_workflow:
|
def get_workflow(self,workflow_name:str) -> Workflow:
|
||||||
"""get workflow from known workflow list or sub workflow list"""
|
"""get workflow from known workflow list or sub workflow list"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def _env_event_to_msg(self,env_event:environment_event) -> agent_msg:
|
def _env_event_to_msg(self,env_event:EnvironmentEvent) -> AgentMsg:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_inner_environment(self,env_id:str) -> environment:
|
def get_inner_environment(self,env_id:str) -> Environment:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def connect_to_environment(self,env:environment) -> None:
|
def connect_to_environment(self,env:Environment) -> None:
|
||||||
the_env = self.connected_environment.get(env.get_id())
|
the_env = self.connected_environment.get(env.get_id())
|
||||||
if the_env is None:
|
if the_env is None:
|
||||||
self.connected_environment[env.get_id()] = env
|
self.connected_environment[env.get_id()] = env
|
||||||
def _env_msg_handler(env_event:environment_event) -> None:
|
def _env_msg_handler(env_event:EnvironmentEvent) -> None:
|
||||||
the_msg:agent_msg= self._env_event_to_msg(env_event)
|
the_msg:AgentMsg= self._env_event_to_msg(env_event)
|
||||||
self.post_msg(the_msg)
|
self.post_msg(the_msg)
|
||||||
|
|
||||||
# register all event handler
|
# register all event handler
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
from .agent_manager import agent_manager,agent_manager_client
|
from .agent_manager import AgentManager,AgentManagerClient
|
||||||
from .agent import ai_agent
|
from .agent import ai_agent
|
||||||
from .templete import ai_agent_templete
|
from .templete import ai_agent_templete
|
||||||
@@ -2,14 +2,13 @@
|
|||||||
import logging
|
import logging
|
||||||
import toml
|
import toml
|
||||||
|
|
||||||
from .agent import ai_agent
|
from aios_kernel import AIAgent,AIAgentTemplete
|
||||||
from .templete import ai_agent_templete
|
from package_manager import PackageEnv,PackageEnvManager,PackageMediaInfo,PackageInstallTask
|
||||||
from package_manager import pkg_env,pkg_env_mgr,pkg_media_info,media_reader,pkg_install_task
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class agent_manager:
|
class AgentManager:
|
||||||
_instance = None
|
_instance = None
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
@@ -18,18 +17,18 @@ class agent_manager:
|
|||||||
|
|
||||||
def __new__(cls):
|
def __new__(cls):
|
||||||
if cls._instance is None:
|
if cls._instance is None:
|
||||||
cls._instance = super(agent_manager, cls).__new__(cls)
|
cls._instance = super(AgentManager, cls).__new__(cls)
|
||||||
return cls._instance
|
return cls._instance
|
||||||
|
|
||||||
|
|
||||||
def initial(self,root_dir:str) -> None:
|
def initial(self,root_dir:str) -> None:
|
||||||
self.agent_templete_env : pkg_env = pkg_env_mgr().get_env(f"{root_dir}templetes/agent_templetes.cfg")
|
self.agent_templete_env : PackageEnv = PackageEnvManager().get_env(f"{root_dir}templetes/agent_templetes.cfg")
|
||||||
self.agent_env : pkg_env = pkg_env_mgr().get_env(f"{root_dir}agents/agents.cfg")
|
self.agent_env : PackageEnv = PackageEnvManager().get_env(f"{root_dir}agents/agents.cfg")
|
||||||
if self.agent_templete_env is None:
|
if self.agent_templete_env is None:
|
||||||
raise Exception("agent_manager initial failed")
|
raise Exception("agent_manager initial failed")
|
||||||
|
|
||||||
|
|
||||||
def get(self,agent_id:str) -> ai_agent:
|
def get(self,agent_id:str) -> AIAgent:
|
||||||
the_agent = self.loaded_agent_instance.get(agent_id)
|
the_agent = self.loaded_agent_instance.get(agent_id)
|
||||||
if the_agent:
|
if the_agent:
|
||||||
return the_agent
|
return the_agent
|
||||||
@@ -39,7 +38,7 @@ class agent_manager:
|
|||||||
if agent_media_info is None:
|
if agent_media_info is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
the_agent = self._load_agent_from_media(agent_media_info)
|
the_agent : AIAgent = self._load_agent_from_media(agent_media_info)
|
||||||
if the_agent is None:
|
if the_agent is None:
|
||||||
logger.warn(f"load agent {agent_id} from media failed!")
|
logger.warn(f"load agent {agent_id} from media failed!")
|
||||||
|
|
||||||
@@ -49,29 +48,25 @@ class agent_manager:
|
|||||||
def remove(self,agent_id:str)->int:
|
def remove(self,agent_id:str)->int:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_templete(self,templete_id) -> ai_agent_templete:
|
def get_templete(self,templete_id) -> AIAgentTemplete:
|
||||||
template_media_info = self.agent_templete_env.get(templete_id)
|
template_media_info = self.agent_templete_env.get(templete_id)
|
||||||
if template_media_info is None:
|
if template_media_info is None:
|
||||||
return None
|
return None
|
||||||
return self._load_templete_from_media(template_media_info)
|
return self._load_templete_from_media(template_media_info)
|
||||||
|
|
||||||
def install(self,templete_id) -> pkg_install_task:
|
def install(self,templete_id) -> PackageInstallTask:
|
||||||
installer = self.agent_templete_env.get_installer()
|
installer = self.agent_templete_env.get_installer()
|
||||||
return installer.install(templete_id)
|
return installer.install(templete_id)
|
||||||
|
|
||||||
def uninstall(self,templete_id) -> int:
|
def uninstall(self,templete_id) -> int:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _load_templete_from_media(self,templete_media:pkg_media_info) -> ai_agent_templete:
|
def _load_templete_from_media(self,templete_media:PackageMediaInfo) -> AIAgentTemplete:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _load_agent_from_media(self,agent_media:pkg_media_info) -> ai_agent:
|
def _load_agent_from_media(self,agent_media:PackageMediaInfo) -> AIAgent:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def create(self,template,agent_name,agent_last_name,agent_introduce) -> ai_agent:
|
def create(self,template,agent_name,agent_last_name,agent_introduce) -> AIAgent:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class agent_manager_client:
|
|
||||||
def __init__(self) -> None:
|
|
||||||
pass
|
|
||||||
@@ -1 +1,2 @@
|
|||||||
from .cid import content_id
|
from .cid import ContentId
|
||||||
|
from .ndn_client import NDN_Client
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
|
|
||||||
|
|
||||||
class content_id:
|
class ContentId:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
def create_from_str(cid_str:str):
|
def create_from_str(cid_str:str):
|
||||||
pass
|
pass
|
||||||
@@ -1,13 +1,13 @@
|
|||||||
|
|
||||||
from .cid import content_id
|
from .cid import ContentId
|
||||||
|
|
||||||
class ndn_get_task:
|
class NDN_GetTask:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class ndn_client:
|
class NDN_Client:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_file(cid:content_id,target_path:str,urls:{}=None,options:{}=None):
|
def get_file(self,cid:ContentId,target_path:str,urls:{}=None,options:{}=None):
|
||||||
pass
|
pass
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
from .env import pkg_env_mgr,pkg_env
|
from .env import PackageEnvManager,PackageEnv
|
||||||
from .pkg import pkg_info,pkg_media_info
|
from .pkg import PackageInfo,PackageMediaInfo
|
||||||
from .installer import pkg_install_task
|
from .installer import PackageInstallTask
|
||||||
@@ -2,16 +2,16 @@
|
|||||||
import logging
|
import logging
|
||||||
import toml
|
import toml
|
||||||
|
|
||||||
from .pkg import pkg_info,pkg_media_info
|
from .pkg import PackageInfo,PackageMediaInfo
|
||||||
from .installer import pkg_installer
|
from .installer import PackageInstaller
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
class pkg_env_mgr:
|
class PackageEnvManager:
|
||||||
_instance = None
|
_instance = None
|
||||||
def __new__(cls):
|
def __new__(cls):
|
||||||
if cls._instance is None:
|
if cls._instance is None:
|
||||||
cls._instance = super(pkg_env_mgr, cls).__new__(cls)
|
cls._instance = super(PackageEnvManager, cls).__new__(cls)
|
||||||
return cls._instance
|
return cls._instance
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
@@ -19,46 +19,46 @@ class pkg_env_mgr:
|
|||||||
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_env(self,cfg_path:str) -> pkg_env:
|
def get_env(self,cfg_path:str) -> PackageEnv:
|
||||||
if cfg_path in self._pkg_envs:
|
if cfg_path in self._pkg_envs:
|
||||||
return self._pkg_envs[cfg_path]
|
return self._pkg_envs[cfg_path]
|
||||||
else:
|
else:
|
||||||
pkg_env = pkg_env(cfg_path)
|
pkg_env = PackageEnv(cfg_path)
|
||||||
self._pkg_envs[cfg_path] = pkg_env
|
self._pkg_envs[cfg_path] = pkg_env
|
||||||
return pkg_env
|
return pkg_env
|
||||||
|
|
||||||
def get_user_env(self) -> pkg_env:
|
def get_user_env(self) -> PackageEnv:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_system_env(self) -> pkg_env:
|
def get_system_env(self) -> PackageEnv:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class pkg_env:
|
class PackageEnv:
|
||||||
def __init__(self,cfg_path:str) -> None:
|
def __init__(self,cfg_path:str) -> None:
|
||||||
self.pkg_dir : str = ""
|
self.pkg_dir : str = ""
|
||||||
self.pkg_obj_dir : str = ""
|
self.pkg_obj_dir : str = ""
|
||||||
self.is_strict : bool = True
|
self.is_strict : bool = True
|
||||||
self.parent_envs : list[pkg_env] = None
|
self.parent_envs : list[PackageEnv] = None
|
||||||
self.index_dbs = None
|
self.index_dbs = None
|
||||||
|
|
||||||
self.cfg_path = cfg_path
|
self.cfg_path = cfg_path
|
||||||
self._load_pkg_cfg(cfg_path)
|
self._load_pkg_cfg(cfg_path)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def load(self,pkg_name:str,search_parent=True) -> pkg_media_info:
|
def load(self,pkg_name:str,search_parent=True) -> PackageMediaInfo:
|
||||||
pkg_path = None
|
pkg_path = None
|
||||||
pkg_id,verion_str,cid = pkg_info.parse_pkg_name(pkg_name)
|
pkg_id,verion_str,cid = PackageInfo.parse_pkg_name(pkg_name)
|
||||||
|
|
||||||
if cid is None:
|
if cid is None:
|
||||||
if verion_str is None:
|
if verion_str is None:
|
||||||
channel = self.get_pkg_channel_from_version(verion_str)
|
channel:str = self.get_pkg_channel_from_version(verion_str)
|
||||||
if channel is None:
|
if channel is None:
|
||||||
pkg_path = f"{self.pkg_dir}{pkg_id}"
|
pkg_path = f"{self.pkg_dir}{pkg_id}"
|
||||||
else:
|
else:
|
||||||
pkg_path = f"{self.pkg_dir}{pkg_id}#{channel}"
|
pkg_path = f"{self.pkg_dir}{pkg_id}#{channel}"
|
||||||
else:
|
else:
|
||||||
channel = self.get_pkg_channel_from_version(verion_str)
|
channel:str = self.get_pkg_channel_from_version(verion_str)
|
||||||
the_version = self.get_exact_version_from_installed(verion_str)
|
the_version:str = self.get_exact_version_from_installed(verion_str)
|
||||||
if the_version is None:
|
if the_version is None:
|
||||||
logger.warn(f"load {pkg_name} failed: no match version from {verion_str}")
|
logger.warn(f"load {pkg_name} failed: no match version from {verion_str}")
|
||||||
return None
|
return None
|
||||||
@@ -69,7 +69,7 @@ class pkg_env:
|
|||||||
else:
|
else:
|
||||||
pkg_path = f"{self.pkg_obj_dir}.{pkg_id}/{cid}"
|
pkg_path = f"{self.pkg_obj_dir}.{pkg_id}/{cid}"
|
||||||
|
|
||||||
media_info = self.try_load_pkg_media_info(pkg_id,pkg_path)
|
media_info:PackageMediaInfo = self.try_load_pkg_media_info(pkg_path)
|
||||||
if media_info is None:
|
if media_info is None:
|
||||||
if search_parent:
|
if search_parent:
|
||||||
for parent_env in self.parent_envs:
|
for parent_env in self.parent_envs:
|
||||||
@@ -86,28 +86,28 @@ class pkg_env:
|
|||||||
def get_pkg_channel_from_version(self,pkg_version:str) -> str:
|
def get_pkg_channel_from_version(self,pkg_version:str) -> str:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_pkg_media_info(self,pkg_name:str)->pkg_media_info:
|
def get_pkg_media_info(self,pkg_name:str)->PackageMediaInfo:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def try_load_pkg_media_info(self,pkg_full_path:str) -> pkg_media_info:
|
def try_load_pkg_media_info(self,pkg_full_path:str) -> PackageMediaInfo:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def get_installed_pkg_info(self,pkg_name:str) -> pkg_info:
|
def get_installed_pkg_info(self,pkg_name:str) -> PackageInfo:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def lookup(self,pkg_id:str,version_str:str) -> pkg_info:
|
def lookup(self,pkg_id:str,version_str:str) -> PackageInfo:
|
||||||
# to make sure pkg.cid is correct, we MUST verfiy eveything here
|
# to make sure pkg.cid is correct, we MUST verfiy eveything here
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_installer(self) -> pkg_installer:
|
def get_installer(self) -> PackageInstaller:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def is_valied_media(pkg_full_path:str) -> bool:
|
def is_valied_media(pkg_full_path:str) -> bool:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def do_pkg_media_trans(self,pkg_info:pkg_info,source_path:str,target_path:str) -> bool:
|
def do_pkg_media_trans(self,pkg_info:PackageInfo,source_path:str,target_path:str) -> bool:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def _load_pkg_cfg(self,cfg_path:str):
|
def _load_pkg_cfg(self,cfg_path:str):
|
||||||
|
|||||||
@@ -5,10 +5,9 @@ import aiohttp
|
|||||||
import aiofiles
|
import aiofiles
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from ndn_client import content_id,ndn_client
|
from ndn_client import ContentId,NDN_Client
|
||||||
from .pkg import pkg_info,pkg_media_info
|
from .pkg import PackageInfo,PackageMediaInfo
|
||||||
from .env import pkg_env
|
from .env import PackageEnv
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -19,8 +18,8 @@ INSTALL_TASK_STATE_DOWNLOADING = 3
|
|||||||
INSTALL_TASK_STATE_INSTALLING = 4
|
INSTALL_TASK_STATE_INSTALLING = 4
|
||||||
INSTALL_TAKS_STATE_ERROR = 5
|
INSTALL_TAKS_STATE_ERROR = 5
|
||||||
|
|
||||||
class pkg_install_task:
|
class PackageInstallTask:
|
||||||
def __init__(self,owner:pkg_env) -> None:
|
def __init__(self,owner:PackageEnv) -> None:
|
||||||
self.owner = owner
|
self.owner = owner
|
||||||
self.state = INSTALL_TASK_STATE_CHECK_DEPENDENCY
|
self.state = INSTALL_TASK_STATE_CHECK_DEPENDENCY
|
||||||
|
|
||||||
@@ -29,20 +28,20 @@ class pkg_install_task:
|
|||||||
self.dependency_tasks = None
|
self.dependency_tasks = None
|
||||||
self.error_str = None
|
self.error_str = None
|
||||||
|
|
||||||
class pkg_installer:
|
class PackageInstaller:
|
||||||
def __init__(self,owner_env:pkg_env) -> None:
|
def __init__(self,owner_env:PackageEnv) -> None:
|
||||||
self.all_tasks = {}
|
self.all_tasks = {}
|
||||||
self.owner_env = owner_env
|
self.owner_env = owner_env
|
||||||
|
|
||||||
def install(self,pkg_name:str,
|
def install(self,pkg_name:str,
|
||||||
install_from_dependency = False, can_upgrade = True,skip_depends = False,options = None)->Tuple[pkg_install_task,str]:
|
install_from_dependency = False, can_upgrade = True,skip_depends = False,options = None)->Tuple[PackageInstallTask,str]:
|
||||||
|
|
||||||
the_pkg_info : pkg_info = None
|
the_pkg_info : PackageInfo = None
|
||||||
is_upgrade : bool = False
|
is_upgrade : bool = False
|
||||||
need_backup : bool = False
|
need_backup : bool = False
|
||||||
|
|
||||||
pkg_id,version_str,cid = pkg_info.parse_pkg_name(pkg_name)
|
pkg_id,version_str,cid = PackageInfo.parse_pkg_name(pkg_name)
|
||||||
media_info : pkg_media_info = self.owner_env.get_media_info(pkg_name) # must use index-db?
|
media_info : PackageMediaInfo = self.owner_env.get_media_info(pkg_name) # must use index-db?
|
||||||
if media_info is not None:
|
if media_info is not None:
|
||||||
if cid is not None:
|
if cid is not None:
|
||||||
if can_upgrade:
|
if can_upgrade:
|
||||||
@@ -74,7 +73,7 @@ class pkg_installer:
|
|||||||
return result_task,"already installing"
|
return result_task,"already installing"
|
||||||
|
|
||||||
logger.info(f"start download&install {pkg_name},install_from_dependency={install_from_dependency},upgrade={is_upgrade},backup={need_backup},target_pkg_info={the_pkg_info}")
|
logger.info(f"start download&install {pkg_name},install_from_dependency={install_from_dependency},upgrade={is_upgrade},backup={need_backup},target_pkg_info={the_pkg_info}")
|
||||||
result_task = pkg_install_task()
|
result_task = PackageInstallTask(self.owner_env)
|
||||||
self.all_tasks[the_pkg_info.cid] = result_task
|
self.all_tasks[the_pkg_info.cid] = result_task
|
||||||
async def download_and_install_pkg()->int:
|
async def download_and_install_pkg()->int:
|
||||||
# check dependency
|
# check dependency
|
||||||
@@ -104,7 +103,7 @@ class pkg_installer:
|
|||||||
|
|
||||||
urls = self.owner_env.get_pkg_urls(the_pkg_info)
|
urls = self.owner_env.get_pkg_urls(the_pkg_info)
|
||||||
#download
|
#download
|
||||||
client = ndn_client() # set watch
|
client = NDN_Client() # set watch
|
||||||
download_result = await client.get_file(the_pkg_info.cid,urls,target_full_path,options)
|
download_result = await client.get_file(the_pkg_info.cid,urls,target_full_path,options)
|
||||||
if download_result !=0:
|
if download_result !=0:
|
||||||
result_task.state = INSTALL_TAKS_STATE_ERROR
|
result_task.state = INSTALL_TAKS_STATE_ERROR
|
||||||
@@ -140,16 +139,16 @@ class pkg_installer:
|
|||||||
def uninstall(self):
|
def uninstall(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def get_dependency_tasks(self,pkg:pkg_info,dependency_tasks):
|
def get_dependency_tasks(self,pkg:PackageInfo,dependency_tasks):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
async def check_dependency(self,pkg:pkg_info,task_list:{}) -> bool:
|
async def check_dependency(self,pkg:PackageInfo,task_list:{}) -> bool:
|
||||||
for depend_pkg_name in pkg.depends:
|
for depend_pkg_name in pkg.depends:
|
||||||
depend_task = task_list.get(depend_pkg_name)
|
depend_task = task_list.get(depend_pkg_name)
|
||||||
if depend_task is not None:
|
if depend_task is not None:
|
||||||
logger.debug(f"{pkg.name}'s depend pkg {depend_pkg_name} already in task list")
|
logger.debug(f"{pkg.name}'s depend pkg {depend_pkg_name} already in task list")
|
||||||
continue
|
continue
|
||||||
depend_task = pkg_install_task()
|
depend_task = PackageInstallTask(self.owner_env)
|
||||||
task_list[depend_pkg_name] = depend_task
|
task_list[depend_pkg_name] = depend_task
|
||||||
|
|
||||||
depend_pkg_info = self.owner_env.lookup(depend_pkg_name)
|
depend_pkg_info = self.owner_env.lookup(depend_pkg_name)
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
|
from typing import Tuple
|
||||||
|
|
||||||
class pkg_info:
|
|
||||||
|
class PackageInfo:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
self.name = ""
|
self.name = ""
|
||||||
self.cid = None
|
self.cid = None
|
||||||
@@ -20,7 +22,7 @@ class pkg_info:
|
|||||||
def cid(self) -> str:
|
def cid(self) -> str:
|
||||||
return self.cid
|
return self.cid
|
||||||
|
|
||||||
class pkg_media_info:
|
class PackageMediaInfo:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user