jfrery-zama commited on
Commit
7831a95
1 Parent(s): e46675a

chore: update concrete-ml and smooth UI

Browse files
app.py CHANGED
@@ -64,13 +64,12 @@ def keygen():
64
  # Generate a fresh key
65
  fhe_api.generate_private_and_evaluation_keys(force=True)
66
  evaluation_key = fhe_api.get_serialized_evaluation_keys()
67
- size_evaluation_key = len(evaluation_key)
68
 
69
  # Save evaluation_key in a file, since too large to pass through regular Gradio
70
  # buttons, https://github.com/gradio-app/gradio/issues/1877
71
  numpy.save(f"tmp/tmp_evaluation_key_{user_id}.npy", evaluation_key)
72
 
73
- return [list(evaluation_key)[:ENCRYPTED_DATA_BROWSER_LIMIT], size_evaluation_key, user_id]
74
 
75
 
76
  def encode_quantize_encrypt(text, user_id):
@@ -88,20 +87,12 @@ def encode_quantize_encrypt(text, user_id):
88
  numpy.save(f"tmp/tmp_encrypted_quantized_encoding_{user_id}.npy", encrypted_quantized_encoding)
89
 
90
  # Compute size
91
- text_size = len(text.encode())
92
- encodings_size = len(encodings.tobytes())
93
- quantized_encoding_size = len(quantized_encodings.tobytes())
94
- encrypted_quantized_encoding_size = len(encrypted_quantized_encoding)
95
  encrypted_quantized_encoding_shorten = list(encrypted_quantized_encoding)[:ENCRYPTED_DATA_BROWSER_LIMIT]
96
  encrypted_quantized_encoding_shorten_hex = ''.join(f'{i:02x}' for i in encrypted_quantized_encoding_shorten)
97
  return (
98
  encodings[0],
99
  quantized_encodings[0],
100
  encrypted_quantized_encoding_shorten_hex,
101
- text_size,
102
- encodings_size,
103
- quantized_encoding_size,
104
- encrypted_quantized_encoding_size,
105
  )
106
 
107
 
@@ -175,7 +166,7 @@ with demo:
175
  <img width=200 src="https://user-images.githubusercontent.com/5758427/197816413-d9cddad3-ba38-4793-847d-120975e1da11.png">
176
  </p>
177
 
178
- <h2 align="center">Machine Learning, Natural Language Processing and Fully Homomorphic Encryption to do Sentiment Analysis on Encrypted data.</h2>
179
 
180
  <p align="center">
181
  <a href="https://github.com/zama-ai/concrete-ml"> <img style="vertical-align: middle; display:inline-block; margin-right: 3px;" width=15 src="https://user-images.githubusercontent.com/5758427/197972109-faaaff3e-10e2-4ab6-80f5-7531f7cfb08f.png">Concrete-ML</a>
@@ -194,10 +185,6 @@ with demo:
194
  )
195
 
196
 
197
-
198
- # FIXME: make it smaller and in the middle
199
- # gr.Image("Zama.svg")
200
-
201
  gr.Markdown(
202
  """
203
  <p align="center">
@@ -232,10 +219,6 @@ with demo:
232
  visible=False
233
  )
234
 
235
- size_evaluation_key = gr.Number(
236
- label="Size of the evalution key (in bytes):", value=0, interactive=False
237
- )
238
-
239
  gr.Markdown("# Step 2: Provide a message")
240
  gr.Markdown("## Client side")
241
  gr.Markdown(
@@ -247,7 +230,6 @@ with demo:
247
  b_encode_quantize_text = gr.Button(
248
  "Encode, quantize and encrypt the text with transformer vectorizer, and send to server"
249
  )
250
- size_text = gr.Number(label="Size of the text (in bytes):", value="0", interactive=False)
251
 
252
  with gr.Row():
253
  encoding = gr.Textbox(
@@ -263,14 +245,6 @@ with demo:
263
  max_lines=4,
264
  interactive=False,
265
  )
266
- with gr.Row():
267
- size_encoding = gr.Number(label="Size (in bytes):", value=0, interactive=False)
268
- size_quantized_encoding = gr.Number(label="Size (in bytes):", value=0, interactive=False)
269
- size_encrypted_quantized_encoding = gr.Number(
270
- label="Size (in bytes):",
271
- value=0,
272
- interactive=False,
273
- )
274
 
275
  gr.Markdown("# Step 4: Run the FHE evaluation")
276
  gr.Markdown("## Server side")
@@ -295,7 +269,7 @@ with demo:
295
  labels_sentiment = gr.Label(label="Sentiment:")
296
 
297
  # Button for key generation
298
- b_gen_key_and_install.click(keygen, inputs=[], outputs=[evaluation_key, size_evaluation_key, user_id])
299
 
300
  # Button to quantize and encrypt
301
  b_encode_quantize_text.click(
@@ -305,10 +279,6 @@ with demo:
305
  encoding,
306
  quantized_encoding,
307
  encrypted_quantized_encoding,
308
- size_text,
309
- size_encoding,
310
- size_quantized_encoding,
311
- size_encrypted_quantized_encoding,
312
  ],
313
  )
314
 
 
64
  # Generate a fresh key
65
  fhe_api.generate_private_and_evaluation_keys(force=True)
66
  evaluation_key = fhe_api.get_serialized_evaluation_keys()
 
67
 
68
  # Save evaluation_key in a file, since too large to pass through regular Gradio
69
  # buttons, https://github.com/gradio-app/gradio/issues/1877
70
  numpy.save(f"tmp/tmp_evaluation_key_{user_id}.npy", evaluation_key)
71
 
72
+ return [list(evaluation_key)[:ENCRYPTED_DATA_BROWSER_LIMIT], user_id]
73
 
74
 
75
  def encode_quantize_encrypt(text, user_id):
 
87
  numpy.save(f"tmp/tmp_encrypted_quantized_encoding_{user_id}.npy", encrypted_quantized_encoding)
88
 
89
  # Compute size
 
 
 
 
90
  encrypted_quantized_encoding_shorten = list(encrypted_quantized_encoding)[:ENCRYPTED_DATA_BROWSER_LIMIT]
91
  encrypted_quantized_encoding_shorten_hex = ''.join(f'{i:02x}' for i in encrypted_quantized_encoding_shorten)
92
  return (
93
  encodings[0],
94
  quantized_encodings[0],
95
  encrypted_quantized_encoding_shorten_hex,
 
 
 
 
96
  )
97
 
98
 
 
166
  <img width=200 src="https://user-images.githubusercontent.com/5758427/197816413-d9cddad3-ba38-4793-847d-120975e1da11.png">
167
  </p>
168
 
169
+ <h2 align="center">Sentiment Analysis On Encrypted Data Using Homomorphic Encryption.</h2>
170
 
171
  <p align="center">
172
  <a href="https://github.com/zama-ai/concrete-ml"> <img style="vertical-align: middle; display:inline-block; margin-right: 3px;" width=15 src="https://user-images.githubusercontent.com/5758427/197972109-faaaff3e-10e2-4ab6-80f5-7531f7cfb08f.png">Concrete-ML</a>
 
185
  )
186
 
187
 
 
 
 
 
188
  gr.Markdown(
189
  """
190
  <p align="center">
 
219
  visible=False
220
  )
221
 
 
 
 
 
222
  gr.Markdown("# Step 2: Provide a message")
223
  gr.Markdown("## Client side")
224
  gr.Markdown(
 
230
  b_encode_quantize_text = gr.Button(
231
  "Encode, quantize and encrypt the text with transformer vectorizer, and send to server"
232
  )
 
233
 
234
  with gr.Row():
235
  encoding = gr.Textbox(
 
245
  max_lines=4,
246
  interactive=False,
247
  )
 
 
 
 
 
 
 
 
248
 
249
  gr.Markdown("# Step 4: Run the FHE evaluation")
250
  gr.Markdown("## Server side")
 
269
  labels_sentiment = gr.Label(label="Sentiment:")
270
 
271
  # Button for key generation
272
+ b_gen_key_and_install.click(keygen, inputs=[], outputs=[evaluation_key, user_id])
273
 
274
  # Button to quantize and encrypt
275
  b_encode_quantize_text.click(
 
279
  encoding,
280
  quantized_encoding,
281
  encrypted_quantized_encoding,
 
 
 
 
282
  ],
283
  )
284
 
requirements.txt CHANGED
@@ -1,4 +1,4 @@
1
- concrete-ml==0.4.0
2
  gradio==3.10.0
3
  pandas==1.4.3
4
  uvicorn==0.18.2
 
1
+ concrete-ml==0.6.1
2
  gradio==3.10.0
3
  pandas==1.4.3
4
  uvicorn==0.18.2
sentiment_fhe_model/deployment/client.zip CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:c0f9430bcbd16f40dfcd8547b7c0053be4a5692f5385206fa5ef42e9d3270242
3
- size 467
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:23ed14c3533c6950f73ea2bbbaff34b7de8bc57703e49fb62da29e37ecf66b87
3
+ size 481
sentiment_fhe_model/deployment/serialized_processing.json CHANGED
The diff for this file is too large to render. See raw diff
 
sentiment_fhe_model/deployment/server.zip CHANGED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:237a28ea8367363255d3e1324841c54938885c7e4a8fff33bc1a49844c997873
3
- size 10443
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4342713378f3fc474bc8a3fdd3149e45b94cf79c4ab0cf0c3322b435fcc8cb42
3
+ size 10418