Barouia commited on
Commit
0de24bf
·
verified ·
1 Parent(s): 8c60cf2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +103 -667
app.py CHANGED
@@ -1,7 +1,7 @@
1
  #!/usr/bin/env python3
2
  """
3
- Barouia-Cortex 3.0 - Système Avancé d'Optimisation Cognitive
4
- Compression Token, Mémoire Optimisée, Entraînement Accéléré
5
  """
6
 
7
  from fastapi import FastAPI, HTTPException, WebSocket, WebSocketDisconnect
@@ -29,48 +29,37 @@ logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(level
29
  logger = logging.getLogger("barouia_cortex_3")
30
 
31
  # =============================================================================
32
- # NOUVEAU SYSTÈME DE COMPRESSION DE TOKENS
33
  # =============================================================================
34
 
35
  class TokenCompressor:
36
- """Système avancé de compression lexicale - Faire plus avec moins de tokens"""
37
 
38
  def __init__(self):
39
  self.dictionnaire_compresse = {}
40
  self.dictionnaire_decompresse = {}
41
  self.mots_frequents = self.charger_mots_frequents()
42
- self.compression_level = 12 # Niveau de compression maximal
43
  logger.info("🔤 Compresseur Token initialisé")
44
 
45
  def charger_mots_frequents(self) -> Dict[str, int]:
46
- """Charge les mots fréquents du français pour l'optimisation"""
47
  mots_base = {
48
  'le', 'la', 'les', 'de', 'du', 'des', 'un', 'une', 'et', 'ou',
49
- 'que', 'qui', 'dans', 'en', 'sur', 'avec', 'pour', 'par', 'est',
50
- 'son', 'sa', 'ses', 'ces', 'cet', 'cette', 'mon', 'ton', 'notre',
51
- 'votre', 'leur', 'je', 'tu', 'il', 'elle', 'nous', 'vous', 'ils',
52
- 'elles', 'ai', 'as', 'a', 'avons', 'avez', 'ont', 'serai', 'seras',
53
- 'sera', 'serons', 'serez', 'seront', 'étais', 'était', 'étions',
54
- 'étiez', 'étaient', 'sois', 'soit', 'soyons', 'soyez', 'soient'
55
  }
56
  return {mot: idx for idx, mot in enumerate(mots_base)}
57
 
58
  def compresser_texte(self, texte: str) -> Tuple[str, float]:
59
- """Compresse un texte avec optimisation token avancée"""
60
  try:
61
- # Niveau 1: Remplacement des mots fréquents
62
- texte_opti = self.remplacer_mots_frequents(texte)
63
-
64
- # Niveau 2: Compression zlib avancée
65
- texte_bytes = texte_opti.encode('utf-8')
66
  texte_compresse = zlib.compress(texte_bytes, level=self.compression_level)
67
-
68
- # Niveau 3: Encodage base64 pour sécurité
69
  texte_final = base64.b85encode(texte_compresse).decode('ascii')
70
 
71
  # Calcul taux de compression
72
  taux_compression = (1 - len(texte_final) / len(texte)) * 100
73
-
74
  return texte_final, max(0, taux_compression)
75
 
76
  except Exception as e:
@@ -80,80 +69,35 @@ class TokenCompressor:
80
  def decompresser_texte(self, texte_compresse: str) -> str:
81
  """Décompresse un texte optimisé"""
82
  try:
83
- # Décodage base64
84
  texte_bytes = base64.b85decode(texte_compresse.encode('ascii'))
85
-
86
- # Décompression zlib
87
  texte_decompresse = zlib.decompress(texte_bytes)
88
-
89
- # Restauration des mots fréquents
90
- texte_final = self.restaurer_mots_frequents(texte_decompresse.decode('utf-8'))
91
-
92
- return texte_final
93
-
94
  except Exception as e:
95
  logger.error(f"❌ Erreur décompression: {e}")
96
  return texte_compresse
97
-
98
- def remplacer_mots_frequents(self, texte: str) -> str:
99
- """Remplace les mots fréquents par des tokens courts"""
100
- mots = texte.split()
101
- mots_opti = []
102
-
103
- for mot in mots:
104
- mot_clean = mot.lower().strip('.,!?;:')
105
- if mot_clean in self.mots_frequents:
106
- # Remplacer par token court
107
- token = f"ƒ{self.mots_frequents[mot_clean]:02d}"
108
- mots_opti.append(token)
109
- else:
110
- mots_opti.append(mot)
111
-
112
- return ' '.join(mots_opti)
113
-
114
- def restaurer_mots_frequents(self, texte_opti: str) -> str:
115
- """Restaure les mots fréquents depuis les tokens"""
116
- def remplacer_token(match):
117
- token = match.group(0)
118
- idx = int(token[1:]) # Extraire l'index
119
- # Trouver le mot original
120
- for mot, index in self.mots_frequents.items():
121
- if index == idx:
122
- return mot
123
- return token
124
-
125
- # Remplacer les tokens ƒXX par les mots originaux
126
- texte_restaure = re.sub(r'ƒ\d{2,3}', remplacer_token, texte_opti)
127
- return texte_restaure
128
 
129
  # =============================================================================
130
- # SYSTÈME DE MÉMOIRE OPTIMISÉE AVEC COMPRESSION
131
  # =============================================================================
132
 
133
  class MemoireCompressee:
134
- """Système de mémoire avec compression et cache intelligent"""
135
 
136
- def __init__(self, capacite_max: int = 1000000):
137
  self.capacite_max = capacite_max
138
  self.memoire_principale = {}
139
- self.cache_actif = deque(maxlen=1000) # Cache LRU
140
- self.historique_acces = defaultdict(int)
141
  self.compresseur = TokenCompressor()
142
- self.taux_compression_moyen = 0.0
143
  logger.info("💾 Mémoire compressée initialisée")
144
 
145
  def stocker(self, cle: str, valeur: Any) -> bool:
146
- """Stocke une valeur avec compression automatique"""
147
  try:
148
  if len(self.memoire_principale) >= self.capacite_max:
149
  self.liberer_espace()
150
 
151
- # Compression de la valeur si c'est du texte
152
  if isinstance(valeur, str):
153
- valeur_compressee, taux_compression = self.compresseur.compresser_texte(valeur)
154
- self.taux_compression_moyen = (
155
- self.taux_compression_moyen * 0.9 + taux_compression * 0.1
156
- )
157
  else:
158
  valeur_compressee = valeur
159
 
@@ -164,9 +108,7 @@ class MemoireCompressee:
164
  'acces': 0
165
  }
166
 
167
- # Mettre à jour le cache
168
  self.mettre_a_jour_cache(cle)
169
-
170
  return True
171
 
172
  except Exception as e:
@@ -174,24 +116,19 @@ class MemoireCompressee:
174
  return False
175
 
176
  def recuperer(self, cle: str) -> Optional[Any]:
177
- """Récupère une valeur avec décompression automatique"""
178
  try:
179
  if cle not in self.memoire_principale:
180
  return None
181
 
182
  donnees = self.memoire_principale[cle]
183
  donnees['acces'] += 1
184
- self.historique_acces[cle] += 1
185
 
186
  valeur = donnees['valeur']
187
-
188
- # Décompression si nécessaire
189
  if donnees['type'] == 'texte':
190
  valeur = self.compresseur.decompresser_texte(valeur)
191
 
192
- # Mettre à jour le cache
193
  self.mettre_a_jour_cache(cle)
194
-
195
  return valeur
196
 
197
  except Exception as e:
@@ -199,23 +136,19 @@ class MemoireCompressee:
199
  return None
200
 
201
  def liberer_espace(self):
202
- """Libère de l'espace en supprimant les éléments les moins utilisés"""
203
  if not self.memoire_principale:
204
  return
205
 
206
- # Trouver les éléments les moins utilisés
207
  elements_tries = sorted(
208
  self.memoire_principale.items(),
209
  key=lambda x: (x[1]['acces'], x[1]['timestamp'])
210
  )
211
 
212
- # Supprimer les 10% les moins utilisés
213
  a_supprimer = max(1, len(elements_tries) // 10)
214
  for i in range(a_supprimer):
215
  cle = elements_tries[i][0]
216
  del self.memoire_principale[cle]
217
- if cle in self.historique_acces:
218
- del self.historique_acces[cle]
219
 
220
  def mettre_a_jour_cache(self, cle: str):
221
  """Met à jour le cache LRU"""
@@ -228,8 +161,6 @@ class MemoireCompressee:
228
  return {
229
  "utilisation": len(self.memoire_principale),
230
  "capacite_max": self.capacite_max,
231
- "taux_compression_moyen": self.taux_compression_moyen,
232
- "acces_total": sum(self.historique_acces.values()),
233
  "elements_caches": len(self.cache_actif)
234
  }
235
 
@@ -238,52 +169,33 @@ class MemoireCompressee:
238
  # =============================================================================
239
 
240
  class MoteurEntrainement:
241
- """Système d'entraînement neuronal accéléré avec optimisation mémoire"""
242
 
243
  def __init__(self):
244
  self.cycles_entrainement = 0
245
  self.vitesse_entrainement = 1.0
246
- self.dernier_entrainement = time.time()
247
- self.memoire_entrainement = MemoireCompressee(500000)
248
- self.modeles_actifs = {}
249
  self.performance_history = deque(maxlen=100)
250
  logger.info("⚡ Moteur d'entraînement initialisé")
251
 
252
  async def entrainer_modele(self, donnees: List[Any], epochs: int = 10) -> Dict[str, Any]:
253
- """Entraîne un modèle avec optimisation accélérée"""
254
  debut = time.time()
255
 
256
  try:
257
- # Simulation d'entraînement optimisé
258
  for epoch in range(epochs):
259
- # Compression des données d'entraînement
260
- donnees_compressees = []
261
- for donnee in donnees:
262
- if isinstance(donnee, str):
263
- compresse, _ = TokenCompressor().compresser_texte(donnee)
264
- donnees_compressees.append(compresse)
265
- else:
266
- donnees_compressees.append(donnee)
267
-
268
- # Entraînement sur données compressées (simulation)
269
- await asyncio.sleep(0.01) # Simulation traitement
270
-
271
- # Mise à jour des métriques
272
  performance = self.calculer_performance(epoch, epochs)
273
  self.performance_history.append(performance)
274
 
275
  duree = time.time() - debut
276
  self.cycles_entrainement += 1
277
-
278
- # Ajustement automatique de la vitesse
279
  self.ajuster_vitesse(duree)
280
 
281
  return {
282
  "success": True,
283
  "cycles_completes": epochs,
284
  "duree_totale": duree,
285
- "vitesse_finale": self.vitesse_entrainement,
286
- "performance_moyenne": np.mean([p['accuracy'] for p in self.performance_history]) if self.performance_history else 0.0
287
  }
288
 
289
  except Exception as e:
@@ -293,26 +205,22 @@ class MoteurEntrainement:
293
  def calculer_performance(self, epoch: int, total_epochs: int) -> Dict[str, float]:
294
  """Calcule les métriques de performance"""
295
  progression = epoch / total_epochs
296
- accuracy = 0.5 + 0.5 * progression # Simulation amélioration
297
- loss = 1.0 - progression
298
 
299
  return {
300
  "epoch": epoch,
301
  "accuracy": accuracy,
302
- "loss": loss,
303
  "timestamp": time.time()
304
  }
305
 
306
  def ajuster_vitesse(self, duree_entrainement: float):
307
  """Ajuste automatiquement la vitesse d'entraînement"""
308
  if duree_entrainement < 1.0:
309
- # Accélérer si trop rapide
310
  self.vitesse_entrainement *= 1.1
311
  elif duree_entrainement > 5.0:
312
- # Ralentir si trop lent
313
  self.vitesse_entrainement *= 0.9
314
 
315
- # Limites de sécurité
316
  self.vitesse_entrainement = max(0.1, min(5.0, self.vitesse_entrainement))
317
 
318
  def get_statistiques(self) -> Dict[str, Any]:
@@ -320,91 +228,41 @@ class MoteurEntrainement:
320
  return {
321
  "cycles_entrainement": self.cycles_entrainement,
322
  "vitesse_actuelle": self.vitesse_entrainement,
323
- "performance_history": list(self.performance_history),
324
- "memoire_entrainement": self.memoire_entrainement.get_statistiques()
325
  }
326
 
327
  # =============================================================================
328
- # FENÊTRE DE CONTEXTE ÉTENDUE INTELLIGENTE
329
  # =============================================================================
330
 
331
  class FenetreContexteEtendue:
332
- """Système de fenêtre de contexte étendue avec gestion intelligente"""
333
 
334
- def __init__(self, taille_max: int = 10000, compression_auto: bool = True):
335
  self.taille_max = taille_max
336
- self.compression_auto = compression_auto
337
  self.contenu = deque(maxlen=taille_max)
338
- self.contenu_compresse = deque(maxlen=taille_max)
339
  self.compresseur = TokenCompressor()
340
- self.importance_scores = {}
341
  logger.info("🪟 Fenêtre de contexte étendue initialisée")
342
 
343
  def ajouter_contexte(self, texte: str, importance: float = 1.0):
344
  """Ajoute du contexte avec gestion d'importance"""
345
- if self.compression_auto:
346
- texte_compresse, taux_compression = self.compresseur.compresser_texte(texte)
347
- self.contenu_compresse.append(texte_compresse)
348
- else:
349
- self.contenu.append(texte)
350
-
351
- # Stocker le score d'importance
352
- cle = hash(texte)
353
- self.importance_scores[cle] = importance
354
-
355
- # Nettoyer si nécessaire
356
- if len(self.contenu) + len(self.contenu_compresse) > self.taille_max:
357
- self.nettoyer_contexte()
358
 
359
  def obtenir_contexte(self, limite_tokens: int = 2000) -> str:
360
  """Récupère le contexte le plus pertinent"""
361
  contexte_pertinent = []
362
- tokens_utilises = 0
363
-
364
- # Combiner contenu normal et compressé
365
- tous_elements = list(self.contenu) + list(self.contenu_compresse)
366
-
367
- for element in tous_elements:
368
- if self.compression_auto and element in self.contenu_compresse:
369
- # Décompresser si nécessaire
370
- element_decompresse = self.compresseur.decompresser_texte(element)
371
- taille_element = len(element_decompresse.split())
372
- else:
373
- taille_element = len(element.split())
374
-
375
- if tokens_utilises + taille_element <= limite_tokens:
376
- contexte_pertinent.append(element)
377
- tokens_utilises += taille_element
378
- else:
379
- break
380
 
381
  return " ".join(contexte_pertinent)
382
 
383
- def nettoyer_contexte(self):
384
- """Nettoie le contexte en gardant les éléments les plus importants"""
385
- # Trier par importance
386
- elements_importants = sorted(
387
- self.importance_scores.items(),
388
- key=lambda x: x[1],
389
- reverse=True
390
- )
391
-
392
- # Garder seulement les 80% plus importants
393
- a_garder = len(elements_importants) * 8 // 10
394
- elements_a_supprimer = elements_importants[a_garder:]
395
-
396
- for cle, _ in elements_a_supprimer:
397
- if cle in self.importance_scores:
398
- del self.importance_scores[cle]
399
-
400
  def get_statistiques(self) -> Dict[str, Any]:
401
  """Retourne les statistiques de la fenêtre de contexte"""
402
  return {
403
- "taille_actuelle": len(self.contenu) + len(self.contenu_compresse),
404
- "taille_max": self.taille_max,
405
- "elements_compresses": len(self.contenu_compresse),
406
- "elements_normaux": len(self.contenu),
407
- "scores_importance": len(self.importance_scores)
408
  }
409
 
410
  # =============================================================================
@@ -415,35 +273,21 @@ class CortexOptimise:
415
  """Cortex 3.0 avec toutes les optimisations intégrées"""
416
 
417
  def __init__(self):
418
- # Systèmes d'optimisation
419
  self.compresseur = TokenCompressor()
420
  self.memoire = MemoireCompressee()
421
  self.moteur_entrainement = MoteurEntrainement()
422
  self.fenetre_contexte = FenetreContexteEtendue()
423
 
424
- # État du cortex
425
  self.etat = {
426
  "performance_globale": {
427
  "temps_reponse": 0.05,
428
  "precision": 95.0,
429
  "efficacite_memoire": 85.0,
430
  "vitesse_traitement": 1.0
431
- },
432
- "optimisations_actives": {
433
- "compression_tokens": True,
434
- "memoire_compressee": True,
435
- "entrainement_accelere": True,
436
- "contexte_etendu": True
437
- },
438
- "statistiques_avancees": {
439
- "tokens_compresses": 0,
440
- "economie_memoire": 0.0,
441
- "cycles_optimisation": 0,
442
- "erreurs_evitees": 0
443
  }
444
  }
445
 
446
- self.historique_performances = deque(maxlen=500)
447
  logger.info("🧠 Cortex Optimisé 3.0 initialisé")
448
 
449
  async def traiter_requete_optimisee(self, requete: str) -> Dict[str, Any]:
@@ -451,20 +295,12 @@ class CortexOptimise:
451
  debut = time.time()
452
 
453
  try:
454
- # 1. Compression de la requête
455
  requete_compressee, taux_compression = self.compresseur.compresser_texte(requete)
456
-
457
- # 2. Ajout au contexte
458
- self.fenetre_contexte.ajouter_contexte(requete, importance=0.8)
459
-
460
- # 3. Traitement avec mémoire optimisée
461
  contexte = self.fenetre_contexte.obtenir_contexte()
462
  reponse = await self.generer_reponse_optimisee(requete, contexte)
463
-
464
- # 4. Compression de la réponse
465
  reponse_compressee, _ = self.compresseur.compresser_texte(reponse)
466
 
467
- # 5. Mise à jour des statistiques
468
  duree = time.time() - debut
469
  self.mettre_a_jour_statistiques(duree, taux_compression)
470
 
@@ -473,8 +309,7 @@ class CortexOptimise:
473
  "reponse_originale": reponse,
474
  "reponse_compressee": reponse_compressee,
475
  "taux_compression": taux_compression,
476
- "temps_traitement": duree,
477
- "contexte_utilise": len(contexte) > 0
478
  }
