3636from memos .memories .textual .item import (
3737 TextualMemoryItem ,
3838)
39- from memos .templates .mos_prompts import MEMOS_PRODUCT_BASE_PROMPT , MEMOS_PRODUCT_ENHANCE_PROMPT
39+ from memos .templates .mos_prompts import (
40+ FURTHER_SUGGESTION_PROMPT ,
41+ MEMOS_PRODUCT_BASE_PROMPT ,
42+ MEMOS_PRODUCT_ENHANCE_PROMPT ,
43+ SUGGESTION_QUERY_PROMPT_EN ,
44+ SUGGESTION_QUERY_PROMPT_ZH ,
45+ )
4046from memos .types import MessageList
4147
4248
@@ -641,7 +647,23 @@ def user_register(
641647 except Exception as e :
642648 return {"status" : "error" , "message" : f"Failed to register user: { e !s} " }
643649
644- def get_suggestion_query (self , user_id : str , language : str = "zh" ) -> list [str ]:
650+ def _get_further_suggestion (self , message : MessageList | None = None ) -> list [str ]:
651+ """Get further suggestion prompt."""
652+ try :
653+ dialogue_info = "\n " .join ([f"{ msg ['role' ]} : { msg ['content' ]} " for msg in message [- 2 :]])
654+ further_suggestion_prompt = FURTHER_SUGGESTION_PROMPT .format (dialogue = dialogue_info )
655+ message_list = [{"role" : "system" , "content" : further_suggestion_prompt }]
656+ response = self .chat_llm .generate (message_list )
657+ clean_response = clean_json_response (response )
658+ response_json = json .loads (clean_response )
659+ return response_json ["query" ]
660+ except Exception as e :
661+ logger .error (f"Error getting further suggestion: { e } " , exc_info = True )
662+ return []
663+
664+ def get_suggestion_query (
665+ self , user_id : str , language : str = "zh" , message : MessageList | None = None
666+ ) -> list [str ]:
645667 """Get suggestion query from LLM.
646668 Args:
647669 user_id (str): User ID.
@@ -650,37 +672,13 @@ def get_suggestion_query(self, user_id: str, language: str = "zh") -> list[str]:
650672 Returns:
651673 list[str]: The suggestion query list.
652674 """
653-
675+ if message :
676+ further_suggestion = self ._get_further_suggestion (message )
677+ return further_suggestion
654678 if language == "zh" :
655- suggestion_prompt = """
656- 你是一个有用的助手,可以帮助用户生成建议查询。
657- 我将获取用户最近的一些记忆,
658- 你应该生成一些建议查询,这些查询应该是用户想要查询的内容,
659- 用户最近的记忆是:
660- {memories}
661- 请生成3个建议查询用中文,
662- 输出应该是json格式,键是"query",值是一个建议查询列表。
663-
664- 示例:
665- {{
666- "query": ["查询1", "查询2", "查询3"]
667- }}
668- """
679+ suggestion_prompt = SUGGESTION_QUERY_PROMPT_ZH
669680 else : # English
670- suggestion_prompt = """
671- You are a helpful assistant that can help users to generate suggestion query.
672- I will get some user recently memories,
673- you should generate some suggestion query, the query should be user what to query,
674- user recently memories is:
675- {memories}
676- if the user recently memories is empty, please generate 3 suggestion query in English,
677- output should be a json format, the key is "query", the value is a list of suggestion query.
678-
679- example:
680- {{
681- "query": ["query1", "query2", "query3"]
682- }}
683- """
681+ suggestion_prompt = SUGGESTION_QUERY_PROMPT_EN
684682 text_mem_result = super ().search ("my recently memories" , user_id = user_id , top_k = 3 )[
685683 "text_mem"
686684 ]
@@ -844,6 +842,11 @@ def chat_with_references(
844842 total_time = round (float (time_end - time_start ), 1 )
845843
846844 yield f"data: { json .dumps ({'type' : 'time' , 'data' : {'total_time' : total_time , 'speed_improvement' : f'{ speed_improvement } %' }})} \n \n "
845+ # get further suggestion
846+ current_messages .append ({"role" : "assistant" , "content" : full_response })
847+ further_suggestion = self ._get_further_suggestion (current_messages )
848+ logger .info (f"further_suggestion: { further_suggestion } " )
849+ yield f"data: { json .dumps ({'type' : 'suggestion' , 'data' : further_suggestion })} \n \n "
847850 yield f"data: { json .dumps ({'type' : 'end' })} \n \n "
848851
849852 logger .info (f"user_id: { user_id } , cube_id: { cube_id } , current_messages: { current_messages } " )
0 commit comments