From 0cd8380d28575bde7dec9db6cef0396f65f1399d Mon Sep 17 00:00:00 2001 From: Dan Chen Date: Tue, 30 Apr 2024 16:21:17 +0800 Subject: [PATCH 01/18] 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 02/18] 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 03/18] 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 From f8e51135cbe9eaf6c2a33db23d9ca45f4f345667 Mon Sep 17 00:00:00 2001 From: Dan Chen Date: Tue, 30 Apr 2024 16:21:17 +0800 Subject: [PATCH 04/18] 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 38086e6..ab3f31b 100644 --- a/src/configuration.py +++ b/src/configuration.py @@ -53,3 +53,10 @@ class MeloConf(): @inject def __init__(self, config: Configuration) -> None: self.melotts = config.get("melotts.url") + +class LogConf(): + level: str + + @inject + def __init__(self,config: Configuration) -> None: + self.level = config.get("log.level") 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 981bdc881051bc494e802c6c17d49dcad644145a Mon Sep 17 00:00:00 2001 From: superobk Date: Tue, 30 Apr 2024 17:59:37 +0800 Subject: [PATCH 05/18] 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 97109b9..af29e45 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] From 5c7a8b4088024667d330a3ef82033ab1efbfd147 Mon Sep 17 00:00:00 2001 From: superobk Date: Thu, 2 May 2024 09:34:49 +0800 Subject: [PATCH 06/18] 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 From 0ca946836c05bd59ec967fd23a6acd21b6d7ada1 Mon Sep 17 00:00:00 2001 From: superobk Date: Thu, 16 May 2024 16:02:13 +0800 Subject: [PATCH 07/18] wip: temp --- main.py | 5 +++-- src/blackbox/blackbox_factory.py | 14 ++++++-------- src/blackbox/g2e.py | 7 ++++--- src/log/handler.py | 6 +++--- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/main.py b/main.py index 06af313..83ace40 100644 --- a/main.py +++ b/main.py @@ -7,18 +7,19 @@ 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], + handlers=[logging.StreamHandler()], 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") + logger.info("jarvis-models start", extra={"version": "0.0.1"}) uvicorn.run("server:app", host="0.0.0.0", port=8000, log_level="info") if __name__ == "__main__": diff --git a/src/blackbox/blackbox_factory.py b/src/blackbox/blackbox_factory.py index af29e45..a4b0b52 100644 --- a/src/blackbox/blackbox_factory.py +++ b/src/blackbox/blackbox_factory.py @@ -34,10 +34,9 @@ class BlackboxFactory: audio_chat: AudioChat, g2e: G2E, text_and_image: TextAndImage, - chroma_query: ChromaQuery, - chroma_upsert: ChromaUpsert, - chroma_chat: ChromaChat, - melotts: MeloTTS, + #chroma_query: ChromaQuery, + #chroma_upsert: ChromaUpsert, + #chroma_chat: ChromaChat, vlms: VLMS) -> None: self.models["audio_to_text"] = audio_to_text self.models["text_to_audio"] = text_to_audio @@ -50,10 +49,9 @@ class BlackboxFactory: self.models["audio_chat"] = audio_chat self.models["g2e"] = g2e self.models["text_and_image"] = text_and_image - self.models["chroma_query"] = chroma_query - self.models["chroma_upsert"] = chroma_upsert - self.models["chroma_chat"] = chroma_chat - self.models["melotts"] = melotts + #self.models["chroma_query"] = chroma_query + #self.models["chroma_upsert"] = chroma_upsert + #self.models["chroma_chat"] = chroma_chat self.models["vlms"] = vlms def __call__(self, *args, **kwargs): diff --git a/src/blackbox/g2e.py b/src/blackbox/g2e.py index 8bd5507..4a6640a 100755 --- a/src/blackbox/g2e.py +++ b/src/blackbox/g2e.py @@ -22,8 +22,8 @@ class G2E(Blackbox): def processing(self, model_name, prompt, template, context: list) -> str: if context == None: context = [] - url = 'http://120.196.116.194:48890/v1' - #url = 'http://120.196.116.194:48892/v1' + #url = 'http://120.196.116.194:48890/v1' + url = 'http://120.196.116.194:48892/v1' background_prompt = '''KOMBUKIKI是一款茶饮料,目标受众 年龄:20-35岁 性别:女性 地点:一线城市、二线城市 职业:精英中产、都市白领 收入水平:中高收入,有一定消费能力 兴趣和爱好:注重健康,有运动习惯 @@ -65,7 +65,8 @@ class G2E(Blackbox): api_key='YOUR_API_KEY', base_url=url ) - model_name = client.models.list().data[0].id + #model_name = client.models.list().data[0].id + model_name = client.models.list().data[1].id print(model_name) response = client.chat.completions.create( model=model_name, diff --git a/src/log/handler.py b/src/log/handler.py index cd9a154..21b7c0d 100644 --- a/src/log/handler.py +++ b/src/log/handler.py @@ -1,13 +1,13 @@ import logging -class LogHandler(logging.Handler): +class LogHandler(logging.StreamHandler): 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 From 9d9047d590b18e0c5e6e7cd5ff85ccbcbb3e7963 Mon Sep 17 00:00:00 2001 From: superobk Date: Thu, 16 May 2024 16:30:33 +0800 Subject: [PATCH 08/18] confi.get --- main.py | 7 +------ src/configuration.py | 13 +++---------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/main.py b/main.py index 06af313..e6b0faa 100644 --- a/main.py +++ b/main.py @@ -8,13 +8,8 @@ from src.configuration import EnvConf, LogConf, singleton class Main(): env_conf: EnvConf @inject - def __init__(self, log_config: LogConf, env_conf: EnvConf, log_handler: LogHandler) -> None: + def __init__(self, log_config: LogConf, env_conf: EnvConf) -> 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__) diff --git a/src/configuration.py b/src/configuration.py index 30ae637..8156c5c 100644 --- a/src/configuration.py +++ b/src/configuration.py @@ -27,24 +27,17 @@ class Configuration(): bbb: ccc: "hello world" """ - def get(self, path: str | list[str], cfg: dict = None, default = 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) length = len(path) if length == 0 or not isinstance(cfg, dict): - return None - if length == 1: - return self.get(path.split("."), cfg, default=default) - lenght = len(path) - if lenght == 0 or not isinstance(cfg, dict): - if default is None: - return None return default - if lenght == 1: + if length == 1: return cfg.get(path[0]) - return self.get(path[1:], cfg.get(path[0]), default=default) + return self.get(path[1:], cfg.get(path[0])) class TesouConf(): url: str From 032f6cb35ae3327c53366735a755da8d734b7604 Mon Sep 17 00:00:00 2001 From: superobk Date: Thu, 16 May 2024 17:05:11 +0800 Subject: [PATCH 09/18] tmp --- src/blackbox/blackbox_factory.py | 24 ++++++++++++------------ src/blackbox/emotion.py | 1 - src/blackbox/g2e.py | 6 +++--- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/blackbox/blackbox_factory.py b/src/blackbox/blackbox_factory.py index 97109b9..a45f77c 100644 --- a/src/blackbox/blackbox_factory.py +++ b/src/blackbox/blackbox_factory.py @@ -3,16 +3,16 @@ from .sentiment import Sentiment from .tts import TTS from .asr import ASR from .audio_to_text import AudioToText -from .emotion import Emotion +#from .emotion import Emotion from .blackbox import Blackbox from .text_to_audio import TextToAudio from .tesou import Tesou from .fastchat import Fastchat from .g2e import G2E from .text_and_image import TextAndImage -from .chroma_query import ChromaQuery -from .chroma_upsert import ChromaUpsert -from .chroma_chat import ChromaChat +# from .chroma_query import ChromaQuery +# from .chroma_upsert import ChromaUpsert +# from .chroma_chat import ChromaChat from .melotts import MeloTTS from .vlms import VLMS from injector import inject, singleton @@ -28,15 +28,15 @@ class BlackboxFactory: asr: ASR, tts: TTS, sentiment_engine: Sentiment, - emotion: Emotion, + #emotion: Emotion, tesou: Tesou, fastchat: Fastchat, audio_chat: AudioChat, g2e: G2E, text_and_image: TextAndImage, - chroma_query: ChromaQuery, - chroma_upsert: ChromaUpsert, - chroma_chat: ChromaChat, + #chroma_query: ChromaQuery, + #chroma_upsert: ChromaUpsert, + #chroma_chat: ChromaChat, melotts: MeloTTS, vlms: VLMS) -> None: self.models["audio_to_text"] = audio_to_text @@ -45,14 +45,14 @@ class BlackboxFactory: self.models["tts"] = tts self.models["sentiment_engine"] = sentiment_engine self.models["tesou"] = tesou - self.models["emotion"] = emotion + #self.models["emotion"] = emotion self.models["fastchat"] = fastchat self.models["audio_chat"] = audio_chat self.models["g2e"] = g2e self.models["text_and_image"] = text_and_image - self.models["chroma_query"] = chroma_query - self.models["chroma_upsert"] = chroma_upsert - self.models["chroma_chat"] = chroma_chat + # self.models["chroma_query"] = chroma_query + # self.models["chroma_upsert"] = chroma_upsert + # self.models["chroma_chat"] = chroma_chat self.models["melotts"] = melotts self.models["vlms"] = vlms diff --git a/src/blackbox/emotion.py b/src/blackbox/emotion.py index af0fce1..1fad6b9 100644 --- a/src/blackbox/emotion.py +++ b/src/blackbox/emotion.py @@ -57,4 +57,3 @@ class Emotion(Blackbox): text = [{'role': 'user', 'content': text}] sentiment = self.processing(text) return JSONResponse(content={"sentiment": sentiment}, status_code=status.HTTP_200_OK) - diff --git a/src/blackbox/g2e.py b/src/blackbox/g2e.py index 8bd5507..8e81e82 100755 --- a/src/blackbox/g2e.py +++ b/src/blackbox/g2e.py @@ -22,8 +22,8 @@ class G2E(Blackbox): def processing(self, model_name, prompt, template, context: list) -> str: if context == None: context = [] - url = 'http://120.196.116.194:48890/v1' - #url = 'http://120.196.116.194:48892/v1' + #url = 'http://120.196.116.194:48890/v1' + url = 'http://120.196.116.194:48892/v1' background_prompt = '''KOMBUKIKI是一款茶饮料,目标受众 年龄:20-35岁 性别:女性 地点:一线城市、二线城市 职业:精英中产、都市白领 收入水平:中高收入,有一定消费能力 兴趣和爱好:注重健康,有运动习惯 @@ -65,7 +65,7 @@ class G2E(Blackbox): api_key='YOUR_API_KEY', base_url=url ) - model_name = client.models.list().data[0].id + model_name = client.models.list().data[1].id print(model_name) response = client.chat.completions.create( model=model_name, From 884a835caefe627886c3ffdc15c71d3905614f09 Mon Sep 17 00:00:00 2001 From: Dan Chen Date: Tue, 30 Apr 2024 16:21:17 +0800 Subject: [PATCH 10/18] 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 38086e6..ab3f31b 100644 --- a/src/configuration.py +++ b/src/configuration.py @@ -53,3 +53,10 @@ class MeloConf(): @inject def __init__(self, config: Configuration) -> None: self.melotts = config.get("melotts.url") + +class LogConf(): + level: str + + @inject + def __init__(self,config: Configuration) -> None: + self.level = config.get("log.level") 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 54ddb8ee4aa46f2ef0cbaae501d546581eb93da3 Mon Sep 17 00:00:00 2001 From: superobk Date: Tue, 30 Apr 2024 17:59:37 +0800 Subject: [PATCH 11/18] 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] From e4136ee4e3e25cc6dda6f4a9e5804e0ca2106b40 Mon Sep 17 00:00:00 2001 From: superobk Date: Thu, 2 May 2024 09:34:49 +0800 Subject: [PATCH 12/18] 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 From 0612c065c0f25cd32823784e3c123dd7be525cbd Mon Sep 17 00:00:00 2001 From: superobk Date: Thu, 16 May 2024 16:02:13 +0800 Subject: [PATCH 13/18] wip: temp --- main.py | 5 +++-- src/blackbox/blackbox_factory.py | 8 +++----- src/blackbox/g2e.py | 1 + src/log/handler.py | 6 +++--- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/main.py b/main.py index 06af313..83ace40 100644 --- a/main.py +++ b/main.py @@ -7,18 +7,19 @@ 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], + handlers=[logging.StreamHandler()], 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") + logger.info("jarvis-models start", extra={"version": "0.0.1"}) uvicorn.run("server:app", host="0.0.0.0", port=8000, log_level="info") if __name__ == "__main__": diff --git a/src/blackbox/blackbox_factory.py b/src/blackbox/blackbox_factory.py index 48fbb1c..b633b52 100644 --- a/src/blackbox/blackbox_factory.py +++ b/src/blackbox/blackbox_factory.py @@ -37,7 +37,6 @@ class BlackboxFactory: #chroma_query: ChromaQuery, #chroma_upsert: ChromaUpsert, #chroma_chat: ChromaChat, - melotts: MeloTTS, vlms: VLMS) -> None: self.models["audio_to_text"] = audio_to_text self.models["text_to_audio"] = text_to_audio @@ -50,10 +49,9 @@ class BlackboxFactory: self.models["audio_chat"] = audio_chat self.models["g2e"] = g2e self.models["text_and_image"] = text_and_image - # self.models["chroma_query"] = chroma_query - # self.models["chroma_upsert"] = chroma_upsert - # self.models["chroma_chat"] = chroma_chat - self.models["melotts"] = melotts + #self.models["chroma_query"] = chroma_query + #self.models["chroma_upsert"] = chroma_upsert + #self.models["chroma_chat"] = chroma_chat self.models["vlms"] = vlms def __call__(self, *args, **kwargs): diff --git a/src/blackbox/g2e.py b/src/blackbox/g2e.py index 8e81e82..4a6640a 100755 --- a/src/blackbox/g2e.py +++ b/src/blackbox/g2e.py @@ -65,6 +65,7 @@ class G2E(Blackbox): api_key='YOUR_API_KEY', base_url=url ) + #model_name = client.models.list().data[0].id model_name = client.models.list().data[1].id print(model_name) response = client.chat.completions.create( diff --git a/src/log/handler.py b/src/log/handler.py index cd9a154..21b7c0d 100644 --- a/src/log/handler.py +++ b/src/log/handler.py @@ -1,13 +1,13 @@ import logging -class LogHandler(logging.Handler): +class LogHandler(logging.StreamHandler): 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 From 6b943d9f3dd1a0352b362a1ac680186a9928b82f Mon Sep 17 00:00:00 2001 From: superobk Date: Thu, 16 May 2024 17:08:56 +0800 Subject: [PATCH 14/18] wip --- main.py | 2 +- src/blackbox/asr.py | 5 ++++- src/log/log.py | 15 +++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 src/log/log.py diff --git a/main.py b/main.py index 83ace40..8e51269 100644 --- a/main.py +++ b/main.py @@ -20,7 +20,7 @@ class Main(): def run(self): logger = logging.getLogger(__name__) logger.info("jarvis-models start", extra={"version": "0.0.1"}) - uvicorn.run("server:app", host="0.0.0.0", port=8000, log_level="info") + uvicorn.run("server:app", host="0.0.0.0", port=8001, log_level="info") if __name__ == "__main__": injector = Injector() diff --git a/src/blackbox/asr.py b/src/blackbox/asr.py index 5338ec2..6b0efcc 100644 --- a/src/blackbox/asr.py +++ b/src/blackbox/asr.py @@ -4,6 +4,8 @@ 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 @@ -13,7 +15,8 @@ from injector import singleton, inject class ASR(Blackbox): @inject - def __init__(self,path = ".env.yaml") -> None: + 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/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 579c9063b411ac2df7dc876c5a053b315fced5a0 Mon Sep 17 00:00:00 2001 From: superobk Date: Tue, 30 Apr 2024 17:59:37 +0800 Subject: [PATCH 15/18] feat: log --- main.py | 3 +-- src/blackbox/asr.py | 5 +---- src/log/handler.py | 3 --- src/log/log.py | 15 --------------- 4 files changed, 2 insertions(+), 24 deletions(-) delete mode 100644 src/log/log.py diff --git a/main.py b/main.py index 8e51269..b645f91 100644 --- a/main.py +++ b/main.py @@ -7,12 +7,11 @@ 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=[logging.StreamHandler()], + handlers=[log_handler], level=log_config.level, datefmt=log_config.time_format, format='%(asctime)s %(message)s') diff --git a/src/blackbox/asr.py b/src/blackbox/asr.py index 6b0efcc..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) diff --git a/src/log/handler.py b/src/log/handler.py index 21b7c0d..8eee83f 100644 --- a/src/log/handler.py +++ b/src/log/handler.py @@ -7,7 +7,4 @@ class LogHandler(logging.StreamHandler): 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')) - From c950ebf995c6641b5ac0ab5a1ce3c1dd319df3b6 Mon Sep 17 00:00:00 2001 From: superobk Date: Thu, 16 May 2024 16:30:33 +0800 Subject: [PATCH 16/18] confi.get --- main.py | 7 +------ src/configuration.py | 6 +++--- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/main.py b/main.py index b645f91..607ceb4 100644 --- a/main.py +++ b/main.py @@ -8,13 +8,8 @@ from src.configuration import EnvConf, LogConf, singleton class Main(): env_conf: EnvConf @inject - def __init__(self, log_config: LogConf, env_conf: EnvConf, log_handler: LogHandler) -> None: + def __init__(self, log_config: LogConf, env_conf: EnvConf) -> 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__) diff --git a/src/configuration.py b/src/configuration.py index 81d425f..f99ebac 100644 --- a/src/configuration.py +++ b/src/configuration.py @@ -27,17 +27,17 @@ class Configuration(): bbb: ccc: "hello world" """ - def get(self, path: str | list[str], cfg: dict = None, default = 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) length = len(path) if length == 0 or not isinstance(cfg, dict): - return None + return default if length == 1: return cfg.get(path[0]) - return self.get(path[1:], cfg.get(path[0]), default=default) + return self.get(path[1:], cfg.get(path[0])) class TesouConf(): url: str From 2ae5d361f07896c3695d90d87f31f08014657dca Mon Sep 17 00:00:00 2001 From: superobk Date: Thu, 16 May 2024 17:19:04 +0800 Subject: [PATCH 17/18] doc: update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c62ad6d..c70b482 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https ``` ## More Dependencies | System | package | web | install command | -| --- | | --- | --- | +| --- | ---- | --- | --- | | python | filetype | https://pypi.org/project/filetype/ | pip install filetype | | python | fastAPI | https://fastapi.tiangolo.com/ | pip install fastapi | | python | python-multipart | https://pypi.org/project/python-multipart/ | pip install python-multipart | From 32b3f5e723a4ca993b8a075ec3230cfe15bf0c64 Mon Sep 17 00:00:00 2001 From: superobk Date: Fri, 17 May 2024 15:45:40 +0800 Subject: [PATCH 18/18] feat: logging init --- .gitignore | 3 ++- main.py | 6 +++--- src/configuration.py | 9 +++++---- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index e4c3af3..999156e 100644 --- a/.gitignore +++ b/.gitignore @@ -164,4 +164,5 @@ cython_debug/ playground.py .env* models -.idea/ \ No newline at end of file +.idea/ +promtail/ \ No newline at end of file diff --git a/main.py b/main.py index 607ceb4..4cafad9 100644 --- a/main.py +++ b/main.py @@ -6,10 +6,10 @@ from src.configuration import EnvConf, LogConf, singleton @singleton class Main(): - env_conf: EnvConf + @inject - def __init__(self, log_config: LogConf, env_conf: EnvConf) -> None: - self.env_conf=env_conf + def __init__(self, logConf: LogConf) -> None: + logging.basicConfig(level=logConf.level,filename=logConf.filename,format="%(asctime)s %(levelname)s %(message)s") def run(self): logger = logging.getLogger(__name__) diff --git a/src/configuration.py b/src/configuration.py index f99ebac..bb4e749 100644 --- a/src/configuration.py +++ b/src/configuration.py @@ -69,7 +69,7 @@ DEFAULT_TIME_FORMAT="%Y-%m-%d %H:%M:%S" class LogConf(): level: int time_format = "%Y-%m-%d %H:%M:%S" - + filename: str | None @inject def __init__(self,config: Configuration) -> None: self.level = config.get("log.level") @@ -79,12 +79,13 @@ class LogConf(): self.level = logging.WARNING else: self.level = level - self.time_format=config.get("log.time_format", default=DEFAULT_TIME_FORMAT) + self.filename = config.get("log.filename") + 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") + def __init__(self) -> None: + self.version = "0.0.1"