pryvx 2.4.2__py3-none-any.whl → 2.4.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
pryvx/fl_client.py CHANGED
@@ -9,27 +9,28 @@ import pickle
9
9
  def train_logistic_classifier(features, labels):
10
10
  model = LogisticRegression()
11
11
  model.fit(features, labels)
12
-
13
12
  serialized_model = pickle.dumps(model)
13
+ return serialized_model, model
14
14
 
15
- return serialized_model
16
15
 
17
16
  def train_random_forest_classifier(features, labels):
18
17
  model = RandomForestClassifier(n_estimators=100, random_state=42)
19
18
  model.fit(features, labels)
20
19
  serialized_model = pickle.dumps(model)
21
-
22
- return serialized_model
20
+ return serialized_model, model
23
21
 
24
22
 
25
- def send_params(serialized_model, connection_url):
23
+ def send_params(serialized_model, connection_url, client_id):
26
24
 
27
25
  with grpc.insecure_channel(connection_url) as channel:
28
26
  stub = pryvx_pb2_grpc.ModelServiceStub(channel)
29
27
 
28
+ # Attach metadata (client ID) in the request
29
+ metadata = (("client_id", client_id),)
30
+
30
31
  model_params = pryvx_pb2.ModelParams(params=serialized_model)
31
32
 
32
- response = stub.SendModelParams(model_params)
33
+ response = stub.SendModelParams(model_params, metadata=metadata)
33
34
 
34
- return "Model Params sent to server"
35
+ return f"Model Params sent to server from {client_id}"
35
36
 
pryvx/fl_ensemble.py CHANGED
@@ -1,16 +1,20 @@
1
- from sklearn.ensemble import VotingClassifier
2
-
3
- # estimators = [('client_1', model_1), ('client_2', model_2), ('client_3', model_3)]
1
+ import numpy as np
4
2
 
5
3
  def federated_ensemble(estimators, X_test):
6
- # Create an ensemble using soft voting
7
- ensemble_model = VotingClassifier(
8
- estimators=estimators,
9
- voting='soft' # Soft voting (probability-based)
10
- )
11
-
12
- # Make predictions
13
- y_pred_ensemble = ensemble_model.predict(X_test)
4
+ """
5
+ Perform soft voting ensemble on a list of trained estimators.
6
+
7
+ :param estimators: List of trained models that support `predict_proba`
8
+ :param X_test: Test dataset (features only)
9
+ :return: Final predictions after soft voting
10
+ """
11
+ if not estimators:
12
+ raise ValueError("No models provided for ensemble.")
14
13
 
15
- return y_pred_ensemble
14
+ # Sum all probability predictions
15
+ avg_probs = sum(model.predict_proba(X_test) for model in estimators) / len(estimators)
16
16
 
17
+ # Convert probabilities to final predictions (highest probability wins)
18
+ y_pred_ensemble = np.argmax(avg_probs, axis=1)
19
+
20
+ return y_pred_ensemble
pryvx/fl_server.py CHANGED
@@ -16,26 +16,28 @@ class ModelServicer(pryvx_pb2_grpc.ModelServiceServicer):
16
16
 
17
17
  def SendModelParams(self, request, context):
18
18
  try:
19
+ # Extract metadata (client ID)
20
+ client_id = dict(context.invocation_metadata()).get("client_id", "unknown_client")
21
+
19
22
  # Deserialize model received from client
20
23
  model = pickle.loads(request.params)
21
24
 
22
- timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
23
-
24
25
  # Assign a unique client ID
25
26
  client_id = f"client_{len(self.client_models) + 1}"
26
27
  self.client_models[client_id] = model
27
28
 
28
29
  # Save model to disk
29
- model_filename = os.path.join(MODEL_SAVE_PATH, f"{client_id}_model_{timestamp}.pkl")
30
+ model_filename = os.path.join(MODEL_SAVE_PATH, f"{client_id}_model.pkl")
30
31
  with open(model_filename, "wb") as f:
32
+
31
33
  pickle.dump(model, f)
32
34
 
33
35
  print(f"✅ Received and saved model from {client_id}")
34
36
 
35
- return pryvx_pb2.ModelResponse(message=f"Model from {client_id} received and saved.")
37
+ return f"Model from {client_id} received and saved."
36
38
  except Exception as e:
