From 0cd8380d28575bde7dec9db6cef0396f65f1399d Mon Sep 17 00:00:00 2001 From: Dan Chen Date: Tue, 30 Apr 2024 16:21:17 +0800 Subject: [PATCH 1/3] tmp --- router.py | 8 ++------ src/blackbox/asr.py | 8 ++++++-- src/configuration.py | 7 +++++++ src/log/log.py | 15 +++++++++++++++ 4 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 src/log/log.py diff --git a/router.py b/router.py index fc8c3fd..18a729d 100644 --- a/router.py +++ b/router.py @@ -1,13 +1,9 @@ -from typing import Annotated, Union +from typing import Union -from fastapi import FastAPI, Request, status, Form +from fastapi import FastAPI, Request, status from fastapi.responses import JSONResponse -from src.dotchain.runtime.interpreter import program_parser -from src.dotchain.runtime.tokenizer import Tokenizer -from src.dotchain.runtime.runtime import Runtime from src.blackbox.blackbox_factory import BlackboxFactory -import uvicorn from fastapi.middleware.cors import CORSMiddleware from injector import Injector diff --git a/src/blackbox/asr.py b/src/blackbox/asr.py index 4f92659..9fc55dc 100644 --- a/src/blackbox/asr.py +++ b/src/blackbox/asr.py @@ -4,15 +4,19 @@ 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 -from injector import singleton +from injector import singleton, inject @singleton class ASR(Blackbox): - def __init__(self, path = ".env.yaml") -> None: + @inject + def __init__(self,logger: Logger,path = ".env.yaml") -> None: + logger.info("ASR init") config = read_yaml(path) self.paraformer = RapidParaformer(config) diff --git a/src/configuration.py b/src/configuration.py index 8c3e6fb..f14439f 100644 --- a/src/configuration.py +++ b/src/configuration.py @@ -45,3 +45,10 @@ class TesouConf(): @inject def __init__(self,config: Configuration) -> None: self.url = config.get("tesou.url") + +class LogConf(): + level: str + + @inject + def __init__(self,config: Configuration) -> None: + self.level = config.get("log.level") \ No newline at end of file diff --git a/src/log/log.py b/src/log/log.py new file mode 100644 index 0000000..2c7c0b1 --- /dev/null +++ b/src/log/log.py @@ -0,0 +1,15 @@ +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')) + From d1e6eb2d2d33ef9b38655775a268f43def4ee5bf Mon Sep 17 00:00:00 2001 From: superobk Date: Tue, 30 Apr 2024 17:59:37 +0800 Subject: [PATCH 2/3] 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 | 51 +++++++++++++++++++++++++------- src/log/handler.py | 13 ++++++++ src/log/log.py | 15 ---------- src/tts/tts_service.py | 1 - 9 files changed, 85 insertions(+), 34 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 55ad618..1cb26ad 100644 --- a/src/blackbox/blackbox_factory.py +++ b/src/blackbox/blackbox_factory.py @@ -41,7 +41,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 blockbox type") diff --git a/src/configuration.py b/src/configuration.py index f14439f..0965101 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,19 +27,20 @@ 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 - return self.get(path.split("."), cfg) + return self.get(path.split("."), cfg, default=default) lenght = len(path) if lenght == 0 or not isinstance(cfg, dict): - return None + if default is None: + return None + return default if lenght == 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 @@ -46,9 +48,36 @@ class TesouConf(): def __init__(self,config: Configuration) -> None: self.url = config.get("tesou.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") \ No newline at end of file + 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") \ No newline at end of file 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] From 25155c8051fef780959725744e69f6215485a96b Mon Sep 17 00:00:00 2001 From: superobk Date: Thu, 2 May 2024 09:34:49 +0800 Subject: [PATCH 3/3] feat: requirements.txt --- requirements.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 requirements.txt diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..1efc43a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,7 @@ +filetype==1.2.0 +fastapi==0.110.3 +python-multipart==0.0.9 +uvicorn==0.29.0 +SpeechRecognition==3.10.3 +PyYAML==6.0.1 +injector==0.21.0