Spaces:
Running
Running
| import os | |
| os.environ.setdefault("TF_ENABLE_ONEDNN_OPTS", "0") | |
| from dotenv import load_dotenv | |
| load_dotenv() # must run before any route module is imported so env vars are visible at module level | |
| from fastapi import Depends, FastAPI | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from slowapi import _rate_limit_exceeded_handler | |
| from slowapi.errors import RateLimitExceeded | |
| from slowapi.middleware import SlowAPIMiddleware | |
| from routes.auth import verify_approved_user | |
| from routes.limiter import limiter | |
| from routes.Admin_Users import router as admin_users_router | |
| from routes.NLP_ContentFilter_MovieRecommender import router as nlp_content_filter_router | |
| from routes.NLP_Sentiment import router as sentiment_router | |
| from routes.ML_LinearRegression_ChurnPredictor import router as linear_regression_router | |
| from routes.ML_LogisticRegression_ChurnPredictor import router as logistic_regression_router | |
| from routes.ML_DecisionTree_IrisClassifier import router as iris_router | |
| from routes.ML_RandomForest_TaxiPredictor import router as random_forest_router | |
| from routes.ML_RidgeRegression_HousePricePredictor import router as ridge_regression_router | |
| from routes.ML_PolynomialRegression_CarPricePredictor import router as polynomial_regression_router | |
| from routes.ML_LassoRegression_SalesPredictor import router as lasso_regression_router | |
| from routes.ML_DecisionTreeRegressor_BikeRentalPredictor import router as decision_tree_regressor_router | |
| from routes.ML_GradientBoosting_HousePricePredictor import router as gradient_boosting_router | |
| from routes.ML_RandomForestClassifier_CreditApproval import router as random_forest_classifier_router | |
| from routes.ML_KNN_CustomerSegment import router as knn_router | |
| from routes.ML_NaiveBayes_RainPredictor import router as naive_bayes_router | |
| from routes.ML_SVM_WineQuality import router as svm_router | |
| from routes.ML_KMeans_CustomerSegmentation import router as kmeans_router | |
| from routes.ML_DBSCAN_ServerAnomaly import router as dbscan_router | |
| from routes.ML_MeanShift_UserBehavior import router as mean_shift_router | |
| from routes.ML_PCA_ProductFeatures import router as pca_router | |
| from routes.ML_ICA_SensorSignals import router as ica_router | |
| from routes.ML_Apriori_GroceryRecommender import router as apriori_router | |
| from routes.ML_FPGrowth_GroceryRecommender import router as fpgrowth_router | |
| from routes.ML_ECLAT_GroceryRecommender import router as eclat_router | |
| from routes.DL_RNN_StockPricePredictor import router as rnn_stock_router | |
| from routes.DL_CNN_NumberRecognition import router as cnn_router | |
| from routes.DL_MobileNet_ImageClassifier import router as image_classifier_router | |
| from routes.DL_FasterRCNN_ObjectDetection import router as object_detection_router | |
| from routes.DL_YOLO_DentalXray import router as dental_xray_router | |
| from routes.NLP_CollaborativeFilter_BookRecommender import router as nlp_collaborative_filter_router | |
| from routes.Memory_Upload import router as upload_memory_router | |
| from routes.Memory_Crud import router as documents_router | |
| from routes.Chat_multi_agent_router import router as multi_agent_router | |
| from routes.agents.agent_fill_form import router as fill_form_router | |
| app = FastAPI() | |
| app.state.limiter = limiter | |
| app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler) # type: ignore[arg-type] | |
| app.add_middleware(SlowAPIMiddleware) | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=[ | |
| "https://compass-j.vercel.app", | |
| "https://frontend-ashy-six-61.vercel.app", | |
| "http://localhost:3000", | |
| "http://localhost:4200", | |
| ], | |
| allow_credentials=True, | |
| allow_methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"], | |
| allow_headers=[ | |
| "Authorization", | |
| "Content-Type", | |
| "x-vercel-protection-bypass", | |
| "x-user-id", | |
| "x-supabase-user-id", | |
| "x-username", | |
| "x-login-method", | |
| "x-comvision-key", # ComVision frontend still sends this; harmless here (routes use Bearer auth) | |
| ], | |
| ) | |
| # Every router requires a valid token AND an admin-approved account | |
| # (public.profiles.status = 'approved'). New signups are 'pending' until an | |
| # admin approves them via the /admin endpoints below. | |
| _auth = [Depends(verify_approved_user)] | |
| def greet_json(): | |
| return {"Hello": "World!"} | |
| app.include_router(sentiment_router, dependencies=_auth) | |
| app.include_router(linear_regression_router, dependencies=_auth) | |
| app.include_router(logistic_regression_router, dependencies=_auth) | |
| app.include_router(random_forest_router, dependencies=_auth) | |
| app.include_router(ridge_regression_router, dependencies=_auth) | |
| app.include_router(polynomial_regression_router, dependencies=_auth) | |
| app.include_router(lasso_regression_router, dependencies=_auth) | |
| app.include_router(decision_tree_regressor_router, dependencies=_auth) | |
| app.include_router(gradient_boosting_router, dependencies=_auth) | |
| app.include_router(random_forest_classifier_router, dependencies=_auth) | |
| app.include_router(knn_router, dependencies=_auth) | |
| app.include_router(naive_bayes_router, dependencies=_auth) | |
| app.include_router(svm_router, dependencies=_auth) | |
| app.include_router(kmeans_router, dependencies=_auth) | |
| app.include_router(dbscan_router, dependencies=_auth) | |
| app.include_router(mean_shift_router, dependencies=_auth) | |
| app.include_router(pca_router, dependencies=_auth) | |
| app.include_router(ica_router, dependencies=_auth) | |
| app.include_router(apriori_router, dependencies=_auth) | |
| app.include_router(fpgrowth_router, dependencies=_auth) | |
| app.include_router(eclat_router, dependencies=_auth) | |
| app.include_router(cnn_router, dependencies=_auth) | |
| app.include_router(iris_router, dependencies=_auth) | |
| app.include_router(nlp_collaborative_filter_router, dependencies=_auth) | |
| app.include_router(nlp_content_filter_router, dependencies=_auth) | |
| app.include_router(rnn_stock_router, dependencies=_auth) | |
| # ComVision computer-vision demos, merged back in from the standalone comvision-api | |
| # Space. In the monolith they sit behind the same approved-user auth as every other | |
| # model endpoint (the frontend already sends a Bearer token when it targets the | |
| # monolith), so the CV Space's x-comvision-key shared secret is not needed here. | |
| app.include_router(image_classifier_router, dependencies=_auth) | |
| app.include_router(object_detection_router, dependencies=_auth) | |
| app.include_router(dental_xray_router, dependencies=_auth) | |
| app.include_router(upload_memory_router, dependencies=_auth) | |
| app.include_router(documents_router, dependencies=_auth) | |
| app.include_router(multi_agent_router, dependencies=_auth) | |
| app.include_router(fill_form_router, dependencies=_auth) | |
| # Admin user-approval endpoints guard themselves (require_admin), so they are | |
| # not behind _auth — an admin must stay able to manage users regardless. | |
| app.include_router(admin_users_router) | |