A professional, modular and extensible framework for federated learning applications with privacy, security, and error recovery.
Project description
Federated Learning Framework
A professional, modular, and extensible Python framework for building federated learning systems with privacy preservation, security features, and enterprise-grade error recovery.
Key features:
- Modular architecture with configurable aggregation strategies (FedAvg and variants)
- Optional privacy tools (differential privacy, optional homomorphic encryption)
- Support for TensorFlow and PyTorch models
- Client selection and connection management utilities
- Monitoring and evaluation helpers
This README focuses on installation, quickstart, and user-facing examples. Developer and release details live in DEPLOYMENT.md and CONTRIBUTING.md.
Install
Install from PyPI:
pip install federated-learning-framework
Or install from source for development:
git clone https://github.com/mehrdaddjavadi/federated_learning_framework.git
cd federated_learning_framework
pip install -e .
Quickstart (minimal)
This minimal example shows a basic import and instantiation. For production use, configure datasets, models, and secure transports.
from federated_learning_framework import CentralServer, ClientDevice
# Create a server (example only)
server = CentralServer(port=8089, min_clients=1)
# Create a client (example only)
client = ClientDevice(server_url='ws://localhost:8089', client_id='client-1')
print(server, client)
Examples
See the examples/ folder for small runnable snippets:
examples/basic_server.py— minimal server instantiationexamples/client_example.py— minimal client instantiation
Documentation
Full API reference and developer guides are available in the repository:
API_REFERENCE.md— API docsGETTING_STARTED.md— tutorial and walkthroughDEPLOYMENT.md— maintainer release process (contains developer-only steps)
Contributing
Contributions are welcome — please read CONTRIBUTING.md for guidelines.
License
MIT — see LICENSE for details.
Federated Learning Framework# Federated Learning Framework
A professional, modular, and extensible Python framework for building federated learning systems with privacy preservation, security features, and enterprise-grade error recovery.A professional, modular, and extensible Python framework for building federated learning systems with privacy preservation, security features, and enterprise-grade error recovery.
Production-Ready | Privacy-First | Enterprise-Grade> Production-Ready | Privacy-First | Enterprise-Grade
---## Features
✨ Key Features- Modular and Extensible: Easily customizable for different machine learning and deep learning applications.
- Secure: Utilizes homomorphic encryption to ensure data privacy.
🎯 Core Federated Learning- Active Learning: Incorporates active learning strategies to improve model performance.
-
FedAvg Algorithm - Weighted federated averaging with model aggregation- Flexible Communication: Supports various connection methods including socket programming.
-
Model Compatibility Validation - Automatic architecture checking - Customizable: Users can edit and control every part of the framework with various functions.
-
Multi-Framework Support - TensorFlow, PyTorch, and custom models
Potential Applications
🔐 Privacy & Security
-
Differential Privacy - Gradient clipping + Gaussian noise addition### Healthcare
-
Homomorphic Encryption - Optional end-to-end encryption (TenSEAL)
-
Configurable Privacy Budgets - Fine-grained epsilon/delta controlFederated learning can be used to train models on patient data from multiple hospitals without sharing sensitive information. This approach can improve medical diagnostics and treatment recommendations while preserving patient privacy.
🧠 Intelligence### Autonomous Vehicles
-
Active Learning - Three sampling strategies (entropy, margin, diversity)
-
Smart Client Selection - Performance-weighted client selectionBy collecting and learning from data across multiple autonomous vehicles, the framework can help improve the safety and performance of self-driving cars without exposing individual vehicle data.
-
Convergence Detection - Automatic training convergence monitoring
Drones
🛡️ Reliability
-
Error Recovery - Automatic recovery with configurable retriesDrones can use federated learning to share and learn from data collected during their operations, enhancing their navigation, object detection, and other capabilities while ensuring data security.
-
Checkpointing - Backup and restore training state
-
Connection Management - Heartbeat monitoring and auto-reconnection### Natural Language Processing (NLP)
📊 ObservabilityFederated learning can be applied to train NLP models on data from multiple sources, such as user devices, to improve language understanding and generation without compromising user privacy.
-
Progress Tracking - Real-time metrics collection and reporting
-
Visualization - Matplotlib plots and performance dashboards### Finance
-
Comprehensive Logging - Structured logging throughout the framework
Financial institutions can use federated learning to develop fraud detection and risk management models by leveraging data from multiple sources while keeping customer data secure.
🔧 Developer Experience
-
Type Hints - Full type annotation coverage### Smart Homes and IoT Devices
-
Async/Await Support - Modern Python async patterns
-
Extensible Architecture - Easy to customize and extendIoT devices in smart homes can collaboratively learn from user interactions to optimize performance and provide better services without sharing raw data.
-
Comprehensive Documentation - 2,700+ lines of docs and API reference
Detailed Component Description
Central Server
📦 Quick Install
File: central_server.py
From PyPI (Recommended)
The central server orchestrates the federated learning process by coordinating the communication and aggregation of model weights from various client devices.
# Basic installation**Key Functions:**
pip install federated-learning-framework
- `run_server`: Starts the server to handle client connections.
# With TensorFlow support- `handle_client`: Manages incoming messages from clients.
pip install federated-learning-framework[tensorflow]- `transmit_weights`: Broadcasts the aggregated weights to clients.
- `send_data_to_client`: Sends specific data to a client.
# With encryption support- `get_data_from_client`: Requests and receives data from a client.
pip install federated-learning-framework[encryption]- `query_active_learning`: Implements active learning strategies to select data for labeling.
# With all features### Client Device
pip install federated-learning-framework[tensorflow,encryption,visualization,dev]
```**File:** `client_device.py`
### From SourceClient devices perform local training on their datasets and communicate with the central server.
```bash**Key Functions:**
git clone https://github.com/mehrdaddjavadi/federated_learning_framework.git
cd federated_learning_framework- `connect_to_central_server`: Connects to the central server.
pip install -e ".[dev]"- `federated_learning`: Coordinates local training and communication with the server.
```- `receive_weights`: Receives model weights from the central server.
- `send_weights`: Sends model weights to the central server.
---- `receive_data`: Receives data from the central server.
## 🚀 5-Minute Quick Start### Encryption
### 1. Start the Central Server**File:** `encryption.py`
```pythonProvides functions for creating encryption contexts and encrypting/decrypting model weights.
import asyncio
from federated_learning_framework import CentralServer**Key Functions:**
async def main():- `create_context`: Sets up the encryption context using TenSEAL.
server = CentralServer(- `encrypt_weights`: Encrypts model weights.
host='0.0.0.0',- `decrypt_weights`: Decrypts encrypted model weights.
port=8089,
min_clients=2,### Active Learning
epsilon=1.0 # Differential privacy
)**File:** `active_learning.py`
print("🚀 Starting Federated Learning Server...")
await server.run_server()Implements active learning strategies to enhance the training process by selectively querying informative data points.
if __name__ == "__main__":**Key Functions:**
asyncio.run(main())
```- `select_informative_samples`: Selects samples for labeling based on uncertainty.
**Run:** `python server.py`### Connection
### 2. Connect Client Devices**File:** `connection.py`
```pythonManages the connection types and protocols (e.g., WebSocket) for communication between the central server and client devices.
import asyncio
import numpy as np**Key Functions:**
import tensorflow as tf
from federated_learning_framework import ClientDevice, TensorFlowModel- `run_server`: Starts a WebSocket server.
- `connect_to_server`: Establishes a WebSocket connection to the server.
async def main():
# Create model### Decorators
keras_model = tf.keras.Sequential([
tf.keras.layers.Dense(64, activation='relu', input_shape=(10,)),**File:** `decorators.py`
tf.keras.layers.Dense(10, activation='softmax')
])Provides decorators for adding federated learning and encryption functionalities to functions.
model = TensorFlowModel(keras_model)
**Key Functions:**
# Connect client
client = ClientDevice(client_id=1, model=model)- `federated_learning_decorator`: Wraps a function to enable federated learning.
await client.connect_to_central_server("ws://localhost:8089")- `encryption_decorator`: Wraps a function to enable homomorphic encryption.
# Prepare data### Utilities
x_train = np.random.randn(100, 10).astype(np.float32)
y_train = np.random.randint(0, 10, 100)**File:** `utils.py`
# Run federated learningIncludes utility functions used throughout the framework.
print("🤖 Starting federated learning...")
await client.federated_learning(x_train, y_train, epochs=5)## Installation
print("✅ Complete!")
Clone the repository:
if __name__ == "__main__":
asyncio.run(main())```sh
```git clone https://github.com/mehrdaddjavadi/federated_learning_framework.git
Run: python client.py (in another terminal)
Navigate to the directory:
That's it! You now have a working federated learning system! 🎉
---cd federated_learning_framework
📚 Documentation
Install the dependencies:
| Document | Purpose | Read Time |
|----------|---------|-----------|```sh
| GETTING_STARTED.md | Step-by-step tutorials and configuration | 20 min |pip install -r requirements.txt
| API_REFERENCE.md | Complete API documentation | 30 min |```
| DEPLOYMENT.md | PyPI and GitHub deployment guide | 15 min |
| CONTRIBUTING.md | How to contribute to the project | 10 min |## Usage
| CHANGELOG.md | Version history and release notes | 5 min |
Setting Up the Central Server
## 🎯 Core Componentsimport asyncio
from federated_learning_framework.central_server import CentralServer
### CentralServer
Orchestrates the federated learning process:async def main():
```python server = CentralServer()
server = CentralServer( await server.run_server()
port=8089,
min_clients=2, # Minimum clients per roundasyncio.run(main())
min_available_clients=0.8, # Fraction to wait for```
epsilon=1.0, # Differential privacy budget
delta=1e-5, # Privacy breach probability### Setting Up the Central Server On Interactive Environment Like Jupyter Notebook
clip_threshold=1.0 # Gradient clipping norm
)```python
```import nest_asyncio
import asyncio
### ClientDevicefrom federated_learning_framework.central_server import CentralServer
Participates in federated learning:
```pythonnest_asyncio.apply()
client = ClientDevice(
client_id=1,async def main():
model=wrapped_model, server = CentralServer()
context=encryption_context # Optional await server.run_server()
)
```# If running in an environment with an existing event loop
if __name__ == "__main__":
--- asyncio.run(main())
🔧 Use Cases
Setting Up a Client Device
Healthcare
Train models on sensitive patient data from multiple hospitals without sharing raw data.```python
import asyncio
Financeimport tensorflow as tf
Develop fraud detection and risk models using data from multiple institutions.from federated_learning_framework.client_device import ClientDevice
from federated_learning_framework.encryption import create_context
Autonomous Vehicles
Improve safety by learning from data across vehicle fleets securely.# Define your model
model = tf.keras.Sequential([
IoT & Smart Devices tf.keras.layers.Dense(4, activation='relu', input_shape=(3072,)),
Enable edge devices to collaboratively learn while protecting user privacy. tf.keras.layers.Dense(10, activation='softmax')
])
Natural Language Processing
Train NLP models on distributed text data without compromising privacy.# Create context for encryption
context = create_context()
Initialize the client device
📊 Architectureclient = ClientDevice(client_id=1, model=model, context=context)
┌─────────────────────────────────────────────────────────────┐ uri = "ws://localhost:8089"
│ Central Server (Port 8089) │ await client.connect_to_central_server(uri)
│ ┌──────────────────────────────────────────────────────┐ │ x_train, y_train = ... # Load your training data
│ │ Model Aggregation (FedAvg) │ │ await client.federated_learning(uri, x_train, y_train)
│ │ - Weighted averaging │ │ # Optionally receive data from central server
│ │ - Validation & compatibility checking │ │ data = await client.receive_data()
│ └──────────────────────────────────────────────────────┘ │ print(f"Received data: {data}")
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Privacy & Security Layer │ │asyncio.run(main())
│ │ - Differential privacy │ │```
│ │ - Gradient clipping & noise │ │
│ │ - Optional homomorphic encryption │ │### Sample Execution Script Using Decorators For Interactive Environments Like Colab And Jupyter Notebook
│ └──────────────────────────────────────────────────────┘ │
│ ┌──────────────────────────────────────────────────────┐ │```python
│ │ Intelligence & Monitoring │ │
│ │ - Client selection │ │import asyncio
│ │ - Progress tracking │ │import nest_asyncio
│ │ - Error recovery & checkpointing │ │import tensorflow as tf
│ └──────────────────────────────────────────────────────┘ │from federated_learning_framework.central_server import CentralServer
└─────────────────────────────────────────────────────────────┘from federated_learning_framework.client_device import ClientDevice
▲ ▲ ▲from federated_learning_framework.encryption import create_context
│ WebSocket │ WebSocket │ WebSocketfrom federated_learning_framework.models.tensorflow_model import TensorFlowModel
│ Connection │ Connection │ Connection
│ │ │nest_asyncio.apply()
┌────▼────┐ ┌─────▼─────┐ ┌────▼────┐
│ Client 1 │ │ Client 2 │ │ Client N │async def run_federated_learning():
│(Local │ │(Local │ │(Local │ # Setup models
│ Training)│ │ Training) │ │ Training)│ model = tf.keras.Sequential([
└──────────┘ └───────────┘ └──────────┘ tf.keras.layers.Dense(4, activation='relu', input_shape=(3072,)),
``` tf.keras.layers.Dense(10, activation='softmax')
])
--- tf_model = TensorFlowModel(model)
## 🧪 Testing # Create encryption context
context = create_context()
```bash
# Run all tests # Initialize server and clients
pytest tests/ -v central_server = CentralServer(connection_type='websocket', context=context)
client1 = ClientDevice(client_id=1, model=tf_model, context=context)
# Run with coverage client2 = ClientDevice(client_id=2, model=tf_model, context=context)
pytest tests/ --cov=federated_learning_framework --cov-report=html
# Define URIs for the server
# Run specific test uri = "ws://localhost:8089"
pytest tests/test_central_server.py::TestCentralServer::test_initialization -v
``` # Run the server
async def server_task():
**Test Coverage:** 75-90% per module, 35+ comprehensive tests await central_server.run_server()
--- # Connect clients and run federated learning
async def client_task():
## 🔒 Security Considerations await client1.connect_to_central_server(uri)
await client2.connect_to_central_server(uri)
### Privacy First
- All weights are clipped before aggregation (prevents privacy leakage) x_train = tf.random.normal((10, 3072))
- Optional differential privacy with Gaussian noise y_train = tf.random.uniform((10,), maxval=10, dtype=tf.int32)
- Privacy budget tracking and reporting
- Configurable epsilon/delta parameters await asyncio.gather(
client1.federated_learning(x_train, y_train),
### Encryption client2.federated_learning(x_train, y_train)
- TenSEAL homomorphic encryption (optional) )
- Multi-layer encryption support
- Secure weight transmission # Run both server and client tasks
- Context-based encryption/decryption await asyncio.gather(
server_task(),
### Error Handling client_task()
- Automatic error recovery with retries )
- Checkpoint-based recovery
- Per-client error tracking# Execute the main federated learning function
- Graceful degradationawait run_federated_learning()
---
📈 Performance
Sample 2 Execution Script Using Decorators For Interactive Environments Like Colab And Jupyter Notebook
| Metric | Value |
|--------|-------|```python
| Aggregation Time | ~100ms (typical) |import asyncio
| Privacy Overhead | 5-10% accuracy impact |import tensorflow as tf
| Scalability | 2-100+ concurrent clients |import numpy as np
| Network Efficiency | Optimized serialization |from federated_learning_framework.client_device import ClientDevice
| Memory Usage | ~50-100MB typical |from federated_learning_framework.central_server import CentralServer
from federated_learning_framework.encryption import create_context
---from federated_learning_framework.models.tensorflow_model import TensorFlowModel
🛠️ Supported Frameworks# Setup logging
import logging
| Framework | Version | Support | Status |logging.basicConfig(level=logging.INFO)
|-----------|---------|---------|--------|
| TensorFlow | 2.6+ | ✅ Full | Stable |# Define a simple TensorFlow model
| PyTorch | 1.9+ | ✅ Full | Stable |model = tf.keras.Sequential([
| Custom Models | Any | ✅ Full | Via Abstract Interface | tf.keras.layers.Dense(4, activation='relu', input_shape=(3072,)),
| Scikit-Learn | 0.24+ | ✅ Limited | Via Wrapper | tf.keras.layers.Dense(10, activation='softmax')
])
---wrapped_model = TensorFlowModel(model)
📋 System Requirements# Create encryption context
context = create_context()
-
Python: 3.8 or higher
-
OS: Linux, macOS, Windows# Initialize server and clients
-
RAM: 2GB minimum (8GB recommended)central_server = CentralServer(context=context)
-
Network: Stable internet connection for distributed setupsclient1 = ClientDevice(client_id=1, model=wrapped_model, context=context)
client2 = ClientDevice(client_id=2, model=wrapped_model, context=context)
Dummy training data
📝 Licensex_train = np.random.rand(10, 3072)
y_train = np.random.randint(0, 10, 10)
This project is licensed under the MIT License - see the LICENSE file for details.
async def main():
For business, governmental, or non-academic use, please contact: mehrdaddjavadi@gmail.com await asyncio.gather(
central_server.run_server(),
--- client1.connect_to_central_server("ws://localhost:8089"),
client2.connect_to_central_server("ws://localhost:8089"),
🤝 Contributing client1.federated_learning(x_train, y_train),
client2.federated_learning(x_train, y_train)
We welcome contributions! See CONTRIBUTING.md for: )
-
How to report issues
-
How to contribute codeasyncio.run(main())
-
Code style guidelines
-
Testing requirements```
---### Using Decorators
📞 Support & Questions```python
import asyncio
-
Documentation: GETTING_STARTED.mdimport tensorflow as tf
-
API Reference: API_REFERENCE.mdfrom federated_learning_framework.decorators import federated_learning_decorator, encryption_decorator
-
Issues: GitHub Issuesfrom federated_learning_framework.client_device import ClientDevice
-
Email: mehrdaddjavadi@gmail.comfrom federated_learning_framework.encryption import create_context
---# Create context for encryption
context = create_context()
🗺️ Roadmap
Define your model
Version 1.1.0 (Q1 2026)model = tf.keras.Sequential([
-
Multi-server distributed deployment tf.keras.layers.Dense(4, activation='relu', input_shape=(3072,)),
-
gRPC support alongside WebSocket tf.keras.layers.Dense(10, activation='softmax')
-
Kubernetes manifests])
-
Prometheus metrics export
@federated_learning_decorator(uri="ws://localhost:8089")
Version 1.2.0 (Q2 2026)@encryption_decorator(context=context)
-
Advanced privacy (RDP accountant)async def main():
-
Model compression & quantization client = ClientDevice(client_id=1, model=model, context=context)
-
Cloud provider integrations await client.connect_to_central_server('ws://localhost:8089')
-
Dashboard UI x_train, y_train = ... # Load your training data
await client.federated_learning('ws://localhost:8089', x_train, y_train)
Version 2.0.0 (H2 2026)
-
Multi-organization federated learningasyncio.run(main())
-
Federated analytics framework```
-
Custom ML framework support
-
Commercial platform## Running Tests
---To run the tests, execute the following command in the root directory:
🙏 Acknowledgments```sh
python -m unittest discover -s tests
-
Built with modern Python (async/await, type hints)```
-
Inspired by industry best practices
-
Community feedback and contributions welcome!## License
---The usage of this library is free for academic work with proper referencing. For business, governmental, and any other types of usage, please contact me directly. All rights are reserved.
🎓 Learn MoreContact: mehrdaddjavadi@gmail.com
-
Federated Learning Paper (Google)## Contributing
-
WebSocketsFeel free to contribute by submitting a pull request or opening an issue.
---```
**Made with ❤️ for the federated learning community**
[⭐ Star us on GitHub](https://github.com/mehrdaddjavadi/federated_learning_framework) | [📦 Install from PyPI](https://pypi.org/project/federated-learning-framework/)
</div>
---
*Framework Version: 1.0.0*
*Last Updated: November 2025*
*Status: Production Ready* ✅
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file federated_learning_framework-1.0.1.tar.gz.
File metadata
- Download URL: federated_learning_framework-1.0.1.tar.gz
- Upload date:
- Size: 47.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17022020fc7d4702e0039a276008de8354ed45054aa1acd182ed0917fe9a6468
|
|
| MD5 |
cebd8a3f64db3c4ae28f751bbaffc845
|
|
| BLAKE2b-256 |
7369ba9c589547ebc2b5f595d33e9b88672341e5249e41ff42d57a40ef743ea2
|
File details
Details for the file federated_learning_framework-1.0.1-py3-none-any.whl.
File metadata
- Download URL: federated_learning_framework-1.0.1-py3-none-any.whl
- Upload date:
- Size: 48.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be6bbe7e9906a4f9140034f4dab99cb3a38272fc8c8d34afdb63d345a7f4dd5a
|
|
| MD5 |
54f07111ddbe98b157a060ecdc14064e
|
|
| BLAKE2b-256 |
8086c1e3758969de9e58e357d65b49ba50a981a20123fcd12f8d65d13b325276
|