Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -14,9 +14,9 @@ reasoning_ai_model = os.getenv("REASONING_AI_MODEL")
|
|
14 |
# Configure the OpenAI client with your custom API endpoint and API key.
|
15 |
client = OpenAI(base_url=openai_base_url, api_key=openai_api_key)
|
16 |
|
17 |
-
medical_recommendations = "MEDICAL RECOMMENDATIONS:\n\n" + "Birth control options sorted by effectiveness (typical-use rates), with brief pros, cons, and side effects:\n\nHighly Effective Methods (failure rate <1%)\n-Sterilization\n- Prevention rate: >99%\n- Pros: Permanent and low maintenance\n- Cons: Irreversible; requires surgery\n-
|
18 |
|
19 |
-
SYSTEM_PROMPT = "You are a medical professional. Provide clear, detailed empathetic, and accurate information about healthcare topics. **You must always use markdown and bullet points.** Do not state to consult with a healthcare provider, as you are a healthcare provider. Only refer patients to an outside provider for physical resources, such as prescriptions, tests, bloodwork, x-rays, ultrasounds, CT scans, MRIs, and other in-person needs, since you provide services via telehealth, and do not have a license to call in orders for such requests.\n\n"
|
20 |
|
21 |
# UI text and styling
|
22 |
DESCRIPTION = '''
|
@@ -68,11 +68,10 @@ max_phrase_length = max(len(phrase) for phrase, _ in replacements)
|
|
68 |
MIN_FLUSH_SIZE = max(50, max_phrase_length * 2)
|
69 |
|
70 |
def think(request):
|
71 |
-
|
72 |
url = "https://openrouter.ai/api/v1/chat/completions"
|
73 |
headers = {
|
74 |
-
|
75 |
-
|
76 |
}
|
77 |
|
78 |
def do_req(model, content, include_reasoning=False, reasoning=""):
|
@@ -89,7 +88,6 @@ def think(request):
|
|
89 |
|
90 |
return requests.post(url, headers=headers, data=json.dumps(payload))
|
91 |
|
92 |
-
|
93 |
# R1 will reliably return "done" for the content portion of the response
|
94 |
reasoning_response = do_req(reasoning_ai_model, request, True)
|
95 |
reasoning = reasoning_response.json()['choices'][0]['message']['reasoning']
|
@@ -250,8 +248,8 @@ def import_chat(file):
|
|
250 |
i += 2
|
251 |
else:
|
252 |
i += 1
|
253 |
-
|
254 |
-
return new_history
|
255 |
except Exception as e:
|
256 |
raise gr.Error(f"Error importing chat: {str(e)}")
|
257 |
|
@@ -291,9 +289,9 @@ with gr.Blocks(css=css) as demo:
|
|
291 |
|
292 |
# Connect buttons to functions
|
293 |
export_btn.click(fn=export_chat, inputs=chatbot, outputs=gr.File(label="Download Chat History"))
|
294 |
-
import_btn.upload(fn=import_chat, inputs=[import_btn], outputs=chatbot)
|
295 |
|
296 |
gr.Markdown(LICENSE)
|
297 |
|
298 |
if __name__ == "__main__":
|
299 |
-
demo.launch(share=True)
|
|
|
14 |
# Configure the OpenAI client with your custom API endpoint and API key.
|
15 |
client = OpenAI(base_url=openai_base_url, api_key=openai_api_key)
|
16 |
|
17 |
+
medical_recommendations = "MEDICAL RECOMMENDATIONS:\n\n" + "Birth control options sorted by effectiveness (typical-use rates), with brief pros, cons, and side effects:\n\nHighly Effective Methods (failure rate <1%)\n-Sterilization\n- Prevention rate: >99%\n- Pros: Permanent and low maintenance\n- Cons: Irreversible; requires surgery\n- side effects: Surgical risks (infection, pain)\n\n-Intrauterine Devices (IUDs) – Hormonal and Copper\n- Prevention rate: >99%\n- Pros: Long-term (3–10 years), low maintenance, reversible\n- Cons: Requires provider insertion; possible initial discomfort\n- Side effects:\n - Hormonal IUD: Initial irregular bleeding\n - Copper IUD: Heavier periods, cramping; rare risk of expulsion or uterine perforation\n\n-Implant (e.g., Nexplanon)\n- Prevention rate: >99%\n- Pros: Lasts up to 3 years, low maintenance, reversible\n- Cons: Requires minor procedure for insertion and removal; may cause irregular bleeding\n- Side effects: Mood changes, headaches, weight gain, pain at insertion site\n\nModerately Effective Methods (failure rate ~1–9%)\n-Injectable (e.g., Depo-Provera)\n- Prevention rate: ~96%\n- Pros: Injection every 3 months; high efficacy when on schedule\n- Cons: Can cause irregular bleeding; fertility may be delayed after stopping\n- Side effects: Weight gain, mood swings, potential bone density loss, injection site reactions\n\n-Oral Contraceptive Pills (combined or progestin-only)\n- Prevention rate: ~91%\n- Pros: Regulates cycles, may reduce cramps and help with acne; quick return to fertility\n- Cons: Must be taken daily; effectiveness depends on correct use\n- Side effects: Risk of blood clots (especially for smokers or women over 35), nausea, breast tenderness, mood changes, possible increased blood pressure\n- Prescriptions: Yaz, Yasmin, Ortho TriCyclen, Alesse, Loestrin\n- OTC: OPill $20/month, Taken Daily\n\n-Transdermal Patch (e.g., Ortho Evra)\n- Prevention rate: ~91%\n- Pros: Weekly application; steady hormone delivery\n- Cons: May cause skin irritation; visible on skin; less effective if detached\n- Side effects: Similar to pills (blood clots, nausea, breast tenderness, headaches)\n\n-Vaginal Ring (e.g., NuvaRing)\n- Prevention rate: ~91%\n- Pros: Monthly insertion; lower systemic hormone levels\n- Cons: Requires comfort with insertion and removal; possible vaginal discomfort\n- Side effects: Risk of blood clots, mood changes, headaches, vaginal irritation\n\nLess Effective Methods (failure rate 10% or higher)\n-Barrier Methods\n- Male Condoms\n - Prevention rate: ~87%\n - Pros: Also protect against STIs; non-hormonal; widely available\n - Cons: Effectiveness depends on correct use; may break or slip\n - Side effects: Possible latex allergy\n- Female Condoms\n - Prevention rate: ~79%\n - Pros: Offer STI protection; female-controlled\n - Cons: More expensive; less available; may be harder to use\n - Side effects: Possible irritation or allergic reaction\n- Diaphragms and Cervical Caps\n - Prevention rate: ~83–88%\n - Pros: Reusable; non-hormonal\n - Cons: Must be used with spermicide; requires proper fitting and timing\n - Side effects: Potential irritation, allergic reactions, increased risk of UTIs\n\n-Spermicides (used alone)\n- Prevention rate: ~79%\n- Pros: Over-the-counter; can be combined with other methods\n- Cons: Lower effectiveness when used alone; requires application every time\n- Side effects: May cause irritation or allergic reactions\n\n-Fertility Awareness Methods\n- Prevention rate: ~76% (varies widely)\n- Pros: No hormones or devices; increases understanding of your cycle\n- Cons: Requires daily tracking and strict adherence; higher risk of unintended pregnancy if not followed precisely\n- Side effects: None medically\n\n-Withdrawal (Coitus Interruptus)\n- Prevention rate: ~78%\n- Pros: No cost; non-hormonal\n- Cons: Relies heavily on timing; risk from pre-ejaculate\n- Side effects: No direct side effects; may cause stress if it fails\n\nTreatments for Managing HIV:\n- **Integrase Strand Transfer Inhibitor (INSTI)–Based Regimens:** \n - Bictegravir/emtricitabine/tenofovir alafenamide (Biktarvy) \n - Dolutegravir/lamivudine/abacavir (Triumeq)\n\n- **Non-Nucleoside Reverse Transcriptase Inhibitor (NNRTI)–Based Regimen:** \n - Efavirenz/emtricitabine/tenofovir disoproxil fumarate (Atripla)\n\n- **Protease Inhibitor (PI)–Based Regimen:** \n - Darunavir (boosted with ritonavir or cobicistat) plus two NRTIs"
|
18 |
|
19 |
+
SYSTEM_PROMPT = "You are a medical professional. Provide clear, detailed empathetic, and accurate information about healthcare topics. **You must always use markdown and bullet points.** Do not state to consult with a healthcare provider, as you are a healthcare provider. Only refer patients to an outside provider for physical resources, such as prescriptions, tests, bloodwork, x-rays, ultrasounds, CT scans, MRIs, and other in-person needs, since you provide services via telehealth, and do not have a license to call in orders for such requests.\n\n" # + medical_recommendations
|
20 |
|
21 |
# UI text and styling
|
22 |
DESCRIPTION = '''
|
|
|
68 |
MIN_FLUSH_SIZE = max(50, max_phrase_length * 2)
|
69 |
|
70 |
def think(request):
|
|
|
71 |
url = "https://openrouter.ai/api/v1/chat/completions"
|
72 |
headers = {
|
73 |
+
"Authorization": f"Bearer {openai_api_key}",
|
74 |
+
"Content-Type": "application/json"
|
75 |
}
|
76 |
|
77 |
def do_req(model, content, include_reasoning=False, reasoning=""):
|
|
|
88 |
|
89 |
return requests.post(url, headers=headers, data=json.dumps(payload))
|
90 |
|
|
|
91 |
# R1 will reliably return "done" for the content portion of the response
|
92 |
reasoning_response = do_req(reasoning_ai_model, request, True)
|
93 |
reasoning = reasoning_response.json()['choices'][0]['message']['reasoning']
|
|
|
248 |
i += 2
|
249 |
else:
|
250 |
i += 1
|
251 |
+
|
252 |
+
return gr.update(value=new_history) # Update the chatbot state
|
253 |
except Exception as e:
|
254 |
raise gr.Error(f"Error importing chat: {str(e)}")
|
255 |
|
|
|
289 |
|
290 |
# Connect buttons to functions
|
291 |
export_btn.click(fn=export_chat, inputs=chatbot, outputs=gr.File(label="Download Chat History"))
|
292 |
+
import_btn.upload(fn=import_chat, inputs=[import_btn], outputs=chatbot) # Fixed connection
|
293 |
|
294 |
gr.Markdown(LICENSE)
|
295 |
|
296 |
if __name__ == "__main__":
|
297 |
+
demo.launch(share=True)
|