diff --git a/agent/canvas.py b/agent/canvas.py index bd1042850..27774d604 100644 --- a/agent/canvas.py +++ b/agent/canvas.py @@ -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): diff --git a/api/apps/api_app.py b/api/apps/api_app.py index 61e5cc25b..98f696f1c 100644 --- a/api/apps/api_app.py +++ b/api/apps/api_app.py @@ -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)) diff --git a/api/apps/canvas_app.py b/api/apps/canvas_app.py index dfc167c21..b6a49ba42 100644 --- a/api/apps/canvas_app.py +++ b/api/apps/canvas_app.py @@ -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)) diff --git a/api/db/services/dialog_service.py b/api/db/services/dialog_service.py index 1e5fd8c79..8b1115ef7 100644 --- a/api/db/services/dialog_service.py +++ b/api/db/services/dialog_service.py @@ -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: