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:
Post a Comment