param2004's picture
Upload 17 files
690bcb6 verified
def summarize_with_gemini(api_key, doctor_answer, user_question, max_retries=2):
import requests, json, time, streamlit as st
if not api_key:
st.warning("⚠️ Google API Key missing. Showing full answer instead.")
return doctor_answer if isinstance(doctor_answer, str) else "\n\n".join(doctor_answer)
combined_answer = "\n\n---\n\n".join(doctor_answer) if isinstance(doctor_answer, list) else doctor_answer
candidate_models = ["gemini-2.0-flash", "gemini-2.5-flash", "gemini-2.0-pro"]
for model_name in candidate_models:
prompt = f"""You are a professional AI medical assistant.
Summarize the doctor's responses clearly, accurately, and concisely for the patient.
Focus only on medically relevant information that directly answers the user's question.
User's Question:
"{user_question}"
Doctor's Answer(s):
"{combined_answer}"
Instructions:
- Provide a medically correct, patient-friendly summary in simple, clear language.
- List multiple points as bullets if possible.
- If the user's question lacks personal details (e.g., gender, age, weight), generate a generalized, gender-neutral summary.
- Avoid gender-specific recommendations (e.g., consulting a gynecologist) unless the query explicitly mentions gender or related details.
- Dont forget to mention potential next steps, treatments, or lifestyle changes if doctor's answer has it mentioned.
- Always include a recommendation to consult a relevant doctor type (e.g., general practitioner, orthopedist) at the end of the summary, unless the doctor's answers already specify a consultation with a specific doctor type.
- For example, for back pain, recommend consulting an orthopedist or general practitioner unless the query or doctor's answers suggest a more specific specialist.
- If the doctor's response does not address the question, respond:
"There is no information related to your question in the doctor's answer, so I generated the best possible answer based on the information provided."""
url = f"https://generativelanguage.googleapis.com/v1beta/models/{model_name}:generateContent?key={api_key}"
payload = {"contents": [{"parts": [{"text": prompt}]}]}
headers = {"Content-Type": "application/json"}
for attempt in range(max_retries):
try:
resp = requests.post(url, headers=headers, data=json.dumps(payload), timeout=60)
resp.raise_for_status()
result = resp.json()
if "candidates" in result and result["candidates"]:
return result["candidates"][0]["content"]["parts"][0]["text"].strip()
except requests.exceptions.HTTPError as e:
if resp.status_code == 404: break
time.sleep(1)
except Exception: time.sleep(1)
st.warning("⚕️ Could not generate summary. Showing original answer.")
return combined_answer