drdeveloper88's picture
Upload WorldDisasterLM-8B source code: FastAPI backend, training pipeline, 11-language support
495526b
Raw
History Blame Contribute Delete
13 kB
"""
WorldDisasterLM-8B — HuggingFace Space (self-contained Gradio demo)
Runs without GPU. Provides multilingual disaster guidance across 11 languages.
"""
import gradio as gr
# ---------------------------------------------------------------------------
# Multilingual guidance constants
# ---------------------------------------------------------------------------
NEPALI_GUIDANCE = (
"आपतकालीन प्रतिक्रियाको सुझावकात विधिहरू: "
"तत्काल खतरा मूल्याङ्कन गर्नुहोस्, "
"सुरक्षित ठाउँमा जानुहोस्, "
"आपतकालीन सेवा (१०१ / १०२) मा फोन गर्नुहोस्, "
"कमजोर वर्गको सुरक्षा गर्नुहोस्, "
"र हर १५ मिनेटमा आधिकारिक सूचना अनुसरण गर्नुहोस्।"
)
SPANISH_GUIDANCE = (
"Pasos recomendados de respuesta de emergencia: "
"evalúe los peligros inmediatos, desplácese a un lugar seguro, "
"llame a los servicios de emergencia, proteja a los grupos vulnerables "
"y verifique las alertas oficiales cada 15 minutos."
)
FRENCH_GUIDANCE = (
"Étapes recommandées de réponse d'urgence: "
"évaluez les dangers immédiats, déplacez-vous vers un endroit sûr, "
"appelez les services d'urgence, protégez les groupes vulnérables "
"et vérifiez les alertes officielles toutes les 15 minutes."
)
ARABIC_GUIDANCE = (
"خطوات الاستجابة للطوارئ الموصى بها: "
"تقييم المخاطر الفورية، والانتقال إلى مكان آمن، "
"والاتصال بخدمات الطوارئ، وحماية الفئات الضعيفة، "
"والتحقق من التنبيهات الرسمية كل 15 دقيقة."
)
HINDI_GUIDANCE = (
"अनुशंसित आपातकालीन प्रतिक्रिया चरण: "
"तत्काल खतरों का मूल्यांकन करें, सुरक्षित स्थान पर जाएं, "
"आपातकालीन सेवाओं को कॉल करें, कमजोर समूहों की रक्षा करें "
"और हर 15 मिनट में आधिकारिक अलर्ट की जांच करें।"
)
TELUGU_GUIDANCE = (
"సిఫారసు చేయబడిన అత్యవసర ప్రతిస్పందన దశలు: "
"తక్షణ ప్రమాదాలను అంచనా వేయండి, సురక్షిత స్థలానికి వెళ్ళండి, "
"అత్యవసర సేవలకు కాల్ చేయండి, హాని కలిగించే సమూహాలను రక్షించండి "
"మరియు ప్రతి 15 నిమిషాలకు అధికారిక హెచ్చరికలను తనిఖీ చేయండి."
)
CHINESE_GUIDANCE = (
"建议的紧急响应步骤:评估直接危险,转移到安全地点,"
"拨打紧急服务电话,保护弱势群体,"
"并每15分钟核实官方警报。"
)
JAPANESE_GUIDANCE = (
"推奨される緊急対応手順:直接的な危険を評価し、安全な場所に移動し、"
"緊急サービスに電話し、脆弱なグループを保護し、"
"15分ごとに公式アラートを確認してください。"
)
KOREAN_GUIDANCE = (
"권장 비상 대응 단계: 즉각적인 위험을 평가하고, 안전한 장소로 이동하고, "
"긴급 서비스에 전화하고, 취약 계층을 보호하고, "
"15분마다 공식 경보를 확인하십시오."
)
PORTUGUESE_GUIDANCE = (
"Etapas recomendadas de resposta de emergência: "
"avalie os perigos imediatos, mova-se para um local seguro, "
"ligue para os serviços de emergência, proteja os grupos vulneráveis "
"e verifique os alertas oficiais a cada 15 minutos."
)
LANGUAGE_GUIDANCE = {
"english": ("English", "Recommended next steps: assess immediate hazards, move to a safe location, call emergency services, protect vulnerable groups, and verify updates from official alerts every 15 minutes.", ["UNDRR preparedness guidelines", "WHO emergency response guidance"]),
"nepali": ("नेपाली", NEPALI_GUIDANCE, ["NDRRMA नेपाल विपद् व्यवस्थापन प्राधिकरण", "WHO आपतकालीन प्रतिक्रिया मार्गदर्शन", "UNDRR Sendai Framework 2015-2030"]),
"ne": ("नेपाली", NEPALI_GUIDANCE, ["NDRRMA नेपाल विपद् व्यवस्थापन प्राधिकरण", "WHO आपतकालीन प्रतिक्रिया मार्गदर्शन", "UNDRR Sendai Framework 2015-2030"]),
"नेपाली": ("नेपाली", NEPALI_GUIDANCE, ["NDRRMA नेपाल विपद् व्यवस्थापन प्राधिकरण", "WHO आपतकालीन प्रतिक्रिया मार्गदर्शन", "UNDRR Sendai Framework 2015-2030"]),
"spanish": ("Spanish", SPANISH_GUIDANCE, ["UNDRR preparedness guidelines", "WHO emergency response guidance"]),
"french": ("French", FRENCH_GUIDANCE, ["UNDRR preparedness guidelines", "WHO emergency response guidance"]),
"arabic": ("Arabic", ARABIC_GUIDANCE, ["UNDRR preparedness guidelines", "WHO emergency response guidance"]),
"hindi": ("Hindi", HINDI_GUIDANCE, ["UNDRR preparedness guidelines", "WHO emergency response guidance"]),
"telugu": ("Telugu", TELUGU_GUIDANCE, ["UNDRR preparedness guidelines", "WHO emergency response guidance"]),
"chinese": ("Chinese", CHINESE_GUIDANCE, ["UNDRR preparedness guidelines", "WHO emergency response guidance"]),
"japanese": ("Japanese", JAPANESE_GUIDANCE, ["UNDRR preparedness guidelines", "WHO emergency response guidance"]),
"korean": ("Korean", KOREAN_GUIDANCE, ["UNDRR preparedness guidelines", "WHO emergency response guidance"]),
"portuguese": ("Portuguese", PORTUGUESE_GUIDANCE,["UNDRR preparedness guidelines", "WHO emergency response guidance"]),
}
LANGUAGES = [
"English", "Nepali", "Spanish", "French", "Arabic",
"Hindi", "Telugu", "Chinese", "Japanese", "Korean", "Portuguese",
]
RISK_LEVELS = {
(0.0, 0.3): ("low", "Continue monitoring; no immediate action required."),
(0.3, 0.5): ("moderate", "Activate preparedness protocols and standby teams."),
(0.5, 0.7): ("high", "Deploy response teams and issue public advisories."),
(0.7, 0.85): ("severe", "Mobilize full emergency response and evacuation support."),
(0.85, 1.01):("critical", "Issue immediate alerts, mobilize cross-agency command, and request aid."),
}
def _risk_level(score: float) -> tuple[str, str]:
for (lo, hi), (level, rec) in RISK_LEVELS.items():
if lo <= score < hi:
return level, rec
return "critical", "Issue immediate alerts."
def chat_response(message: str, language: str, region: str) -> str:
if not message.strip():
return "Please enter an emergency query."
lang_key = language.strip().lower()
label, guidance, citations = LANGUAGE_GUIDANCE.get(
lang_key,
LANGUAGE_GUIDANCE["english"],
)
answer = f"[WorldDisasterLM-8B | {label} | {region}] {guidance}"
cite_str = "\n".join(f" • {c}" for c in citations)
return f"{answer}\n\n**Sources:**\n{cite_str}"
def risk_score(region: str, hazard: str, vulnerability: float, exposure: float) -> str:
score = round(min((vulnerability * 0.5 + exposure * 0.5) * 1.1, 1.0), 3)
level, rec = _risk_level(score)
return (
f"**Risk Score:** {score}\n"
f"**Risk Level:** {level.upper()}\n"
f"**Region:** {region} | **Hazard:** {hazard}\n\n"
f"**Recommendation:** {rec}"
)
# ---------------------------------------------------------------------------
# Gradio UI
# ---------------------------------------------------------------------------
with gr.Blocks(title="WorldDisasterLM-8B") as demo:
gr.Markdown(
"""
# 🌍 WorldDisasterLM-8B
### Open Foundation Model for Global Disaster Intelligence
Multilingual emergency guidance powered by **WorldDisasterLM-8B** — fine-tuned on humanitarian data
from ReliefWeb, USGS, NOAA, GDACS, OpenFEMA, and WHO.
> ⚠️ **For informational purposes only.** Always follow official emergency orders from local authorities.
"""
)
with gr.Tabs():
# --- Chat Tab ---
with gr.Tab("💬 Emergency Guidance"):
with gr.Row():
with gr.Column(scale=2):
query = gr.Textbox(
label="Emergency Query",
placeholder="e.g. What to do during an earthquake? / भूकम्पको बेला के गर्ने?",
lines=3,
)
with gr.Column(scale=1):
lang = gr.Dropdown(LANGUAGES, value="English", label="Language")
region_in = gr.Textbox(value="global", label="Region / Country")
chat_btn = gr.Button("Get Guidance", variant="primary")
chat_out = gr.Markdown(label="Response")
chat_btn.click(
fn=chat_response,
inputs=[query, lang, region_in],
outputs=chat_out,
)
gr.Examples(
examples=[
["What should I do immediately after an earthquake?", "English", "Nepal"],
["भूकम्पको बेला के गर्ने?", "Nepali", "Nepal"],
["¿Qué hacer durante una inundación?", "Spanish", "Colombia"],
["홍수 때 어떻게 해야 합니까?", "Korean", "South Korea"],
["台风来临时应该怎么做?", "Chinese", "China"],
["What are signs of an imminent landslide?", "English", "Philippines"],
],
inputs=[query, lang, region_in],
)
# --- Risk Score Tab ---
with gr.Tab("📊 Risk Assessment"):
gr.Markdown("Calculate composite disaster risk score for any region.")
with gr.Row():
rs_region = gr.Textbox(value="Nepal", label="Region")
rs_hazard = gr.Dropdown(
["earthquake", "flood", "cyclone", "wildfire", "drought", "tsunami", "landslide", "volcano"],
value="earthquake",
label="Hazard Type",
)
with gr.Row():
rs_vuln = gr.Slider(0, 1, value=0.7, step=0.01, label="Vulnerability Index (0–1)")
rs_exp = gr.Slider(0, 1, value=0.8, step=0.01, label="Exposure Index (0–1)")
rs_btn = gr.Button("Calculate Risk Score", variant="primary")
rs_out = gr.Markdown()
rs_btn.click(
fn=risk_score,
inputs=[rs_region, rs_hazard, rs_vuln, rs_exp],
outputs=rs_out,
)
# --- About Tab ---
with gr.Tab("ℹ️ About"):
gr.Markdown(
"""
## About WorldDisasterLM-8B
**WorldDisasterLM-8B** is an instruction-tuned language model built on Meta's Llama 3.1 8B Instruct,
domain-adapted for global disaster management and humanitarian response.
### Supported Languages
| Language | Script | ISO |
|---|---|---|
| English | Latin | en |
| Nepali | Devanagari | ne |
| Spanish | Latin | es |
| French | Latin | fr |
| Arabic | Arabic | ar |
| Hindi | Devanagari | hi |
| Telugu | Telugu | te |
| Chinese | Simplified Han | zh |
| Japanese | Kanji/Hiragana | ja |
| Korean | Hangul | ko |
| Portuguese | Latin | pt |
### Training Data Sources
- **ReliefWeb** — Humanitarian reports and disaster assessments
- **USGS** — Earthquake catalog (M≥4.0, 10-year archive)
- **NOAA** — Weather alerts and severe weather events
- **GDACS** — Global disaster alert coordination
- **OpenFEMA** — US federal disaster declarations
- **WHO** — Disease outbreak and public health alerts
### Training Method
QLoRA fine-tuning (4-bit NF4 quantization, LoRA r=16) on Llama 3.1 8B Instruct.
### Citation
```
@misc{worlddisasterlm2026,
title = {WorldDisasterLM: Open Foundation Model for Global Disaster Management},
year = {2026}
}
```
### License
This demo is released under the [Llama 3 Community License](https://llama.meta.com/llama3/license/).
"""
)
if __name__ == "__main__":
demo.launch()