Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

23 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🍊 Opal β€” SD-WAN Fleet Audit & Migration Optimizer

Hackathon Orange Business Γ— Epitech β€” February 2026

License: MIT Python 3.10+ React 19 LangChain Tests

An AI-powered audit tool that reduced SD-WAN replacement costs by 64% through real telemetry analysis.

πŸ‡«πŸ‡· FranΓ§ais Β· πŸ‡¬πŸ‡§ English Β· πŸ“ Structure Β· πŸ—„οΈ Database


πŸ‡«πŸ‡· FranΓ§ais

🎯 Objectif

Optimiser le remplacement d'un parc de 90 routeurs SD-WAN (Edge 840 / Edge 680 β†’ Edge 7x0). Le but est d'analyser la tΓ©lΓ©mΓ©trie rΓ©elle du rΓ©seau pour proposer une architecture cible Γ©conomiquement viable et techniquement robuste, plutΓ΄t qu'un remplacement "1 pour 1" coΓ»teux.

Un assistant IA local (LLM) permet de poser des questions en langage naturel sur le parc, les coΓ»ts et la stratΓ©gie de migration β€” 100% confidentiel, zΓ©ro donnΓ©e dans le cloud.

πŸ“Š Contexte Business

  • Parc actuel : 80 sites Edge 840 (End of Life) + 10 sites Edge 680 (End of Sale)
  • ProblΓ¨me : Un remplacement tout-en-740 coΓ»terait 63 000 (relatif) β€” sur-dimensionnΓ© pour la plupart des sites
  • Solution : Algorithme de dΓ©cision basΓ© sur la consommation rΓ©elle (Throughput, Tunnels, Flows, SFP)
  • RΓ©sultat : CoΓ»t optimisΓ© 22 250 β€” soit 64% d'Γ©conomies

πŸ“ˆ RΓ©sultats de l'Audit

Indicateur Valeur
πŸ“¦ Γ‰quipements auditΓ©s 90
πŸ”΄ CRITICAL (EoL dΓ©passΓ©) 80 sites (Edge 840)
🟠 HIGH (EoS dépassé) 10 sites (Edge 680)
➑️ Edge 710 recommandés 71 sites
➑️ Edge 720 recommandés 15 sites
➑️ Edge 740 recommandés 4 sites
πŸ’° CoΓ»t optimisΓ© 22 250
πŸ’Έ CoΓ»t baseline (tout 740) 63 000
βœ… Γ‰conomies 40 750 (64%)

Pourquoi pas tout en Edge 740 ? La plupart des sites ont un faible dΓ©bit β€” un Edge 710 suffit. On ne recommande un 720/740 que quand les mesures l'exigent :

  • Edge 720 : 2+ ports SFP, tunnels > 50, ou dΓ©bit > 395 Mbps
  • Edge 740 : tunnels > 400, dΓ©bit > 2300 Mbps, ou flows/s > 18 000

πŸ€– Assistant IA (LLM Local)

Un LLM local (Ollama) connectΓ© Γ  la base de donnΓ©es permet de poser des questions en franΓ§ais :

Question > Combien d'Γ©quipements sont dans le parc ?
β†’ Il y a 90 Γ©quipements dans le parc actuel.

Question > Quels sites nΓ©cessitent un Edge 740 et pourquoi ?
β†’ 4 sites : host-edge680-08 (450 tunnels), host-edge840-14 (21000 flows/s)...

Question > Combien coΓ»te la migration totale ?
β†’ CoΓ»t optimisΓ©: 22 250 vs baseline 63 000 = 64% d'Γ©conomies.

Question > export
β†’ 90 fichiers JSON créés dans exports/

Le LLM ne calcule rien β€” il interroge la base SQLite prΓ©-remplie et synthΓ©tise les rΓ©sultats.

Mémoire adaptative : chaque interaction (succès/erreur) est capturée. Plus on l'utilise, plus il est précis. 🧠