479
 
480
  except Exception as e:
@@ -483,30 +318,27 @@ class CortexOptimise:
483
 
484
  async def generer_reponse_optimisee(self, requete: str, contexte: str) -> str:
485
  """Génère une réponse optimisée"""
486
- # Simulation d'un modèle IA optimisé
487
- await asyncio.sleep(0.02) # Temps de traitement réduit
488
 
489
  reponses_avancees = [
490
- f"🧠 [Système Optimisé] J'ai analysé votre requête avec compression token avancée. ",
491
- f"⚡ [Traitement Accéléré] Votre demande a été processée en mode haute performance. ",
492
- f"💾 [Mémoire Optimisée] J'utilise actuellement {self.memoire.get_statistiques()['taux_compression_moyen']:.1f}% de compression. ",
493
- f"🪟 [Contexte Étendu] J'ai accès à {self.fenetre_contexte.get_statistiques()['taille_actuelle']} éléments contextuels. ",
494
- f"🎯 [Précision Améliorée] Mes algorithmes sont optimisés pour une meilleure compréhension. "
495
  ]
496
 
497
  reponse_base = np.random.choice(reponses_avancees)
498
 
499
  if "état" in requete.lower() and "cortex" in requete.lower():
500
  stats = self.get_statistiques_completes()
501
- return f"{reponse_base} Voici mon état actuel: {json.dumps(stats, indent=2)}"
502
  elif "performance" in requete.lower():
503
  perf = self.moteur_entrainement.get_statistiques()
504
- return f"{reponse_base} Performances d'entraînement: {perf['vitesse_actuelle']:.2f}x vitesse normale."
505
  elif "mémoire" in requete.lower():
506
  mem = self.memoire.get_statistiques()
507
- return f"{reponse_base} Mémoire: {mem['utilisation']}/{mem['capacite_max']} éléments, compression: {mem['taux_compression_moyen']:.1f}%"
508
  else:
509
- return f"{reponse_base} J'ai bien compris: '{requete}'. Comment puis-je vous aider davantage ?"
510
 
511
  def mettre_a_jour_statistiques(self, duree: float, taux_compression: float):
512
  """Met à jour les statistiques avancées"""
@@ -514,18 +346,10 @@ class CortexOptimise:
514
  self.etat["performance_globale"]["temps_reponse"] * 0.9 + duree * 0.1
515
  )
516
 
517
- self.etat["statistiques_avancees"]["tokens_compresses"] += 1
518
- self.etat["statistiques_avancees"]["economie_memoire"] = (
519
- self.etat["statistiques_avancees"]["economie_memoire"] * 0.95 + taux_compression * 0.05
520
- )
521
- self.etat["statistiques_avancees"]["cycles_optimisation"] += 1
522
-
523
- # Historique des performances
524
  self.historique_performances.append({
525
  "timestamp": time.time(),
526
  "temps_reponse": duree,
527
- "taux_compression": taux_compression,
528
- "performance": self.etat["performance_globale"]["precision"]
529
  })
530
 
531
  def get_statistiques_completes(self) -> Dict[str, Any]:
@@ -535,17 +359,16 @@ class CortexOptimise:
535
  "performance_entrainement": self.moteur_entrainement.get_statistiques(),
536
  "statistiques_memoire": self.memoire.get_statistiques(),
537
  "fenetre_contexte": self.fenetre_contexte.get_statistiques(),
538
- "historique_performances": list(self.historique_performances)[-10:], # 10 derniers
539
  "timestamp": datetime.now().isoformat()
540
  }
541
 
542
  # =============================================================================
543
- # APPLICATION FASTAPI AVEC TOUTES LES OPTIMISATIONS
544
  # =============================================================================
545
 
546
  app = FastAPI(
547
  title="Barouia-Cortex 3.0",
548
- description="Système IA avancé avec compression token et optimisation mémoire",
549
  version="3.0.0"
550
  )
551
 
@@ -563,36 +386,23 @@ cortex_optimise = CortexOptimise()
563
  class ChatRequest(BaseModel):
564
  message: str
565
  conversation_id: Optional[str] = None
566
- optimisations: Optional[bool] = True
567
 
568
  class EntrainementRequest(BaseModel):
569
  donnees: List[str]
570
- epochs: int = 10
571
 
572
- # Routes API optimisées
573
  @app.get("/")
574
  async def root():
575
  return {
576
  "message": "Barouia-Cortex 3.0 - Système Optimisé",
577
  "status": "active",
578
- "version": "3.0.0",
579
- "optimisations": [
580
- "Compression Token Avancée",
581
- "Mémoire Optimisée",
582
- "Entraînement Accéléré",
583
- "Fenêtre Contexte Étendue"
584
- ]
585
  }
586
 
587
  @app.get("/health")
588
  async def health_check():
589
- stats = cortex_optimise.get_statistiques_completes()
590
- return {
591
- "status": "ok",
592
- "timestamp": time.time(),
593
- "performance": stats["etat_cortex"]["performance_globale"],
594
- "optimisations_actives": stats["etat_cortex"]["optimisations_actives"]
595
- }
596
 
597
  @app.get("/api/statistiques/avancees")
598
  async def get_statistiques_avancees():
@@ -600,23 +410,16 @@ async def get_statistiques_avancees():
600
 
601
  @app.post("/api/chat/optimise")
602
  async def chat_optimise(request: ChatRequest):
603
- """Endpoint de chat avec toutes les optimisations"""
604
  try:
605
- if request.optimisations:
606
- resultat = await cortex_optimise.traiter_requete_optimisee(request.message)
607
- else:
608
- # Mode sans optimisation (pour comparaison)
609
- resultat = {"success": True, "reponse_originale": f"Réponse standard: {request.message}"}
610
-
611
  return {
612
  "success": True,
613
  "reponse": resultat.get("reponse_originale", "Erreur"),
614
  "statistiques": resultat,
615
  "cortex_state": cortex_optimise.get_statistiques_completes()
616
  }
617
-
618
  except Exception as e:
619
- logger.error(f"❌ Erreur chat optimisé: {e}")
620
  return {"success": False, "error": str(e)}
621
 
622
  @app.post("/api/entrainement/demarrer")
@@ -626,19 +429,16 @@ async def demarrer_entrainement(request: EntrainementRequest):
626
  resultat = await cortex_optimise.moteur_entrainement.entrainer_modele(
627
  request.donnees, request.epochs
628
  )
629
-
630
  return {
631
  "success": resultat["success"],
632
- "resultat_entrainement": resultat,
633
- "statistiques_cortex": cortex_optimise.get_statistiques_completes()
634
  }
635
-
636
  except Exception as e:
637
  return {"success": False, "error": str(e)}
638
 
639
  @app.websocket("/ws/optimise")
640
  async def websocket_optimise(websocket: WebSocket):
641
- """WebSocket pour communications optimisées en temps réel"""
642
  await websocket.accept()
643
  try:
644
  while True:
@@ -652,14 +452,12 @@ async def websocket_optimise(websocket: WebSocket):
652
  await websocket.send_json({
653
  "type": "reponse_optimisee",
654
  "reponse": resultat.get("reponse_originale", ""),
655
- "statistiques": resultat,
656
- "cortex_state": cortex_optimise.get_statistiques_completes()
657
  })
658
-
659
  except WebSocketDisconnect:
660
  logger.info("WebSocket optimisé déconnecté")
661
 
662
- # Interface dashboard optimisée
663
  @app.get("/dashboard", response_class=HTMLResponse)
664
  async def dashboard_optimise():
