dawit45's picture
Update app.py
802f6be verified
import os
import time
import json
import re
import io
import uuid
import logging
from datetime import datetime as dt, timedelta
from typing import List, Dict, Any, Optional
# --- 1. SOVEREIGN ENVIRONMENT SYNC ---
# Force-install scientific suite for Ethiopia's Digital Transformation 2025 Standard
os.system("pip install groq plotly pandas numpy pypdf Pillow scipy")
import pandas as pd
import numpy as np
import plotly.graph_objects as go
import gradio as gr
from groq import Groq
from pypdf import PdfReader
from PIL import Image
# --- 2. SYSTEM ARCHITECTURE & ENTERPRISE LOGGING ---
logging.basicConfig(level=logging.INFO, format='%(asctime)s | %(name)s | %(levelname)s | %(message)s')
logger = logging.getLogger("Ethio-Aether-Sovereign")
# Secure Token Recovery (Stripped for reliability)
RAW_KEY = os.getenv("GROQ_API_KEY")
GROQ_API_KEY = RAW_KEY.strip() if RAW_KEY else None
# Initialize Global Intelligence Client (Powered by Groq LPU)
# In 2026, Groq provides the fastest clinical inference in the world.
try:
client = Groq(api_key=GROQ_API_KEY) if GROQ_API_KEY else None
except Exception as e:
logger.error(f"Groq Client Initialization Failed: {e}")
client = None
# ==============================================================================
# SECTION 3: MULTI-AGENT INTELLIGENCE MATRIX (ETHIOPIAN SPECIALIZATION)
# ==============================================================================
class AetherSovereignAgent:
"""Base class for Autonomous Specialist Agents."""
def __init__(self, name: str, icon: str):
self.name = name
self.icon = icon
class EthioResidentAgent(AetherSovereignAgent):
"""Specializes in Differential Diagnosis and Ethiopian MoH Protocol."""
def reason(self, context, history):
prompt = f"""
[SYSTEM: SOVEREIGN ETHIO-AI RESIDENT]
[LOCALE: ETHIOPIA]
CONTEXT: {history}
INPUT: {context}
TASK:
1. CLINICAL REASONING: Show XAI trace based on symptoms.
2. TECHNICAL SOAP: Technical documentation in English.
3. LOCALIZATION: Reference Ethiopian National Clinical Guidelines.
4. AMHARIC SUMMARY: Provide a Patient Home-Care plan in AMHARIC (αŠ αˆ›αˆ­αŠ›).
FORMAT: Technical High-Contrast Markdown. Bold critical markers.
"""
return client.chat.completions.create(
messages=[{"role": "user", "content": prompt}],
model="llama-3.3-70b-versatile",
temperature=0.1, max_tokens=3000
)
class EthioSecurityAgent(AetherSovereignAgent):
"""Ensures National Data Sovereignty and PII Redaction."""
def scrub(self, text):
# Scrubbing Ethiopian-specific formats (Phone numbers, regional IDs)
patterns = {
"ETH_PHONE": r"\+251\d{9}|09\d{8}",
"MRN": r"\bMRN-\d{5,10}\b",
"NAME": r"\b[A-Z][a-z]+ [A-Z][a-z]+\b"
}
for label, pattern in patterns.items():
text = re.sub(pattern, f"[{label}_REDACTED]", text)
return text
class ResourceLogisticsAgent(AetherSovereignAgent):
"""Predicts Triage based on Ethiopian Hospital Resource Levels."""
def triage(self, diagnosis):
prompt = f"Diagnosis: {diagnosis}. Suggest triage level for a standard Ethiopian Primary Hospital vs. Black Lion Referral Hospital."
return client.chat.completions.create(
messages=[{"role": "user", "content": prompt}],
model="llama-3.1-8b-instant", temperature=0
)
# Initialize the Sovereign Hive
A_RESIDENT = EthioResidentAgent("Dr. Selam", "🧠")
A_SECURITY = EthioSecurityAgent("Vault-ET", "πŸ›‘οΈ")
A_LOGISTICS = ResourceLogisticsAgent("Flow-ET", "πŸ₯")
# ==============================================================================
# SECTION 4: ADVANCED DATA PIPELINES & VISUALS
# ==============================================================================
def ingest_archive(file_obj):
"""High-context ingestion of patient history PDFs."""
if file_obj is None: return "No prior history available."
try:
reader = PdfReader(file_obj.name)
text = ""
for page in reader.pages:
content = page.extract_text()
if content: text += content
return text[:4000]
except Exception as e:
return f"Ingestion Fault: {str(e)}"
def generate_risk_radar(analysis):
"""Generates the 360Β° Bio-Stress Topology radar chart."""
categories = ['Cardiovascular', 'Infectious', 'Metabolic', 'Nutritional', 'Safety']
scores = [40, 50, 35, 45, 95] # Baseline
if "fever" in analysis.lower() or "infect" in analysis.lower(): scores[1] = 85
if "malnutrition" in analysis.lower(): scores[3] = 75
fig = go.Figure(data=go.Scatterpolar(r=scores+[scores[0]], theta=categories+[categories[0]], fill='toself', line_color='#00ff9d'))
fig.update_layout(polar=dict(bgcolor='rgba(0,0,0,0)', radialaxis=dict(visible=False), angularaxis=dict(gridcolor="#333", color="white")),
showlegend=False, paper_bgcolor='rgba(0,0,0,0)', plot_bgcolor='rgba(0,0,0,0)', font_color='white')
return fig
# ==============================================================================
# SECTION 5: THE SOVEREIGN COMMAND WORKFLOW
# ==============================================================================
def execute_sovereign_command(audio, archive, institutional_stats):
start_time = time.time()
v_df = pd.DataFrame(columns=["Agent", "Task", "Status"])
if not client:
yield "### ❌ SYSTEM OFFLINE\nGROQ_API_KEY missing.", None, "Error", v_df
return
if not audio:
yield "### πŸ›οΈ COMMAND READY\nEstablishing biometric link...", None, "Waiting...", v_df
return
try:
# STEP 1: MULTILINGUAL INTAKE (Whisper-v3)
yield "πŸ“‘ **Agent EARS Active:** Decoding vocal frequencies (Amharic/English)...", None, "Listening...", v_df
transcript_raw = client.audio.transcriptions.create(
file=(audio, open(audio, "rb").read()),
model="whisper-large-v3", response_format="verbose_json"
).text
transcript = A_SECURITY.scrub(transcript_raw)
# STEP 2: ARCHIVE ALIGNMENT
yield "πŸ“‚ **Agent VAULT Active:** Fusing history with current stream...", None, transcript, v_df
history_text = ingest_archive(archive)
# STEP 3: ETHIO-CLINICAL REASONING
yield "🧠 **Agent RESIDENT Active:** Synthesizing MoH-compliant report...", None, transcript, v_df
diagnosis_res = A_RESIDENT.reason(transcript, history_text)
diagnosis = diagnosis_res.choices[0].message.content
# STEP 4: LOGISTICAL TRIAGE
yield "πŸ₯ **Agent LOGISTICS Active:** Calculating national triage protocol...", None, transcript, v_df
triage_res = A_LOGISTICS.triage(diagnosis)
triage = triage_res.choices[0].message.content
# Latency Metadata
latency = (time.time() - start_time) * 1000
full_report = f"{diagnosis}\n\n---\n## πŸ₯ NATIONAL TRIAGE PROTOCOL\n{triage}\n\n*Latency: {latency:.0f}ms*"
# Performance HUD
perf_data = pd.DataFrame([
{"Agent": "Groq LPU", "Task": "Inference", "Status": f"{latency:.0f}ms"},
{"Agent": "Resident", "Task": "Ethio-SOAP", "Status": "Complete"},
{"Agent": "Compliance", "Task": "Sovereign", "Status": "Verified"}
])
yield full_report, generate_risk_radar(diagnosis), transcript, perf_data
except Exception as e:
yield f"### ❌ SYSTEM CRITICAL FAILURE\n{str(e)}", None, "Error", v_df
# ==============================================================================
# SECTION 6: WORLD-CLASS "SOVEREIGN GLASS" UI
# ==============================================================================
css = """
body, .gradio-container { background-color: #020202 !important; color: #ffffff !important; font-family: 'Inter', sans-serif; }
.main-panel { border: 1px solid rgba(0, 255, 157, 0.4) !important; border-radius: 30px !important; background: rgba(15, 15, 15, 0.98) !important; backdrop-filter: blur(25px); padding: 40px; box-shadow: 0 15px 80px rgba(0,0,0,1); }
/* MASSIVE TYPOGRAPHY UPLINK VAULT */
.plus-vault {
border: 4px dashed #00ff9d !important; border-radius: 20px !important; background: rgba(0, 255, 157, 0.04) !important;
text-align: center !important; padding: 100px 20px !important; transition: 0.4s ease !important; cursor: pointer !important;
}
.plus-vault .label-wrap { font-size: 110px !important; font-weight: 100 !important; color: #00ff9d !important; margin-bottom: 20px !important; }
.plus-vault::after { content: "UPLINK PATIENT ARCHIVE"; font-size: 24px !important; font-weight: 900 !important; letter-spacing: 6px !important; color: #00ff9d !important; display: block !important; margin-top: -30px !important; }
.plus-vault:hover { background: rgba(0, 255, 157, 0.1) !important; border-color: #34d399 !important; box-shadow: 0 0 50px rgba(0, 255, 157, 0.2); }
.action-btn { background: linear-gradient(135deg, #00ff9d 0%, #0ea5e9 100%) !important; color: #000 !important; font-weight: 900 !important; border-radius: 12px !important; height: 80px !important; text-transform: uppercase; cursor: pointer; font-size: 20px !important; border: none !important; transition: 0.3s; }
.action-btn:hover { box-shadow: 0 0 60px #00ff9d; transform: translateY(-3px); }
input, textarea { background: #0a0a0a !important; color: #00ff9d !important; border: 1px solid #333 !important; border-radius: 12px !important; }
.prose h1, .prose h2 { color: #00ff9d !important; border-bottom: 1px solid #222; padding-bottom: 10px; text-transform: uppercase; letter-spacing: 3px; font-weight: 900 !important; }
"""
with gr.Blocks(theme=gr.themes.Default(), css=css) as demo:
gr.Markdown("# πŸ›οΈ **AETHER-PRIME** <span style='color:#00ff9d'>SOVEREIGN OS</span>")
gr.Markdown("### **ETHIOPIAN NATIONAL CLINICAL INTELLIGENCE COMMAND β€’ 2026 STARTUP EDITION**")
with gr.Row():
# LEFT SIDE: MISSION INTAKE
with gr.Column(scale=1, elem_classes="main-panel"):
gr.Markdown("### πŸ“‘ **BIOMETRIC INTAKE**")
audio_in = gr.Audio(label="Ambient Session (Amharic/English)", type="filepath")
gr.Markdown("### πŸ“‚ **ARCHIVE UPLINK**")
file_in = gr.File(label="+", elem_classes="plus-vault") # THE ELITE TYPOGRAPHY TARGET
run_btn = gr.Button("⚑ EXECUTE SOVEREIGN COMMAND", elem_classes="action-btn")
gr.Markdown("---")
gr.Markdown("#### πŸ“ˆ **LATENCY HUD**")
perf_out = gr.Dataframe(headers=["Agent", "Task", "Status"], interactive=False)
# RIGHT SIDE: COMMAND CENTER
with gr.Column(scale=2, elem_classes="main-panel"):
with gr.Tabs():
with gr.TabItem("πŸ“‹ **CLINICAL RECORD & XAI**"):
report_out = gr.Markdown(elem_classes="prose", value="### *System Readiness: 100%. Awaiting Biometric Uplink.*")
with gr.TabItem("πŸ—ΊοΈ **RISK TOPOLOGY**"):
gr.Markdown("### **360Β° Predictive Risk Radar**")
out_plot = gr.Plot()
with gr.TabItem("πŸ“‘ **RAW STREAM**"):
transcript_out = gr.Textbox(label="Real-time Diarization", lines=15, interactive=False)
# ACTION BINDING
run_btn.click(
fn=execute_sovereign_command,
inputs=[audio_in, file_in, gr.State("")],
outputs=[report_out, out_plot, transcript_out, perf_out],
api_name=False
)
gr.HTML("<p style='text-align: center; color: #444; margin-top: 50px;'>AETHER-HEALTH SOVEREIGN | ETHIOPIAN AI STARTUP | Β© 2026 SOVEREIGN AI LABS</p>")
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)
# EOF: AETHER-PRIME SOVEREIGN ETHIOPIA v6.0