πŸ› οΈ Architecture & Stack

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  πŸ‘€ UTILISATEUR                      β”‚
β”‚             (Jury / IngΓ©nieur rΓ©seau)                β”‚
β”‚                Question en franΓ§ais                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                       β”‚
                       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              πŸ€– src/llm_agent.py                     β”‚
β”‚             LangChain SQL Agent                      β”‚
β”‚      + MΓ©moire adaptative (llm_memory.json)          β”‚
β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚                               β”‚
       β–Ό                               β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  πŸ—„οΈ SQLite   β”‚              β”‚  🧠 LLM Local      β”‚
β”‚  8 tables    β”‚              β”‚  Ollama via         β”‚
β”‚  323 rows    β”‚              β”‚  Open WebUI         β”‚
β”‚              β”‚              β”‚  (OpenAI-compat.)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
       β”‚
       β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              🌐 frontend/                            β”‚
β”‚         React 19 + Recharts Dashboard                β”‚
β”‚    Vue d'ensemble Β· Arborescence Β· Chatbot IA        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Flux : Question → LLM génère du SQL → Exécute sur la DB → LLM synthétise → Réponse en français

πŸš€ Installation

# 1. Cloner le repo
git clone https://github.com/silvucani/Opal.git && cd Opal

# 2. Installer les dΓ©pendances Python
pip install -r requirements.txt

# 3. Remplir la base de donnΓ©es depuis l'Excel source
python src/populate_db.py

# 4. Lancer l'assistant IA (CLI)
python src/llm_agent.py

# 5. Lancer les tests (55 tests)
python -m pytest tests/ -v

🌐 Dashboard Web (optionnel)

cd frontend
npm install
npm run dev     # β†’ http://localhost:5173

πŸ”Œ Connexion au LLM

L'agent utilise une API compatible OpenAI. Configurez votre propre instance Ollama :

Paramètre Valeur par défaut
🌐 Base URL http://localhost:11434/v1
πŸ–₯️ Interface Open WebUI (Docker)
βš™οΈ Backend Ollama
πŸ€– ModΓ¨les recommandΓ©s qwen2.5-coder:7b / mistral-nemo
πŸ“‘ Protocole OpenAI-compatible API

Note : Le projet a Γ©tΓ© dΓ©veloppΓ© avec un LLM hΓ©bergΓ© localement via Tailscale VPN. Remplacez base_url dans src/llm_agent.py par votre propre endpoint Ollama.


πŸ‡¬πŸ‡§ English

🎯 Objective

Optimize the replacement of a 90-device SD-WAN fleet (Edge 840 / Edge 680 β†’ Edge 7x0). The goal is to analyze real network telemetry to propose a target architecture that is cost-effective and technically robust, rather than an expensive "1-for-1" replacement.

A local AI assistant (LLM) allows asking questions in natural language about the fleet, costs, and migration strategy β€” 100% confidential, zero data sent to the cloud.

πŸ“Š Business Context

  • Current fleet: 80x Edge 840 (End of Life) + 10x Edge 680 (End of Sale)
  • Problem: An all-740 replacement would cost 63,000 (relative) β€” oversized for most sites
  • Solution: Decision algorithm based on actual usage (Throughput, Tunnels, Flows, SFP ports)
  • Result: Optimized cost 22,250 β€” that's 64% savings

πŸ“ˆ Audit Results

Metric Value
πŸ“¦ Devices audited 90
πŸ”΄ CRITICAL (past EoL) 80 sites (Edge 840)
🟠 HIGH (past EoS) 10 sites (Edge 680)
➑️ Edge 710 recommended 71 sites
➑️ Edge 720 recommended 15 sites
➑️ Edge 740 recommended 4 sites
πŸ’° Optimized cost 22,250
πŸ’Έ Baseline (all 740) 63,000
βœ… Savings 40,750 (64%)

πŸ€– AI Assistant (Local LLM)

A local LLM (Ollama) connected to the database allows natural language queries:

  • "How many devices in the fleet?" β†’ 90
  • "Which sites need an Edge 740 and why?" β†’ 4 sites with technical justification
  • "What's the total migration cost?" β†’ optimized vs. baseline comparison
  • "Export data to JSON" β†’ generates files for the web frontend