665
  html_content = """
@@ -668,19 +466,19 @@ async def dashboard_optimise():
668
  <head>
669
  <meta charset="UTF-8">
670
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
671
- <title>Barouia-Cortex 3.0 - Système Optimisé</title>
672
  <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
673
  <style>
674
  * { margin: 0; padding: 0; box-sizing: border-box; }
675
  body {
676
- font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
677
  background: linear-gradient(135deg, #0f0f23 0%, #1a1a2e 100%);
678
  color: white;
679
  min-height: 100vh;
680
  padding: 20px;
681
  }
682
  .container {
683
- max-width: 1400px;
684
  margin: 0 auto;
685
  }
686
  .header {
@@ -690,28 +488,14 @@ async def dashboard_optimise():
690
  border-radius: 15px;
691
  margin-bottom: 2rem;
692
  }
693
- .header h1 {
694
- font-size: 2.5rem;
695
- margin-bottom: 0.5rem;
696
- }
697
- .header .version {
698
- background: rgba(255,255,255,0.2);
699
- padding: 0.3rem 1rem;
700
- border-radius: 20px;
701
- display: inline-block;
702
- margin-top: 0.5rem;
703
- }
704
- .dashboard-grid {
705
  display: grid;
706
- grid-template-columns: 1fr 1fr 1fr;
707
- gap: 1.5rem;
708
  margin-bottom: 2rem;
709
  }
710
- @media (max-width: 1200px) {
711
- .dashboard-grid { grid-template-columns: 1fr 1fr; }
712
- }
713
  @media (max-width: 768px) {
714
- .dashboard-grid { grid-template-columns: 1fr; }
715
  }
716
  .card {
717
  background: rgba(255, 255, 255, 0.1);
@@ -719,17 +503,11 @@ async def dashboard_optimise():
719
  border-radius: 15px;
720
  border: 1px solid rgba(102, 126, 234, 0.3);
721
  }
722
- .card h3 {
723
- margin-bottom: 1rem;
724
- color: #667eea;
725
- display: flex;
726
- align-items: center;
727
- gap: 0.5rem;
728
- }
729
  .metrics-grid {
730
  display: grid;
731
  grid-template-columns: 1fr 1fr;
732
  gap: 1rem;
 
733
  }
734
  .metric {
735
  background: rgba(255, 255, 255, 0.05);
@@ -742,26 +520,13 @@ async def dashboard_optimise():
742
  font-weight: bold;
743
  color: #667eea;
744
  }
745
- .metric-label {
746
- font-size: 0.9rem;
747
- opacity: 0.8;
748
- }
749
- .optimisation-badge {
750
- background: linear-gradient(135deg, #4CAF50, #45a049);
751
- padding: 0.3rem 0.8rem;
752
- border-radius: 15px;
753
- font-size: 0.8rem;
754
- display: inline-block;
755
- margin: 0.2rem;
756
- }
757
- .chat-section {
758
- grid-column: 1 / -1;
759
  background: rgba(255, 255, 255, 0.1);
760
  border-radius: 15px;
761
  padding: 1.5rem;
762
  display: flex;
763
  flex-direction: column;
764
- height: 600px;
765
  }
766
  .chat-messages {
767
  flex: 1;
@@ -805,8 +570,8 @@ async def dashboard_optimise():
805
  color: white;
806
  cursor: pointer;
807
  }
808
- .performance-chart {
809
- height: 300px;
810
  }
811
  </style>
812
  </head>
@@ -814,295 +579,88 @@ async def dashboard_optimise():
814
  <div class="container">
815
  <div class="header">
816
  <h1>🧠 Barouia-Cortex 3.0</h1>
817
- <p>Système IA Avancé avec Optimisations Intelligentes</p>
818
- <div class="version">Version 3.0 - Compression Token • Mémoire Optimisée • Entraînement Accéléré</div>
819
  </div>
820
 
821
- <div class="dashboard-grid">
822
- <!-- Carte Performance Globale -->
823
  <div class="card">
824
  <h3>⚡ Performance Globale</h3>
825
  <div class="metrics-grid">
826
  <div class="metric">
827
  <div class="metric-value" id="tempsReponse">0.05s</div>
828
- <div class="metric-label">Temps Réponse</div>
829
  </div>
830
  <div class="metric">
831
  <div class="metric-value" id="precision">95%</div>
832
- <div class="metric-label">Précision</div>
833
  </div>
834
  <div class="metric">
835
  <div class="metric-value" id="compression">65%</div>
836
- <div class="metric-label">Compression</div>
837
  </div>
838
  <div class="metric">
839
  <div class="metric-value" id="vitesse">1.0x</div>
840
- <div class="metric-label">Vitesse</div>
841
  </div>
842
  </div>
843
  </div>
844
 
845
- <!-- Carte Mémoire Optimisée -->
846
  <div class="card">
847
  <h3>💾 Mémoire Optimisée</h3>
848
  <div class="metrics-grid">
849
  <div class="metric">
850
  <div class="metric-value" id="memoireUtilisee">0</div>
851
- <div class="metric-label">Éléments Stockés</div>
852
- </div>
853
- <div class="metric">
854
- <div class="metric-value" id="tauxCompression">0%</div>
855
- <div class="metric-label">Taux Compression</div>
856
- </div>
857
- <div class="metric">
858
- <div class="metric-value" id="accesMemoire">0</div>
859
- <div class="metric-label">Accès Mémoire</div>
860
  </div>
861
  <div class="metric">
862
  <div class="metric-value" id="cacheActif">0</div>
863
- <div class="metric-label">Cache Actif</div>
864
  </div>
865
  </div>
866
  </div>
867
-
868
- <!-- Carte Entraînement Accéléré -->
869
- <div class="card">
870
- <h3>🎯 Entraînement Accéléré</h3>
871
- <div class="metrics-grid">
872
- <div class="metric">
873
- <div class="metric-value" id="cyclesEntrainement">0</div>
874
- <div class="metric-label">Cycles</div>
875
- </div>
876
- <div class="metric">
877
- <div class="metric-value" id="vitesseEntrainement">1.0x</div>
878
- <div class="metric-label">Vitesse</div>
879
- </div>
880
- <div class="metric">
881
- <div class="metric-value" id="performanceMoyenne">0%</div>
882
- <div class="metric-label">Performance</div>
883
- </div>
884
- <div class="metric">
885
- <div class="metric-value" id="erreursEvitees">0</div>
886
- <div class="metric-label">Erreurs Évitée
887
- # =============================================================================
888
- # SUITE DU CODE - INTERFACE DASHBOARD OPTIMISÉE
889
- # =============================================================================
890
-
891
  </div>
892
- <div class="optimisations-actives">
893
- <div class="optimisation-badge">Compression Token</div>
894
- <div class="optimisation-badge">Cache Intelligent</div>
895
- <div class="optimisation-badge">LRU Optimisé</div>
896
- </div>
897
- </div>
898
-
899
- <!-- Carte Contexte Étendu -->
900
- <div class="card">
901
- <h3>🪟 Contexte Étendu</h3>
902
- <div class="metrics-grid">
903
- <div class="metric">
904
- <div class="metric-value" id="tailleContexte">0</div>
905
- <div class="metric-label">Éléments</div>
906
- </div>
907
- <div class="metric">
908
- <div class="metric-value" id="contexteCompresse">0</div>
909
- <div class="metric-label">Compressés</div>
910
- </div>
911
- <div class="metric">
912
- <div class="metric-value" id="importanceMoyenne">0</div>
913
- <div class="metric-label">Importance</div>
914
- </div>
915
- <div class="metric">
916
- <div class="metric-value" id="tokensDisponibles">2000</div>
917
- <div class="metric-label">Tokens Max</div>
918
  </div>
919
  </div>
920
- </div>
921
-
922
- <!-- Graphique Performance -->
923
- <div class="card" style="grid-column: span 2;">
924
- <h3>📈 Performance en Temps Réel</h3>
925
- <div class="performance-chart">
926
- <canvas id="performanceChart"></canvas>
927
- </div>
928
- </div>
929
-
930
- <!-- Graphique Compression -->
931
- <div class="card">
932
- <h3>🔧 Efficacité Compression</h3>
933
- <div class="performance-chart">
934
- <canvas id="compressionChart"></canvas>
935
- </div>
936
- </div>
937
- </div>
938
-
939
- <!-- Section Chat Optimisé -->
940
- <div class="chat-section">
941
- <h3>💬 Interface de Communication Optimisée</h3>
942
- <div class="chat-messages" id="chatMessages">
943
- <div class="message ai-message">
944
- 🧠 <strong>Barouia-Cortex 3.0</strong> initialisé avec succès!<br>
945
- ⚡ <em>Système d'optimisation active:</em> Compression Token, Mémoire Intelligente, Entraînement Accéléré<br>
946
- 💾 <em>Statut:</em> Prêt pour les requêtes haute performance
947
  </div>
948
  </div>
949
- <div class="chat-input">
950
- <input type="text" id="messageInput" placeholder="Tapez votre message (optimisation automatique activée)..." autocomplete="off">
951
- <button id="sendButton">Envoyer 🚀</button>
952
- </div>
953
  </div>
954
  </div>
955
 
956
  <script>
957
- let conversationId = null;
958
- let performanceChart = null;
959
- let compressionChart = null;
960
- let statsHistory = [];
961
-
962
- // Initialisation des graphiques
963
- function initializeCharts() {
964
- // Graphique de performance
965
- const perfCtx = document.getElementById('performanceChart').getContext('2d');
966
- performanceChart = new Chart(perfCtx, {
967
- type: 'line',
968
- data: {
969
- labels: [],
970
- datasets: [
971
- {
972
- label: 'Temps Réponse (ms)',
973
- data: [],
974
- borderColor: 'rgba(102, 126, 234, 1)',
975
- backgroundColor: 'rgba(102, 126, 234, 0.1)',
976
- tension: 0.4,
977
- yAxisID: 'y'
978
- },
979
- {
980
- label: 'Précision (%)',
981
- data: [],
982
- borderColor: 'rgba(75, 192, 192, 1)',
983
- backgroundColor: 'rgba(75, 192, 192, 0.1)',
984
- tension: 0.4,
985
- yAxisID: 'y1'
986
- }
987
- ]
988
- },
989
- options: {
990
- scales: {
991
- y: {
992
- type: 'linear',
993
- display: true,
994
- position: 'left',
995
- title: { display: true, text: 'Temps (ms)' },
996
- min: 0,
997
- max: 100
998
- },
999
- y1: {
1000
- type: 'linear',
1001
- display: true,
1002
- position: 'right',
1003
- title: { display: true, text: 'Précision (%)' },
1004
- min: 0,
1005
- max: 100,
1006
- grid: { drawOnChartArea: false }
1007
- }
1008
- }
1009
- }
1010
- });
1011
-
1012
- // Graphique de compression
1013
- const compCtx = document.getElementById('compressionChart').getContext('2d');
1014
- compressionChart = new Chart(compCtx, {
1015
- type: 'bar',
1016
- data: {
1017
- labels: ['Compression', 'Économie', 'Efficacité'],
1018
- datasets: [{
1019
- label: 'Taux (%)',
1020
- data: [65, 45, 85],
1021
- backgroundColor: [
1022
- 'rgba(102, 126, 234, 0.8)',
1023
- 'rgba(75, 192, 192, 0.8)',
1024
- 'rgba(153, 102, 255, 0.8)'
1025
- ]
1026
- }]
1027
- },
1028
- options: {
1029
- scales: {
1030
- y: { beginAtZero: true, max: 100 }
1031
- }
1032
- }
1033
- });
1034
- }
1035
-
1036
- // Mise à jour des métriques en temps réel
1037
  async function updateMetrics() {
1038
  try {
1039
  const response = await fetch('/api/statistiques/avancees');
1040
  const data = await response.json();
1041
 
1042
- // Métriques de performance globale
1043
  const perf = data.etat_cortex.performance_globale;
1044
  document.getElementById('tempsReponse').textContent = (perf.temps_reponse * 1000).toFixed(1) + 'ms';
1045
  document.getElementById('precision').textContent = perf.precision.toFixed(1) + '%';
1046
  document.getElementById('compression').textContent = perf.efficacite_memoire.toFixed(1) + '%';
1047
  document.getElementById('vitesse').textContent = perf.vitesse_traitement.toFixed(1) + 'x';
1048
 
1049
- // Métriques mémoire
1050
  const mem = data.statistiques_memoire;
1051
- document.getElementById('memoireUtilisee').textContent = mem.utilisation.toLocaleString();
1052
- document.getElementById('tauxCompression').textContent = mem.taux_compression_moyen.toFixed(1) + '%';
1053
- document.getElementById('accesMemoire').textContent = mem.acces_total.toLocaleString();
1054
- document.getElementById('cacheActif').textContent = mem.elements_caches.toLocaleString();
1055
-
1056
- // Métriques entraînement
1057
- const ent = data.performance_entrainement;
1058
- document.getElementById('cyclesEntrainement').textContent = ent.cycles_entrainement.toLocaleString();
1059
- document.getElementById('vitesseEntrainement').textContent = ent.vitesse_actuelle.toFixed(1) + 'x';
1060
- document.getElementById('performanceMoyenne').textContent =
1061
- ent.performance_history.length > 0 ?
1062
- (ent.performance_history[ent.performance_history.length - 1].accuracy * 100).toFixed(1) + '%' : '0%';
1063
- document.getElementById('erreursEvitees').textContent = data.etat_cortex.statistiques_avancees.erreurs_evitees.toLocaleString();
1064
-
1065
- // Métriques contexte
1066
- const ctx = data.fenetre_contexte;
1067
- document.getElementById('tailleContexte').textContent = ctx.taille_actuelle.toLocaleString();
1068
- document.getElementById('contexteCompresse').textContent = ctx.elements_compresses.toLocaleString();
1069
- document.getElementById('importanceMoyenne').textContent =
1070
- Object.keys(ctx.scores_importance).length > 0 ? 'Élevée' : 'Normale';
1071
-
1072
- // Mise à jour des graphiques
1073
- updateCharts(data);
1074
 
1075
  } catch (error) {
1076
- console.error('Erreur mise à jour métriques:', error);
1077
  }
1078
  }
1079
 
1080
- // Mise à jour des graphiques
1081
- function updateCharts(data) {
1082
- // Historique des performances
1083
- const history = data.historique_performances || [];
1084
- if (history.length > 0) {
1085
- const labels = history.map((_, i) => i);
1086
- const tempsReponse = history.map(h => (h.temps_reponse * 1000).toFixed(1));
1087
- const precision = history.map(h => h.performance);
1088
-
1089
- performanceChart.data.labels = labels;
1090
- performanceChart.data.datasets[0].data = tempsReponse;
1091
- performanceChart.data.datasets[1].data = precision;
1092
- performanceChart.update();
1093
- }
1094
-
1095
- // Graphique de compression
1096
- const stats = data.etat_cortex.statistiques_avancees;
1097
- compressionChart.data.datasets[0].data = [
1098
- stats.economie_memoire,
1099
- Math.min(100, stats.economie_memoire * 1.3),
1100
- Math.min(100, stats.economie_memoire * 1.1)
1101
- ];
1102
- compressionChart.update();
1103
- }
1104
-
1105
- // Gestion du chat optimisé
1106
  async function sendMessage() {
1107
  const input = document.getElementById('messageInput');
1108
  const message = input.value.trim();
@@ -1116,24 +674,19 @@ async def dashboard_optimise():
1116
  const response = await fetch('/api/chat/optimise', {
1117
  method: 'POST',
1118
  headers: { 'Content-Type': 'application/json' },
1119
- body: JSON.stringify({
1120
- message: message,
1121
- conversation_id: conversationId || 'optimise-v3',
1122
- optimisations: true
1123
- })
1124
  });
1125
 
1126
  const data = await response.json();
1127
 
1128
  if (data.success) {
1129
  addMessage('ai', data.reponse);
1130
- // Mise à jour immédiate des métriques
1131
  updateMetrics();
1132
  } else {
1133
- addMessage('ai', 'Erreur: ' + (data.error || 'inconnue'));
1134
  }
1135
  } catch (error) {
1136
- addMessage('ai', 'Erreur de connexion au serveur');
1137
  }
1138
  }
1139
 
@@ -1141,76 +694,11 @@ async def dashboard_optimise():
1141
  const container = document.getElementById('chatMessages');
1142
  const messageDiv = document.createElement('div');
1143
  messageDiv.className = `message ${role}-message`;
1144
-
1145
- if (role === 'ai') {
1146
- // Formatage des réponses IA
1147
- messageDiv.innerHTML = formatAIResponse(content);
1148
- } else {
1149
- messageDiv.textContent = content;
1150
- }
1151
-
1152
  container.appendChild(messageDiv);
1153
  container.scrollTop = container.scrollHeight;
1154
  }
1155
 
1156
- function formatAIResponse(content) {
1157
- // Mise en forme avancée des réponses IA
1158
- return content
1159
- .replace(/🧠/g, '<span style="color: #667eea">🧠</span>')
1160
- .replace(/⚡/g, '<span style="color: #ffd700">⚡</span>')
1161
- .replace(/💾/g, '<span style="color: #4CAF50">💾</span>')
1162
- .replace(/🎯/g, '<span style="color: #ff6b6b">🎯</span>')
1163
- .replace(/🪟/g, '<span style="color: #9c27b0">🪟</span>')
1164
- .replace(/\n/g, '<br>')
1165
- .replace(/\[(.*?)\]/g, '<strong>$1</strong>');
1166
- }
1167
-
1168
- // Simulation d'entraînement
1169
- async function demarrerEntrainement() {
1170
- try {
1171
- const response = await fetch('/api/entrainement/demarrer', {
1172
- method: 'POST',
1173
- headers: { 'Content-Type': 'application/json' },
1174
- body: JSON.stringify({
1175
- donnees: [
1176
- "Requête d'optimisation cognitive",
1177
- "Demande de compression token avancée",
1178
- "Analyse de performance système",
1179
- "Optimisation mémoire intelligente",
1180
- "Gestion de contexte étendu"
1181
- ],
1182
- epochs: 5
1183
- })
1184
- });
1185
-
1186
- const result = await response.json();
1187
- if (result.success) {
1188
- addMessage('ai', '🎯 Entraînement accéléré terminé! Performance améliorée: ' +
1189
- result.resultat_entrainement.performance_moyenne.toFixed(2));
1190
- updateMetrics();
1191
- }
1192
- } catch (error) {
1193
- console.error('Erreur entraînement:', error);
1194
- }
1195
- }
1196
-
1197
- // WebSocket pour les mises à jour temps réel
1198
- function connectWebSocket() {
1199
- const ws = new WebSocket(`ws://${window.location.host}/ws/optimise`);
1200
-
1201
- ws.onmessage = function(event) {
1202
- const data = JSON.parse(event.data);
1203
- if (data.type === 'reponse_optimisee') {
1204
- addMessage('ai', data.reponse);
1205
- updateMetrics();
1206
- }
1207
- };
1208
-
1209
- ws.onclose = function() {
1210
- setTimeout(connectWebSocket, 3000);
1211
- };
1212
- }
1213
-
1214
  // Événements
1215
  document.getElementById('sendButton').addEventListener('click', sendMessage);
1216
  document.getElementById('messageInput').addEventListener('keypress', (e) => {
@@ -1219,16 +707,8 @@ async def dashboard_optimise():
1219
 
1220
  // Initialisation
1221
  document.addEventListener('DOMContentLoaded', function() {
1222
- initializeCharts();
1223
- setInterval(updateMetrics, 2000); // Mise à jour toutes les 2 secondes
1224
-
1225
- // Démarrer un entraînement initial
1226
- setTimeout(demarrerEntrainement, 3000);
1227
-
1228
- // Connexion WebSocket
1229
- connectWebSocket();
1230
-
1231
- console.log('🚀 Barouia-Cortex 3.0 Dashboard initialisé');
1232
  });
1233
  </script>
1234
  </body>
@@ -1236,50 +716,6 @@ async def dashboard_optimise():
1236
  """
