jadehardouin commited on
Commit
564f119
1 Parent(s): 87f2a0e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +38 -14
app.py CHANGED
@@ -12,7 +12,7 @@ text1 = "<h1 style='text-align: center; color: midnightblue; font-size: 25px;'>F
12
  text2 = "<h1 style='text-align: center; color: midnightblue; font-size: 25px;'>Second option"
13
  text3 = "<h1 style='text-align: center; color: midnightblue; font-size: 30px;'>Compute and compare TCOs"
14
  description=f"""
15
- <p>In this demo application, we help you compare different AI model services, such as Open source or SaaS solutions, based on the Total Cost of Ownership for their deployment.</p>
16
  <p>First, you'll have to select your use case. Then, select the two model service options you'd like to compare. Depending on the options you chose, you could be able to customize some parameters of the set-up. Eventually, we will provide you with the cost of deployment for the selected model services, as a function of the number of requests. You can compare both solutions to evaluate which one best suits your needs.</p>
17
  """
18
 
@@ -26,24 +26,24 @@ def on_use_case_change(use_case):
26
 
27
  def compare(tco1, tco2, labor_cost1, labor_cost2, dropdown, dropdown2):
28
  r = tco1 / tco2
29
- r2 = labor_cost1 / labor_cost2
30
 
31
  if r < 1:
32
  comparison_result = f"The cost/request of the {dropdown2} service is {1/r:.5f} times more expensive than the one of the {dropdown} service."
33
- if r2 > 1:
34
  comparison_result2 = f"However, it will cost a lot more to deploy the set-up for the {dropdown} service because the labor cost per month is of ${labor_cost1}, compared to a labor cost per month of ${labor_cost2} for the {dropdown2} solution."
35
  meeting_point = (labor_cost2 - labor_cost1) / (tco1 - tco2)
36
  comparison_result3 = f"The number of requests you need to achieve in a month to have the labor cost of the {dropdown} service be absorbed and both solution TCOs be equal would be of {meeting_point:.0f}."
37
- elif r2 < 1:
38
  comparison_result2 = f"Additionally, it will cost a lot more to deploy the set-up for the {dropdown2} service because the labor cost per month is of ${labor_cost2}, compared to a labor cost per month of ${labor_cost1} for the {dropdown} solution."
39
  else:
40
  comparison_result2 = f"Additionally, both services have the same labor cost per month."
41
 
42
  elif r > 1:
43
  comparison_result = f"The cost/request of the {dropdown2} service is {r:.5f} times cheaper than the one of the {dropdown} service."
44
- if r2 > 1:
45
  comparison_result2 = f"Additionally, it will cost a lot more to deploy the set-up for the {dropdown} service because the labor cost per month is of ${labor_cost1}, compared to a labor cost per month of ${labor_cost2} for the {dropdown2} solution."
46
- elif r2 < 1:
47
  comparison_result2 = f"However, it will cost a lot more to deploy the set-up for the {dropdown2} service because the labor cost per month is of ${labor_cost2}, compared to a labor cost per month of ${labor_cost1} for the {dropdown} solution."
48
  meeting_point = (labor_cost2 - labor_cost1) / (tco1 - tco2)
49
  comparison_result3 = f"The number of requests you need to achieve in a month to have the labor cost of the {dropdown2} service be absorbed and both solution TCOs be equal would be of {meeting_point:.0f}."
@@ -52,14 +52,36 @@ def compare(tco1, tco2, labor_cost1, labor_cost2, dropdown, dropdown2):
52
 
53
  else:
54
  comparison_result = f"Both solutions have the same cost/request."
55
- if r2 > 1:
56
  comparison_result2 = f"However, it will cost a lot more to deploy the set-up for the {dropdown} service because the labor cost per month is of ${labor_cost1}, compared to a labor cost per month of ${labor_cost2} for the {dropdown2} solution."
57
- elif r2 < 1:
58
  comparison_result2 = f"However, it will cost a lot more to deploy the set-up for the {dropdown2} service because the labor cost per month is of ${labor_cost2}, compared to a labor cost per month of ${labor_cost1} for the {dropdown} solution."
59
  else:
60
  comparison_result2 = f"Additionally, both services have the same labor cost per month."
61
 
62
- return comparison_result + "\n" + "\n" + comparison_result2 + "\n" + "\n" + comparison_result3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
 
64
  def update_plot(tco1, tco2, dropdown, dropdown2, labour_cost1, labour_cost2):
65
 
@@ -227,23 +249,25 @@ with gr.Blocks(theme=style) as demo:
227
 
228
  with gr.Row():
229
  with gr.Column():
