Files
opendan/src/aios_kernel/compute_task.py
T

125 lines
4.0 KiB
Python
Raw Normal View History

from enum import Enum
import uuid
import time
2023-09-27 17:24:38 +08:00
from typing import Union
from knowledge import ObjectID
from .storage import AIStorage
2023-09-26 18:46:26 -07:00
class ComputeTaskResultCode(Enum):
OK = 0
TIMEOUT = 1
NO_WORKER = 2
ERROR = 3
2023-09-26 18:46:26 -07:00
2023-09-07 12:50:13 +08:00
class ComputeTaskState(Enum):
DONE = 0
INIT = 1
RUNNING = 2
ERROR = 3
PENDING = 4
2023-09-07 12:50:13 +08:00
class ComputeTaskType(Enum):
2023-09-18 11:41:16 -07:00
NONE = "None"
LLM_COMPLETION = "llm_completion"
TEXT_2_IMAGE = "text_2_image"
IMAGE_2_IMAGE = "image_2_image"
VOICE_2_TEXT = "voice_2_text"
TEXT_2_VOICE = "text_2_voice"
TEXT_EMBEDDING ="text_embedding"
2023-09-26 20:13:55 +08:00
IMAGE_EMBEDDING ="image_embedding"
2023-09-07 12:50:13 +08:00
class ComputeTask:
def __init__(self) -> None:
2023-09-09 22:07:31 +08:00
self.task_type = ComputeTaskType.NONE
self.create_time = None
2023-09-07 12:50:13 +08:00
self.task_id: str = None
self.callchain_id: str = None
self.params: dict = {}
self.refers: dict = None
self.pading_data: bytearray = None
self.state = ComputeTaskState.INIT
self.result = None
self.error_str = None
def set_llm_params(self, prompts, resp_mode,model_name, max_token_size, inner_functions = None, callchain_id=None):
2023-09-09 22:07:31 +08:00
self.task_type = ComputeTaskType.LLM_COMPLETION
self.create_time = time.time()
self.task_id = uuid.uuid4().hex
self.callchain_id = callchain_id
self.params["prompts"] = prompts.to_message_list()
self.params["resp_mode"] = resp_mode
if model_name is None:
model_name = AIStorage.get_instance().get_user_config().get_value("llm_model_name")
self.params["model_name"] = model_name
2023-09-10 20:50:37 -07:00
if max_token_size is None:
self.params["max_token_size"] = 4000
else:
self.params["max_token_size"] = max_token_size
if inner_functions is not None:
self.params["inner_functions"] = inner_functions
2023-09-27 17:24:38 +08:00
def set_text_embedding_params(self, input: str, model_name=None, callchain_id = None):
2023-09-18 11:41:16 -07:00
self.task_type = ComputeTaskType.TEXT_EMBEDDING
2023-08-31 15:45:02 +08:00
self.create_time = time.time()
self.task_id = uuid.uuid4().hex
self.callchain_id = callchain_id
2023-08-31 16:32:20 +08:00
if model_name is not None:
self.params["model_name"] = model_name
else:
self.params["model_name"] = "text-embedding-ada-002"
2023-08-31 15:45:02 +08:00
self.params["input"] = input
2023-09-27 17:24:38 +08:00
def set_image_embedding_params(self, input = Union[ObjectID, bytes], model_name=None, callchain_id = None):
self.task_type = ComputeTaskType.IMAGE_EMBEDDING
self.create_time = time.time()
self.task_id = uuid.uuid4().hex
self.callchain_id = callchain_id
if model_name is not None:
self.params["model_name"] = model_name
else:
self.params["model_name"] = None
self.params["input"] = input
2023-09-23 10:44:57 +08:00
2023-09-27 19:37:13 +08:00
def set_text_2_image_params(self, prompt: str, model_name, negative_prompt="", callchain_id=None):
2023-09-23 10:44:57 +08:00
self.task_type = ComputeTaskType.TEXT_2_IMAGE
self.create_time = time.time()
self.task_id = uuid.uuid4().hex
self.callchain_id = callchain_id
self.params["prompt"] = prompt
2023-09-27 19:37:13 +08:00
self.params["negative_prompt"] = negative_prompt
2023-09-23 10:44:57 +08:00
if model_name is not None:
self.params["model_name"] = model_name
else:
self.params["model_name"] = "v1-5-pruned-emaonly"
2023-08-31 15:45:02 +08:00
def display(self) -> str:
return f"ComputeTask: {self.task_id} {self.task_type} {self.state}"
class ComputeTaskResult:
def __init__(self) -> None:
self.create_time = None
2023-09-07 12:50:13 +08:00
self.task_id: str = None
self.callchain_id: str = None
self.worker_id: str = None
self.error_str : str = None
2023-09-07 12:50:13 +08:00
self.result_code: int = 0
2023-09-10 20:50:37 -07:00
self.result_str: str = None # easy to use,can read from result
2023-09-28 14:03:52 -07:00
self.result : dict = {}
self.result_refers: dict = {}
2023-09-07 12:50:13 +08:00
self.pading_data: bytearray = None
2023-09-07 12:50:13 +08:00
def set_from_task(self, task: ComputeTask):
self.task_id = task.task_id
self.callchain_id = task.callchain_id
2023-09-26 18:46:26 -07:00
task.result = self