### What problem does this PR solve? #3185 ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue)tags/v0.14.0
| # See the License for the specific language governing permissions and | # See the License for the specific language governing permissions and | ||||
| # limitations under the License. | # limitations under the License. | ||||
| # | # | ||||
| import importlib | |||||
| import json | import json | ||||
| import traceback | import traceback | ||||
| from abc import ABC | from abc import ABC | ||||
| from copy import deepcopy | from copy import deepcopy | ||||
| from functools import partial | from functools import partial | ||||
| import pandas as pd | |||||
| from agent.component import component_class | from agent.component import component_class | ||||
| from agent.component.base import ComponentBase | from agent.component.base import ComponentBase | ||||
| from agent.settings import flow_logger, DEBUG | from agent.settings import flow_logger, DEBUG | ||||
| def get_history(self, window_size): | def get_history(self, window_size): | ||||
| convs = [] | convs = [] | ||||
| for role, obj in self.history[window_size * -1:]: | 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 | return convs | ||||
| def add_user_input(self, question): | def add_user_input(self, question): |
| ensure_ascii=False) + "\n\n" | ensure_ascii=False) + "\n\n" | ||||
| canvas.messages.append({"role": "assistant", "content": final_ans["content"], "id": message_id}) | canvas.messages.append({"role": "assistant", "content": final_ans["content"], "id": message_id}) | ||||
| canvas.history.append(("assistant", final_ans["content"])) | |||||
| if final_ans.get("reference"): | if final_ans.get("reference"): | ||||
| canvas.reference.append(final_ans["reference"]) | canvas.reference.append(final_ans["reference"]) | ||||
| cvs.dsl = json.loads(str(canvas)) | cvs.dsl = json.loads(str(canvas)) |
| yield "data:" + json.dumps({"retcode": 0, "retmsg": "", "data": ans}, ensure_ascii=False) + "\n\n" | 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.messages.append({"role": "assistant", "content": final_ans["content"], "id": message_id}) | ||||
| canvas.history.append(("assistant", final_ans["content"])) | |||||
| if final_ans.get("reference"): | if final_ans.get("reference"): | ||||
| canvas.reference.append(final_ans["reference"]) | canvas.reference.append(final_ans["reference"]) | ||||
| cvs.dsl = json.loads(str(canvas)) | cvs.dsl = json.loads(str(canvas)) |
| embd_mdl = LLMBundle(dialog.tenant_id, LLMType.EMBEDDING, embd_nms[0]) | embd_mdl = LLMBundle(dialog.tenant_id, LLMType.EMBEDDING, embd_nms[0]) | ||||
| if not embd_mdl: | if not embd_mdl: | ||||
| raise LookupError("Embedding model(%s) not found" % embd_nms[0]) | raise LookupError("Embedding model(%s) not found" % embd_nms[0]) | ||||
| if llm_id2llm_type(dialog.llm_id) == "image2text": | if llm_id2llm_type(dialog.llm_id) == "image2text": | ||||
| chat_mdl = LLMBundle(dialog.tenant_id, LLMType.IMAGE2TEXT, dialog.llm_id) | chat_mdl = LLMBundle(dialog.tenant_id, LLMType.IMAGE2TEXT, dialog.llm_id) | ||||
| else: | else: |