File size: 2,789 Bytes
714be4e
47b5f0c
714be4e
e747604
 
 
 
 
 
 
 
 
39f6b9b
 
260777c
39f6b9b
 
e747604
47b5f0c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
819bacd
57cab59
47b5f0c
57cab59
 
 
 
819bacd
 
e512337
57cab59
 
819bacd
57cab59
 
 
 
 
 
 
 
e747604
 
57cab59
47b5f0c
819bacd
dcb6c5f
819bacd
57cab59
7bb4307
 
 
57cab59
819bacd
 
984d2f5
819bacd
714be4e
819bacd
 
 
984d2f5
819bacd
 
714be4e
 
 
 
 
 
 
 
819bacd
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import logging
from contextlib import asynccontextmanager

from app.modules.clearVariables.routes.clearVariables_route import (
    router as clear_variables_routes,
)
from app.modules.documentHandeler.routes.document_handeler_route import (
    router as upload_file_routes,
)
from app.modules.querySearch.routes.querySearch_route import (
    router as query_search_routes,
)
from fastapi import APIRouter, FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.middleware.httpsredirect import HTTPSRedirectMiddleware
from fastapi.responses import FileResponse
from fastapi.staticfiles import StaticFiles
from transformers import AutoModel, AutoModelForMaskedLM, AutoTokenizer, pipeline


@asynccontextmanager
async def lifespan(app: FastAPI):
    dense_model_name = "sentence-transformers/all-MiniLM-L6-v2"
    sparse_model_name = "prithivida/Splade_PP_en_v1"
    qa_model_name = "deepset/roberta-base-squad2"

    dense_tokenizer = AutoTokenizer.from_pretrained(dense_model_name)
    dense_model = AutoModel.from_pretrained(dense_model_name)

    sparse_tokenizer = AutoTokenizer.from_pretrained(sparse_model_name)
    sparse_model = AutoModelForMaskedLM.from_pretrained(sparse_model_name)

    qa_pipeline = pipeline("question-answering", model=qa_model_name)

    yield {
        "dense_tokenizer": dense_tokenizer,
        "dense_model": dense_model,
        "sparse_tokenizer": sparse_tokenizer,
        "sparse_model": sparse_model,
        "qa_pipeline": qa_pipeline,
    }


app = FastAPI(lifespan=lifespan)

origins = [
    "http://localhost:8000",
    "http://localhost:3000",
    "localhost:8000",
    "https://abadesalex-docurag.hf.space/api",
    "https://abadesalex-docurag.hf.space",
]


app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

app.add_middleware(HTTPSRedirectMiddleware)

app_router = APIRouter(prefix="/api")
app_router.include_router(upload_file_routes, prefix="/document", tags=["document"])
app_router.include_router(query_search_routes, prefix="/query", tags=["query"])
app_router.include_router(clear_variables_routes, prefix="/clear", tags=["clear"])


# @app_router.get("/")
# async def root():
#     return {"message": "Hello World"}


# Serve static files from the 'out/_next/static' directory
app.mount("/_next/static", StaticFiles(directory="app/out/_next/static"), name="static")


# Serve the main index.html
@app.get("/")
def read_root():
    return FileResponse("app/out/index.html")


@app.on_event("startup")
async def startup_event():
    logging.info("Application is starting up...")


@app.on_event("shutdown")
async def shutdown_event():
    logging.info("Application is shutting down...")


app.include_router(app_router)