Riy777 commited on
Commit
d408c93
·
verified ·
1 Parent(s): c96093c

Update r2.py

Browse files
Files changed (1) hide show
  1. r2.py +83 -4
r2.py CHANGED
@@ -1,5 +1,5 @@
1
  # ==============================================================================
2
- # ☁️ r2.py (V37.1 - GEM-Architect: Governance Training Data Ready)
3
  # ==============================================================================
4
 
5
  import os
@@ -45,6 +45,10 @@ DEEP_STEWARD_AUDIT_KEY = "DeepSteward_Audit_Log.json"
45
  # ✅ مفتاح جديد خاص ببيانات تدريب الحوكمة (156 مؤشر + النتيجة)
46
  GOVERNANCE_TRAINING_KEY = "datasets/governance_training_data.json"
47
 
 
 
 
 
48
  # 🧬 مفاتيح النظام السيبراني
49
  STRATEGIC_DNA_KEY = "learning/strategic_dna_v2.json"
50
 
@@ -65,6 +69,7 @@ class R2Service:
65
  )
66
  self.lock_acquired = False
67
  self.BUCKET_NAME = BUCKET_NAME
 
68
 
69
  except Exception as e:
70
  raise RuntimeError(f"Failed to initialize S3 client: {e}")
@@ -122,6 +127,10 @@ class R2Service:
122
 
123
  await asyncio.to_thread(_reset_sync)
124
 
 
 
 
 
125
  print("✅ [R2 Reset] تم تصفير جميع البيانات والمحفظة بنجاح.")
126
  return True
127
 
@@ -172,6 +181,78 @@ class R2Service:
172
  print(f"❌ [R2] File upload failed for {key}: {e}")
173
  raise
174
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175
  # ==============================================================================
176
  # 🏛️ بيانات تدريب الحوكمة (Governance Training Data)
177
  # ==============================================================================
@@ -350,6 +431,4 @@ class R2Service:
350
 
351
  async def load_whale_learning_config_async(self) -> Dict[str, Any]:
352
  data = await self.get_file_async(WHALE_LEARNING_CONFIG_KEY)
353
- return json.loads(data) if data else {}
354
-
355
- print("✅ [R2 V37.1] Service Loaded (Governance Data Ready).")
 
1
  # ==============================================================================
2
+ # ☁️ r2.py (V38.0 - GEM-Architect: Diagnostic Matrix & Guardian Persistence)
3
  # ==============================================================================
4
 
5
  import os
 
45
  # ✅ مفتاح جديد خاص ببيانات تدريب الحوكمة (156 مؤشر + النتيجة)
46
  GOVERNANCE_TRAINING_KEY = "datasets/governance_training_data.json"
47
 
48
+ # 📊 مفاتيح التحليلات والتشخيص (جديد)
49
+ DIAGNOSTIC_STATS_KEY = "analytics/model_diagnostic_matrix.json"
50
+ GUARDIAN_STATS_KEY = "analytics/guardian_performance_stats.json"
51
+
52
  # 🧬 مفاتيح النظام السيبراني
53
  STRATEGIC_DNA_KEY = "learning/strategic_dna_v2.json"
54
 
 
69
  )
70
  self.lock_acquired = False
71
  self.BUCKET_NAME = BUCKET_NAME
72
+ print(f"✅ [R2 V38.0] Service Loaded (Diagnostics Ready).")
73
 
74
  except Exception as e:
75
  raise RuntimeError(f"Failed to initialize S3 client: {e}")
 
127
 
128
  await asyncio.to_thread(_reset_sync)
129
 
130
+ # تصفير المصفوفات أيضاً عند الطلب الشامل
131
+ await self.reset_diagnostic_stats_async()
132
+ await self.reset_guardian_stats_async()
133
+
134
  print("✅ [R2 Reset] تم تصفير جميع البيانات والمحفظة بنجاح.")
135
  return True
136
 
 
181
  print(f"❌ [R2] File upload failed for {key}: {e}")
182
  raise
183
 
