Spaces:
Sleeping
Sleeping
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.") |