fix: singleton

This commit is contained in:
superobk
2024-04-30 15:41:08 +08:00
parent 37f1c588cf
commit ddd00aeabb
14 changed files with 62 additions and 66 deletions

58
main.py
View File

@ -1,60 +1,4 @@
from typing import Annotated, Union
from fastapi import FastAPI, Request, status, Form
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
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
injector = Injector()
blackbox_factory = injector.get(BlackboxFactory)
@app.post("/")
async def blackbox(blackbox_name: Union[str, None] = None, request: Request = None):
if not blackbox_name:
return await JSONResponse(content={"error": "blackbox_name is required"}, status_code=status.HTTP_400_BAD_REQUEST)
try:
box = blackbox_factory.create_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)
def read_form_image(request: Request):
async def inner(field: str):
print(field)
return "image"
return inner
def read_form_text(request: Request):
def inner(field: str):
print(field)
return "text"
return inner
@app.post("/workflows")
async def workflows(script: Annotated[str, Form()], request: Request=None):
dsl_runtime = Runtime(exteral_fun={"print": print,
'read_form_image': read_form_image(request),
"read_form_text": read_form_text(request)})
t = Tokenizer()
t.init(script)
ast = program_parser(t)
ast.exec(dsl_runtime)
if __name__ == "__main__":
uvicorn.run("main:app", host="0.0.0.0", port=8000, log_level="info")
uvicorn.run("router:app", host="0.0.0.0", port=8000, log_level="info")

35
router.py Normal file
View File

@ -0,0 +1,35 @@
from typing import Annotated, Union
from fastapi import FastAPI, Request, status, Form
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
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
injector = Injector()
blackbox_factory = injector.get(BlackboxFactory)
@app.post("/")
async def blackbox(blackbox_name: Union[str, None] = None, request: Request = None):
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)
except ValueError:
return await JSONResponse(content={"error": "value error"}, status_code=status.HTTP_400_BAD_REQUEST)
return await box.fast_api_handler(request)

View File

@ -7,7 +7,9 @@ from fastapi.responses import JSONResponse
from ..asr.rapid_paraformer.utils import read_yaml
from ..asr.rapid_paraformer import RapidParaformer
from .blackbox import Blackbox
from injector import singleton
@singleton
class ASR(Blackbox):
def __init__(self, path = ".env.yaml") -> None:

View File

@ -1,6 +1,6 @@
from fastapi import Request, Response,status
from fastapi.responses import JSONResponse
from injector import inject
from injector import inject, singleton
from .asr import ASR
from .tesou import Tesou
@ -8,6 +8,7 @@ from .tts import TTS
from .blackbox import Blackbox
@singleton
class AudioChat(Blackbox):
@inject

View File

@ -3,9 +3,10 @@ from fastapi.responses import JSONResponse
import speech_recognition as sr
import filetype
import io
from injector import singleton
from .blackbox import Blackbox
@singleton
class AudioToText(Blackbox):
def __call__(self, *args, **kwargs):

View File

@ -9,8 +9,9 @@ from .tesou import Tesou
from .fastchat import Fastchat
from .g2e import G2E
from .text_and_image import TextAndImage
from injector import inject
from injector import inject, singleton
@singleton
class BlackboxFactory:
models = {}
@ -40,7 +41,7 @@ class BlackboxFactory:
def __call__(self, *args, **kwargs):
return self.processing(*args, **kwargs)
def create_blackbox(self, blackbox_name: str) -> Blackbox:
def call_blackbox(self, blackbox_name: str) -> Blackbox:
model = self.models.get(blackbox_name)
if model is None:
raise ValueError("Invalid blockbox type")

View File

@ -6,8 +6,10 @@ from fastapi.responses import JSONResponse
from .blackbox import Blackbox
from lagent.llms.lmdepoly_wrapper import LMDeployClient
from lagent.llms.meta_template import INTERNLM2_META as META
from injector import singleton
class Sentiment(Blackbox):
@singleton
class Emotion(Blackbox):
def __init__(self, model_name, model_url) -> None:
self.model = LMDeployClient(

View File

@ -7,6 +7,8 @@ from .blackbox import Blackbox
import requests
import json
from injector import singleton
@singleton
class Fastchat(Blackbox):
def __call__(self, *args, **kwargs):

View File

@ -7,7 +7,8 @@ from .blackbox import Blackbox
import requests
import json
from openai import OpenAI
from injector import singleton
@singleton
class G2E(Blackbox):
def __call__(self, *args, **kwargs):

View File

@ -6,7 +6,8 @@ from fastapi.responses import JSONResponse
from ..sentiment_engine.sentiment_engine import SentimentEngine
from .blackbox import Blackbox
from injector import singleton
@singleton
class Sentiment(Blackbox):
def __init__(self) -> None:

View File

@ -7,7 +7,9 @@ from ..configuration import TesouConf
from .blackbox import Blackbox
import requests
from injector import singleton
@singleton
class Tesou(Blackbox):
url: str

View File

@ -4,7 +4,8 @@ from fastapi import Request, Response, status
from fastapi.responses import JSONResponse
from .blackbox import Blackbox
from injector import singleton
@singleton
class TextAndImage(Blackbox):
def __call__(self, *args, **kwargs):

View File

@ -3,7 +3,8 @@ from fastapi.responses import JSONResponse
from .blackbox import Blackbox
from gtts import gTTS
from io import BytesIO
from injector import singleton
@singleton
class TextToAudio(Blackbox):
def __call__(self, *args, **kwargs):

View File

@ -6,7 +6,9 @@ from fastapi import Request, Response, status
from fastapi.responses import JSONResponse
from .blackbox import Blackbox
from ..tts.tts_service import TTService
from injector import singleton
@singleton
class TTS(Blackbox):
def __init__(self, *args, **kwargs) -> None: