diff --git a/main.py b/main.py index f9a679a..64ecc77 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,6 @@ from fastapi import FastAPI, HTTPException, Request, Response from fastapi.middleware.cors import CORSMiddleware -from contextlib import asynccontextmanager +from contextlib import asynccontextmanager from connection import prisma from schemas import ComparisonResponse, RecommendationRequest import ml_core @@ -8,8 +8,7 @@ import services @asynccontextmanager async def lifespan(app: FastAPI): - """Mengelola startup dan shutdown aplikasi secara efisien.""" - print("⏳ Menghubungkan ke Database...") + print("⏳ Menghubungkan ke Database Neon...") await prisma.connect() print("🤖 Memuat Asset Machine Learning (XGBoost)...") @@ -22,13 +21,13 @@ async def lifespan(app: FastAPI): app = FastAPI( title="Tokopedia Laptop Recommendation API", - description="Backend untuk analisis sentimen ulasan laptop menggunakan XGBoost", + description="Backend analisis sentimen ulasan laptop menggunakan XGBoost - Syafrizal Wd Mahendra", lifespan=lifespan ) app.add_middleware( CORSMiddleware, - allow_origins=["http://localhost:3000"], + allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], diff --git a/requirements.txt b/requirements.txt index 5e22d34..badbbbe 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,13 +1,19 @@ -pandas -numpy -scikit-learn -xgboost -selenium beautifulsoup4 -nltk -sastrawi +fastapi +imbalanced_learn +joblib matplotlib +nltk +numpy +pandas +pydantic +Sastrawi +scikit_learn seaborn +selenium +undetected_chromedriver wordcloud -imblearn -joblib \ No newline at end of file +xgboost +uvicorn +prisma +playwright \ No newline at end of file diff --git a/run.py b/run.py new file mode 100644 index 0000000..deddaff --- /dev/null +++ b/run.py @@ -0,0 +1,12 @@ +import asyncio +import sys +import uvicorn + +if __name__ == "__main__": + # Paksa penggunaan SelectorEventLoop di level paling dasar OS Windows + if sys.platform == 'win32': + asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) + print("✅ Mesin Selector Loop Aktif (Anti-NotImplementedError)") + + # Jalankan uvicorn dari sini, bukan dari terminal langsung + uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True) \ No newline at end of file