184
+ # ==============================================================================
185
+ # 📊 Diagnostic & Guardian Stats (New Feature)
186
+ # ==============================================================================
187
+ async def get_diagnostic_stats_async(self) -> Dict[str, Any]:
188
+ """استرجاع مصفوفة التشخيص"""
189
+ try:
190
+ data = await self.get_file_async(DIAGNOSTIC_STATS_KEY)
191
+ defaults = {
192
+ "Titan": {"wins": 0, "losses": 0, "pnl": 0.0},
193
+ "Patterns": {"wins": 0, "losses": 0, "pnl": 0.0},
194
+ "Oracle": {"wins": 0, "losses": 0, "pnl": 0.0},
195
+ "Sniper": {"wins": 0, "losses": 0, "pnl": 0.0},
196
+ "MonteCarlo_L": {"wins": 0, "losses": 0, "pnl": 0.0},
197
+ "MonteCarlo_A": {"wins": 0, "losses": 0, "pnl": 0.0},
198
+ "Governance": {"wins": 0, "losses": 0, "pnl": 0.0}
199
+ }
200
+ loaded = json.loads(data) if data else {}
201
+ # دمج القيم الافتراضية لضمان وجود المفاتيح
202
+ for k, v in defaults.items():
203
+ if k not in loaded: loaded[k] = v
204
+ return loaded
205
+ except: return {}
206
+
207
+ async def update_diagnostic_stats_async(self, updates: Dict[str, Dict[str, float]]):
208
+ """تحديث إحصائيات النماذج بشكل آمن"""
209
+ try:
210
+ current = await self.get_diagnostic_stats_async()
211
+ for model, metrics in updates.items():
212
+ if model not in current: current[model] = {"wins": 0, "losses": 0, "pnl": 0.0}
213
+ current[model]['wins'] += metrics.get('wins', 0)
214
+ current[model]['losses'] += metrics.get('losses', 0)
215
+ current[model]['pnl'] += metrics.get('pnl', 0.0)
216
+
217
+ await self.upload_json_async(current, DIAGNOSTIC_STATS_KEY)
218
+ except Exception as e:
219
+ print(f"❌ [R2] Failed to update diagnostics: {e}")
220
+
221
+ async def reset_diagnostic_stats_async(self):
222
+ """تصفير مصفوفة التشخيص"""
223
+ empty = {k: {"wins": 0, "losses": 0, "pnl": 0.0} for k in
224
+ ["Titan", "Patterns", "Oracle", "Sniper", "MonteCarlo_L", "MonteCarlo_A", "Governance"]}
225
+ await self.upload_json_async(empty, DIAGNOSTIC_STATS_KEY)
226
+ print("📊 [R2] Diagnostic Matrix Reset.")
227
+
228
+ # --- Guardian Stats ---
229
+ async def get_guardian_stats_async(self) -> Dict[str, Any]:
230
+ data = await self.get_file_async(GUARDIAN_STATS_KEY)
231
+ defaults = {
232
+ "hybrid": {"total": 0, "good": 0, "saved": 0.0, "missed": 0.0},
233
+ "crash": {"total": 0, "good": 0, "saved": 0.0, "missed": 0.0},
234
+ "giveback": {"total": 0, "good": 0, "saved": 0.0, "missed": 0.0},
235
+ "stagnation": {"total": 0, "good": 0, "saved": 0.0, "missed": 0.0}
236
+ }
237
+ loaded = json.loads(data) if data else {}
238
+ for k, v in defaults.items():
239
+ if k not in loaded: loaded[k] = v
240
+ return loaded
241
+
242
+ async def save_guardian_stats_async(self, stats: Dict[str, Any]):
243
+ await self.upload_json_async(stats, GUARDIAN_STATS_KEY)
244
+
245
+ async def reset_guardian_stats_async(self):
246
+ """تصفير إحصائيات الحراس"""
247
+ defaults = {
248
+ "hybrid": {"total": 0, "good": 0, "saved": 0.0, "missed": 0.0},
249
+ "crash": {"total": 0, "good": 0, "saved": 0.0, "missed": 0.0},
250
+ "giveback": {"total": 0, "good": 0, "saved": 0.0, "missed": 0.0},
251
+ "stagnation": {"total": 0, "good": 0, "saved": 0.0, "missed": 0.0}
252
+ }
253
+ await self.upload_json_async(defaults, GUARDIAN_STATS_KEY)
254
+ print("🛡️ [R2] Guardian Stats Reset.")
255
+
256
  # ==============================================================================
257
  # 🏛️ بيانات تدريب الحوكمة (Governance Training Data)
258
  # ==============================================================================
 
431
 
432
  async def load_whale_learning_config_async(self) -> Dict[str, Any]:
433
  data = await self.get_file_async(WHALE_LEARNING_CONFIG_KEY)
434
+ return json.loads(data) if data else {}