Medical Symptom Checker

APP.PY

import os

import pandas as pd

from flask import Flask, render_template, request

from openai import OpenAI


app = Flask(__name__)

client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))


# Load demo dataset

conditions_df = pd.read_csv("conditions.csv")


@app.route("/", methods=["GET", "POST"])

def index():

    suggestions = None

    disclaimer = "⚠️ This tool is for educational/demo purposes only. It does not provide medical advice. Please consult a doctor for any health concerns."

    

    if request.method == "POST":

        user_symptoms = request.form.get("symptoms").lower()

        matched = conditions_df[conditions_df["symptom"].isin(user_symptoms.split(","))]


        # Aggregate suggestions from dataset

        dataset_suggestions = matched[["possible_condition", "severity"]].drop_duplicates()


        # AI-generated reasoning

        try:

            ai_prompt = f"""

            You are a medical assistant (for demo purposes only). 

            Based on the symptoms: {user_symptoms}, suggest a few possible conditions.

            Provide only educational hints, and include a note advising to consult a doctor.

            """

            response = client.chat.completions.create(

                model="gpt-4o-mini",

                messages=[{"role": "user", "content": ai_prompt}],

                temperature=0.6,

            )

            ai_output = response.choices[0].message.content

        except Exception as e:

            ai_output = f"(AI service unavailable: {e})"


        suggestions = {

            "user_symptoms": user_symptoms,

            "dataset": dataset_suggestions.to_dict(orient="records"),

            "ai_output": ai_output,

            "disclaimer": disclaimer

        }


    return render_template("index.html", suggestions=suggestions)

    

if __name__ == "__main__":

    app.run(debug=True)


index.html


<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Medical Symptom Checker (Demo)</title>

    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css">

    <style>

        body { background: #f8f9fa; }

        .container { max-width: 700px; margin-top: 50px; }

        .card { box-shadow: 0 0 10px rgba(0,0,0,0.1); }

    </style>

</head>

<body>

<div class="container">

    <h2 class="text-center mb-4">🩺 Medical Symptom Checker (Demo)</h2>

    <form method="POST" class="card p-4">

        <label for="symptoms" class="form-label">Enter your symptoms (comma-separated):</label>

        <input type="text" id="symptoms" name="symptoms" class="form-control" placeholder="e.g. fever, sore throat, headache" required>

        <button type="submit" class="btn btn-primary mt-3 w-100">Check Possible Conditions</button>

    </form>


    {% if suggestions %}

    <div class="card mt-4 p-4">

        <h5>Entered Symptoms:</h5>

        <p>{{ suggestions.user_symptoms }}</p>


        {% if suggestions.dataset %}

        <h5>Dataset-based Suggestions:</h5>

        <ul>

            {% for item in suggestions.dataset %}

            <li>{{ item.possible_condition }} — <strong>{{ item.severity }}</strong> severity</li>

            {% endfor %}

        </ul>

        {% endif %}


        <h5>AI Analysis:</h5>

        <p>{{ suggestions.ai_output }}</p>


        <div class="alert alert-warning mt-3">

            {{ suggestions.disclaimer }}

        </div>

    </div>

    {% endif %}

</div>

</body>

</html>


No comments: