Spaces:
Sleeping
Sleeping
from fastapi import FastAPI | |
from fastapi.responses import JSONResponse | |
import firebase_admin | |
from firebase_admin import credentials, firestore | |
from transformers import pipeline | |
from pydantic import BaseModel | |
import os | |
from huggingface_hub import login | |
# Load Firebase | |
cred = credentials.Certificate("firebase_config.json") | |
firebase_admin.initialize_app(cred) | |
db = firestore.client() | |
# Đăng nhập vào Hugging Face (nếu cần) | |
HF_TOKEN = os.getenv("HF_TOKEN") | |
if HF_TOKEN: | |
login(HF_TOKEN) | |
# Load AI Model | |
ai_model = pipeline("text-generation", model="mistralai/Mistral-7B-Instruct-v0.1") | |
app = FastAPI() | |
# Request Models | |
class UpdateBiosRequest(BaseModel): | |
user_id: str | |
bios: str | |
class FocusHistoryRequest(BaseModel): | |
user_id: str | |
time_start: str | |
total_time: int | |
class AIRequest(BaseModel): | |
user_id: str | |
# API cập nhật bios | |
async def update_bios(request: UpdateBiosRequest): | |
user_ref = db.collection("user_profiles").document(request.user_id) | |
user_ref.set({"bios": request.bios}, merge=True) | |
return {"message": "Cập nhật bios thành công"} | |
# API thêm lịch sử focus | |
async def add_focus_history(request: FocusHistoryRequest): | |
user_ref = db.collection("user_profiles").document(request.user_id) | |
user_doc = user_ref.get() | |
data = user_doc.to_dict() or {} | |
focus_history = data.get("focus_history", []) | |
focus_history.append({"time_start": request.time_start, "total_time": request.total_time}) | |
user_ref.set({"focus_history": focus_history}, merge=True) | |
return {"message": "Thêm lịch sử focus thành công"} | |
# API lấy dữ liệu người dùng | |
async def get_user_data(user_id: str): | |
user_doc = db.collection("user_profiles").document(user_id).get() | |
data = user_doc.to_dict() or {} | |
return { | |
"bios": data.get("bios", "Chưa có bios."), | |
"focus_history": data.get("focus_history", []) | |
} | |
# API AI tư vấn | |
async def ai_personal_advice(request: AIRequest): | |
user_doc = db.collection("user_profiles").document(request.user_id).get() | |
data = user_doc.to_dict() or {} | |
bios = data.get("bios", "Chưa có bios.") | |
focus_history = data.get("focus_history", []) | |
focus_text = "\n".join([f"- {f['time_start']}: {f['total_time']} phút" for f in focus_history]) | |
prompt = f""" | |
Thông tin người dùng: | |
- Bios: {bios} | |
- Lịch sử focus: | |
{focus_text} | |
Hãy tư vấn cách cải thiện hiệu suất làm việc dựa trên thông tin trên. | |
""" | |
response = ai_model(prompt, max_length=300) | |
return {"advice": response[0]["generated_text"]} | |
# Trang chủ | |
async def home(): | |
return JSONResponse(content={"message": "Welcome to the Recommendation API!"}) | |