forked from Dennis-H1/Function-Calling-LLMs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodel.drawio
233 lines (233 loc) · 24.4 KB
/
model.drawio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
<mxfile host="app.diagrams.net" modified="2024-04-17T14:01:22.199Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36" etag="NcflQXiqmoSvyLW8C5Lq" version="24.2.5" type="device">
<diagram name="Page-1" id="e2clx06g0dXL-gssuSHC">
<mxGraphModel dx="1764" dy="856" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="IvJT8bzDoMKhbO7zOeqH-17" value="<div><span style="background-color: initial;">LLM API</span><br></div>" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="315" y="650" width="230" height="140" as="geometry" />
</mxCell>
<mxCell id="IvJT8bzDoMKhbO7zOeqH-1" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="150" y="270" width="830" height="360" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.135;entryY=-0.005;entryDx=0;entryDy=0;exitX=0.129;exitY=0.991;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;" parent="1" source="aPE98rIuFYNFHw8OlIL_-1" target="aPE98rIuFYNFHw8OlIL_-5" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-20" value="load_data()" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="syFWknwN7UwxYUdkCljM-19" vertex="1" connectable="0">
<mxGeometry x="-0.2085" relative="1" as="geometry">
<mxPoint x="5" y="8" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="aPE98rIuFYNFHw8OlIL_-1" target="syFWknwN7UwxYUdkCljM-31" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-35" value="start two threads:<div>Server.start()</div><div>Pipeline.run_tests()</div><div><br></div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="syFWknwN7UwxYUdkCljM-34" vertex="1" connectable="0">
<mxGeometry x="-0.1674" y="3" relative="1" as="geometry">
<mxPoint x="1" y="9" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="aPE98rIuFYNFHw8OlIL_-1" value="Main" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="170" y="384" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="aPE98rIuFYNFHw8OlIL_-2" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="aPE98rIuFYNFHw8OlIL_-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="80" y="414" as="sourcePoint" />
<mxPoint x="90" y="400" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="aPE98rIuFYNFHw8OlIL_-4" value="<h1 style="margin-top: 0px;">Mannheim - Function Calling LLM Benchmark</h1><div>This figure and UML classes outline the rough structure of the code base. To <b>extend </b>the benchmark with more LLM models, you can extend the LLMService abstract base class, and implement the process_question and _handle_function methods. The _handle_function method should use the predefined src.util.request.server_request() function to communicate with the FunctionServer. The new LLM model service can be <i>injected </i>in the main file.</div>" style="text;html=1;whiteSpace=wrap;overflow=hidden;rounded=0;" parent="1" vertex="1">
<mxGeometry x="150" y="160" width="830" height="120" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.75;entryY=1;entryDx=0;entryDy=0;exitX=0.75;exitY=0;exitDx=0;exitDy=0;" parent="1" source="aPE98rIuFYNFHw8OlIL_-5" target="aPE98rIuFYNFHw8OlIL_-1" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-25" value="function_set,<div>question_set,</div><div>config</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="syFWknwN7UwxYUdkCljM-24" vertex="1" connectable="0">
<mxGeometry x="0.1625" relative="1" as="geometry">
<mxPoint y="6" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="aPE98rIuFYNFHw8OlIL_-5" value="ConfigManager" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="170" y="540" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-23" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>ConfigManager</b></p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ <u>config</u>: Dict</p><p style="margin:0px;margin-left:4px;">+ <u>question_set</u>: Dict</p><p style="margin:0px;margin-left:4px;">+ <u>function_set</u>: Dict</p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ <u>load_data</u>(): Tuple&lt;Dict, Dict, Dict&gt;</p><p style="margin:0px;margin-left:4px;">+ <u>output_path</u>(): String</p><p style="margin:0px;margin-left:4px;">+ <u>get_use_case</u>(): UseCase</p><p style="margin:0px;margin-left:4px;">- <u>_load_data</u>(String, Dict): Dict</p><p style="margin:0px;margin-left:4px;">- <u>_get_question_set</u>(List&lt;Dict&gt;): Dict</p><p style="margin:0px;margin-left:4px;">- <u>_get_function_set</u>(List&lt;Dict&gt;): Dict</p><p style="margin:0px;margin-left:4px;">- <u>_validate_json</u>(Dict, Dict, String): void</p>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="50" y="655" width="250" height="200" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-31" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="500" y="280" width="200" height="260" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-27" value="<p style="margin:0px;margin-top:4px;text-align:center;"><i>&lt;&lt;Abstract Base Class&gt;&gt;</i><br><b>LLMService</b></p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ api_key: String<br>+ function_set: Dict</p><p style="margin:0px;margin-left:4px;">+ prompt: String</p><p style="margin:0px;margin-left:4px;">+ model: String</p><p style="margin:0px;margin-left:4px;">+ hyperparameters: Dict</p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;"><i>+ process_question(String): Tuple&lt;ModelSolution, Int, Int&gt;<br>- _handle_function(Dict): String</i></p>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="555" y="655" width="220" height="190" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-28" value="" style="endArrow=block;dashed=1;endFill=0;endSize=12;html=1;rounded=0;exitX=0.75;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="syFWknwN7UwxYUdkCljM-26" target="syFWknwN7UwxYUdkCljM-27" edge="1">
<mxGeometry width="160" relative="1" as="geometry">
<mxPoint x="520" y="600" as="sourcePoint" />
<mxPoint x="680" y="600" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-29" value="extends" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="syFWknwN7UwxYUdkCljM-28" vertex="1" connectable="0">
<mxGeometry x="-0.3302" y="-3" relative="1" as="geometry">
<mxPoint x="5" y="-1" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-26" value="<b>GPTService</b>" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#E6E6E6;" parent="1" vertex="1">
<mxGeometry x="370" y="540" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-57" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.75;entryY=0;entryDx=0;entryDy=0;" parent="1" source="syFWknwN7UwxYUdkCljM-32" target="syFWknwN7UwxYUdkCljM-46" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="905" y="320" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-58" value="parse_arguments(function_name, function_args)" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="syFWknwN7UwxYUdkCljM-57" vertex="1" connectable="0">
<mxGeometry x="-0.4683" y="1" relative="1" as="geometry">
<mxPoint x="48" y="-9" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-32" value="FunctionServer" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="540" y="310" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-126" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0.559;exitY=0.982;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="syFWknwN7UwxYUdkCljM-33" target="syFWknwN7UwxYUdkCljM-26" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="590" y="503" />
<mxPoint x="590" y="570" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-129" value="process_question(String)" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="syFWknwN7UwxYUdkCljM-126" vertex="1" connectable="0">
<mxGeometry x="0.7376" y="-1" relative="1" as="geometry">
<mxPoint x="76" y="-19" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-130" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="syFWknwN7UwxYUdkCljM-33" target="syFWknwN7UwxYUdkCljM-85" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-131" value="get_overall_evaluation<div>(ModelSolution, List&lt;Path&gt;, Dict)</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="syFWknwN7UwxYUdkCljM-130" vertex="1" connectable="0">
<mxGeometry x="-0.0719" y="-1" relative="1" as="geometry">
<mxPoint x="-14" y="7" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-33" value="Pipeline" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="540" y="444" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-43" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>Pipeline</b></p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ question_set: Dict</p><p style="margin:0px;margin-left:4px;">+ function_set: Dict</p><p style="margin:0px;margin-left:4px;">+ config: Dict</p><p style="margin:0px;margin-left:4px;">+ llm_service: LLMService</p><p style="margin:0px;margin-left:4px;">+ output_path: String</p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ run_tests(): void</p>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="810" y="650" width="250" height="140" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-44" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>FunctionServer</b></p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ host: String<br></p><p style="margin:0px;margin-left:4px;">+ port: Int</p><p style="margin:0px;margin-left:4px;">+ function_handler: FunctionHandlerService</p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ start(): void</p>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="810" y="810" width="250" height="110" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-46" value="FunctionHandlerService" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="800" y="360" width="140" height="60" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-59" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.293;entryY=-0.014;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.994;exitY=0.58;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="syFWknwN7UwxYUdkCljM-32" target="syFWknwN7UwxYUdkCljM-46" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="841" y="345" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-60" value="handle_function(function_name, function_args)" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="syFWknwN7UwxYUdkCljM-59" vertex="1" connectable="0">
<mxGeometry x="-0.5633" y="1" relative="1" as="geometry">
<mxPoint x="78" y="-9" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-67" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1">
<mxGeometry x="470" y="335" width="10" height="10" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-68" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=halfCircle;endFill=0;endSize=6;strokeWidth=1;sketch=0;fontSize=12;curved=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="syFWknwN7UwxYUdkCljM-26" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="445" y="485" as="sourcePoint" />
<mxPoint x="430" y="490" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-80" value="server_request(String, Dict)" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="syFWknwN7UwxYUdkCljM-68" vertex="1" connectable="0">
<mxGeometry x="0.24" y="2" relative="1" as="geometry">
<mxPoint x="2" y="1" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-69" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1">
<mxGeometry x="420" y="480" width="10" height="10" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-75" value="" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;endArrow=oval;endFill=0;sketch=0;sourcePerimeterSpacing=0;targetPerimeterSpacing=0;endSize=10;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="syFWknwN7UwxYUdkCljM-32" target="syFWknwN7UwxYUdkCljM-76" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="440" y="330" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-83" value="<div>HTTP endpoint:</div>GET /function_call/&lt;function_name&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="syFWknwN7UwxYUdkCljM-75" vertex="1" connectable="0">
<mxGeometry x="0.5781" y="1" relative="1" as="geometry">
<mxPoint x="-23" y="-31" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-76" value="" style="ellipse;whiteSpace=wrap;html=1;align=center;aspect=fixed;fillColor=none;strokeColor=none;resizable=0;perimeter=centerPerimeter;rotatable=0;allowArrows=0;points=[];outlineConnect=1;" parent="1" vertex="1">
<mxGeometry x="425" y="335" width="10" height="10" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-85" value="Evaluator" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="810" y="540" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-86" value="UseCaseFunctions" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="810" y="460" width="120" height="60" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-92" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="syFWknwN7UwxYUdkCljM-46" target="syFWknwN7UwxYUdkCljM-86" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-93" value="call_function(function_name, function_args)" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="syFWknwN7UwxYUdkCljM-92" vertex="1" connectable="0">
<mxGeometry x="-0.1162" relative="1" as="geometry">
<mxPoint y="-4" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-94" value="Data<div>&amp;</div><div>Functions</div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="1" vertex="1">
<mxGeometry x="1050" y="440" width="90" height="100" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-95" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="syFWknwN7UwxYUdkCljM-86" target="syFWknwN7UwxYUdkCljM-94" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-97" value="load data &amp; functions<div>of UseCase</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="syFWknwN7UwxYUdkCljM-95" vertex="1" connectable="0">
<mxGeometry x="-0.2392" relative="1" as="geometry">
<mxPoint x="11" y="-16" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-99" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="aPE98rIuFYNFHw8OlIL_-1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="230.0256410256411" y="345" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-105" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.543;exitY=0.12;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="IvJT8bzDoMKhbO7zOeqH-17" target="syFWknwN7UwxYUdkCljM-26" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="370" y="700" as="sourcePoint" />
<mxPoint x="420" y="650" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="9Szatl_gFZhMewFinVi2-1" value="communicates with" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="syFWknwN7UwxYUdkCljM-105">
<mxGeometry x="-0.0438" y="-1" relative="1" as="geometry">
<mxPoint x="-6" y="5" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-109" value="<span style="font-size: 11px; text-wrap: nowrap; background-color: rgb(255, 255, 255);">src.util.request.server_request()</span>" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="390" y="855" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-113" value="" style="curved=1;endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="500" y="870" as="sourcePoint" />
<mxPoint x="550" y="820" as="targetPoint" />
<Array as="points">
<mxPoint x="550" y="870" />
<mxPoint x="500" y="820" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="9Szatl_gFZhMewFinVi2-2" value="used by" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="syFWknwN7UwxYUdkCljM-113">
<mxGeometry x="-0.0438" y="3" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-133" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>UseCaseFunctions</b></p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ available_functions: Dict</p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ call_function(String, Dict): Dict</p>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1090" y="845" width="250" height="80" as="geometry" />
</mxCell>
<mxCell id="syFWknwN7UwxYUdkCljM-134" value="<p style="margin:0px;margin-top:4px;text-align:center;"><b>FunctionHandlerService</b></p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ function_set: Dict</p><p style="margin:0px;margin-left:4px;">+ use_case_functions: UseCaseFunctions</p><hr size="1" style="border-style:solid;"><p style="margin:0px;margin-left:4px;">+ parse_arguments(String, Dict): Dict</p><p style="margin:0px;margin-left:4px;">+ handle_function(String, Dict): Dict</p><p style="margin:0px;margin-left:4px;">- _get_function(String): Dict</p><p style="margin:0px;margin-left:4px;">- _get_requried(String): List&lt;String&gt;</p><p style="margin:0px;margin-left:4px;">- _get_parameter_details(String): Dict</p>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1090" y="650" width="250" height="170" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>