federated-learning-framework 1.0.1
A professional, modular and extensible framework for federated learning applications with privacy, security, and error recovery.
Requires Python: >=3.8
Keywords: federated learning, machine learning, deep learning, active learning, encryption, homomorphic encryption, privacy, differential privacy

# Federated Learning Framework

[![PyPI version](https://badge.fury.io/py/federated-learning-framework.svg)](https://pypi.org/project/federated-learning-framework/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

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:

```bash
pip install federated-learning-framework
```

Or install from source for development:

```bash
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.

```python
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 instantiation
- `examples/client_example.py` — minimal client instantiation

## Documentation

Full API reference and developer guides are available in the repository:

- `API_REFERENCE.md` — API docs
- `GETTING_STARTED.md` — tutorial and walkthrough
- `DEPLOYMENT.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



[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)

[![PyPI version](https://badge.fury.io/py/federated-learning-framework.svg)](https://pypi.org/project/federated-learning-framework/)[![PyPI version](https://badge.fury.io/py/federated-learning-framework.svg)](https://pypi.org/project/federated-learning-framework/)

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)

[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

[![Tests](https://img.shields.io/badge/tests-35+-brightgreen.svg)](#testing)[![Tests](https://img.shields.io/badge/tests-35+-brightgreen.svg)](#testing)



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.

```bash

# 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! 🎉

```sh

---cd federated_learning_framework

```

## 📚 Documentation

Install the dependencies:

| Document | Purpose | Read Time |

|----------|---------|-----------|```sh

| [GETTING_STARTED.md](GETTING_STARTED.md) | Step-by-step tutorials and configuration | 20 min |pip install -r requirements.txt

| [API_REFERENCE.md](API_REFERENCE.md) | Complete API documentation | 30 min |```

| [DEPLOYMENT.md](DEPLOYMENT.md) | PyPI and GitHub deployment guide | 15 min |

| [CONTRIBUTING.md](CONTRIBUTING.md) | How to contribute to the project | 10 min |## Usage

| [CHANGELOG.md](CHANGELOG.md) | Version history and release notes | 5 min |

### Setting Up the Central Server

---

```python

## 🎯 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)



```async def main():

┌─────────────────────────────────────────────────────────────┐    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](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](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.md](GETTING_STARTED.md)import tensorflow as tf

- **API Reference**: [API_REFERENCE.md](API_REFERENCE.md)from federated_learning_framework.decorators import federated_learning_decorator, encryption_decorator

- **Issues**: [GitHub Issues](https://github.com/mehrdaddjavadi/federated_learning_framework/issues)from 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 More**Contact:** mehrdaddjavadi@gmail.com



- [Federated Learning Paper (Google)](https://arxiv.org/abs/1602.05629)## Contributing

- [Differential Privacy](https://en.wikipedia.org/wiki/Differential_privacy)

- [WebSockets](https://en.wikipedia.org/wiki/WebSocket)Feel free to contribute by submitting a pull request or opening an issue.



---```



<div align="center">Copy and paste this into your README.md file. This format provides a clear, organized structure and includes all necessary details and instructions for potential users and contributors.

```

**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* ✅