tomwatto09's picture
Update app.py
7230f20 verified
from flask import Flask, request, jsonify, send_file
from flask_cors import CORS
from fpdf import FPDF
from docx import Document
import openai
import os
import uuid
app = Flask(__name__)
CORS(app)
client = openai.OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
@app.route("/generate", methods=["POST"])
def generate():
try:
data = request.json
subject = data.get("category", "")
citation = data.get("citationStyle", "")
case_study = data.get("caseStudy", "")
questions = data.get("questions", "")
prompt = (
f"You are an academic writing assistant for university students. "
f"Respond in Times New Roman, using university-level detail. Use the following:\n"
f"- Subject: {subject}\n"
f"- Citation Style: {citation}\n"
f"- Case Study: {case_study}\n"
f"- Questions: {questions}\n"
f"Respond with a clear, structured academic answer using {citation} citation style. "
f"Use credible university-grade sources with proper citations. "
f"Do NOT add a conclusion unless asked. Only answer the questions."
)
chat_response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}],
max_tokens=3000,
temperature=0.7
)
result = chat_response.choices[0].message.content
return jsonify({"response": result})
except Exception as e:
return jsonify({"error": str(e)}), 500
@app.route("/export/pdf", methods=["POST"])
def export_pdf():
try:
content = request.json.get("content", "")
filename = f"/tmp/{uuid.uuid4().hex}.pdf"
pdf = FPDF()
pdf.add_page()
pdf.set_auto_page_break(auto=True, margin=15)
pdf.set_font("Times", size=12)
for line in content.split("\n"):
pdf.multi_cell(0, 10, line)
pdf.output(filename)
return send_file(filename, as_attachment=True)
except Exception as e:
return jsonify({"error": str(e)}), 500
@app.route("/export/word", methods=["POST"])
def export_word():
try:
content = request.json.get("content", "")
filename = f"/tmp/{uuid.uuid4().hex}.docx"
doc = Document()
doc.styles["Normal"].font.name = "Times New Roman"
for line in content.split("\n"):
doc.add_paragraph(line)
doc.save(filename)
return send_file(filename, as_attachment=True)
except Exception as e:
return jsonify({"error": str(e)}), 500
@app.route("/")
def index():
return "✅ UniSolve backend is running. Visit via the proper frontend."
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)