2023-08-27 18:07:33 -07:00
|
|
|
|
|
|
|
|
from enum import Enum
|
|
|
|
|
import uuid
|
|
|
|
|
import time
|
|
|
|
|
|
2023-09-07 12:50:13 +08:00
|
|
|
|
2023-08-27 18:07:33 -07: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-07 12:50:13 +08:00
|
|
|
|
2023-08-27 18:07:33 -07:00
|
|
|
|
|
|
|
|
class ComputeTask:
|
|
|
|
|
def __init__(self) -> None:
|
2023-09-09 22:07:31 +08:00
|
|
|
self.task_type = ComputeTaskType.NONE
|
2023-08-27 18:07:33 -07:00
|
|
|
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
|
2023-08-27 18:07:33 -07:00
|
|
|
|
|
|
|
|
self.state = ComputeTaskState.INIT
|
|
|
|
|
self.result = None
|
|
|
|
|
self.error_str = None
|
|
|
|
|
|
2023-09-10 20:50:37 -07:00
|
|
|
def set_llm_params(self, prompts, 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
|
2023-08-27 18:07:33 -07:00
|
|
|
self.create_time = time.time()
|
|
|
|
|
self.task_id = uuid.uuid4().hex
|
|
|
|
|
self.callchain_id = callchain_id
|
2023-09-20 14:45:54 -07:00
|
|
|
self.params["prompts"] = prompts.to_message_list()
|
2023-08-27 18:07:33 -07:00
|
|
|
if model_name is not None:
|
|
|
|
|
self.params["model_name"] = model_name
|
2023-09-07 12:50:13 +08:00
|
|
|
else:
|
2023-08-27 18:07:33 -07:00
|
|
|
self.params["model_name"] = "gpt-4-0613"
|
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-08-27 18:07:33 -07:00
|
|
|
|
2023-09-18 09:51:51 +08:00
|
|
|
def set_text_embedding_params(self, input, 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-23 10:44:57 +08:00
|
|
|
|
|
|
|
|
def set_text_2_image_params(self, prompt: str, model_name, callchain_id=None):
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
|
2023-08-27 18:07:33 -07: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.result_code: int = 0
|
2023-09-10 20:50:37 -07:00
|
|
|
self.result_str: str = None # easy to use,can read from result
|
|
|
|
|
self.result_message: dict = {}
|
2023-09-20 14:45:54 -07:00
|
|
|
self.result_refers: dict = {}
|
2023-09-07 12:50:13 +08:00
|
|
|
self.pading_data: bytearray = None
|
2023-08-27 18:07:33 -07:00
|
|
|
|
2023-09-07 12:50:13 +08:00
|
|
|
def set_from_task(self, task: ComputeTask):
|
2023-08-27 18:07:33 -07:00
|
|
|
self.task_id = task.task_id
|
|
|
|
|
self.callchain_id = task.callchain_id
|