1237
  return HTMLResponse(content=html_content)
1238
 
1239
- # =============================================================================
1240
- # FICHIER REQUIREMENTS.TXT OPTIMISÉ
1241
- # =============================================================================
1242
-
1243
- """
1244
- fastapi==0.104.1
1245
- uvicorn[standard]==0.24.0
1246
- websockets==12.0
1247
- numpy==1.24.3
1248
- python-multipart==0.0.6
1249
- python-dotenv==1.0.0
1250
- aiohttp==3.9.1
1251
- """
1252
-
1253
- # =============================================================================
1254
- # DOCKERFILE POUR HUGGING FACE SPACES
1255
- # =============================================================================
1256
-
1257
- """
1258
- FROM python:3.9-slim
1259
-
1260
- WORKDIR /app
1261
-
1262
- # Installer les dépendances système
1263
- RUN apt-get update && apt-get install -y \
1264
- gcc \
1265
- g++ \
1266
- && rm -rf /var/lib/apt/lists/*
1267
-
1268
- # Copier les requirements
1269
- COPY requirements.txt .
1270
-
1271
- # Installer les dépendances Python
1272
- RUN pip install --no-cache-dir -r requirements.txt
1273
-
1274
- # Copier l'application
1275
- COPY . .
1276
-
1277
- # Exposer le port
1278
- EXPOSE 7860
1279
-
1280
- # Démarrer l'application
1281
- CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
1282
-
1283
  if __name__ == "__main__":
1284
  port = int(os.getenv("PORT", 7860))
1285
  uvicorn.run(app, host="0.0.0.0", port=port)
 
1
  #!/usr/bin/env python3
2
  """