The LLM computes nothing β€” it queries the pre-filled SQLite database and synthesizes results.

Adaptive memory: every interaction (success/error) is captured. The more you use it, the more accurate it gets. 🧠

πŸš€ Quick Start

git clone https://github.com/silvucani/Opal.git && cd Opal
pip install -r requirements.txt
python src/populate_db.py     # Fill the database from Excel source
python src/llm_agent.py       # Start the AI assistant (CLI)
python -m pytest tests/ -v    # Run 55 unit tests

🌐 Web Dashboard (optional)

cd frontend && npm install && npm run dev
# Open http://localhost:5173

πŸ”Œ Connecting your own LLM

The agent uses an OpenAI-compatible API endpoint. Replace the base_url in src/llm_agent.py with your own Ollama or any other compatible LLM server URL.


πŸ“ Project Structure

Opal/
β”œβ”€β”€ πŸ“„ README.md
β”œβ”€β”€ πŸ“„ LICENSE
β”œβ”€β”€ πŸ“„ .gitignore
β”œβ”€β”€ πŸ“„ requirements.txt
β”‚
β”œβ”€β”€ 🐍 src/                            ← Python source code
β”‚   β”œβ”€β”€ audit_engine.py                ← Audit engine (pure functions, zero side effects)
β”‚   β”œβ”€β”€ populate_db.py                 ← SQLite population from Excel + reference data
β”‚   β”œβ”€β”€ export_json.py                 ← JSON export for web frontend
β”‚   └── llm_agent.py                   ← AI assistant (LangChain + Ollama)
β”‚
β”œβ”€β”€ πŸ§ͺ tests/                          ← Unit tests
β”‚   └── test_audit_engine.py           ← 55 tests for the audit engine
β”‚
β”œβ”€β”€ πŸ’Ύ data/                            ← Input data
β”‚   └── data_hackathon_extended.xlsx    ← Fleet inventory + real telemetry measurements
β”‚   (*.db and generated files are gitignored β€” run populate_db.py to create them)
β”‚
β”œβ”€β”€ 🌐 frontend/                        ← React 19 web dashboard
β”‚   β”œβ”€β”€ index.html
β”‚   β”œβ”€β”€ vite.config.js
β”‚   β”œβ”€β”€ package.json
β”‚   └── src/
β”‚       β”œβ”€β”€ main.jsx
β”‚       └── OpalDashboard.jsx          ← Full dashboard: overview, network tree, AI chatbot
β”‚
└── πŸ“š docs/                            ← Reference documents
    β”œβ”€β”€ SD-WAN edges lifecycle.pdf     ← Official Arista EoS/EoL dates
    β”œβ”€β”€ VeloCloud-SD-WAN-Edge-7x0-Series.pdf ← Edge 7x0 specs
    β”œβ”€β”€ edges measured max values.pdf  ← Current fleet measurements
    └── release-notes/                 ← SD-WAN version release notes

πŸ—„οΈ Database β€” 8 Tables

Table Content Rows
parc_actuel Fleet inventory (90 devices) 90
mesures_detaillees Throughput, tunnels, flows, ports per device 90
scenarios_migration Edge 7x0 recommendation + cost + complexity 90
lifecycle EoS/EoL dates per model (Arista source) 12
edge_7x0_specs Technical specs Edge 710, 720, 740 3
software_compatibility Model/version compatibility matrix 27
upgrade_paths Step-by-step software upgrade sequences 5
catalogue_reference Hardware + license relative costs 6

The database is not committed to the repo. Run python src/populate_db.py to regenerate it from data/data_hackathon_extended.xlsx.

πŸ”’ Confidentiality

  • 100% local β€” no data leaves your machine
  • LLM runs on your own hardware via Ollama
  • Network infrastructure data is anonymized in this public demo

πŸ“„ License

This project is licensed under the MIT License.


🍊 Built at the Orange Business Γ— Epitech Hackathon β€” February 2026

About

Orange Business project Hackathon for Epitech.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages