Kevin Hu commited on
Commit ·
42a04f2
1
Parent(s): d2ed30e
Make `Categorize` see more chat hisotry. (#4538)
Browse files### What problem does this PR solve?
#4521
### Type of change
- [x] Performance Improvement
- agent/component/base.py +6 -5
- agent/component/categorize.py +8 -5
agent/component/base.py
CHANGED
|
@@ -482,11 +482,12 @@ class ComponentBase(ABC):
|
|
| 482 |
continue
|
| 483 |
|
| 484 |
if q["component_id"].lower().find("answer") == 0:
|
| 485 |
-
|
| 486 |
-
|
| 487 |
-
|
| 488 |
-
|
| 489 |
-
|
|
|
|
| 490 |
continue
|
| 491 |
|
| 492 |
outs.append(self._canvas.get_component(q["component_id"])["obj"].output(allow_partial=False)[1])
|
|
|
|
| 482 |
continue
|
| 483 |
|
| 484 |
if q["component_id"].lower().find("answer") == 0:
|
| 485 |
+
txt = []
|
| 486 |
+
for r, c in self._canvas.history[::-1][:self._param.message_history_window_size]:
|
| 487 |
+
txt.append(f"{r.upper()}: {c}")
|
| 488 |
+
txt = "\n".join(txt)
|
| 489 |
+
self._param.inputs.append({"content": txt, "component_id": q["component_id"]})
|
| 490 |
+
outs.append(pd.DataFrame([{"content": txt}]))
|
| 491 |
continue
|
| 492 |
|
| 493 |
outs.append(self._canvas.get_component(q["component_id"])["obj"].output(allow_partial=False)[1])
|
agent/component/categorize.py
CHANGED
|
@@ -39,13 +39,13 @@ class CategorizeParam(GenerateParam):
|
|
| 39 |
if not v.get("to"):
|
| 40 |
raise ValueError(f"[Categorize] 'To' of category {k} can not be empty!")
|
| 41 |
|
| 42 |
-
def get_prompt(self):
|
| 43 |
cate_lines = []
|
| 44 |
for c, desc in self.category_description.items():
|
| 45 |
for line in desc.get("examples", "").split("\n"):
|
| 46 |
if not line:
|
| 47 |
continue
|
| 48 |
-
cate_lines.append("
|
| 49 |
descriptions = []
|
| 50 |
for c, desc in self.category_description.items():
|
| 51 |
if desc.get("description"):
|
|
@@ -62,11 +62,15 @@ class CategorizeParam(GenerateParam):
|
|
| 62 |
{}
|
| 63 |
You could learn from the above examples.
|
| 64 |
Just mention the category names, no need for any additional words.
|
|
|
|
|
|
|
|
|
|
| 65 |
""".format(
|
| 66 |
len(self.category_description.keys()),
|
| 67 |
"/".join(list(self.category_description.keys())),
|
| 68 |
"\n".join(descriptions),
|
| 69 |
-
"- ".join(cate_lines)
|
|
|
|
| 70 |
)
|
| 71 |
return self.prompt
|
| 72 |
|
|
@@ -76,9 +80,8 @@ class Categorize(Generate, ABC):
|
|
| 76 |
|
| 77 |
def _run(self, history, **kwargs):
|
| 78 |
input = self.get_input()
|
| 79 |
-
input = "Question: " + (list(input["content"])[-1] if "content" in input else "") + "\tCategory: "
|
| 80 |
chat_mdl = LLMBundle(self._canvas.get_tenant_id(), LLMType.CHAT, self._param.llm_id)
|
| 81 |
-
ans = chat_mdl.chat(self._param.get_prompt(), [{"role": "user", "content":
|
| 82 |
self._param.gen_conf())
|
| 83 |
logging.debug(f"input: {input}, answer: {str(ans)}")
|
| 84 |
for c in self._param.category_description.keys():
|
|
|
|
| 39 |
if not v.get("to"):
|
| 40 |
raise ValueError(f"[Categorize] 'To' of category {k} can not be empty!")
|
| 41 |
|
| 42 |
+
def get_prompt(self, chat_hist):
|
| 43 |
cate_lines = []
|
| 44 |
for c, desc in self.category_description.items():
|
| 45 |
for line in desc.get("examples", "").split("\n"):
|
| 46 |
if not line:
|
| 47 |
continue
|
| 48 |
+
cate_lines.append("USER: {}\nCategory: {}".format(line, c))
|
| 49 |
descriptions = []
|
| 50 |
for c, desc in self.category_description.items():
|
| 51 |
if desc.get("description"):
|
|
|
|
| 62 |
{}
|
| 63 |
You could learn from the above examples.
|
| 64 |
Just mention the category names, no need for any additional words.
|
| 65 |
+
|
| 66 |
+
---- Real Data ----
|
| 67 |
+
{}
|
| 68 |
""".format(
|
| 69 |
len(self.category_description.keys()),
|
| 70 |
"/".join(list(self.category_description.keys())),
|
| 71 |
"\n".join(descriptions),
|
| 72 |
+
"- ".join(cate_lines),
|
| 73 |
+
chat_hist
|
| 74 |
)
|
| 75 |
return self.prompt
|
| 76 |
|
|
|
|
| 80 |
|
| 81 |
def _run(self, history, **kwargs):
|
| 82 |
input = self.get_input()
|
|
|
|
| 83 |
chat_mdl = LLMBundle(self._canvas.get_tenant_id(), LLMType.CHAT, self._param.llm_id)
|
| 84 |
+
ans = chat_mdl.chat(self._param.get_prompt(input), [{"role": "user", "content": "\nCategory: "}],
|
| 85 |
self._param.gen_conf())
|
| 86 |
logging.debug(f"input: {input}, answer: {str(ans)}")
|
| 87 |
for c in self._param.category_description.keys():
|