Nurcholish's picture
Update app.py
6681970 verified
import gradio as gr
import json
from datetime import datetime
# Simulated knowledge graph data
SAMPLE_NODES = {
"SARS-CoV-2": {
"type": "Virus",
"genome_size": 29.9,
"family": "Coronaviridae",
"metadata": {"discovered": "2019", "origin": "Wuhan, China"}
},
"Spike Protein": {
"type": "Protein",
"function": "Viral entry",
"receptor": "ACE2",
"metadata": {"key_mutations": ["D614G", "N501Y", "E484K"]}
},
"ACE2": {
"type": "Receptor",
"location": "Cell membrane",
"function": "Viral entry receptor",
"metadata": {"tissue_expression": ["Lung", "Heart", "Kidney"]}
},
"Omicron": {
"type": "Variant",
"lineage": "BA.1",
"mutations": ["30+ spike mutations"],
"metadata": {"transmissibility": "High", "severity": "Lower"}
},
"mRNA Vaccine": {
"type": "Therapy",
"mechanism": "Induced immunity",
"efficacy": "~95% (original strain)",
"metadata": {"examples": ["Pfizer-BioNTech", "Moderna"]}
}
}
SAMPLE_EDGES = [
{"from": "SARS-CoV-2", "to": "Spike Protein", "relationship": "encodes", "confidence": 1.0},
{"from": "Spike Protein", "to": "ACE2", "relationship": "binds_to", "confidence": 0.95},
{"from": "SARS-CoV-2", "to": "Omicron", "relationship": "evolves_to", "confidence": 0.90},
{"from": "mRNA Vaccine", "to": "Spike Protein", "relationship": "targets", "confidence": 0.98},
]
INTENT_TYPES = ["Factual", "Causal", "Comparative", "Predictive", "Exploratory"]
# Query processing simulation
def process_query(query_text, intent_type, use_quantum):
"""Process a query and return results"""
results = {
"query": query_text,
"intent": intent_type,
"quantum_optimized": use_quantum,
"timestamp": datetime.now().isoformat(),
"nodes_searched": 0,
"edges_traversed": 0,
"results": []
}
# Simple keyword matching simulation
query_lower = query_text.lower()
for node_name, node_data in SAMPLE_NODES.items():
if any(keyword in query_lower for keyword in node_name.lower().split()):
results["results"].append({
"node": node_name,
"data": node_data,
"relevance": 0.85 + (0.1 if use_quantum else 0)
})
results["nodes_searched"] += 1
# Add related edges
for edge in SAMPLE_EDGES:
if any(node in [r["node"] for r in results["results"]]
for node in [edge["from"], edge["to"]]):
results["edges_traversed"] += 1
# Quantum optimization bonus
if use_quantum and results["results"]:
results["optimization"] = {
"rate": 0.8,
"distortion": 0.2,
"method": "Quantum-inspired sampling"
}
return results
def query_interface(query_text, intent_type, use_quantum):
"""Main query interface"""
if not query_text.strip():
return "Please enter a query.", ""
results = process_query(query_text, intent_type, use_quantum)
# Format output
output = f"## Query Results\n\n"
output += f"**Query:** {results['query']}\n\n"
output += f"**Intent Type:** {results['intent']}\n\n"
output += f"**Quantum Optimization:** {'Enabled ⚡' if use_quantum else 'Disabled'}\n\n"
output += f"**Nodes Searched:** {results['nodes_searched']}\n\n"
output += f"**Edges Traversed:** {results['edges_traversed']}\n\n"
if results["results"]:
output += "### Found Nodes:\n\n"
for r in results["results"]:
output += f"**{r['node']}** (Relevance: {r['relevance']:.2f})\n"
output += f"- Type: {r['data']['type']}\n"
for key, value in r['data'].items():
if key not in ['type', 'metadata']:
output += f"- {key.replace('_', ' ').title()}: {value}\n"
output += "\n"
else:
output += "No nodes found matching your query.\n\n"
if use_quantum and "optimization" in results:
output += "### Quantum Optimization\n\n"
output += f"- Rate: {results['optimization']['rate']}\n"
output += f"- Distortion: {results['optimization']['distortion']}\n"
output += f"- Method: {results['optimization']['method']}\n\n"
# JSON output
json_output = json.dumps(results, indent=2)
return output, json_output
def browse_graph():
"""Browse all nodes in the graph"""
output = "# Knowledge Graph Nodes\n\n"
for node_name, node_data in SAMPLE_NODES.items():
output += f"## {node_name}\n\n"
output += f"**Type:** {node_data['type']}\n\n"
for key, value in node_data.items():
if key not in ['type', 'metadata']:
output += f"- **{key.replace('_', ' ').title()}:** {value}\n"
if 'metadata' in node_data:
output += f"\n**Metadata:**\n"
for k, v in node_data['metadata'].items():
output += f"- {k.replace('_', ' ').title()}: {v}\n"
output += "\n---\n\n"
output += "# Knowledge Graph Edges\n\n"
for edge in SAMPLE_EDGES:
output += f"- **{edge['from']}** → {edge['relationship']} → **{edge['to']}** "
output += f"(Confidence: {edge['confidence']})\n"
return output
def show_architecture():
"""Show system architecture"""
arch = """# SARS-CoV-2 Knowledge Graph Architecture
## System Components
### Stage 1: Biomedical Graph (limit-bio-sars)
- **Node Types:** Virus, Protein, Receptor, Variant, Therapy
- **Features:** Metadata tracking, Provenance, Confidence scoring
- **Operations:** O(1) node addition, O(E) edge queries
### Stage 2: Multi-Intent Harness (limit-benchmark)
- **Intent Types:** Factual, Causal, Comparative, Predictive, Exploratory
- **Performance:** ~1000 queries/second
- **Metrics:** Graph and query performance tracking
### Stage 3: Quantum-Inspired Retrieval (limit-quantum)
- **Algorithms:** Rate-Distortion optimization, Quantum sampling
- **Features:** Quantum annealing, Quantum walk simulation
- **Benefits:** Optimal retrieval strategies
### Stage 4: Open-Source Hub (limit-hub)
- **API:** REST endpoints with Axum framework
- **Governance:** Validation rules, Quality control
- **Latency:** <50ms per request
### Stage 5: Testing
- **Coverage:** Unit, Integration, Performance tests
- **Validation:** Automated quality checks
## Technical Stack
- **Language:** Rust
- **Dependencies:** serde, axum, tokio, uuid, rand
- **Performance:** ~100MB memory for 10K nodes
- **License:** MIT
## Data Flow
## Source Code
Full implementation available at:
https://github.com/NurcholishAdam/SARS-CoV-2-KG
"""
return arch
# Create Gradio interface
with gr.Blocks(theme=gr.themes.Soft(), title="SARS-CoV-2 Knowledge Graph") as demo:
gr.Markdown("""
# 🦠 SARS-CoV-2 Extended Knowledge Graph
An interactive biomedical knowledge graph with quantum-inspired retrieval capabilities.
Explore viral entities, proteins, variants, and therapies with multi-intent querying.
**Version:** 2.4.1 | **Source:** [GitHub](https://github.com/NurcholishAdam/SARS-CoV-2-KG)
""")
with gr.Tabs():
# Query Tab
with gr.Tab("🔍 Query"):
gr.Markdown("### Search the Knowledge Graph")
with gr.Row():
with gr.Column(scale=2):
query_input = gr.Textbox(
label="Enter your query",
placeholder="e.g., What is the spike protein? How does Omicron differ?",
lines=2
)
with gr.Row():
intent_dropdown = gr.Dropdown(
choices=INTENT_TYPES,
value="Factual",
label="Query Intent Type"
)
quantum_checkbox = gr.Checkbox(
label="Enable Quantum Optimization ⚡",
value=False
)
submit_btn = gr.Button("Search", variant="primary")
with gr.Column(scale=2):
output_md = gr.Markdown(label="Results")
with gr.Accordion("View JSON Response", open=False):
json_output = gr.Code(language="json", label="JSON Output")
submit_btn.click(
fn=query_interface,
inputs=[query_input, intent_dropdown, quantum_checkbox],
outputs=[output_md, json_output]
)
gr.Examples(
examples=[
["What is the spike protein?", "Factual", False],
["How does the spike protein bind to ACE2?", "Causal", True],
["Compare Omicron to the original strain", "Comparative", True],
["What therapies target the spike protein?", "Exploratory", False],
],
inputs=[query_input, intent_dropdown, quantum_checkbox]
)
# Browse Tab
with gr.Tab("📊 Browse Graph"):
gr.Markdown("### Explore All Nodes and Edges")
browse_btn = gr.Button("Load Knowledge Graph", variant="primary")
browse_output = gr.Markdown()
browse_btn.click(fn=browse_graph, outputs=browse_output)
# Architecture Tab
with gr.Tab("🏗️ Architecture"):
gr.Markdown("### System Architecture Overview")
arch_btn = gr.Button("Show Architecture", variant="primary")
arch_output = gr.Markdown()
arch_btn.click(fn=show_architecture, outputs=arch_output)
# About Tab
with gr.Tab("ℹ️ About"):
gr.Markdown("""
## About This Project
This is a demonstration interface for the SARS-CoV-2 Extended Knowledge Graph,
a comprehensive biomedical information system with quantum-inspired retrieval.
### Key Features
- **Enriched Biomedical Graph:** Comprehensive node types with metadata
- **Multi-Intent Queries:** Support for 5 query types
- **Quantum-Inspired Retrieval:** Advanced optimization algorithms
- **Open-Source:** MIT licensed, community contributions welcome
### Intent Types
- **Factual:** Direct information retrieval
- **Causal:** Understanding relationships and mechanisms
- **Comparative:** Comparing entities or concepts
- **Predictive:** Forward-looking analysis
- **Exploratory:** Open-ended discovery
### Performance
- Query Throughput: ~1000 queries/second
- API Latency: <50ms
- Memory: ~100MB for 10K nodes
### Links
- **GitHub:** [NurcholishAdam/SARS-CoV-2-KG](https://github.com/NurcholishAdam/SARS-CoV-2-KG)
- **License:** MIT
- **Version:** 2.4.1
### Citation
If you use this work, please cite:
@software{sarscov2_kg_2024, title={SARS-CoV-2 Extended Knowledge Graph},author={NurcholishAdam},year={2024},url={https://github.com/NurcholishAdam/SARS-CoV-2-KG}
}
""")
# Launch the app
if __name__ == "__main__":
demo.launch()