← Documentation API Reference

Self-Audit et Auto-Réparation AISIA

Version : 4.15.0 Société : AISIA — Structure juridique en cours de création URL publique : https://aisia.fr/

---

Table des matières

1. Vue d'ensemble 2. Self-Audit : GET /admin/self-audit 3. Self-Repair : POST /admin/self-repair 4. Auto-Test par LLM : POST /admin/auto-test 5. Health Monitor continu 6. Scores et interprétation 7. Architecture du système d'audit 8. Tâche de maintenance : self-audit automatique 9. Intégration avec le monitoring 10. Diagnostics avancés 11. Bonnes pratiques 12. Référence API complète

---

1. Vue d'ensemble

AISIA dispose de trois mécanismes d'auto-diagnostic et d'auto-réparation complémentaires :

MécanismeEndpointDéclenchementDescription
Self-AuditGET /admin/self-auditManuel ou automatique (1h)Diagnostic complet de la plateforme
Self-RepairPOST /admin/self-repairManuelRéparation automatique basée sur le self-audit
Auto-TestPOST /admin/auto-testManuelTest fonctionnel complet par LLM
En complément, le Health Monitor continu vérifie périodiquement la disponibilité des providers et des dépendances (MariaDB, Redis, Qdrant).

Tous ces endpoints sont protégés par Depends(get_admin_user) et nécessitent un token JWT admin.

---

2. Self-Audit : GET /admin/self-audit

Description

Le self-audit exécute un diagnostic complet et automatique de la plateforme AISIA. Il vérifie tous les composants critiques et produit un rapport JSON structuré avec un score global.

Appel

curl -H "Authorization: Bearer TOKEN_ADMIN" \
  https://aisia.fr/admin/self-audit

Composants vérifiés

Le self-audit inspecte les éléments suivants :

#### 1. Services Docker

Vérification que tous les services Swarm sont en cours d'exécution :

#### 2. Endpoints API

Test de chaque endpoint critique :

#### 3. Base de données MariaDB

#### 4. Modèles Ollama

#### 5. Connectivité Redis

#### 6. Connectivité Qdrant

Structure du rapport

{
  "audit_at": "2026-04-19T10:30:00Z",
  "score": 92,
  "total_checks": 50,
  "passed": 46,
  "failed": 4,
  "sections": {
    "docker_services": {
      "checks": [...],
      "passed": 8,
      "total": 8
    },
    "api_endpoints": {
      "checks": [...],
      "passed": 12,
      "total": 14
    },
    "database": {
      "checks": [...],
      "passed": 10,
      "total": 10
    },
    "ollama": {
      "checks": [...],
      "passed": 6,
      "total": 8
    },
    "redis": {
      "checks": [...],
      "passed": 5,
      "total": 5
    },
    "qdrant": {
      "checks": [...],
      "passed": 5,
      "total": 5
    }
  },
  "warnings": ["..."],
  "critical": ["..."],
  "elapsed_ms": 4500
}

Configuration