37
39
  print(f"❌ Error processing model: {e}")
38
- return pryvx_pb2.ModelResponse(message="Failed to process model")
40
+ return "Failed to process model"
39
41
 
40
42
 
41
43
  def start_server():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pryvx
3
- Version: 2.4.2
3
+ Version: 2.4.4
4
4
  Summary: A comprehensive package for privacy-enhancing technologies
5
5
  Home-page: UNKNOWN
6
6
  Author: PryvX (Jayesh Kenaudekar)
@@ -1,7 +1,7 @@
1
1
  pryvx/__init__.py,sha256=QvpYISJ8MH7XnbxC5iTMTycq7Svsld0NIbMozcndYjo,111
2
- pryvx/fl_client.py,sha256=axJKdQgXDMs1FT8rgI2HzG8keyEG__U9Y4GtiWWeHO4,986
3
- pryvx/fl_ensemble.py,sha256=cUPPx3QpnalRKtIBtoE4PCTk34E7940W7ZxGtUisDgo,475
4
- pryvx/fl_server.py,sha256=bJ_dm-UZvmq-JUB58b_F_V5-IsmB3eC2RS0JjF5CPs8,1739
2
+ pryvx/fl_client.py,sha256=gQNjv99tDDjaGj0JTdAVomefqR2F3_xNLcnHJ6aGZZo,1152
3
+ pryvx/fl_ensemble.py,sha256=lvgvd-zJDSBh-RyMAjTyJZwu0eFiUNXfCU7J2Vk7g0g,715
4
+ pryvx/fl_server.py,sha256=qAuJqOjdTZ9-DZWx6eeVqGtyMhAqcyTe4vutmtSeglE,1756
5
5
  pryvx/gdp.py,sha256=ToLtWNvBKtSs-3Na1pGe_J6dWvBxXhV2raUJkNtKMg4,925
6
6
  pryvx/ldp.py,sha256=WxBQLnZ_b2wNV1rlN7rtKXaQ5waUPPvnRus-4tUnCB8,810
7
7
  pryvx/phe.py,sha256=HN70aUNTq0w9vRPMaNGfTnNi00gMQ1B7R7Cm6r6rheE,2974
@@ -9,8 +9,8 @@ pryvx/pryvx_pb2.py,sha256=-ce40VMW0nQcjyhAJy1BvI32wtWNm425LSIExspK_qg,1200
9
9
  pryvx/pryvx_pb2_grpc.py,sha256=pRQKblTNIVEwHsMQmhC-HGJFzsLh0sdOzQ-ksFYVK-A,2437
10
10
  pryvx/psi.py,sha256=V0BUJwYfiFWhKtEL27q45yxY7U-I7B4olKQhaGbgN50,1346
11
11
  pryvx/smpc.py,sha256=FZcE3gZo8WUVPmcBHSgP8iOkWt3AKcBLSLCtKczy8hs,2247
12
- pryvx-2.4.2.dist-info/LICENSE,sha256=pbIMXbaorAIVW-fDch2tvtZRkVA3mz-UnXQqeCf4LDg,1086
13
- pryvx-2.4.2.dist-info/METADATA,sha256=axWXanMU4AAmUsGygBZlLx7BYDT6v6LNqW9pGaw02Rk,1066
14
- pryvx-2.4.2.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
15
- pryvx-2.4.2.dist-info/top_level.txt,sha256=1iHoeevu_FoFjdPg8HyMlgvHNUm1--9QEpFMaJEa4hw,6
16
- pryvx-2.4.2.dist-info/RECORD,,
12
+ pryvx-2.4.4.dist-info/LICENSE,sha256=pbIMXbaorAIVW-fDch2tvtZRkVA3mz-UnXQqeCf4LDg,1086
13
+ pryvx-2.4.4.dist-info/METADATA,sha256=oASPQafqbKaThizhvqDZABLarIJz1PO0bs18cBNm3PQ,1066
14
+ pryvx-2.4.4.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
15
+ pryvx-2.4.4.dist-info/top_level.txt,sha256=1iHoeevu_FoFjdPg8HyMlgvHNUm1--9QEpFMaJEa4hw,6
16
+ pryvx-2.4.4.dist-info/RECORD,,
File without changes
File without changes