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