230
- tco_output = gr.Text("Cost/request 1: ", label=" Cost/request for the first option ", info="This is only the infrastructure cost per request for deployment, the labor cost still has to be added for a Total Cost of Model Serving")
231
  latency_info = gr.Markdown()
232
  with gr.Accordion("Click here to see the formula", open=False):
233
  tco_formula = gr.Markdown()
234
 
235
  with gr.Column():
236
- tco_output2 = gr.Text("Cost/request 2: ", label=" Cost/request for the second option ", info="This is only the infrastructure cost per request for deployment, the labor cost still has to be added for a Total Cost of Model Serving")
237
  latency_info2 = gr.Markdown()
238
  with gr.Accordion("Click here to see the formula", open=False):
239
  tco_formula2 = gr.Markdown()
240
 
241
  with gr.Row():
242
  with gr.Column(scale=1):
243
- ratio = gr.Text("Comparison: ", label=" Comparison of cost/request and TCOs")
244
- with gr.Column(scale=3):
 
 
245
  plot = gr.LinePlot()
246
 
247
- compute_tco_btn.click(page1.compute_cost_per_token, inputs=page1.get_all_components_for_cost_computing() + [dropdown, input_tokens, output_tokens], outputs=[tco_output, tco1, tco_formula, latency_info, labor_cost1]).then(page2.compute_cost_per_token, inputs=page2.get_all_components_for_cost_computing() + [dropdown2, input_tokens, output_tokens], outputs=[tco_output2, tco2, tco_formula2, latency_info2, labor_cost2]).then(compare, inputs=[tco1, tco2, labor_cost1, labor_cost2, dropdown, dropdown2], outputs=ratio).then(update_plot, inputs=[tco1, tco2, dropdown, dropdown2, labor_cost1, labor_cost2], outputs=plot)
248
 
249
  demo.launch(debug=True)
 
12
  text2 = "<h1 style='text-align: center; color: midnightblue; font-size: 25px;'>Second option"
13
  text3 = "<h1 style='text-align: center; color: midnightblue; font-size: 30px;'>Compute and compare TCOs"
14
  description=f"""
15
+ <p>In this demo application, we help you compare different AI model services, such as Open source or SaaS solutions, based on the Total Cost of Ownership for their deployment. Please note that we focus on getting the service up and running, but not the maintenance that follows.</p>
16
  <p>First, you'll have to select your use case. Then, select the two model service options you'd like to compare. Depending on the options you chose, you could be able to customize some parameters of the set-up. Eventually, we will provide you with the cost of deployment for the selected model services, as a function of the number of requests. You can compare both solutions to evaluate which one best suits your needs.</p>
17
  """
18
 
 
26
 
27
  def compare(tco1, tco2, labor_cost1, labor_cost2, dropdown, dropdown2):
28
  r = tco1 / tco2
29
+ comparison_result3 = ""
30
 
31
  if r < 1:
32
  comparison_result = f"The cost/request of the {dropdown2} service is {1/r:.5f} times more expensive than the one of the {dropdown} service."
33
+ if labor_cost1 > labor_cost2:
34
  comparison_result2 = f"However, it will cost a lot more to deploy the set-up for the {dropdown} service because the labor cost per month is of ${labor_cost1}, compared to a labor cost per month of ${labor_cost2} for the {dropdown2} solution."
35
  meeting_point = (labor_cost2 - labor_cost1) / (tco1 - tco2)
36
  comparison_result3 = f"The number of requests you need to achieve in a month to have the labor cost of the {dropdown} service be absorbed and both solution TCOs be equal would be of {meeting_point:.0f}."
37
+ elif labor_cost1 < labor_cost2:
38
  comparison_result2 = f"Additionally, it will cost a lot more to deploy the set-up for the {dropdown2} service because the labor cost per month is of ${labor_cost2}, compared to a labor cost per month of ${labor_cost1} for the {dropdown} solution."
39
  else:
40
  comparison_result2 = f"Additionally, both services have the same labor cost per month."
41
 
42
  elif r > 1:
43
  comparison_result = f"The cost/request of the {dropdown2} service is {r:.5f} times cheaper than the one of the {dropdown} service."
44
+ if labor_cost1 > labor_cost2:
45
  comparison_result2 = f"Additionally, it will cost a lot more to deploy the set-up for the {dropdown} service because the labor cost per month is of ${labor_cost1}, compared to a labor cost per month of ${labor_cost2} for the {dropdown2} solution."
46
+ elif labor_cost1 < labor_cost2:
47
  comparison_result2 = f"However, it will cost a lot more to deploy the set-up for the {dropdown2} service because the labor cost per month is of ${labor_cost2}, compared to a labor cost per month of ${labor_cost1} for the {dropdown} solution."
48
  meeting_point = (labor_cost2 - labor_cost1) / (tco1 - tco2)
