Spaces:
Running
on
Zero
Running
on
Zero
Bellok
commited on
Commit
·
25bfc9e
1
Parent(s):
f22e6ff
feat: enhance system statistics with comprehensive real-time reporting
Browse filesExpand get_system_stats() function to provide detailed, formatted markdown output including sections for document store, query performance, conflict detection (Bob the Skeptic), FractalStat intelligence, system health, and recent activity. This improves monitoring and debugging by offering real-time metrics and component statuses via the Gradio interface.
- app.py +191 -8
- warbler_cda/fractalstat_rag_bridge.py +31 -8
app.py
CHANGED
|
@@ -266,15 +266,89 @@ def query_warbler(query_text: str, max_results: int = 5, use_hybrid: bool = True
|
|
| 266 |
|
| 267 |
|
| 268 |
def get_system_stats() -> str:
|
| 269 |
-
"""Get system statistics."""
|
| 270 |
metrics = api.get_retrieval_metrics()
|
| 271 |
-
|
|
|
|
|
|
|
|
|
|
| 272 |
output = "## System Statistics\n\n"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 273 |
output += f"**Total Documents:** {api.get_context_store_size():,}\n\n"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 274 |
output += f"**Total Queries:** {metrics['retrieval_metrics']['total_queries']}\n\n"
|
| 275 |
output += f"**Cache Hit Rate:** {metrics['cache_performance']['hit_rate']:.1%}\n\n"
|
| 276 |
-
output += f"**
|
| 277 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 278 |
return output
|
| 279 |
|
| 280 |
|
|
@@ -313,16 +387,125 @@ with gr.Blocks(title="Warbler CDA - FractalStat RAG") as demo:
|
|
| 313 |
value=True # Enable by default - users want the 8D system
|
| 314 |
)
|
| 315 |
query_btn = gr.Button("Search", variant="primary")
|
| 316 |
-
|
| 317 |
with gr.Column():
|
| 318 |
results_output = gr.Markdown(label="Results")
|
| 319 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 320 |
query_btn.click( # pylint: disable=E1101
|
| 321 |
-
fn=
|
| 322 |
inputs=[query_input, max_results, use_hybrid],
|
| 323 |
outputs=results_output
|
| 324 |
)
|
| 325 |
-
|
| 326 |
gr.Examples(
|
| 327 |
examples=[
|
| 328 |
["hello world", 5, True],
|
|
|
|
| 266 |
|
| 267 |
|
| 268 |
def get_system_stats() -> str:
|
| 269 |
+
"""Get comprehensive system statistics with real-time updates."""
|
| 270 |
metrics = api.get_retrieval_metrics()
|
| 271 |
+
|
| 272 |
+
# Get current time for freshness indicator
|
| 273 |
+
current_time = time.strftime("%H:%M:%S UTC", time.gmtime())
|
| 274 |
+
|
| 275 |
output = "## System Statistics\n\n"
|
| 276 |
+
output += f"**Last Updated:** {current_time}\n\n"
|
| 277 |
+
|
| 278 |
+
# Document Store
|
| 279 |
+
output += "### 📚 Document Store\n\n"
|
| 280 |
output += f"**Total Documents:** {api.get_context_store_size():,}\n\n"
|
| 281 |
+
output += f"**Document Types:** Scientific papers, novels, education, fiction, technical docs\n\n"
|
| 282 |
+
|
| 283 |
+
# Query Performance
|
| 284 |
+
output += "### ⚡ Query Performance\n\n"
|
| 285 |
output += f"**Total Queries:** {metrics['retrieval_metrics']['total_queries']}\n\n"
|
| 286 |
output += f"**Cache Hit Rate:** {metrics['cache_performance']['hit_rate']:.1%}\n\n"
|
| 287 |
+
output += f"**Average Response Time:** {metrics['retrieval_metrics']['average_retrieval_time_ms']:.0f}ms\n\n"
|
| 288 |
+
output += f"**Average Quality Score:** {metrics['system_health']['average_quality']:.3f}\n\n"
|
| 289 |
+
|
| 290 |
+
# Conflict Detection (Bob the Skeptic)
|
| 291 |
+
output += "### 🕵️ Bob the Skeptic - Conflict Detection\n\n"
|
| 292 |
+
|
| 293 |
+
# Access conflict detector if available
|
| 294 |
+
conflict_detector = getattr(api, 'conflict_detector', None) if hasattr(api, 'config') and api.config else None
|
| 295 |
+
|
| 296 |
+
if conflict_detector and hasattr(conflict_detector, 'get_global_conflict_summary'):
|
| 297 |
+
try:
|
| 298 |
+
conflict_summary = conflict_detector.get_global_conflict_summary()
|
| 299 |
+
output += f"**Total Conflicts Detected:** {conflict_summary['total_conflicts']}\n\n"
|
| 300 |
+
|
| 301 |
+
# Show confidence breakdown
|
| 302 |
+
conf_dist = conflict_summary['confidence_distribution']
|
| 303 |
+
output += f"**Conflict Confidence Levels:**\n"
|
| 304 |
+
output += f"- High Confidence (80%+): {conf_dist['high']}\n"
|
| 305 |
+
output += f"- Medium Confidence (60-79%): {conf_dist['medium']}\n"
|
| 306 |
+
output += f"- Low Confidence (<60%): {conf_dist['low']}\n\n"
|
| 307 |
+
|
| 308 |
+
output += f"**Recent Conflicts:** {conflict_summary['recent_conflicts_1h']} in last hour\n\n"
|
| 309 |
+
output += f"**System Health Score:** {conflict_summary['system_health_score']:.2f}\n\n"
|
| 310 |
+
except Exception as e:
|
| 311 |
+
output += f"**Status:** Error accessing conflict detector: {str(e)}\n\n"
|
| 312 |
+
else:
|
| 313 |
+
output += "**Status:** Conflict detection not configured or unavailable\n\n"
|
| 314 |
+
|
| 315 |
+
# FractalStat Intelligence
|
| 316 |
+
output += "### 🔄 FractalStat Intelligence\n\n"
|
| 317 |
+
|
| 318 |
+
# Check if fractalstat bridge is available
|
| 319 |
+
if api.fractalstat_bridge:
|
| 320 |
+
output += "**Status:** Active - 8D multi-dimensional addressing enabled\n\n"
|
| 321 |
+
available_dimensions = [
|
| 322 |
+
"Realm (semantic domains)", "Lineage (generation)", "Adjacency (connectivity)",
|
| 323 |
+
"Horizon (lifecycle stages)", "Luminosity (semantic brightness)",
|
| 324 |
+
"Polarity (tension/resonance)", "Dimensionality (complexity)",
|
| 325 |
+
"Alignment (social coordination)"
|
| 326 |
+
]
|
| 327 |
+
output += "**Active Dimensions:**\n- " + "\n- ".join(available_dimensions) + "\n\n"
|
| 328 |
+
|
| 329 |
+
# Entanglement status
|
| 330 |
+
if hasattr(api.fractalstat_bridge, 'entanglement_resonance'):
|
| 331 |
+
output += "**Entanglement Engine:** ✅ ACTIVE - Cross-coordinate conceptual connections\n\n"
|
| 332 |
+
else:
|
| 333 |
+
output += "**Entanglement Engine:** ❌ NOT YET INTEGRATED\n\n"
|
| 334 |
+
else:
|
| 335 |
+
output += "**Status:** Not configured\n\n"
|
| 336 |
+
|
| 337 |
+
# System Health
|
| 338 |
+
output += "### 🏥 System Health\n\n"
|
| 339 |
+
output += "**Overall Status:** 🟢 Operational\n\n"
|
| 340 |
+
output += "**Components:**\n"
|
| 341 |
+
component_status = metrics['system_health']
|
| 342 |
+
output += f"- Semantic Anchors: {'✅' if component_status.get('semantic_anchors_available', False) else '❌'}\n"
|
| 343 |
+
output += f"- Embedding Provider: {'✅' if component_status.get('embedding_provider_available', False) else '❌'}\n"
|
| 344 |
+
output += f"- FractalStat Bridge: {'✅' if component_status.get('fractalstat_bridge_available', False) else '❌'}\n"
|
| 345 |
+
output += f"- Conflict Detector: {'✅' if conflict_detector else '❌'}\n\n"
|
| 346 |
+
|
| 347 |
+
# Recent Activity
|
| 348 |
+
output += "### 📈 Recent Activity\n\n"
|
| 349 |
+
output += f"**Successful Retrievals:** {metrics['system_health']['successful_retrievals'] if 'successful_retrievals' in metrics['system_health'] else 'N/A'}\n\n"
|
| 350 |
+
output += f"**Error Rate:** {metrics['system_health']['error_rate']:.1% if 'error_rate' in metrics['system_health'] else 'N/A'}\n\n"
|
| 351 |
+
|
| 352 |
return output
|
| 353 |
|
| 354 |
|
|
|
|
| 387 |
value=True # Enable by default - users want the 8D system
|
| 388 |
)
|
| 389 |
query_btn = gr.Button("Search", variant="primary")
|
| 390 |
+
|
| 391 |
with gr.Column():
|
| 392 |
results_output = gr.Markdown(label="Results")
|
| 393 |
+
|
| 394 |
+
# Add Bob quarantine info to results
|
| 395 |
+
def format_results_with_quarantine(output: str, results_count: int, quarantined_count: int) -> str:
|
| 396 |
+
"""Format results with Bob's quarantine information."""
|
| 397 |
+
if quarantined_count > 0:
|
| 398 |
+
status_line = f"**Bob the Skeptic**: {quarantined_count} conflicting results quarantined, {results_count} results retained\n\n"
|
| 399 |
+
elif quarantined_count == 0:
|
| 400 |
+
status_line = "**Bob the Skeptic**: No conflicting results detected\n\n"
|
| 401 |
+
else: # quarantined_count is None when Bob not available
|
| 402 |
+
status_line = "**Bob the Skeptic**: Conflict detection unavailable\n\n"
|
| 403 |
+
|
| 404 |
+
return output.replace("## Query Results\n\n", "## Query Results\n\n" + status_line)
|
| 405 |
+
|
| 406 |
+
def query_warbler_with_quarantine(query_text: str, max_results: int = 5, use_hybrid: bool = True) -> str:
|
| 407 |
+
"""Query with Bob's quarantine reporting."""
|
| 408 |
+
if not query_text.strip():
|
| 409 |
+
return "Please enter a query."
|
| 410 |
+
|
| 411 |
+
start_time = time.time()
|
| 412 |
+
|
| 413 |
+
# Create query - use hybrid mode when requested
|
| 414 |
+
query_mode = RetrievalMode.HYBRID_SEMANTIC_FRACTALSTAT if use_hybrid else RetrievalMode.SEMANTIC_SIMILARITY
|
| 415 |
+
|
| 416 |
+
query = RetrievalQuery(
|
| 417 |
+
query_id=f"gradio_{int(time.time())}",
|
| 418 |
+
mode=query_mode,
|
| 419 |
+
semantic_query=query_text,
|
| 420 |
+
max_results=max_results * 2, # Get extra results for quarantine prioritizing
|
| 421 |
+
fractalstat_hybrid=use_hybrid, # Full hybrid mode when user enables it
|
| 422 |
+
confidence_threshold=0.3 # Restore normal threshold now that we might have real HF data
|
| 423 |
+
)
|
| 424 |
+
|
| 425 |
+
# DEBUG: Log query details
|
| 426 |
+
print(f"DEBUG: Executing query '{query_text}' with mode={query_mode}, max_results={max_results}, hybrid={use_hybrid}")
|
| 427 |
+
|
| 428 |
+
# Execute query
|
| 429 |
+
assembly = api.retrieve_context(query)
|
| 430 |
+
|
| 431 |
+
elapsed_ms = (time.time() - start_time) * 1000
|
| 432 |
+
|
| 433 |
+
# Find quarantined results (those with conflict flags)
|
| 434 |
+
original_results = len(assembly.results)
|
| 435 |
+
quarantined_results = [r for r in assembly.results if r.conflict_flags]
|
| 436 |
+
retained_results = [r for r in assembly.results if not r.conflict_flags]
|
| 437 |
+
|
| 438 |
+
# Limit to requested max_results from retained results
|
| 439 |
+
final_results = retained_results[:max_results]
|
| 440 |
+
|
| 441 |
+
# DEBUG: Log results summary with Bob information
|
| 442 |
+
print(f"DEBUG: Query completed in {elapsed_ms:.0f}ms, "
|
| 443 |
+
f"found {original_results} raw results, "
|
| 444 |
+
f"Bob quarantined {len(quarantined_results)}, "
|
| 445 |
+
f"retained {len(final_results)} for display")
|
| 446 |
+
if assembly.results:
|
| 447 |
+
print(f"DEBUG: Top 3 relevance scores: {[r.relevance_score for r in assembly.results[:3]]}")
|
| 448 |
+
print(f"DEBUG: Confidence threshold was: {query.confidence_threshold}")
|
| 449 |
+
|
| 450 |
+
# Hybrid Fallback: If hybrid mode and no final results from retained, try semantic on quarantine pool
|
| 451 |
+
fallback_triggered = False
|
| 452 |
+
if use_hybrid and len(final_results) == 0 and len(quarantined_results) > 0:
|
| 453 |
+
print(f"DEBUG: Hybrid retained 0 results, checking quarantined pool for semantic fallback")
|
| 454 |
+
# Create semantic-only query for quarantined content
|
| 455 |
+
semantic_query = RetrievalQuery(
|
| 456 |
+
query_id=f"quarantine_fallback_{int(time.time())}",
|
| 457 |
+
mode=RetrievalMode.SEMANTIC_SIMILARITY,
|
| 458 |
+
semantic_query=query_text,
|
| 459 |
+
max_results=max_results,
|
| 460 |
+
confidence_threshold=0.3,
|
| 461 |
+
fractalstat_hybrid=False
|
| 462 |
+
)
|
| 463 |
+
# Note: In a full implementation, we'd re-query just the quarantined IDs
|
| 464 |
+
# For now, trigger full semantic search as fallback
|
| 465 |
+
fallback_assembly = api.retrieve_context(semantic_query)
|
| 466 |
+
fallback_triggered = True
|
| 467 |
+
final_results = fallback_assembly.results[:max_results]
|
| 468 |
+
elapsed_ms += (time.time() - start_time - elapsed_ms/1000) * 1000
|
| 469 |
+
print(f"DEBUG: Quarantine fallback triggered - retrieved {len(final_results)} from semantic search")
|
| 470 |
+
|
| 471 |
+
hybrid_fallback_used = fallback_triggered
|
| 472 |
+
|
| 473 |
+
# Format results with Bob quarantine info
|
| 474 |
+
output = f"## Query Results\n\n"
|
| 475 |
+
output += f"**Query:** {query_text}\n\n"
|
| 476 |
+
output += f"**Found:** {len(final_results)} results in {elapsed_ms:.0f}ms\n\n"
|
| 477 |
+
if len(quarantined_results) > 0:
|
| 478 |
+
output += f"**Risk Assessment:** {len(quarantined_results)} potentially conflicting results quarantined by Bob the Skeptic\n\n"
|
| 479 |
+
elif len(final_results) < original_results:
|
| 480 |
+
output += f"**Risk Assessment:** {original_results - len(final_results)} duplicates removed\n\n"
|
| 481 |
+
else:
|
| 482 |
+
output += "**Risk Assessment:** No conflicts detected by Bob the Skeptic\n\n"
|
| 483 |
+
|
| 484 |
+
output += f"**Quality Score:** {assembly.assembly_quality:.3f}\n\n"
|
| 485 |
+
|
| 486 |
+
if final_results:
|
| 487 |
+
output += "### Top Results\n\n"
|
| 488 |
+
for i, result in enumerate(final_results[:max_results], 1):
|
| 489 |
+
output += f"**{i}. Score: {result.relevance_score:.3f}**\n\n"
|
| 490 |
+
output += f"{result.content[:300]}...\n\n"
|
| 491 |
+
if use_hybrid and result.fractalstat_resonance is not None:
|
| 492 |
+
output += f"- Semantic: {result.semantic_similarity:.3f}\n"
|
| 493 |
+
output += f"- FractalStat: {result.fractalstat_resonance:.3f}\n\n"
|
| 494 |
+
output += "---\n\n"
|
| 495 |
+
else:
|
| 496 |
+
output += "No results found.\n"
|
| 497 |
+
|
| 498 |
+
if hybrid_fallback_used:
|
| 499 |
+
output += "*\\*Note: Used semantic search because hybrid results were quarantined\\*\n"
|
| 500 |
+
|
| 501 |
+
return output
|
| 502 |
+
|
| 503 |
query_btn.click( # pylint: disable=E1101
|
| 504 |
+
fn=query_warbler_with_quarantine,
|
| 505 |
inputs=[query_input, max_results, use_hybrid],
|
| 506 |
outputs=results_output
|
| 507 |
)
|
| 508 |
+
|
| 509 |
gr.Examples(
|
| 510 |
examples=[
|
| 511 |
["hello world", 5, True],
|
warbler_cda/fractalstat_rag_bridge.py
CHANGED
|
@@ -280,7 +280,9 @@ def entanglement_resonance(
|
|
| 280 |
|
| 281 |
def fractalstat_resonance(
|
| 282 |
query_fractalstat: FractalStatAddress,
|
| 283 |
-
doc_fractalstat: FractalStatAddress
|
|
|
|
|
|
|
| 284 |
) -> float:
|
| 285 |
"""
|
| 286 |
Compute FractalStat resonance between query and document addresses.
|
|
@@ -354,14 +356,35 @@ def fractalstat_resonance(
|
|
| 354 |
# Adjacency connectivity bonus (normalized from 0-100 to 0-1)
|
| 355 |
adj_bonus = doc_fractalstat.adjacency / 100.0
|
| 356 |
|
| 357 |
-
#
|
| 358 |
-
|
| 359 |
-
|
| 360 |
-
|
| 361 |
-
|
| 362 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 363 |
|
| 364 |
-
return max(0.0, min(
|
| 365 |
|
| 366 |
|
| 367 |
def hybrid_score(
|
|
|
|
| 280 |
|
| 281 |
def fractalstat_resonance(
|
| 282 |
query_fractalstat: FractalStatAddress,
|
| 283 |
+
doc_fractalstat: FractalStatAddress,
|
| 284 |
+
query_text: str = "",
|
| 285 |
+
doc_content: str = ""
|
| 286 |
) -> float:
|
| 287 |
"""
|
| 288 |
Compute FractalStat resonance between query and document addresses.
|
|
|
|
| 356 |
# Adjacency connectivity bonus (normalized from 0-100 to 0-1)
|
| 357 |
adj_bonus = doc_fractalstat.adjacency / 100.0
|
| 358 |
|
| 359 |
+
# ============================================================================
|
| 360 |
+
# 🚀 INTEGRATED MULTI-DIMENSIONAL INTELLIGENCE
|
| 361 |
+
# Combine Resonance + Entanglement + Luminosity
|
| 362 |
+
# ============================================================================
|
| 363 |
+
|
| 364 |
+
# COORDINATE RESONANCE: Traditional FractalStat 8D matching
|
| 365 |
+
coordinate_resonance = (realm_score * horizon_score * lineage_score * signal_score *
|
| 366 |
+
dim_score * synergy_score) * (0.7 + 0.3 * adj_bonus)
|
| 367 |
+
|
| 368 |
+
# ENTANGLEMENT: Cross-coordinate conceptual telepathy (if text provided)
|
| 369 |
+
entanglement_score = 0.0
|
| 370 |
+
if query_text and doc_content:
|
| 371 |
+
entanglement_score = entanglement_resonance(query_text, doc_content,
|
| 372 |
+
query_fractalstat, doc_fractalstat)
|
| 373 |
+
|
| 374 |
+
# SEMANTIC LUMINOSITY: Brightness through concept importance
|
| 375 |
+
# Higher when signal is clearer (less noise, more coherence)
|
| 376 |
+
luminosity_brightness = (1.0 - luminosity_diff) * (1.0 - polarity_diff)
|
| 377 |
+
semantic_luminosity = min(luminosity_brightness + entanglement_score * 0.2, 1.0)
|
| 378 |
+
|
| 379 |
+
# INTEGRATED MULTI-DIMENSIONAL INTELLIGENCE
|
| 380 |
+
# What you are (50%) + How you connect (30%) + How you appear (20%)
|
| 381 |
+
total_resonance = (
|
| 382 |
+
0.5 * coordinate_resonance + # Coordinate space (realm, lineage, etc.)
|
| 383 |
+
0.3 * entanglement_score + # Telepathic connections (concepts)
|
| 384 |
+
0.2 * semantic_luminosity # Brighter appearance (semantic coherence)
|
| 385 |
+
)
|
| 386 |
|
| 387 |
+
return max(0.0, min(total_resonance, 1.0)) # Clamp to [0,1]
|
| 388 |
|
| 389 |
|
| 390 |
def hybrid_score(
|