Add chat history limit for Agent and Role.
Fix bugs.
This commit is contained in:
@@ -118,6 +118,7 @@ class AIAgent:
|
||||
self.guest_prompt_str = None
|
||||
self.owner_promp_str = None
|
||||
self.contact_prompt_str = None
|
||||
self.history_len = 10
|
||||
|
||||
self.chat_db = None
|
||||
self.unread_msg = Queue() # msg from other agent
|
||||
@@ -179,6 +180,8 @@ class AIAgent:
|
||||
self.enable_kb = bool(config["enable_kb"])
|
||||
if config.get("enable_timestamp") is not None:
|
||||
self.enable_timestamp = bool(config["enable_timestamp"])
|
||||
if config.get("history_len"):
|
||||
self.history_len = int(config.get("history_len"))
|
||||
return True
|
||||
|
||||
|
||||
@@ -459,7 +462,7 @@ class AIAgent:
|
||||
async def _get_prompt_from_session(self,chatsession:AIChatSession,system_token_len,input_token_len,is_groupchat=False) -> AgentPrompt:
|
||||
# TODO: get prompt from group chat is different from single chat
|
||||
history_len = (self.max_token_size * 0.7) - system_token_len - input_token_len
|
||||
messages = chatsession.read_history() # read
|
||||
messages = chatsession.read_history(self.history_len) # read
|
||||
result_token_len = 0
|
||||
result_prompt = AgentPrompt()
|
||||
read_history_msg = 0
|
||||
|
||||
@@ -401,3 +401,5 @@ class KnowledgePipline:
|
||||
# await source.run_once()
|
||||
for source in self.source_queue:
|
||||
await source.run_once()
|
||||
|
||||
logging.info(f"knowledge pipeline finished")
|
||||
@@ -13,6 +13,7 @@ class AIRole:
|
||||
self.introduce : str = None
|
||||
self.agent = None
|
||||
self.enable_function_list : list[str] = None
|
||||
self.history_len = 10
|
||||
|
||||
def load_from_config(self,config:dict) -> bool:
|
||||
name_node = config.get("name")
|
||||
@@ -39,6 +40,10 @@ class AIRole:
|
||||
if intro_node is not None:
|
||||
self.introduce = intro_node
|
||||
|
||||
history_node = config.get("history_len")
|
||||
if history_node:
|
||||
self.history_len = int(history_node)
|
||||
|
||||
if config.get("enable_function") is not None:
|
||||
self.enable_function_list = config["enable_function"]
|
||||
|
||||
|
||||
@@ -446,7 +446,7 @@ class Workflow:
|
||||
# prompt.append(self._get_knowlege_prompt(the_role.get_name()))
|
||||
|
||||
#support group chat, user content include sender name!
|
||||
prompt.append(await self._get_prompt_from_session(workflow_chat_session))
|
||||
prompt.append(await self._get_prompt_from_session(the_role,workflow_chat_session))
|
||||
|
||||
msg_prompt = AgentPrompt()
|
||||
msg_prompt.messages = [{"role":"user","content":f"user name is {msg.sender}, his question is :{msg.body}"}]
|
||||
@@ -536,8 +536,8 @@ class Workflow:
|
||||
|
||||
return await _do_process_msg()
|
||||
|
||||
async def _get_prompt_from_session(self,chatsession:AIChatSession) -> AgentPrompt:
|
||||
messages = chatsession.read_history() # read last 10 message
|
||||
async def _get_prompt_from_session(self,the_role:AIRole,chatsession:AIChatSession) -> AgentPrompt:
|
||||
messages = chatsession.read_history(the_role.history_len) # read last 10 message
|
||||
result_prompt = AgentPrompt()
|
||||
for msg in reversed(messages):
|
||||
if msg.sender == chatsession.owner_id:
|
||||
|
||||
@@ -111,7 +111,7 @@ class AIOS_Shell:
|
||||
owenr.email = AIStorage.get_instance().get_user_config().get_value("email")
|
||||
owenr.telegram = AIStorage.get_instance().get_user_config().get_value("telegram")
|
||||
|
||||
cm.add_contact(self.username,owenr)
|
||||
cm.add_family_member(self.username,owenr)
|
||||
|
||||
|
||||
knowledge_env = KnowledgeEnvironment("knowledge")
|
||||
|
||||
Reference in New Issue
Block a user