mirror of
https://github.com/BoardWare-Genius/jarvis-models.git
synced 2025-12-14 00:53:25 +00:00
feat: dotchain
This commit is contained in:
@ -102,6 +102,16 @@ def cosyvoicetts_loader():
|
||||
from .cosyvoicetts import CosyVoiceTTS
|
||||
return Injector().get(CosyVoiceTTS)
|
||||
|
||||
@model_loader(lazy=blackboxConf.lazyloading)
|
||||
def workflow_loader():
|
||||
from .workflow import Workflow
|
||||
return Injector().get(Workflow)
|
||||
|
||||
@model_loader(lazy=blackboxConf.lazyloading)
|
||||
def sum_loader():
|
||||
from .sum import Sum
|
||||
return Injector().get(Sum)
|
||||
|
||||
@singleton
|
||||
class BlackboxFactory:
|
||||
models = {}
|
||||
@ -124,6 +134,8 @@ class BlackboxFactory:
|
||||
self.models["chat"] = chat_loader
|
||||
self.models["chat_llama"] = chat_llama_loader
|
||||
self.models["cosyvoicetts"] = cosyvoicetts_loader
|
||||
self.models["workflow"] = workflow_loader
|
||||
self.models["sum"] = sum_loader
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
return self.processing(*args, **kwargs)
|
||||
|
||||
24
src/blackbox/sum.py
Normal file
24
src/blackbox/sum.py
Normal file
@ -0,0 +1,24 @@
|
||||
from .blackbox import Blackbox
|
||||
from injector import singleton
|
||||
|
||||
@singleton
|
||||
class Sum(Blackbox):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
return self.processing(*args, **kwargs)
|
||||
|
||||
def processing(self, *args, **kwargs):
|
||||
total = 0
|
||||
for arg in args[0]:
|
||||
total += arg
|
||||
return total
|
||||
|
||||
def valid(self, *args, **kwargs) -> bool:
|
||||
return super().valid(*args, **kwargs)
|
||||
|
||||
async def fast_api_handler(self, request):
|
||||
json = await request.json()
|
||||
return self.processing(json)
|
||||
61
src/blackbox/workflow.py
Normal file
61
src/blackbox/workflow.py
Normal file
@ -0,0 +1,61 @@
|
||||
|
||||
from .sum import Sum
|
||||
from fastapi import Request
|
||||
from .blackbox import Blackbox
|
||||
from injector import singleton, inject
|
||||
from ..dotchain.runtime.interpreter import program_parser
|
||||
from ..dotchain.runtime.runtime import Runtime
|
||||
from ..dotchain.runtime.tokenizer import Tokenizer
|
||||
from ..dotchain.runtime.ast import Literal
|
||||
|
||||
@singleton
|
||||
class Workflow(Blackbox):
|
||||
|
||||
@inject
|
||||
def __init__(self, sum: Sum):
|
||||
self.sum_blackbox = sum
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
return self.processing(*args, **kwargs)
|
||||
|
||||
def sum(self, *args, **kwargs):
|
||||
return Literal(self.sum_blackbox.processing(*args, **kwargs))
|
||||
|
||||
async def processing(self, *args, **kwargs):
|
||||
request = args[0]
|
||||
json = await request.json()
|
||||
result = None
|
||||
|
||||
def set_result(r):
|
||||
nonlocal result
|
||||
result = r
|
||||
|
||||
def get_value(d: dict, key):
|
||||
value = d.get(key)
|
||||
if value is dict:
|
||||
return value
|
||||
if value is list:
|
||||
return value
|
||||
return Literal(value)
|
||||
|
||||
script = json["script"]
|
||||
t = Tokenizer()
|
||||
t.init(script)
|
||||
runtime = Runtime(
|
||||
context={"json": json},
|
||||
exteral_fun={
|
||||
"get_value": get_value,
|
||||
"print": print,
|
||||
"set_result": set_result,
|
||||
"sum": self.sum,
|
||||
}
|
||||
)
|
||||
ast = program_parser(t)
|
||||
ast.exec(runtime)
|
||||
return result
|
||||
|
||||
def valid(self, *args, **kwargs) -> bool:
|
||||
return super().valid(*args, **kwargs)
|
||||
|
||||
async def fast_api_handler(self, request: Request):
|
||||
return await self.processing(request)
|
||||
Reference in New Issue
Block a user