File size: 5,355 Bytes
5b3c8c9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import streamlit as st
import pandas as pd
from groq import Groq
import os

# --------------------------
# 1. Dataset Setup (Updated with Urdu)
# --------------------------
data = {
    "symptoms_en": ["headache", "fever", "insomnia", "anxiety", "cough"],
    "symptoms_es": ["dolor de cabeza", "fiebre", "insomnio", "ansiedad", "tos"],
    "symptoms_hi": ["सिरदर्द", "बुखार", "अनिद्रा", "चिंता", "खांसी"],
    "symptoms_ur": ["سر درد", "بخار", "بے خوابی", "اضطراب", "کھانسی"],
    "remedy": ["Belladonna", "Aconitum", "Coffea", "Argentum nitricum", "Drosera"],
    "potency": ["30C"]*5,
    "usage": ["3 times daily"]*5
}

df = pd.DataFrame(data)

# --------------------------
# 2. Groq Setup (Multilingual Processing)
# --------------------------
client = Groq(api_key=os.environ.get("GROQ_API_KEY"))

def analyze_symptoms(text, language):
    """Use Groq's Llama 3 for symptom analysis"""
    lang_map = {
        'en': 'English',
        'es': 'Spanish', 
        'hi': 'Hindi',
        'ur': 'Urdu'
    }
    
    prompt = f"""Task: Extract medical symptoms from this {lang_map[language]} text.
    Text: {text}
    Output format: Comma-separated symptoms in {lang_map[language]}.
    Example: headache, muscle pain, dry cough"""
    
    try:
        chat_completion = client.chat.completions.create(
            messages=[{"role": "user", "content": prompt}],
            model="llama3-70b-8192",
            temperature=0.1
        )
        return [s.strip() for s in chat_completion.choices[0].message.content.split(",")]
    except Exception as e:
        st.error(f"Error in Groq API: {str(e)}")
        return []

# --------------------------
# 3. Streamlit UI (Multilingual Interface)
# --------------------------
st.set_page_config(page_title="Homeo Doctor", page_icon="🌿")

# Language selection
language = st.sidebar.selectbox("भाषा चुनें/Select Language", 
                              ['English', 'Español', 'हिन्दी', 'اردو'],
                              format_func=lambda x: x)

lang_code = {
    'English': 'en',
    'Español': 'es', 
    'हिन्दी': 'hi',
    'اردو': 'ur'
}[language]

# Header with dynamic language
headers = {
    'en': "🌿 Homeopathic Doctor",
    'es': "🌿 Doctor Homeopático", 
    'hi': "🌿 होम्योपैथिक डॉक्टर",
    'ur': "🌿 ہومیوپیتھک ڈاکٹر"
}
st.header(headers[lang_code])

# MCQ Symptoms
symptom_col = f"symptoms_{lang_code}"
symptoms = df[symptom_col].tolist()
selected = st.multiselect(
    label={
        'en': "Select your symptoms:",
        'es': "Seleccione sus síntomas:",
        'hi': "अपने लक्षण चुनें:",
        'ur': "اپنی علامات منتخب کریں:"
    }[lang_code],
    options=symptoms
)

# Chat Input
chat_input = st.text_input(
    label={
        'en': "Describe other symptoms:",
        'es': "Describa otros síntomas:",
        'hi': "अन्य लक्षण बताएं:",
        'ur': "دیگر علامات بیان کریں:"
    }[lang_code],
    placeholder={
        'en': "Type symptoms not listed above...",
        'ur': "اوپر درج نہ کی گئی علامات ٹائپ کریں..."
    }[lang_code] if lang_code == 'ur' else ""
)

# Diagnosis Logic
if st.button({
    'en': "Get Recommendation", 
    'es': "Obtener Recomendación",
    'hi': "सिफारिश प्राप्त करें",
    'ur': "تجویز حاصل کریں"
}[lang_code]):
    # Process chat input
    if chat_input:
        analyzed_symptoms = analyze_symptoms(chat_input, lang_code)
        selected += [s for s in analyzed_symptoms if s in symptoms]
    
    # Find best remedy
    if not selected:
        st.warning({
            'en': "Please select or describe symptoms!",
            'ur': "براہ کرم علامات منتخب کریں یا بیان کریں!"
        }[lang_code] if lang_code == 'ur' else "")
    else:
        matches = df[df[symptom_col].isin(selected)]
        if not matches.empty:
            remedy = matches.iloc[0]
            st.success(f"""
                **{remedy['remedy']}**  
                {{
                    'en': "Potency: {remedy['potency']}",
                    'ur': "طاقت: {remedy['potency']}"
                }}[lang_code]  
                {{
                    'en': "Usage: {remedy['usage']}",
                    'ur': "استعمال: {remedy['usage']}"
                }}[lang_code]
            """)
        else:
            st.error({
                'en': "No matching remedy found. Consult a professional.",
                'ur': "کوئی مماثل دوا نہیں ملی۔ پیشہ ور سے مشورہ کریں۔"
            }[lang_code])

# Disclaimer
st.markdown("""
---
**⚠️ Notice/نوٹس:**  
This is not medical advice. Always consult a qualified homeopath.  
यह चिकित्सीय सलाह नहीं है। हमेशा योग्य होम्योपैथ से सलाह लें۔  
Esto no es un consejo médico. Siempre consulte a un homeópata calificado.  
یہ طبی مشورہ نہیں ہے۔ ہمیشہ کوالیفائڈ ہومیوپیتھک ڈاکٹر سے مشورہ کریں۔
""")