3
+ Barouia-Cortex 3.0 - Version corrigée
4
+ Système Avancé d'Optimisation Cognitive
5
  """
6
 
7
  from fastapi import FastAPI, HTTPException, WebSocket, WebSocketDisconnect
 
29
  logger = logging.getLogger("barouia_cortex_3")
30
 
31
  # =============================================================================
32
+ # SYSTÈME DE COMPRESSION DE TOKENS
33
  # =============================================================================
34
 
35
  class TokenCompressor:
36
+ """Système avancé de compression lexicale"""
37
 
38
  def __init__(self):
39
  self.dictionnaire_compresse = {}
40
  self.dictionnaire_decompresse = {}
41
  self.mots_frequents = self.charger_mots_frequents()
42
+ self.compression_level = 12
43
  logger.info("🔤 Compresseur Token initialisé")
44
 
45
  def charger_mots_frequents(self) -> Dict[str, int]:
46
+ """Charge les mots fréquents du français"""
47
  mots_base = {
48
  'le', 'la', 'les', 'de', 'du', 'des', 'un', 'une', 'et', 'ou',
49
+ 'que', 'qui', 'dans', 'en', 'sur', 'avec', 'pour', 'par', 'est'
 
 
 
 
 
50
  }
51
  return {mot: idx for idx, mot in enumerate(mots_base)}
52
 
53
  def compresser_texte(self, texte: str) -> Tuple[str, float]:
54
+ """Compresse un texte avec optimisation token"""
55
  try:
56
+ # Compression zlib avancée
57
+ texte_bytes = texte.encode('utf-8')
 
 
 
58
  texte_compresse = zlib.compress(texte_bytes, level=self.compression_level)
 
 
59
  texte_final = base64.b85encode(texte_compresse).decode('ascii')
60
 
61
  # Calcul taux de compression
62
  taux_compression = (1 - len(texte_final) / len(texte)) * 100
 
63
  return texte_final, max(0, taux_compression)
64
 
65
  except Exception as e:
 
69
  def decompresser_texte(self, texte_compresse: str) -> str:
70
  """Décompresse un texte optimisé"""
71
  try:
 
72
  texte_bytes = base64.b85decode(texte_compresse.encode('ascii'))
 
 
73
  texte_decompresse = zlib.decompress(texte_bytes)
74
+ return texte_decompresse.decode('utf-8')
 
 
 
 
 
75
  except Exception as e:
76
  logger.error(f"❌ Erreur décompression: {e}")
77
  return texte_compresse
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
  # =============================================================================
80
+ # SYSTÈME DE MÉMOIRE OPTIMISÉE
81
  # =============================================================================
82
 
83
  class MemoireCompressee:
84
+ """Système de mémoire avec compression"""
85
 
86
+ def __init__(self, capacite_max: int = 100000):
87
  self.capacite_max = capacite_max
88
  self.memoire_principale = {}
89
+ self.cache_actif = deque(maxlen=1000)
 
90
  self.compresseur = TokenCompressor()
 
91
  logger.info("💾 Mémoire compressée initialisée")
92
 
93
  def stocker(self, cle: str, valeur: Any) -> bool:
94
+ """Stocke une valeur avec compression"""
95
  try:
96
  if len(self.memoire_principale) >= self.capacite_max:
97
  self.liberer_espace()
98
 
 
99
  if isinstance(valeur, str):
100
+ valeur_compressee, _ = self.compresseur.compresser_texte(valeur)
 
 
 
101
  else:
102
  valeur_compressee = valeur
103
 
 
108
  'acces': 0
109
  }
110
 
 
111
  self.mettre_a_jour_cache(cle)
 
112
  return True
113
 
114
  except Exception as e:
 
116
  return False
117
 
118
  def recuperer(self, cle: str) -> Optional[Any]:
119
+ """Récupère une valeur avec décompression"""
120
  try:
121
  if cle not in self.memoire_principale:
122
  return None
123
 
124
  donnees = self.memoire_principale[cle]
125
  donnees['acces'] += 1
 
126
 
127
  valeur = donnees['valeur']
 
 
128
  if donnees['type'] == 'texte':
129
  valeur = self.compresseur.decompresser_texte(valeur)
130
 
 
131
  self.mettre_a_jour_cache(cle)
 
132
  return valeur
133
 
134
  except Exception as e:
 
136
  return None
137
 
138
  def liberer_espace(self):
139
+ """Libère de l'espace"""
140
  if not self.memoire_principale:
141
  return
142
 
 
143
  elements_tries = sorted(
144
  self.memoire_principale.items(),
145
  key=lambda x: (x[1]['acces'], x[1]['timestamp'])
146
  )
