File size: 1,888 Bytes
6cbca40
 
 
 
c0a7f25
61e4b1e
5a412ce
64c08d9
85fa45c
 
6cbca40
 
 
 
c0a7f25
61e4b1e
5a412ce
64c08d9
85fa45c
6cbca40
 
 
 
 
 
 
 
 
 
 
 
 
85fa45c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5a412ce
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
from fastapi import FastAPI, APIRouter
from fastapi.middleware.cors import CORSMiddleware
from src.apis.routes.user_route import router as router_user
from src.apis.routes.chat_route import router as router_chat
from src.apis.routes.lesson_route import router as router_lesson
from src.apis.routes.evaluation_route import router as router_evaluation
from src.apis.routes.pronunciation_route import router as router_pronunciation
from src.apis.routes.speaking_route import router as router_speaking
from src.apis.routes.ipa_route import router as router_ipa
from loguru import logger

api_router = APIRouter(prefix="/api")
api_router.include_router(router_user)
api_router.include_router(router_chat)
api_router.include_router(router_lesson)
api_router.include_router(router_evaluation)
api_router.include_router(router_pronunciation)
api_router.include_router(router_speaking)
api_router.include_router(router_ipa)


def create_app():
    app = FastAPI(docs_url="/", title="API")

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

    @app.on_event("startup")
    async def startup_event():
        """Pre-initialize assessor on server startup for better performance"""
        try:
            logger.info("Pre-initializing ProductionPronunciationAssessor...")
            from src.apis.routes.speaking_route import get_assessor
            from src.apis.routes.ipa_route import get_assessor as get_ipa_assessor
            
            # Pre-initialize both assessors (they share the same singleton)
            get_assessor()
            get_ipa_assessor()
            logger.info("ProductionPronunciationAssessor pre-initialization completed!")
        except Exception as e:
            logger.error(f"Failed to pre-initialize assessor: {e}")

    return app