From 96d964361ecf1d400e453dc4136d040ceab5f9a9 Mon Sep 17 00:00:00 2001 From: chenyunda218 Date: Tue, 20 Aug 2024 16:26:20 +0800 Subject: [PATCH 1/4] feat: workflow --- main.py | 3 +-- src/blackbox/__init__.py | 0 src/blackbox/workflow.py | 41 ++++++++++++++++++++++------------------ 3 files changed, 24 insertions(+), 20 deletions(-) create mode 100644 src/blackbox/__init__.py diff --git a/main.py b/main.py index 4f70de2..4f2baeb 100644 --- a/main.py +++ b/main.py @@ -1,8 +1,7 @@ import uvicorn import logging from injector import Injector,inject -from src.log.handler import LogHandler -from src.configuration import EnvConf, LogConf, singleton +from src.configuration import LogConf, singleton @singleton class Main(): diff --git a/src/blackbox/__init__.py b/src/blackbox/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/blackbox/workflow.py b/src/blackbox/workflow.py index d3aa555..514e6a6 100644 --- a/src/blackbox/workflow.py +++ b/src/blackbox/workflow.py @@ -1,6 +1,4 @@ -from .audio_to_text import AudioToText -from .text_to_audio import TextToAudio from .sum import Sum from fastapi import Request, Response from .blackbox import Blackbox @@ -10,6 +8,8 @@ from ..dotchain.runtime.runtime import Runtime from ..dotchain.runtime.tokenizer import Tokenizer from ..dotchain.runtime.ast import Literal import json +import re + def read_binay(io): return Literal(io.read()) @@ -24,7 +24,7 @@ def set_map(map: dict, key, value): def jsonfiy(obj): return Literal(json.dumps(obj)) -def get_value(d: dict, key): +def get_map_value(d: dict, key): value = d.get(key) if value is dict: return value @@ -36,12 +36,8 @@ def get_value(d: dict, key): class Workflow(Blackbox): @inject - def __init__(self, sum: Sum, - audio_to_text: AudioToText, - text_to_audio: TextToAudio) -> None: + def __init__(self, sum: Sum) -> None: self.sum_blackbox = sum - self.audio_to_text = audio_to_text - self.text_to_audio_blackbox = text_to_audio def __call__(self, *args, **kwargs): return self.processing(*args, **kwargs) @@ -54,6 +50,18 @@ class Workflow(Blackbox): async def processing(self, *args, **kwargs): request = args[0] + content_type = request.headers.get("Content-Type") + if re.match(r"application/json", content_type) is not None: + return await self.handler_with_json_mode(request) + elif re.match(r"multipart/form-data", content_type) is not None: + return await self.handler_with_formdata_mode(request) + return Response(content="Invalid content type", status_code=400) + + def valid(self, *args, **kwargs) -> bool: + return super().valid(*args, **kwargs) + + # json mode 保留 script 字段給 runtime 解析 + async def handler_with_json_mode(self,request: Request): json = await request.json() content = None mdeia_type = None @@ -67,19 +75,16 @@ class Workflow(Blackbox): def add_header(key, value): nonlocal headers headers[key] = value - script = json["script"] t = Tokenizer() t.init(script) runtime = Runtime( context={"json": json}, exteral_fun={ + "print": print, "new_map": new_map, "set_map": set_map, - "audio_to_text": self.audio_to_text, - "text_to_audio": self.text_to_audio, - "get_value": get_value, - "print": print, + "get_map_value": get_map_value, "set_content": set_content, "set_media_type": set_media_type, "add_header": add_header, @@ -91,13 +96,13 @@ class Workflow(Blackbox): ast = program_parser(t) ast.exec(runtime) return Response(content=content, media_type=mdeia_type, headers=headers) - - def valid(self, *args, **kwargs) -> bool: - return super().valid(*args, **kwargs) - + # formdata mode 保留 script 字段給 runtime 解析 + async def handler_with_formdata_mode(self,request: Request): + json = await request.json() + print("form") + async def fast_api_handler(self, request: Request): return await self.processing(request) - # return Response(content=b.read(), media_type="audio/mp3", headers={"Content-Disposition": "attachment; filename=audio.mp3"}) """ let b = new_map(); From b6891b7146c253e2b83d0395eb80de1e0c065d55 Mon Sep 17 00:00:00 2001 From: chenyunda218 Date: Tue, 20 Aug 2024 16:54:47 +0800 Subject: [PATCH 2/4] fixup --- src/blackbox/workflow.py | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/src/blackbox/workflow.py b/src/blackbox/workflow.py index 514e6a6..98cc33d 100644 --- a/src/blackbox/workflow.py +++ b/src/blackbox/workflow.py @@ -17,7 +17,7 @@ def read_binay(io): def new_map(): return Literal({}) -def set_map(map: dict, key, value): +def set_map_value(map: dict, key, value): map[key] = value return map @@ -50,18 +50,6 @@ class Workflow(Blackbox): async def processing(self, *args, **kwargs): request = args[0] - content_type = request.headers.get("Content-Type") - if re.match(r"application/json", content_type) is not None: - return await self.handler_with_json_mode(request) - elif re.match(r"multipart/form-data", content_type) is not None: - return await self.handler_with_formdata_mode(request) - return Response(content="Invalid content type", status_code=400) - - def valid(self, *args, **kwargs) -> bool: - return super().valid(*args, **kwargs) - - # json mode 保留 script 字段給 runtime 解析 - async def handler_with_json_mode(self,request: Request): json = await request.json() content = None mdeia_type = None @@ -75,7 +63,7 @@ class Workflow(Blackbox): def add_header(key, value): nonlocal headers headers[key] = value - script = json["script"] + script = request.query_params["script"] t = Tokenizer() t.init(script) runtime = Runtime( @@ -83,7 +71,7 @@ class Workflow(Blackbox): exteral_fun={ "print": print, "new_map": new_map, - "set_map": set_map, + "set_map_value": set_map_value, "get_map_value": get_map_value, "set_content": set_content, "set_media_type": set_media_type, @@ -96,11 +84,10 @@ class Workflow(Blackbox): ast = program_parser(t) ast.exec(runtime) return Response(content=content, media_type=mdeia_type, headers=headers) - # formdata mode 保留 script 字段給 runtime 解析 - async def handler_with_formdata_mode(self,request: Request): - json = await request.json() - print("form") - + + def valid(self, *args, **kwargs) -> bool: + return super().valid(*args, **kwargs) + async def fast_api_handler(self, request: Request): return await self.processing(request) From f954385747e2f78e0bd2ccb4f50ce16a132dd06f Mon Sep 17 00:00:00 2001 From: chenyunda218 Date: Tue, 20 Aug 2024 17:28:10 +0800 Subject: [PATCH 3/4] fixup --- src/blackbox/workflow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/blackbox/workflow.py b/src/blackbox/workflow.py index 98cc33d..e0cdc68 100644 --- a/src/blackbox/workflow.py +++ b/src/blackbox/workflow.py @@ -49,7 +49,7 @@ class Workflow(Blackbox): return Literal(self.sum_blackbox.processing(*args, **kwargs)) async def processing(self, *args, **kwargs): - request = args[0] + request: Request = args[0] json = await request.json() content = None mdeia_type = None From 35043199817b61f8754e9b5f5de1656cf8c1a0ff Mon Sep 17 00:00:00 2001 From: chenyunda218 Date: Wed, 21 Aug 2024 10:10:55 +0800 Subject: [PATCH 4/4] workflow --- src/blackbox/workflow.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/blackbox/workflow.py b/src/blackbox/workflow.py index e0cdc68..5822fca 100644 --- a/src/blackbox/workflow.py +++ b/src/blackbox/workflow.py @@ -31,6 +31,9 @@ def get_map_value(d: dict, key): if value is list: return value return Literal(value) +def get_map_int(d: dict, key): + value = d.get(key) + return Literal(int(value)) @singleton class Workflow(Blackbox): @@ -38,6 +41,7 @@ class Workflow(Blackbox): @inject def __init__(self, sum: Sum) -> None: self.sum_blackbox = sum + self.cost = 0 def __call__(self, *args, **kwargs): return self.processing(*args, **kwargs) @@ -48,6 +52,17 @@ class Workflow(Blackbox): def sum(self, *args, **kwargs): return Literal(self.sum_blackbox.processing(*args, **kwargs)) + def get_cost(self): + return self.cost + + def blackbox_example(self): + self.cost_increase(10); + return Literal("Blackbox result") + + def cost_increase(self, cost): + self.cost+=cost + return self.cost + async def processing(self, *args, **kwargs): request: Request = args[0] json = await request.json() @@ -79,6 +94,9 @@ class Workflow(Blackbox): "sum": self.sum, "read_binay": read_binay, "jsonfiy": jsonfiy, + "get_map_int": get_map_int, + "blackbox_example": self.blackbox_example, + "get_cost": self.get_cost, } ) ast = program_parser(t)