147
 
 
148
  a_supprimer = max(1, len(elements_tries) // 10)
149
  for i in range(a_supprimer):
150
  cle = elements_tries[i][0]
151
  del self.memoire_principale[cle]
 
 
152
 
153
  def mettre_a_jour_cache(self, cle: str):
154
  """Met à jour le cache LRU"""
 
161
  return {
162
  "utilisation": len(self.memoire_principale),
163
  "capacite_max": self.capacite_max,
 
 
164
  "elements_caches": len(self.cache_actif)
165
  }
166
 
 
169
  # =============================================================================
170
 
171
  class MoteurEntrainement:
172
+ """Système d'entraînement neuronal accéléré"""
173
 
174
  def __init__(self):
175
  self.cycles_entrainement = 0
176
  self.vitesse_entrainement = 1.0
 
 
 
177
  self.performance_history = deque(maxlen=100)
178
  logger.info("⚡ Moteur d'entraînement initialisé")
179
 
180
  async def entrainer_modele(self, donnees: List[Any], epochs: int = 10) -> Dict[str, Any]:
181
+ """Entraîne un modèle avec optimisation"""
182
  debut = time.time()
183
 
184
  try:
 
185
  for epoch in range(epochs):
186
+ await asyncio.sleep(0.01)
 
 
 
 
 
 
 
 
 
 
 
 
187
  performance = self.calculer_performance(epoch, epochs)
188
  self.performance_history.append(performance)
189
 
190
  duree = time.time() - debut
191
  self.cycles_entrainement += 1
 
 
192
  self.ajuster_vitesse(duree)
193
 
194
  return {
195
  "success": True,
196
  "cycles_completes": epochs,
197
  "duree_totale": duree,
198
+ "vitesse_finale": self.vitesse_entrainement
 
199
  }
200
 
201
  except Exception as e:
 
205
  def calculer_performance(self, epoch: int, total_epochs: int) -> Dict[str, float]:
206
  """Calcule les métriques de performance"""
207
  progression = epoch / total_epochs
208
+ accuracy = 0.5 + 0.5 * progression
 
209
 
210
  return {
211
  "epoch": epoch,
212
  "accuracy": accuracy,
213
+ "loss": 1.0 - progression,
214
  "timestamp": time.time()
215
  }
216
 
217
  def ajuster_vitesse(self, duree_entrainement: float):
218
  """Ajuste automatiquement la vitesse d'entraînement"""
219
  if duree_entrainement < 1.0:
 
220
  self.vitesse_entrainement *= 1.1
221
  elif duree_entrainement > 5.0:
 
222
  self.vitesse_entrainement *= 0.9
223
 
 
224
  self.vitesse_entrainement = max(0.1, min(5.0, self.vitesse_entrainement))
225
 
226
  def get_statistiques(self) -> Dict[str, Any]:
 
228
  return {
229
  "cycles_entrainement": self.cycles_entrainement,
230
  "vitesse_actuelle": self.vitesse_entrainement,
231
+ "performance_history": list(self.performance_history)
 
232
  }
233
 
234
  # =============================================================================
235
+ # FENÊTRE DE CONTEXTE ÉTENDUE
236
  # =============================================================================
237
 
238
  class FenetreContexteEtendue:
239
+ """Système de fenêtre de contexte étendue"""
240
 
241
+ def __init__(self, taille_max: int = 10000):
242
  self.taille_max = taille_max
 
243
  self.contenu = deque(maxlen=taille_max)
 
244
  self.compresseur = TokenCompressor()
 
245
  logger.info("🪟 Fenêtre de contexte étendue initialisée")
246
 
247
  def ajouter_contexte(self, texte: str, importance: float = 1.0):
248
  """Ajoute du contexte avec gestion d'importance"""
249
+ texte_compresse, _ = self.compresseur.compresser_texte(texte)
250
+ self.contenu.append(texte_compresse)
 
 
 
 
 
 
 
 
 
 
 
251
 
252
  def obtenir_contexte(self, limite_tokens: int = 2000) -> str:
253
  """Récupère le contexte le plus pertinent"""
254
  contexte_pertinent = []
255
+ for element in list(self.contenu)[-10:]: # 10 derniers éléments
256
+ element_decompresse = self.compresseur.decompresser_texte(element)
257
+ contexte_pertinent.append(element_decompresse)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
258
 
259
  return " ".join(contexte_pertinent)
260
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  def get_statistiques(self) -> Dict[str, Any]:
262
  """Retourne les statistiques de la fenêtre de contexte"""
263
  return {
264
+ "taille_actuelle": len(self.contenu),
265
+ "taille_max": self.taille_max
 
 
 
266
  }
267
 
268
  # =============================================================================
 
273
  """Cortex 3.0 avec toutes les optimisations intégrées"""
274
 
275
  def __init__(self):
 
276
  self.compresseur = TokenCompressor()
277
  self.memoire = MemoireCompressee()
278
  self.moteur_entrainement = MoteurEntrainement()
279
  self.fenetre_contexte = FenetreContexteEtendue()
280
 
 
281
  self.etat = {
282
  "performance_globale": {
283
  "temps_reponse": 0.05,
284
  "precision": 95.0,
285
  "efficacite_memoire": 85.0,
286
  "vitesse_traitement": 1.0
 
 
 
 
 
 
 
 
 
 
 
 
287
  }
288
  }
289
 
290
+ self.historique_performances = deque(maxlen=100)
291
  logger.info("🧠 Cortex Optimisé 3.0 initialisé")
292
 
293
  async def traiter_requete_optimisee(self, requete: str) -> Dict[str, Any]:
 
295
  debut = time.time()
296
 
297
  try:
 
298
  requete_compressee, taux_compression = self.compresseur.compresser_texte(requete)
299
+ self.fenetre_contexte.ajouter_contexte(requete)
 
 
 
 
300
  contexte = self.fenetre_contexte.obtenir_contexte()
301
  reponse = await self.generer_reponse_optimisee(requete, contexte)
 
 
302
  reponse_compressee, _ = self.compresseur.compresser_texte(reponse)
303
 
 
304
  duree = time.time() - debut
305
  self.mettre_a_jour_statistiques(duree, taux_compression)
306
 
 
309
  "reponse_originale": reponse,
310
  "reponse_compressee": reponse_compressee,
311
  "taux_compression": taux_compression,
312
+ "temps_traitement": duree
 
313
  }
314
 
315
  except Exception as e:
 
318
 
319
  async def generer_reponse_optimisee(self, requete: str, contexte: str) -> str:
320
  """Génère une réponse optimisée"""
321
+ await asyncio.sleep(0.02)
 
322
 
323
  reponses_avancees = [
324
+ f"🧠 [Système Optimisé] J'ai analysé votre requête avec compression token avancée.",
325
+ f"⚡ [Traitement Accéléré] Votre demande a été processée en mode haute performance.",
326
+ f"💾 [Mémoire Optimisée] Système de compression activé avec succès.",
 
 
327
  ]
328
 
329
  reponse_base = np.random.choice(reponses_avancees)
330
 
331
  if "état" in requete.lower() and "cortex" in requete.lower():
332
  stats = self.get_statistiques_completes()
333
+ return f"{reponse_base} État du système: Performance {stats['etat_cortex']['performance_globale']['precision']}%"
334
  elif "performance" in requete.lower():
335
  perf = self.moteur_entrainement.get_statistiques()
336
+ return f"{reponse_base} Vitesse d'entraînement: {perf['vitesse_actuelle']:.2f}x"
337
  elif "mémoire" in requete.lower():
338
  mem = self.memoire.get_statistiques()
339
+ return f"{reponse_base} Mémoire: {mem['utilisation']}/{mem['capacite_max']} éléments"
340
  else:
341
+ return f"{reponse_base} J'ai bien compris: '{requete}'. Comment puis-je vous aider ?"
342
 
343
  def mettre_a_jour_statistiques(self, duree: float, taux_compression: float):
344
  """Met à jour les statistiques avancées"""
 
346
  self.etat["performance_globale"]["temps_reponse"] * 0.9 + duree * 0.1
347
  )
348
 
 
 
 
 
 
 
 
349
  self.historique_performances.append({
350
  "timestamp": time.time(),
351
  "temps_reponse": duree,
352
+ "taux_compression": taux_compression
 
353
  })
354
 
355
  def get_statistiques_completes(self) -> Dict[str, Any]:
 
359
  "performance_entrainement": self.moteur_entrainement.get_statistiques(),
360
  "statistiques_memoire": self.memoire.get_statistiques(),
361
  "fenetre_contexte": self.fenetre_contexte.get_statistiques(),
 
362
  "timestamp": datetime.now().isoformat()
363
  }
364
 
365
  # =============================================================================
366
+ # APPLICATION FASTAPI
367
  # =============================================================================
368
 
369
  app = FastAPI(
370
  title="Barouia-Cortex 3.0",
371
+ description="Système IA avancé avec optimisation",
372
  version="3.0.0"
373
  )
374
 
 
386
  class ChatRequest(BaseModel):
387
  message: str
388
  conversation_id: Optional[str] = None
 
389
 
390
  class EntrainementRequest(BaseModel):
391
  donnees: List[str]
392
+ epochs: int = 5
393
 
394
+ # Routes API
395
  @app.get("/")
396
  async def root():
397
  return {
398
  "message": "Barouia-Cortex 3.0 - Système Optimisé",
399
  "status": "active",
400
+ "version": "3.0.0"
 
 
 
 
 
 
401
  }
402
 
403
  @app.get("/health")
404
  async def health_check():
405
+ return {"status": "ok", "timestamp": time.time()}
 
 
 
 
 
 
406
 
407
  @app.get("/api/statistiques/avancees")
408
  async def get_statistiques_avancees():
 
410
 
411
  @app.post("/api/chat/optimise")
412
  async def chat_optimise(request: ChatRequest):
