Spaces:
Sleeping
Sleeping
| from flask import Flask, request, jsonify | |
| from firestore_client import get_firestore_client | |
| from openai_client import ask_gpt | |
| from role_access import get_allowed_collections | |
| from flask_cors import CORS | |
| app = Flask(__name__) | |
| CORS(app) # Allow access from your React app | |
| db = get_firestore_client() | |
| def chat(): | |
| data = request.json | |
| role = data.get('role') | |
| user_input = data.get('message') | |
| if not role or not user_input: | |
| return jsonify({"error": "Missing role or message"}), 400 | |
| # Optional: handle 'show [collection]' request directly | |
| if user_input.lower().startswith("show "): | |
| col = user_input.lower().replace("show ", "").strip() | |
| allowed = get_allowed_collections(role) | |
| if col in allowed: | |
| docs = db.collection(col).limit(5).stream() | |
| results = [doc.to_dict() for doc in docs] | |
| return jsonify({"reply": f"Showing data from {col}", "data": results}) | |
| else: | |
| return jsonify({"reply": f"Access to {col} is denied for role {role}."}) | |
| # Otherwise, use GPT to answer | |
| system_msg = { | |
| "role": "system", | |
| "content": f"You are a smart assistant helping a user with role '{role}'. You can access {', '.join(get_allowed_collections(role))}" | |
| } | |
| user_msg = { | |
| "role": "user", | |
| "content": user_input | |
| } | |
| answer = ask_gpt([system_msg, user_msg]) | |
| return jsonify({"reply": answer}) | |
| if __name__ == "__main__": | |
| app.run(host="0.0.0.0", port=7860) | |