|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import re |
|
from agent.component.base import ComponentBase, ComponentParamBase |
|
|
|
|
|
class TemplateParam(ComponentParamBase): |
|
""" |
|
Define the Generate component parameters. |
|
""" |
|
|
|
def __init__(self): |
|
super().__init__() |
|
self.content = "" |
|
self.parameters = [] |
|
|
|
def check(self): |
|
self.check_empty(self.content, "[Template] Content") |
|
return True |
|
|
|
|
|
class Template(ComponentBase): |
|
component_name = "Template" |
|
|
|
def get_dependent_components(self): |
|
cpnts = set([para["component_id"].split("@")[0] for para in self._param.parameters \ |
|
if para.get("component_id") \ |
|
and para["component_id"].lower().find("answer") < 0 \ |
|
and para["component_id"].lower().find("begin") < 0]) |
|
return list(cpnts) |
|
|
|
def _run(self, history, **kwargs): |
|
content = self._param.content |
|
|
|
self._param.inputs = [] |
|
for para in self._param.parameters: |
|
if not para.get("component_id"): continue |
|
component_id = para["component_id"].split("@")[0] |
|
if para["component_id"].lower().find("@") >= 0: |
|
cpn_id, key = para["component_id"].split("@") |
|
for p in self._canvas.get_component(cpn_id)["obj"]._param.query: |
|
if p["key"] == key: |
|
kwargs[para["key"]] = p.get("value", "") |
|
self._param.inputs.append( |
|
{"component_id": para["component_id"], "content": kwargs[para["key"]]}) |
|
break |
|
else: |
|
assert False, f"Can't find parameter '{key}' for {cpn_id}" |
|
continue |
|
|
|
cpn = self._canvas.get_component(component_id)["obj"] |
|
if cpn.component_name.lower() == "answer": |
|
hist = self._canvas.get_history(1) |
|
if hist: |
|
hist = hist[0]["content"] |
|
else: |
|
hist = "" |
|
kwargs[para["key"]] = hist |
|
continue |
|
|
|
_, out = cpn.output(allow_partial=False) |
|
if "content" not in out.columns: |
|
kwargs[para["key"]] = "" |
|
else: |
|
kwargs[para["key"]] = " - "+"\n - ".join([o if isinstance(o, str) else str(o) for o in out["content"]]) |
|
self._param.inputs.append({"component_id": para["component_id"], "content": kwargs[para["key"]]}) |
|
|
|
for n, v in kwargs.items(): |
|
content = re.sub(r"\{%s\}" % re.escape(n), str(v).replace("\\", " "), content) |
|
|
|
return Template.be_output(content) |
|
|
|
|