413
+ """Endpoint de chat avec optimisations"""
414
  try:
415
+ resultat = await cortex_optimise.traiter_requete_optimisee(request.message)
 
 
 
 
 
416
  return {
417
  "success": True,
418
  "reponse": resultat.get("reponse_originale", "Erreur"),
419
  "statistiques": resultat,
420
  "cortex_state": cortex_optimise.get_statistiques_completes()
421
  }
 
422
  except Exception as e:
 
423
  return {"success": False, "error": str(e)}
424
 
425
  @app.post("/api/entrainement/demarrer")
 
429
  resultat = await cortex_optimise.moteur_entrainement.entrainer_modele(
430
  request.donnees, request.epochs
431
  )
 
432
  return {
433
  "success": resultat["success"],
434
+ "resultat_entrainement": resultat
 
435
  }
 
436
  except Exception as e:
437
  return {"success": False, "error": str(e)}
438
 
439
  @app.websocket("/ws/optimise")
440
  async def websocket_optimise(websocket: WebSocket):
441
+ """WebSocket pour communications optimisées"""
442
  await websocket.accept()
443
  try:
444
  while True:
 
452
  await websocket.send_json({
453
  "type": "reponse_optimisee",
454
  "reponse": resultat.get("reponse_originale", ""),
455
+ "statistiques": resultat
 
456
  })
 
457
  except WebSocketDisconnect:
458
  logger.info("WebSocket optimisé déconnecté")
459
 
460
+ # Interface dashboard simplifiée
461
  @app.get("/dashboard", response_class=HTMLResponse)
462
  async def dashboard_optimise():
463
  html_content = """
 
466
  <head>
467
  <meta charset="UTF-8">
468
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
469
+ <title>Barouia-Cortex 3.0</title>
470
  <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
471
  <style>
472
  * { margin: 0; padding: 0; box-sizing: border-box; }
473
  body {
474
+ font-family: Arial, sans-serif;
475
  background: linear-gradient(135deg, #0f0f23 0%, #1a1a2e 100%);
476
  color: white;
477
  min-height: 100vh;
478
  padding: 20px;
479
  }
480
  .container {
481
+ max-width: 1200px;
482
  margin: 0 auto;
483
  }
484
  .header {
 
488
  border-radius: 15px;
489
  margin-bottom: 2rem;
490
  }
491
+ .dashboard {
 
 
 
 
 
 
 
 
 
 
 
492
  display: grid;
493
+ grid-template-columns: 1fr 1fr;
494
+ gap: 2rem;
495
  margin-bottom: 2rem;
496
  }
 
 
 
497
  @media (max-width: 768px) {
498
+ .dashboard { grid-template-columns: 1fr; }
499
  }
500
  .card {
501
  background: rgba(255, 255, 255, 0.1);
 
503
  border-radius: 15px;
504
  border: 1px solid rgba(102, 126, 234, 0.3);
505
  }
 
 
 
 
 
 
 
506
  .metrics-grid {
507
  display: grid;
508
  grid-template-columns: 1fr 1fr;
509
  gap: 1rem;
510
+ margin-top: 1rem;
511
  }
512
  .metric {
513
  background: rgba(255, 255, 255, 0.05);
 
520
  font-weight: bold;
521
  color: #667eea;
522
  }
523
+ .chat-container {
 
 
 
 
 
 
 
 
 
 
 
 
 
524
  background: rgba(255, 255, 255, 0.1);
525
  border-radius: 15px;
526
  padding: 1.5rem;
527
  display: flex;
528
  flex-direction: column;
529
+ height: 500px;
530
  }
531
  .chat-messages {
532
  flex: 1;
 
570
  color: white;
571
  cursor: pointer;
572
  }
573
+ canvas {
574
+ max-height: 300px;
575
  }
576
  </style>
577
  </head>
 
579
  <div class="container">
580
  <div class="header">
581
  <h1>🧠 Barouia-Cortex 3.0</h1>
582
+ <p>Système IA avec Optimisations Intelligentes</p>
 
583
  </div>
584
 
585
+ <div class="dashboard">
 
586
  <div class="card">
587
  <h3>⚡ Performance Globale</h3>
588
  <div class="metrics-grid">
589
  <div class="metric">
590
  <div class="metric-value" id="tempsReponse">0.05s</div>
591
+ <div>Temps Réponse</div>
592
  </div>
593
  <div class="metric">
594
  <div class="metric-value" id="precision">95%</div>
595
+ <div>Précision</div>
596
  </div>
597
  <div class="metric">
598
  <div class="metric-value" id="compression">65%</div>
599
+ <div>Compression</div>
600
  </div>
601
  <div class="metric">
602
  <div class="metric-value" id="vitesse">1.0x</div>
603
+ <div>Vitesse</div>
604
  </div>
605
  </div>
606
  </div>
607
 
 
608
  <div class="card">
609
  <h3>💾 Mémoire Optimisée</h3>
610
  <div class="metrics-grid">
611
  <div class="metric">
612
  <div class="metric-value" id="memoireUtilisee">0</div>
613
+ <div>Éléments</div>
 
 
 
 
 
 
 
 
614
  </div>
615
  <div class="metric">
616
  <div class="metric-value" id="cacheActif">0</div>
617
+ <div>Cache</div>
618
  </div>
619
  </div>
620
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
621
  </div>
622
+
623
+ <div class="card">
624
+ <h3>💬 Interface Optimisée</h3>
625
+ <div class="chat-container">
626
+ <div class="chat-messages" id="chatMessages">
627
+ <div class="message ai-message">
628
+ 🧠 <strong>Barouia-Cortex 3.0</strong> initialisé!<br>
629
+ Compression Token activée<br>
630
+ 💾 Mémoire optimisée fonctionnelle
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
631
  </div>
632
  </div>
633
+ <div class="chat-input">
634
+ <input type="text" id="messageInput" placeholder="Tapez votre message..." autocomplete="off">
635
+ <button id="sendButton">Envoyer</button>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
636
  </div>
637
  </div>
 
 
 
 
638
  </div>
639
  </div>
640
 
641
  <script>
642
+ // Mise à jour des métriques
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
643
  async function updateMetrics() {
644
  try {
645
  const response = await fetch('/api/statistiques/avancees');
646
  const data = await response.json();
647
 
 
648
  const perf = data.etat_cortex.performance_globale;
649
  document.getElementById('tempsReponse').textContent = (perf.temps_reponse * 1000).toFixed(1) + 'ms';
650
  document.getElementById('precision').textContent = perf.precision.toFixed(1) + '%';
651
  document.getElementById('compression').textContent = perf.efficacite_memoire.toFixed(1) + '%';
652
  document.getElementById('vitesse').textContent = perf.vitesse_traitement.toFixed(1) + 'x';
653
 
 
654
  const mem = data.statistiques_memoire;
655
+ document.getElementById('memoireUtilisee').textContent = mem.utilisation;
656
+ document.getElementById('cacheActif').textContent = mem.elements_caches;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
657
 
658
  } catch (error) {
659
+ console.error('Erreur mise à jour:', error);
660
  }
661
  }
662
 
663
+ // Gestion du chat
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
664
  async function sendMessage() {
665
  const input = document.getElementById('messageInput');
666
  const message = input.value.trim();
 
674
  const response = await fetch('/api/chat/optimise', {
675
  method: 'POST',
676
  headers: { 'Content-Type': 'application/json' },
677
+ body: JSON.stringify({ message: message })
 
 
 
 
678
  });
679
 
680
  const data = await response.json();
681
 
682
  if (data.success) {
683
  addMessage('ai', data.reponse);
 
684
  updateMetrics();
685
  } else {
686
+ addMessage('ai', 'Erreur: ' + data.error);
687
  }
688
  } catch (error) {
689
+ addMessage('ai', 'Erreur de connexion');
690
  }
691
  }
692
 
 
694
  const container = document.getElementById('chatMessages');
695
  const messageDiv = document.createElement('div');
696
  messageDiv.className = `message ${role}-message`;
697
+ messageDiv.innerHTML = content;
 
 
 
 
 
 
 
698
  container.appendChild(messageDiv);
699
  container.scrollTop = container.scrollHeight;
700
  }
701
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
702
  // Événements
703
  document.getElementById('sendButton').addEventListener('click', sendMessage);
704
  document.getElementById('messageInput').addEventListener('keypress', (e) => {
 
707
 
708
  // Initialisation
709
  document.addEventListener('DOMContentLoaded', function() {
710
+ setInterval(updateMetrics, 3000);
711
+ console.log('Barouia-Cortex 3.0 initialisé');
 
 
 
 
 
 
 
 
712
  });
713
  </script>
714
  </body>
 
716
  """
717
  return HTMLResponse(content=html_content)
718
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
719
  if __name__ == "__main__":
720
  port = int(os.getenv("PORT", 7860))
721
  uvicorn.run(app, host="0.0.0.0", port=port)