La variable d'environnement AISIA_SELF_AUDIT_URL permet de spécifier l'URL de base pour les tests internes (défaut : http://127.0.0.1:8000).

En mode container, l'API est accessible en localhost. En mode externe, il faut spécifier l'URL publique.

---

3. Self-Repair : POST /admin/self-repair

Description

Le self-repair exécute des actions correctives automatiques basées sur le diagnostic du self-audit. Il tente de réparer les problèmes détectés sans intervention manuelle.

Appel

curl -X POST -H "Authorization: Bearer TOKEN_ADMIN" \
  https://aisia.fr/admin/self-repair

Actions correctives

Le self-repair peut effectuer les actions suivantes :

#### Tables de base de données manquantes

Si des tables aisia_* sont absentes, elles sont recréées automatiquement via les DDL idempotents (CREATE TABLE IF NOT EXISTS) :

#### Reconnexion Redis

Si Redis est déconnecté, le self-repair tente une reconnexion :

#### Reconnexion Qdrant

Si Qdrant est déconnecté :

#### Rechargement des modèles locaux

Si des modèles locaux sont inaccessibles :

Structure du rapport de réparation

{
  "repair_at": "2026-04-19T10:35:00Z",
  "actions_taken": [
    {
      "action": "recreate_tables",
      "target": "aisia_conversations",
      "status": "success"
    },
    {
      "action": "reconnect_redis",
      "status": "success"
    },
    {
      "action": "reload_local_models",
      "models_loaded": 74,
      "status": "success"
    }
  ],
  "total_actions": 3,
  "successful": 3,
  "failed": 0,
  "elapsed_ms": 2500
}

---

4. Auto-Test par LLM : POST /admin/auto-test

Description

L'auto-test est le plus complet des trois mécanismes. AISIA utilise ses propres modèles LLM pour tester fonctionnellement l'intégralité de la plateforme et évaluer la qualité des réponses.

Appel

curl -X POST -H "Authorization: Bearer TOKEN_ADMIN" \
  https://aisia.fr/admin/auto-test

Sections testées

#### Section 1 : Pages web (17 pages)

Teste le statut HTTP de chaque page publique :

PageAttendu
/HTTP 200
/chatHTTP 200
/aboutHTTP 200
/contactHTTP 200
/investorsHTTP 200
/plan-projetHTTP 200
/docs-serviceHTTP 200
/ndaHTTP 200
/modelsHTTP 200
/statusHTTP 200
/privacyHTTP 200
/docsHTTP 200
/healthHTTP 200
/landingHTTP 200
/robots.txtHTTP 200
/sitemap.xmlHTTP 200
/favicon.icoHTTP 200
#### Section 2 : Endpoints admin (12 endpoints)

Teste l'accessibilité des endpoints admin avec un token valide :

Vérifie aussi la sécurité : un appel sans token doit retourner HTTP 401.

#### Section 3 : Chat fonctionnel (10 questions)

Teste le chat avec des questions couvrant différents domaines :

DomainePromptAttendu
Général"Dis bonjour en une phrase."Contient "bonjour"
Math"Calcule 15 * 23."Contient "345"
Coding"Écris une fonction Python qui inverse une chaîne."Contient "def"
Factual"Quelle est la capitale de la France ?"Contient "Paris"
Science"Explique le théorème de Pythagore en 2 phrases."Contient "triangle"
Translation"Traduis 'Hello world' en français."Contient "Bonjour"
Creative"Résume en une phrase : L'IA transforme le monde."Texte >10 chars
Math"Quel est le résultat de sqrt(144) ?"Contient "12"
Général"Donne 3 conseils pour bien dormir."Texte >10 chars
Creative"Écris un haiku sur la technologie."Texte >10 chars
Chaque réponse est évaluée sur : #### Section 4 : Cycle d'authentification

1. Register : création d'un compte test (autotest-{timestamp}@aisia.test) 2. Login : connexion avec le compte créé 3. Profile : accès à /auth/me, /auth/me/profile, /auth/me/login-history 4. OIDC : test de la redirection Google (HTTP 307)

#### Section 5 : Intégrité des données

Structure du rapport

{
  "test_at": "2026-04-19T10:30:00Z",
  "base_url": "http://127.0.0.1:8000",
  "score": 87.5,
  "total_checks": 40,
  "passed": 35,
  "failed": 5,
  "sections": {
    "pages": {"checks": [...], "total": 17, "passed": 16},
    "admin": {"checks": [...], "total": 13, "passed": 12},
    "chat": {"checks": [...], "total": 10, "passed": 8},
    "auth": {"checks": [...], "total": 6, "passed": 5},
    "data": {"checks": [...], "total": 4, "passed": 4}
  },
  "strengths": [
    "Page / accessible",
    "Chat général: 402ms",
    "Routes admin protégées"
  ],
  "weaknesses": [
    "page:/docs: HTTP 404",
    "chat:coding: Réponse incorrecte"
  ],
  "recommendations": [
    "Corriger /docs (HTTP 404)",
    "Réponse coding incorrecte ou lente"
  ],
  "elapsed_ms": 25000
}

---

5. Health Monitor continu

Endpoint /health

GET /health

Retourne l'état de santé général de la plateforme avec la latence de chaque dépendance :

{
  "status": "ok",
  "version": "4.21.0",
  "database": {"status": "ok", "latency_ms": 2.3},
  "redis": {"status": "ok", "latency_ms": 0.8},
  "qdrant": {"status": "ok", "latency_ms": 5.1},
  "autonomy": {
    "available": true,
    "model_count": 74,
    "available_model_count": 12
  }
}

Health check périodique des providers

Une boucle de fond (periodic_health_loop) vérifie la disponibilité des providers toutes les 5 minutes (300 secondes) :

1. Envoie un prompt "ping" à chaque provider 2. Enregistre le résultat dans Prometheus : - ai_provider_health_up : 1 (OK) ou 0 (KO) - ai_provider_health_latency_seconds : durée du check

Cache du health check

Pour éviter de surcharger les dépendances, le health check général utilise un cache avec TTL :

---

6. Scores et interprétation

Grille de scores

ScoreÉtatAction
95-100%ExcellentAucune action requise
85-94%BonVérifier les points faibles
70-84%AcceptableLancer un self-repair
50-69%DégradéInvestigation urgente
<50%CritiqueIntervention manuelle immédiate

Interprétation des résultats

#### Score du self-audit

Le score est calculé comme le pourcentage de checks réussis sur le total :

score = (passed / total_checks) * 100

Chaque section contribue de manière égale au score global.

#### Score de l'auto-test

Le score intègre les 5 sections (pages, admin, chat, auth, data). Les checks échoués sont classés en :

#### Alertes critiques vs warnings

Dans le self-audit :

---

7. Architecture du système d'audit

Scripts

Les scripts d'audit sont situés dans scripts/ :

scripts/
��── self_audit.py     — Audit automatique complet
└── self_repair.py    — Réparation automatique

Ces scripts sont importés dynamiquement par main.py via sys.path.insert.

Flux d'exécution

GET /admin/self-audit
    │
    ├── Charge self_audit.py
    │
    ├── run_audit(base_url, db_pool, redis_client, qdrant_store)
    │   ├── Teste les services Docker
    │   ├── Teste les endpoints API via httpx
    │   ├── Teste la DB via le pool aiomysql
    │   ├── Teste Redis via ping
    │   ├── Teste Qdrant via get_collections
    │   └── Compile le rapport JSON
    │
    └── Retourne le rapport
POST /admin/self-repair
    │
    ├── Charge self_repair.py
    │
    ├── run_repair(base_url, db_pool, redis_client, internal_token)
    │   ├── Exécute le self-audit
    │   ├── Analyse les failures
    │   ├── Exécute les actions correctives
    │   └── Compile le rapport
    │
    └── Retourne le rapport

---

8. Tâche de maintenance : self-audit automatique

Le self-audit est aussi défini comme tâche de maintenance dans maintenance_tasks.yaml :

- task_id: self-audit
  title: Auto-diagnostic AISIA
  description: >
    Exécute un audit automatique complet de la plateforme AISIA :
    services Docker, endpoints API, tables DB, modèles Ollama,
    connectivité Redis/Qdrant. Produit un rapport JSON avec score.
  category: audit
  command: ["python3", "scripts/self_audit.py"]
  enabled: true
  auto_run: true
  interval_s: 3600
  timeout_s: 120
  tags: ["audit", "monitoring", "self-diagnostic"]
  destructive: false

Cela signifie que le self-audit s'exécute automatiquement toutes les heures via le MaintenanceScheduler, en complément des appels manuels via l'API.

---

9. Intégration avec le monitoring

Métriques Prometheus

Les résultats des health checks sont exposés via les métriques Prometheus :

# Providers disponibles (health check)
ai_provider_health_up

Latence des health checks

ai_provider_health_latency_seconds

Providers disponibles (routing)

ai_provider_up

Circuit breakers ouverts (indicateur indirect de problème)

ai_circuit_breaker_state == 2

Alertes Grafana recommandées

AlerteConditionSévérité
Tous providers downsum(ai_provider_up) == 0Critique
DB inaccessiblehealth.database.status != "ok"Critique
Redis downhealth.redis.status != "ok"Warning
Qdrant downhealth.qdrant.status != "ok"Warning
Score audit < 70%self-audit.score < 70Warning
Score audit < 50%self-audit.score < 50Critique

Publication du statut

Le statut de la maintenance (incluant le self-audit) est publié dans Redis :

---

10. Diagnostics avancés

Diagnostic réseau

Si le self-audit montre des problèmes de connectivité, vérifiez :

# Depuis un container API
docker exec -it $(docker ps -q -f name=aisia_api) bash

Test MariaDB

python3 -c "import socket; s=socket.create_connection(('aisia-core_mariadb', 3306), 5); print('OK')"

Test Redis

python3 -c "import socket; s=socket.create_connection(('aisia-core_redis', 6379), 5); print('OK')"

Test Qdrant

python3 -c "import socket; s=socket.create_connection(('aisia-core_qdrant', 6333), 5); print('OK')"

Diagnostic de la base de données

# Lister les tables
curl -H "Authorization: Bearer TOKEN" https://aisia.fr/health

Vérifier que database.status == "ok" et database.latency_ms < 100

Diagnostic des modèles locaux

# Statut des modèles locaux
curl -H "Authorization: Bearer TOKEN" \
  https://aisia.fr/admin/autonomy/status

Vérifiez dans la réponse :

Diagnostic du bot

curl -H "Authorization: Bearer TOKEN" \
  https://aisia.fr/admin/bot/status

Vérifiez :

---

11. Bonnes pratiques

Fréquence des audits

MécanismeFréquence recommandéeCas d'usage
Health checkContinu (5min)Monitoring temps réel
Self-auditAutomatique (1h)Détection proactive
Self-repairÀ la demandeAprès détection de problème
Auto-testHebdomadaireValidation fonctionnelle complète

Après un déploiement

Exécutez toujours la séquence suivante après un déploiement :

1. GET /health — vérification rapide 2. GET /admin/self-audit — diagnostic complet 3. Si score < 90% : POST /admin/self-repair 4. GET /admin/self-audit — vérification post-réparation

Après un incident

1. GET /admin/self-audit — évaluer l'étendue des dégâts 2. POST /admin/self-repair — tentative de réparation automatique 3. POST /admin/auto-test — vérification fonctionnelle complète 4. Comparer les scores avant/après

Conservation des rapports

Les rapports de self-audit et d'auto-test sont retournés en réponse HTTP et ne sont pas persistés automatiquement. Pour conserver un historique :

---

12. Référence API complète

Endpoints d'audit et monitoring

MéthodeEndpointDescription
GET/healthÉtat de santé général
GET/metricsMétriques Prometheus
GET/admin/self-auditDiagnostic complet
POST/admin/self-repairRéparation automatique
POST/admin/auto-testTest fonctionnel par LLM
GET/admin/autonomy/statusStatut modèles locaux
GET/admin/bot/statusStatut du bot
GET/admin/maintenance/statusStatut du scheduler
GET/admin/billingStatistiques billing
GET/admin/knowledgeStats knowledge base

Codes de retour

CodeSignification
200Succès, rapport retourné
401Token admin manquant ou invalide
500Erreur interne lors de l'audit
503Service indisponible (DB down)
---

Document AISIA v4.21.0