File size: 3,008 Bytes
4241c9e
 
 
 
 
 
 
ce77f00
4241c9e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ad8e1e6
4241c9e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
from groq import Groq
from huggingface_hub import InferenceClient
from langdetect import detect
import os

# Initialize clients
hf_client = InferenceClient(token=os.environ.get("homeo_doc"))
groq_client = Groq(api_key=os.environ.get("GROQ_API_KEY"))

# Language code mapping for NLLB-200
LANG_CODE_MAP = {
    'en': 'eng_Latn',    # English
    'ur': 'urd_Arab',    # Urdu
    'ar': 'arb_Arab',    # Arabic
    'es': 'spa_Latn',    # Spanish
    'hi': 'hin_Deva',    # Hindi
    'fr': 'fra_Latn'     # French
}

def translate_text(text, target_lang='eng_Latn'):
    """Translate text using NLLB-200"""
    try:
        source_lang = detect(text)
        source_code = LANG_CODE_MAP.get(source_lang, 'eng_Latn')
        
        result = hf_client.translation(
            text=text,
            model="facebook/nllb-200-distilled-600M",
            src_lang=source_code,
            tgt_lang=target_lang
        )
        return result
    except Exception as e:
        st.error(f"Translation error: {str(e)}")
        return text

def get_homeopathic_advice(symptoms):
    """Get medical advice using Groq"""
    try:
        response = groq_client.chat.completions.create(
            model="llama3-70b-8192",
            messages=[{
                "role": "user",
                "content": f"Act as homeopathic expert. Suggest remedies for: {symptoms}"
            }],
            temperature=0.3
        )
        return response.choices[0].message.content
    except Exception as e:
        return f"Error: {str(e)}"

# Streamlit UI
st.set_page_config(page_title="Homeo Advisor", page_icon="🌿")
st.title("🌍 Multilingual Homeopathic Advisor")

# Chat interface
if "messages" not in st.session_state:
    st.session_state.messages = []

for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

if prompt := st.chat_input("Describe symptoms in any language"):
    # User input
    st.session_state.messages.append({"role": "user", "content": prompt})
    
    # Process input
    with st.spinner("Analyzing..."):
        # Translate to English
        english_input = translate_text(prompt, 'eng_Latn')
        
        # Get medical advice
        english_advice = get_homeopathic_advice(english_input)
        
        # Translate back to original language
        source_lang = detect(prompt)
        translated_advice = translate_text(english_advice, LANG_CODE_MAP.get(source_lang, 'eng_Latn'))
        
        # Format response
        final_response = f"""
        **English Recommendation:**  
        {english_advice}

        **Translated Recommendation ({source_lang.upper()}):**  
        {translated_advice}
        """

    # Display response
    with st.chat_message("assistant"):
        st.markdown(final_response)
    st.session_state.messages.append({"role": "assistant", "content": final_response})

# Disclaimer
st.caption("⚠️ This is not medical advice. Consult a professional.")