File size: 3,038 Bytes
b46f992
68fc348
6debc39
68fc348
6debc39
68fc348
 
 
6debc39
b46f992
6debc39
68fc348
 
b46f992
 
 
68fc348
 
b46f992
68fc348
 
 
 
 
 
 
 
 
 
 
 
 
b46f992
68fc348
b46f992
 
6debc39
68fc348
 
 
b46f992
 
 
68fc348
 
 
 
 
b46f992
 
6debc39
68fc348
 
 
 
 
 
 
b46f992
 
68fc348
 
 
6debc39
 
 
 
68fc348
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b46f992
68fc348
 
 
 
 
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
import argparse, os,sys
parser = argparse.ArgumentParser(description="WhisperVQ Application")
parser.add_argument('--log_path', type=str,
                    default='whisper.log', help='The log file path')
parser.add_argument('--log_level', type=str, default='INFO',
                    choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', 'TRACE'], help='The log level')
parser.add_argument('--port', type=int, default=3348,
                    help='The port to run the WhisperVQ app on')
parser.add_argument('--device_id', type=str, default="0",
                    help='The port to run the WhisperVQ app on')
parser.add_argument('--package_dir', type=str, default="",
                    help='The package-dir to be extended to sys.path')
args = parser.parse_args()
sys.path.insert(0, args.package_dir)
os.environ["CUDA_VISIBLE_DEVICES"] =args.device_id # Use the first Nvidia GPU

import logging
import uvicorn
from fastapi import FastAPI
from contextlib import asynccontextmanager
import os
import time
import psutil
import threading
logging.basicConfig(level=args.log_level, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    handlers=[
                        logging.FileHandler(args.log_path),
                        # logging.StreamHandler()
                    ])
logger = logging.getLogger(__name__)


# after set up logger we can import and use services

from services.AudioTokenizerService import get_audio_tokenizer_service
from routes.AudioTokenizerRoute import audio_tokenizer_router
from routes.InferenceRoute import audio_inference_router

@asynccontextmanager
async def lifespan(app: FastAPI):
   
    # on startup
    get_audio_tokenizer_service()
    yield
    # on shutdown

app = FastAPI(lifespan=lifespan)

# include the routes
app.include_router(audio_tokenizer_router)
app.include_router(audio_inference_router)

def self_terminate():
    time.sleep(1)
    parent = psutil.Process(psutil.Process(os.getpid()).ppid())
    parent.kill()


@app.delete("/destroy")
async def destroy():
    threading.Thread(target=self_terminate, daemon=True).start()
    return {"success": True}

@app.get("/health")
async def health():
    return {"status": "OK"}

if __name__ == "__main__":
    import uvicorn
    from uvicorn.config import LOGGING_CONFIG

    LOGGING_CONFIG["handlers"]["default"] = {
        "class": "logging.FileHandler",
        "filename": args.log_path,
        "formatter": "default"
    }
    LOGGING_CONFIG["handlers"]["access"] = {
        "class": "logging.FileHandler",
        "filename": args.log_path,
        "formatter": "access"
    }
    LOGGING_CONFIG["loggers"]["uvicorn.error"]["level"] = args.log_level
    LOGGING_CONFIG["loggers"]["uvicorn.access"]["level"] = args.log_level

# Print supported formats at startup
    format_info = get_audio_tokenizer_service().get_format_info()
    logger.info("Supported formats:")
    for format, info in format_info.items():
        logger.info(f"{format}: {info}")

    uvicorn.run(app, host="0.0.0.0", port=args.port)