From 54ddb8ee4aa46f2ef0cbaae501d546581eb93da3 Mon Sep 17 00:00:00 2001 From: superobk Date: Tue, 30 Apr 2024 17:59:37 +0800 Subject: [PATCH] feat: log --- main.py | 25 +++++++++++++++++- router.py => server.py | 2 +- src/blackbox/asr.py | 6 ++--- src/blackbox/audio_chat.py | 4 +++ src/blackbox/blackbox_factory.py | 2 +- src/configuration.py | 44 ++++++++++++++++++++++++++------ src/log/handler.py | 13 ++++++++++ src/log/log.py | 15 ----------- src/tts/tts_service.py | 1 - 9 files changed, 81 insertions(+), 31 deletions(-) rename router.py => server.py (93%) create mode 100644 src/log/handler.py delete mode 100644 src/log/log.py diff --git a/main.py b/main.py index 7480f82..06af313 100644 --- a/main.py +++ b/main.py @@ -1,4 +1,27 @@ import uvicorn +import logging +from injector import Injector,inject +from src.log.handler import LogHandler +from src.configuration import EnvConf, LogConf, singleton + +@singleton +class Main(): + env_conf: EnvConf + @inject + def __init__(self, log_config: LogConf, env_conf: EnvConf, log_handler: LogHandler) -> None: + self.env_conf=env_conf + logging.basicConfig( + handlers=[log_handler], + level=log_config.level, + datefmt=log_config.time_format, + format='%(asctime)s %(message)s') + + def run(self): + logger = logging.getLogger(__name__) + logger.info("jarvis-models start", "version", "0.0.1") + uvicorn.run("server:app", host="0.0.0.0", port=8000, log_level="info") if __name__ == "__main__": - uvicorn.run("router:app", host="0.0.0.0", port=8000, log_level="info") + injector = Injector() + main = injector.get(Main) + main.run() \ No newline at end of file diff --git a/router.py b/server.py similarity index 93% rename from router.py rename to server.py index 18a729d..d32b58d 100644 --- a/router.py +++ b/server.py @@ -25,7 +25,7 @@ async def blackbox(blackbox_name: Union[str, None] = None, request: Request = No if not blackbox_name: return await JSONResponse(content={"error": "blackbox_name is required"}, status_code=status.HTTP_400_BAD_REQUEST) try: - box = blackbox_factory.call_blackbox(blackbox_name) + box = blackbox_factory.get_blackbox(blackbox_name) except ValueError: return await JSONResponse(content={"error": "value error"}, status_code=status.HTTP_400_BAD_REQUEST) return await box.fast_api_handler(request) diff --git a/src/blackbox/asr.py b/src/blackbox/asr.py index 9fc55dc..5338ec2 100644 --- a/src/blackbox/asr.py +++ b/src/blackbox/asr.py @@ -4,8 +4,6 @@ from typing import Any, Coroutine from fastapi import Request, Response, status from fastapi.responses import JSONResponse -from ..log.log import Logger - from ..asr.rapid_paraformer.utils import read_yaml from ..asr.rapid_paraformer import RapidParaformer from .blackbox import Blackbox @@ -15,8 +13,7 @@ from injector import singleton, inject class ASR(Blackbox): @inject - def __init__(self,logger: Logger,path = ".env.yaml") -> None: - logger.info("ASR init") + def __init__(self,path = ".env.yaml") -> None: config = read_yaml(path) self.paraformer = RapidParaformer(config) @@ -38,6 +35,7 @@ class ASR(Blackbox): async def fast_api_handler(self, request: Request) -> Response: data = (await request.form()).get("audio") if data is None: + self.logger.warn("asr bag request","type", "fast_api_handler", "api", "asr") return JSONResponse(content={"error": "data is required"}, status_code=status.HTTP_400_BAD_REQUEST) d = await data.read() try: diff --git a/src/blackbox/audio_chat.py b/src/blackbox/audio_chat.py index cf5fb71..1108b44 100644 --- a/src/blackbox/audio_chat.py +++ b/src/blackbox/audio_chat.py @@ -1,3 +1,4 @@ +import logging from fastapi import Request, Response,status from fastapi.responses import JSONResponse from injector import inject, singleton @@ -8,11 +9,14 @@ from .tts import TTS from .blackbox import Blackbox +logger = logging.getLogger(__name__) + @singleton class AudioChat(Blackbox): @inject def __init__(self, asr: ASR, gpt: Tesou, tts: TTS): + logger.info("audio chat initint") self.asr = asr self.gpt = gpt self.tts = tts diff --git a/src/blackbox/blackbox_factory.py b/src/blackbox/blackbox_factory.py index a45f77c..48fbb1c 100644 --- a/src/blackbox/blackbox_factory.py +++ b/src/blackbox/blackbox_factory.py @@ -59,7 +59,7 @@ class BlackboxFactory: def __call__(self, *args, **kwargs): return self.processing(*args, **kwargs) - def call_blackbox(self, blackbox_name: str) -> Blackbox: + def get_blackbox(self, blackbox_name: str) -> Blackbox: model = self.models.get(blackbox_name) if model is None: raise ValueError("Invalid Blackbox Type...") diff --git a/src/configuration.py b/src/configuration.py index ab3f31b..81d425f 100644 --- a/src/configuration.py +++ b/src/configuration.py @@ -1,9 +1,10 @@ -from dataclasses import dataclass -from injector import Injector, inject +from injector import inject,singleton import yaml import sys +import logging +@singleton class Configuration(): @inject @@ -26,7 +27,7 @@ class Configuration(): bbb: ccc: "hello world" """ - def get(self, path: str | list[str], cfg: dict = None): + def get(self, path: str | list[str], cfg: dict = None, default = None): if isinstance(path, str): if cfg is None: cfg = self.cfg @@ -36,9 +37,8 @@ class Configuration(): return None if length == 1: return cfg.get(path[0]) - return self.get(path[1:], cfg.get(path[0])) - - + return self.get(path[1:], cfg.get(path[0]), default=default) + class TesouConf(): url: str @@ -54,9 +54,37 @@ class MeloConf(): def __init__(self, config: Configuration) -> None: self.melotts = config.get("melotts.url") +# 'CRITICAL': CRITICAL, +# 'FATAL': FATAL, +# 'ERROR': ERROR, +# 'WARN': WARNING, +# 'WARNING': WARNING, +# 'INFO': INFO, +# 'DEBUG': DEBUG, +# 'NOTSET': NOTSET, +DEFAULT_LEVEL="WARNING" +DEFAULT_TIME_FORMAT="%Y-%m-%d %H:%M:%S" + +@singleton class LogConf(): - level: str - + level: int + time_format = "%Y-%m-%d %H:%M:%S" + @inject def __init__(self,config: Configuration) -> None: self.level = config.get("log.level") + c = config.get("log.level", default=DEFAULT_LEVEL).upper() + level=logging._nameToLevel.get(c) + if level is None: + self.level = logging.WARNING + else: + self.level = level + self.time_format=config.get("log.time_format", default=DEFAULT_TIME_FORMAT) + +@singleton +class EnvConf(): + version: str + + @inject + def __init__(self, config: Configuration) -> None: + self.version = config.get("env.version") diff --git a/src/log/handler.py b/src/log/handler.py new file mode 100644 index 0000000..cd9a154 --- /dev/null +++ b/src/log/handler.py @@ -0,0 +1,13 @@ +import logging + +class LogHandler(logging.Handler): + + def __init__(self)-> None: + logging.Handler.__init__(self=self) + + def emit(self, record) -> None: + print("emit", record) + + def handle(self, record) -> None: + print("@ handle",record) + \ No newline at end of file diff --git a/src/log/log.py b/src/log/log.py deleted file mode 100644 index 2c7c0b1..0000000 --- a/src/log/log.py +++ /dev/null @@ -1,15 +0,0 @@ -import logging -from injector import singleton, inject - -from ..configuration import LogConf - -@singleton -class Logger(logging.Logger): - - @inject - def __init__(self, config: LogConf) -> None: - super().__init__(__name__) - self.setLevel(config.level) - self.addHandler(logging.StreamHandler()) - self.addHandler(logging.FileHandler('log.log')) - diff --git a/src/tts/tts_service.py b/src/tts/tts_service.py index e140ff4..e1d1b1b 100644 --- a/src/tts/tts_service.py +++ b/src/tts/tts_service.py @@ -16,7 +16,6 @@ from src.tts.vits.text.symbols import symbols from src.tts.vits.text import text_to_sequence import logging -logging.getLogger().setLevel(logging.INFO) logging.basicConfig(level=logging.INFO) dirbaspath = __file__.split("\\")[1:-1]