49
  comparison_result3 = f"The number of requests you need to achieve in a month to have the labor cost of the {dropdown2} service be absorbed and both solution TCOs be equal would be of {meeting_point:.0f}."
 
52
 
53
  else:
54
  comparison_result = f"Both solutions have the same cost/request."
55
+ if labor_cost1 > labor_cost2:
56
  comparison_result2 = f"However, it will cost a lot more to deploy the set-up for the {dropdown} service because the labor cost per month is of ${labor_cost1}, compared to a labor cost per month of ${labor_cost2} for the {dropdown2} solution."
57
+ elif labor_cost1 < 1:
58
  comparison_result2 = f"However, it will cost a lot more to deploy the set-up for the {dropdown2} service because the labor cost per month is of ${labor_cost2}, compared to a labor cost per month of ${labor_cost1} for the {dropdown} solution."
59
  else:
60
  comparison_result2 = f"Additionally, both services have the same labor cost per month."
61
 
62
+ #return comparison_result + "\n" + "\n" + comparison_result2 + "\n" + "\n" + comparison_result3
63
+ return gr.update(value=comparison_result), comparison_result3
64
+
65
+ def create_table(tco1, tco2, labor_cost1, labor_cost2, dropdown, dropdown2):
66
+ list_values = []
67
+ labor_cost1 = round(labor_cost1, 1)
68
+ labor_cost2 = round(labor_cost2, 1)
69
+ first_sol = [tco1, labor_cost1]
70
+ second_sol = [tco2, labor_cost2]
71
+ list_values.append(first_sol)
72
+ list_values.append(second_sol)
73
+
74
+ data = pd.DataFrame(list_values, index=[dropdown, dropdown2], columns=["Cost/request ($) ", "Labor Cost ($/month)"])
75
+
76
+ formatted_data = data.copy()
77
+ formatted_data["Cost/request ($) "] = formatted_data["Cost/request ($) "].apply('{:.5f}'.format)
78
+ formatted_data["Labor Cost ($/month)"] = formatted_data["Labor Cost ($/month)"].apply('{:.1f}'.format)
79
+
80
+ styled_data = formatted_data.style\
81
+ .set_properties(**{'background-color': '#050f19', 'color': '#ffffff', 'border-color': '#ffffff', 'border-width': '1px', 'border-style': 'solid'})\
82
+ .to_html()
83
+
84
+ return gr.update(value=styled_data)
85
 
86
  def update_plot(tco1, tco2, dropdown, dropdown2, labour_cost1, labour_cost2):
87
 
 
249
 
250
  with gr.Row():
251
  with gr.Column():
252
+ tco_output = gr.Text("Cost/request 1: ", label=" Cost/request for the first option ", info="This is only the infrastructure cost per request for deployment, the labor cost still has to be added for the AI model service deployment TCO.")
253
  latency_info = gr.Markdown()
254
  with gr.Accordion("Click here to see the formula", open=False):
255
  tco_formula = gr.Markdown()
256
 
257
  with gr.Column():
258
+ tco_output2 = gr.Text("Cost/request 2: ", label=" Cost/request for the second option ", info="This is only the infrastructure cost per request for deployment, the labor cost still has to be added for the AI model service deployment TCO.")
259
  latency_info2 = gr.Markdown()
260
  with gr.Accordion("Click here to see the formula", open=False):
261
  tco_formula2 = gr.Markdown()
262
 
263
  with gr.Row():
264
  with gr.Column(scale=1):
265
+ info = gr.Text("Click on Compute & Compare to get the results", label=" Comparison of cost/request and TCOs")
266
+ table = gr.Markdown()
267
+ ratio = gr.Markdown()
268
+ with gr.Column(scale=2):
269
  plot = gr.LinePlot()
270
 
271
+ compute_tco_btn.click(page1.compute_cost_per_token, inputs=page1.get_all_components_for_cost_computing() + [dropdown, input_tokens, output_tokens], outputs=[tco_output, tco1, tco_formula, latency_info, labor_cost1]).then(page2.compute_cost_per_token, inputs=page2.get_all_components_for_cost_computing() + [dropdown2, input_tokens, output_tokens], outputs=[tco_output2, tco2, tco_formula2, latency_info2, labor_cost2]).then(create_table, inputs=[tco1, tco2, labor_cost1, labor_cost2, dropdown, dropdown2], outputs=table).then(compare, inputs=[tco1, tco2, labor_cost1, labor_cost2, dropdown, dropdown2], outputs=[info, ratio]).then(update_plot, inputs=[tco1, tco2, dropdown, dropdown2, labor_cost1, labor_cost2], outputs=plot)
272
 
273
  demo.launch(debug=True)