### What problem does this PR solve? #3185 ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue)tags/v0.14.0
| @@ -13,15 +13,11 @@ | |||
| # See the License for the specific language governing permissions and | |||
| # limitations under the License. | |||
| # | |||
| import importlib | |||
| import json | |||
| import traceback | |||
| from abc import ABC | |||
| from copy import deepcopy | |||
| from functools import partial | |||
| import pandas as pd | |||
| from agent.component import component_class | |||
| from agent.component.base import ComponentBase | |||
| from agent.settings import flow_logger, DEBUG | |||
| @@ -260,8 +256,10 @@ class Canvas(ABC): | |||
| def get_history(self, window_size): | |||
| convs = [] | |||
| for role, obj in self.history[window_size * -1:]: | |||
| convs.append({"role": role, "content": (obj if role == "user" else | |||
| '\n'.join([str(s) for s in pd.DataFrame(obj)['content']]))}) | |||
| if isinstance(obj, list) and obj and all([isinstance(o, dict) for o in obj]): | |||
| convs.append({"role": role, "content": '\n'.join([str(s.get("content", "")) for s in obj])}) | |||
| else: | |||
| convs.append({"role": role, "content": str(obj)}) | |||
| return convs | |||
| def add_user_input(self, question): | |||
| @@ -261,6 +261,7 @@ def completion(): | |||
| ensure_ascii=False) + "\n\n" | |||
| canvas.messages.append({"role": "assistant", "content": final_ans["content"], "id": message_id}) | |||
| canvas.history.append(("assistant", final_ans["content"])) | |||
| if final_ans.get("reference"): | |||
| canvas.reference.append(final_ans["reference"]) | |||
| cvs.dsl = json.loads(str(canvas)) | |||
| @@ -133,6 +133,7 @@ def run(): | |||
| yield "data:" + json.dumps({"retcode": 0, "retmsg": "", "data": ans}, ensure_ascii=False) + "\n\n" | |||
| canvas.messages.append({"role": "assistant", "content": final_ans["content"], "id": message_id}) | |||
| canvas.history.append(("assistant", final_ans["content"])) | |||
| if final_ans.get("reference"): | |||
| canvas.reference.append(final_ans["reference"]) | |||
| cvs.dsl = json.loads(str(canvas)) | |||
| @@ -164,7 +164,7 @@ def chat(dialog, messages, stream=True, **kwargs): | |||
| embd_mdl = LLMBundle(dialog.tenant_id, LLMType.EMBEDDING, embd_nms[0]) | |||
| if not embd_mdl: | |||
| raise LookupError("Embedding model(%s) not found" % embd_nms[0]) | |||
| if llm_id2llm_type(dialog.llm_id) == "image2text": | |||
| chat_mdl = LLMBundle(dialog.tenant_id, LLMType.IMAGE2TEXT, dialog.llm_id) | |||
| else: | |||