Spaces:
Sleeping
Sleeping
| """ | |
| Gradio Demo for Multilingual Pain Assessment System | |
| Powered by BioLORD-2023-M medical embeddings | |
| """ | |
| import gradio as gr | |
| import os | |
| import sys | |
| # Add Backend to path | |
| sys.path.append("./Backend") | |
| # Import backend directly (no HTTP API needed for HF Space) | |
| from services.neuro_symbolic_service import analyze_pain_neuro_symbolic | |
| def analyze_pain(text, language): | |
| """Analyze pain description using the neuro-symbolic pipeline.""" | |
| try: | |
| if not text or not text.strip(): | |
| return "⚠️ Please enter a pain description." | |
| # Call backend function directly | |
| result = analyze_pain_neuro_symbolic(text) | |
| if result.get("status") == "success": | |
| return result.get("report", "No report generated") | |
| else: | |
| return f"❌ Error: {result.get('message', 'Unknown error')}" | |
| except Exception as e: | |
| return f"❌ Error during analysis:\n\n{str(e)}\n\n**Troubleshooting:**\n- Check that all dependencies are installed\n- Verify OpenAI API key is set in Space secrets" | |
| # Example pain descriptions in different languages | |
| examples = [ | |
| ["腰部和腿部最近一周特别难受。感觉像有成千上万只蚂蚁在皮肤下面爬来爬去,停不下来;有时突然像被针戳了一下,会猛地跳起来。", "Chinese"], | |
| ["허리와 다리가 최근 일주일 동안 특히 불편합니다. 피부 아래 수천 마리의 개미가 기어다니는 느낌이 들고, 때때로 갑자기 바늘에 찔린 것처럼 아파요.", "Korean"], | |
| ["La espalda y las piernas han sido especialmente difíciles de soportar esta última semana. Se siente como si hubiera miles de hormigas arrastrándose bajo la piel, sin poder detenerse.", "Spanish"], | |
| ["My lower back and legs have been especially hard to bear this past week. It feels like thousands of ants crawling under the skin, unable to stop.", "English"] | |
| ] | |
| # Build Gradio interface | |
| with gr.Blocks(title="Pain Assessment System") as demo: | |
| gr.Markdown(""" | |
| # 🏥 Multilingual Pain Assessment System | |
| Powered by **BioLORD-2023-M** medical embeddings and **GPT-5.2** | |
| ### Supported Languages: | |
| - 🇨🇳 Chinese (中文) | |
| - 🇰🇷 Korean (한국어) | |
| - 🇪🇸 Spanish (Español) | |
| - 🇻🇳 Hmong | |
| - 🇺🇸 English | |
| ### How it works: | |
| 1. Enter patient's pain description in any supported language | |
| 2. BioLORD analyzes medical semantics | |
| 3. GPT-5.2 generates comprehensive clinical report | |
| """) | |
| with gr.Row(): | |
| with gr.Column(): | |
| text_input = gr.Textbox( | |
| label="Patient's Pain Description", | |
| placeholder="Enter pain description in any language...", | |
| lines=8 | |
| ) | |
| language_input = gr.Dropdown( | |
| choices=["Chinese", "Korean", "Spanish", "Hmong", "English"], | |
| label="Language (optional - auto-detected)", | |
| value="Chinese" | |
| ) | |
| submit_btn = gr.Button("Analyze Pain", variant="primary") | |
| with gr.Column(): | |
| output = gr.Markdown( | |
| label="Clinical Report", | |
| value="*Report will appear here...*" | |
| ) | |
| # Examples | |
| gr.Examples( | |
| examples=examples, | |
| inputs=[text_input, language_input], | |
| outputs=output, | |
| fn=analyze_pain, | |
| cache_examples=False | |
| ) | |
| # Event handlers | |
| submit_btn.click( | |
| fn=analyze_pain, | |
| inputs=[text_input, language_input], | |
| outputs=output | |
| ) | |
| gr.Markdown(""" | |
| --- | |
| ### 🔬 Model Information | |
| - **Embeddings**: BioLORD-2023-M (SOTA on MedSTS medical semantic similarity) | |
| - **Report Generation**: GPT-5.2 | |
| - **Dictionary**: 362 multilingual pain terms | |
| - **Accuracy**: 85-92% on medical synonym matching | |
| ### ℹ️ About | |
| This system maps patient's pain expressions to standardized medical terminology using: | |
| - **Semantic Distance Analysis**: BioLORD understands medical concepts beyond literal text | |
| - **Knowledge Graph Integration**: Aligned with medical ontologies (UMLS/AGCT) | |
| - **Cultural Sensitivity**: Preserves metaphors and cultural expressions | |
| **Privacy**: BioLORD embeddings run locally. GPT-5.2 API used for report generation only. | |
| """) | |
| # Launch | |
| if __name__ == "__main__": | |
| demo.launch() # HF Space handles server configuration automatically | |