Spaces:
Sleeping
Sleeping
| from mistralai import Mistral | |
| import gradio as gr | |
| import os | |
| from datetime import datetime | |
| api_key = os.environ["MISTRAL_API_KEY"] | |
| model = "mistral-large-latest" | |
| client = Mistral(api_key=api_key) | |
| def interaction_check(prompt): | |
| """ | |
| Check for drug interactions and provide pharmacist guidance | |
| """ | |
| try: | |
| # Input validation | |
| if not prompt or prompt.strip() == "": | |
| return "β οΈ Please enter your medications or questions about drug interactions." | |
| if len(prompt.strip()) < 5: | |
| return "β οΈ Please provide more details about your medications for a proper assessment." | |
| # Enhanced system prompt with better instructions | |
| system_prompt = f"""You are a knowledgeable pharmacist assistant specializing in drug interaction detection and medication safety. | |
| Your responsibilities: | |
| 1. Analyze potential drug interactions from the user's medication list | |
| 2. Identify contraindications and warnings | |
| 3. Provide clear, actionable advice | |
| 4. Always recommend consulting with a licensed pharmacist or healthcare provider | |
| 5. Use appropriate medical terminology while remaining accessible | |
| 6. Structure your response clearly with sections if multiple interactions are found | |
| Important guidelines: | |
| - Always emphasize that this is preliminary guidance only | |
| - Recommend professional consultation for all medication concerns | |
| - Be specific about interaction severity (minor, moderate, major) | |
| - Include timing recommendations when relevant | |
| - Mention food interactions if applicable | |
| - Note any special monitoring requirements | |
| Format your response with clear sections and use emojis for visual clarity where appropriate.""" | |
| chat_response = client.chat.complete( | |
| model=model, | |
| messages=[ | |
| { | |
| "role": "system", | |
| "content": system_prompt | |
| }, | |
| { | |
| "role": "user", | |
| "content": f"Please analyze the following for drug interactions: {prompt}", | |
| }, | |
| ], | |
| temperature=0.1, # Lower temperature for more consistent medical advice | |
| max_tokens=1000 # Ensure comprehensive responses | |
| ) | |
| response = chat_response.choices[0].message.content | |
| # Add disclaimer footer | |
| disclaimer = "\n\n---\nβ οΈ **IMPORTANT DISCLAIMER**: This information is for educational purposes only and should not replace professional medical advice. Always consult with a licensed pharmacist or healthcare provider before making any changes to your medications." | |
| return response + disclaimer | |
| except Exception as e: | |
| error_msg = f"β **Error occurred**: {str(e)}\n\nPlease try again or contact support if the issue persists." | |
| return error_msg | |
| def clear_inputs(): | |
| """Clear the input field""" | |
| return "" | |
| def get_example_interactions(): | |
| """Return example drug interaction queries""" | |
| examples = [ | |
| "I'm taking warfarin and my doctor prescribed ibuprofen for pain. Are there any interactions?", | |
| "Can I take omeprazole with clopidogrel? I have both prescribed.", | |
| "I'm on metformin for diabetes and want to know if it's safe with alcohol", | |
| "Taking lisinopril and potassium supplements - any concerns?", | |
| "I have simvastatin and clarithromycin prescribed together" | |
| ] | |
| return examples | |
| # Custom CSS for better styling | |
| custom_css = """ | |
| #warning { | |
| background-color: #667eea; | |
| border: 1px solid #ffeaa7; | |
| border-radius: 8px; | |
| padding: 16px; | |
| margin: 10px 0; | |
| } | |
| #main-container { | |
| max-width: 900px; | |
| margin: 0 auto; | |
| } | |
| .gradio-container { | |
| font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; | |
| } | |
| #submit-btn { | |
| background: linear-gradient(45deg, #667eea 0%, #764ba2 100%); | |
| border: none; | |
| color: white; | |
| font-weight: bold; | |
| } | |
| #clear-btn { | |
| background-color: #6c757d; | |
| border: none; | |
| color: white; | |
| } | |
| """ | |
| # Create the Gradio interface | |
| with gr.Blocks(css=custom_css, title="π PharmaSafe - Drug Interaction Checker") as demo: | |
| with gr.Column(elem_id="main-container"): | |
| # Header | |
| gr.Markdown( | |
| """ | |
| # π π PharmaSafe - Drug Interaction Checker | |
| Get preliminary guidance on potential drug interactions and medication safety concerns. | |
| This tool helps identify possible interactions between medications. | |
| """, | |
| elem_id="header" | |
| ) | |
| # Warning notice | |
| gr.Markdown( | |
| """ | |
| β οΈ **MEDICAL DISCLAIMER**: This tool provides educational information only. | |
| Always consult with a licensed pharmacist, doctor, or healthcare provider | |
| before making any decisions about your medications. | |
| """, | |
| elem_id="warning" | |
| ) | |
| with gr.Row(): | |
| with gr.Column(scale=2): | |
| # Input section | |
| gr.Markdown("### Enter Your Medications or Questions") | |
| medication_input = gr.Textbox( | |
| label="Medications & Questions", | |
| placeholder="Example: I'm taking warfarin and ibuprofen. Are there any interactions I should know about?", | |
| lines=4, | |
| max_lines=8 | |
| ) | |
| with gr.Row(): | |
| submit_btn = gr.Button("π Check Interactions", variant="primary", elem_id="submit-btn") | |
| clear_btn = gr.Button("ποΈ Clear", elem_id="clear-btn") | |
| with gr.Column(scale=1): | |
| # Examples section | |
| gr.Markdown("### Example Questions") | |
| example_queries = get_example_interactions() | |
| for i, example in enumerate(example_queries[:3]): # Show first 3 examples | |
| gr.Markdown(f"**Example {i+1}:** {example}") | |
| # Output section | |
| gr.Markdown("### π Analysis Results") | |
| output_display = gr.Markdown( | |
| value="Enter your medications above and click 'Check Interactions' to get started.", | |
| elem_id="output" | |
| ) | |
| # Usage tips | |
| with gr.Accordion("π‘ Usage Tips", open=False): | |
| gr.Markdown( | |
| """ | |
| **For best results:** | |
| - List all medications you're taking (prescription and over-the-counter) | |
| - Include dosages if known | |
| - Mention any supplements or herbal products | |
| - Be specific about your concerns | |
| - Include timing of when you take each medication | |
| **This tool can help with:** | |
| - Drug-drug interactions | |
| - Food-drug interactions | |
| - Timing recommendations | |
| - General medication safety concerns | |
| **Remember:** Always verify with a healthcare professional! | |
| """ | |
| ) | |
| # Event handlers | |
| submit_btn.click( | |
| fn=interaction_check, | |
| inputs=medication_input, | |
| outputs=output_display | |
| ) | |
| clear_btn.click( | |
| fn=clear_inputs, | |
| outputs=medication_input | |
| ) | |
| medication_input.submit( | |
| fn=interaction_check, | |
| inputs=medication_input, | |
| outputs=output_display | |
| ) | |
| # Add footer with timestamp | |
| footer_text = f"Last updated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}" | |
| if __name__ == "__main__": | |
| demo.launch() |