File size: 4,492 Bytes
acaf471
 
 
 
 
 
 
 
 
 
 
 
c655002
 
acaf471
 
c655002
acaf471
c655002
 
acaf471
c655002
 
 
 
acaf471
 
c655002
acaf471
 
c655002
acaf471
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c655002
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
"""
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