190 lines
5.8 KiB
Python
190 lines
5.8 KiB
Python
import re
|
|
from .FormatList import FormatList, TransToFrontFormat
|
|
|
|
is_mock = False
|
|
|
|
colorMap = {
|
|
"propose": [194, 34, 73],
|
|
"execute": [242, 28, 86],
|
|
"critique": [68, 24, 70],
|
|
"finalize": [14, 27, 73],
|
|
"inputobject": [108, 45, 74],
|
|
"outputobject": [32, 100, 78],
|
|
"agent": [0, 0, 80],
|
|
}
|
|
|
|
|
|
|
|
def OperateCamelStr(_str: str):
|
|
if " " in _str:
|
|
return _str
|
|
return "".join(" " + c if c.isupper() else c for c in _str).lstrip()
|
|
|
|
|
|
def ParseRole(_str: str) -> dict:
|
|
if _str[0] == "(" and _str[-1] == ")":
|
|
_str = _str[1:-1].split(":")
|
|
return dict({"Name": _str[0], "Job": _str[1]})
|
|
|
|
|
|
def ParseStepTask(step_task: str):
|
|
if len(step_task) == 0:
|
|
return ""
|
|
|
|
if step_task[0].isupper() and step_task[-1] == ".":
|
|
step_task = step_task[0].lower() + step_task[1:-1]
|
|
return step_task
|
|
|
|
|
|
def Generate_Collaboration_Specification_frontEnd(_str):
|
|
assert isinstance(_str, str)
|
|
res = dict()
|
|
res["template"] = ""
|
|
res["data"] = dict()
|
|
Persons = []
|
|
|
|
temp = re.findall(r"\(\w*:\w*?\)", _str, flags=re.M)
|
|
new_str = re.sub(r" *\(\w*:\w*?\) *", " ", _str, flags=re.M)
|
|
words = new_str.split(" ")
|
|
for i in range(len(temp)):
|
|
temp[i] = ParseRole(temp[i])
|
|
res["data"][str(len(Persons))] = dict(
|
|
{
|
|
"text": temp[i]["Name"],
|
|
"color": colorMap[temp[i]["Job"].lower()],
|
|
}
|
|
)
|
|
Persons.append(temp[i]["Name"])
|
|
|
|
index = int(0)
|
|
for i in range(len(words)):
|
|
if words[i] in Persons:
|
|
words[i] = TransToFrontFormat(index)
|
|
index += 1
|
|
|
|
res["template"] = " ".join(words)
|
|
return res
|
|
|
|
|
|
def Generate_Agent_DutySpecification_frontEnd(_obj: dict):
|
|
_obj = _obj.copy()
|
|
for key, val in _obj.items():
|
|
if isinstance(val, list):
|
|
for i, v in enumerate(val):
|
|
if isinstance(v, dict) and "DutyType" in v.keys():
|
|
_obj[key][i]["renderSpec"] = dict(
|
|
{"color": colorMap[_obj[key][i]["DutyType"].lower()]}
|
|
)
|
|
return _obj
|
|
|
|
|
|
def CheckDict(_dict: dict) -> bool:
|
|
items = ["InputObject_List", "OutputObject", "TaskContent"]
|
|
for e in items:
|
|
if e not in _dict.keys():
|
|
return False
|
|
return True
|
|
|
|
|
|
def Add_Collaboration_Brief_FrontEnd(_obj):
|
|
if isinstance(_obj, list):
|
|
for i in range(len(_obj)):
|
|
_obj[i] = Add_Collaboration_Brief_FrontEnd(_obj[i])
|
|
elif isinstance(_obj, dict) and (
|
|
CheckDict(_obj) or "Collaboration Process" in _obj.keys()
|
|
):
|
|
if "Collaboration Process" in _obj.keys():
|
|
_obj["Collaboration Process"] = Add_Collaboration_Brief_FrontEnd(
|
|
_obj["Collaboration Process"]
|
|
)
|
|
else:
|
|
_obj = _obj.copy()
|
|
Agent_List = (
|
|
_obj["AgentSelection"][:]
|
|
if "AgentSelection" in _obj.keys()
|
|
else None
|
|
)
|
|
InputObject_List = (
|
|
[OperateCamelStr(b) for b in _obj["InputObject_List"]]
|
|
if "InputObject_List" in _obj.keys()
|
|
and _obj["InputObject_List"] is not None
|
|
else []
|
|
)
|
|
OutputObject = (
|
|
OperateCamelStr(_obj["OutputObject"])
|
|
if "OutputObject" in _obj.keys()
|
|
else ""
|
|
)
|
|
|
|
_obj["StepName"] = OperateCamelStr(_obj["StepName"])
|
|
_obj["InputObject_List"] = InputObject_List
|
|
_obj["OutputObject"] = OutputObject
|
|
|
|
TaskContent = _obj["TaskContent"]
|
|
# add Collaboration Brief
|
|
_key = (
|
|
"Collaboration_Brief_FrontEnd"
|
|
if Agent_List is not None and len(Agent_List) > 0
|
|
else "Collaboration_Brief_LackAgent_FrontEnd"
|
|
)
|
|
_obj[_key] = Generate_Collaboration_Brief_FrontEnd(
|
|
InputObject_List, OutputObject, Agent_List, TaskContent
|
|
)
|
|
return _obj
|
|
|
|
|
|
def Generate_Collaboration_Brief_FrontEnd(
|
|
InputObject_List, OutputObject, Agent_List, TaskContent
|
|
):
|
|
res = dict({})
|
|
res["template"] = str("")
|
|
res["data"] = dict({})
|
|
len_in = len(InputObject_List)
|
|
len_out = 1
|
|
len_ag = len(Agent_List) if Agent_List is not None else 0
|
|
|
|
Template_Sentence_InputObject = (
|
|
f"Based on {FormatList(InputObject_List).Format()}, "
|
|
if len_in > 0
|
|
else ""
|
|
)
|
|
Template_Sentence_Agent = (
|
|
f"{FormatList(Agent_List, len_in).Format()} "
|
|
if Agent_List is not None and len_ag > 0
|
|
else ""
|
|
)
|
|
Template_Sentence_TaskContent = f"perform{'s' if len_ag == 1 else ''} the task of {ParseStepTask(TaskContent)} "
|
|
Template_Sentence_OutputObject = (
|
|
f"to obtain {FormatList([OutputObject], len_ag + len_in).Format()}."
|
|
if len_out > 0
|
|
else ""
|
|
)
|
|
Template_Sentence = (
|
|
Template_Sentence_InputObject
|
|
+ Template_Sentence_Agent
|
|
+ Template_Sentence_TaskContent
|
|
+ Template_Sentence_OutputObject
|
|
)
|
|
|
|
res["template"] = Template_Sentence
|
|
index = int(0)
|
|
for i in range(len_in):
|
|
res["data"][str(index)] = dict(
|
|
{
|
|
"text": InputObject_List[i],
|
|
"color": colorMap["InputObject".lower()],
|
|
}
|
|
)
|
|
index += 1
|
|
for i in range(len_ag):
|
|
res["data"][str(index)] = dict(
|
|
{"text": Agent_List[i], "color": colorMap["Agent".lower()]}
|
|
)
|
|
index += 1
|
|
|
|
res["data"][str(index)] = dict(
|
|
{"text": OutputObject, "color": colorMap["OutputObject".lower()]}
|
|
)
|
|
index += 1
|
|
return res
|