@@ -417,12 +417,49 @@ def _build_system_prompt(
417417 mem_block_o , mem_block_p = _format_mem_block (memories_all )
418418 mem_block = mem_block_o + "\n " + mem_block_p
419419 prefix = (base_prompt .strip () + "\n \n " ) if base_prompt else ""
420- return (
421- prefix
422- + sys_body
423- + "\n \n # Memories\n ## PersonalMemory & OuterMemory (ordered)\n "
424- + mem_block
425- )
420+ return (prefix + sys_body +
421+ "\n \n # Memories\n ## PersonalMemory & OuterMemory (ordered)\n " +
422+ mem_block )
423+
424+ def _build_base_system_prompt (
425+ self ,
426+ base_prompt : str | None = None ,
427+ tone : str = "friendly" ,
428+ verbosity : str = "mid" ,
429+ mode : str = "enhance" ,
430+ ) -> str :
431+ """
432+ Build base system prompt without memory references.
433+ """
434+ now = datetime .now ()
435+ formatted_date = now .strftime ("%Y-%m-%d (%A)" )
436+ sys_body = get_memos_prompt (date = formatted_date ,
437+ tone = tone ,
438+ verbosity = verbosity ,
439+ mode = mode )
440+ prefix = (base_prompt .strip () + "\n \n " ) if base_prompt else ""
441+ return prefix + sys_body
442+
443+ def _build_memory_context (
444+ self ,
445+ memories_all : list [TextualMemoryItem ],
446+ mode : str = "enhance" ,
447+ ) -> str :
448+ """
449+ Build memory context to be included in user message.
450+ """
451+ if not memories_all :
452+ return ""
453+
454+ mem_block_o , mem_block_p = _format_mem_block (memories_all )
455+
456+ if mode == "enhance" :
457+ return ("# Memories\n ## PersonalMemory (ordered)\n " + mem_block_p +
458+ "\n ## OuterMemory (ordered)\n " + mem_block_o + "\n \n " )
459+ else :
460+ mem_block = mem_block_o + "\n " + mem_block_p
461+ return ("# Memories\n ## PersonalMemory & OuterMemory (ordered)\n " +
462+ mem_block + "\n \n " )
426463
427464 def _build_enhance_system_prompt (
428465 self ,
@@ -433,6 +470,7 @@ def _build_enhance_system_prompt(
433470 ) -> str :
434471 """
435472 Build enhance prompt for the user with memory references.
473+ [DEPRECATED] Use _build_base_system_prompt and _build_memory_context instead.
436474 """
437475 now = datetime .now ()
438476 formatted_date = now .strftime ("%Y-%m-%d (%A)" )
@@ -916,17 +954,29 @@ def chat(
916954 internet_search = internet_search ,
917955 moscube = moscube ,
918956 )["text_mem" ]
957+ memories_list = []
919958 if memories_result :
920959 memories_list = memories_result [0 ]["memories" ]
921- memories_list = self ._filter_memories_by_threshold (memories_list , threshold )
922- system_prompt = super ()._build_system_prompt (memories_list , base_prompt )
960+ memories_list = self ._filter_memories_by_threshold (
961+ memories_list , threshold )
962+
963+ # Build base system prompt without memory
964+ system_prompt = self ._build_base_system_prompt (base_prompt ,
965+ mode = "base" )
966+
967+ # Build memory context to be included in user message
968+ memory_context = self ._build_memory_context (memories_list , mode = "base" )
969+
970+ # Combine memory context with user query
971+ user_content = memory_context + query if memory_context else query
972+
923973 history_info = []
924974 if history :
925975 history_info = history [- 20 :]
926976 current_messages = [
927977 {"role" : "system" , "content" : system_prompt },
928978 * history_info ,
929- {"role" : "user" , "content" : query },
979+ {"role" : "user" , "content" : user_content },
930980 ]
931981 response = self .chat_llm .generate (current_messages )
932982 time_end = time .time ()
@@ -994,8 +1044,17 @@ def chat_with_references(
9941044
9951045 reference = prepare_reference_data (memories_list )
9961046 yield f"data: { json .dumps ({'type' : 'reference' , 'data' : reference })} \n \n "
997- # Build custom system prompt with relevant memories)
998- system_prompt = self ._build_enhance_system_prompt (user_id , memories_list )
1047+
1048+ # Build base system prompt without memory
1049+ system_prompt = self ._build_base_system_prompt (mode = "enhance" )
1050+
1051+ # Build memory context to be included in user message
1052+ memory_context = self ._build_memory_context (memories_list ,
1053+ mode = "enhance" )
1054+
1055+ # Combine memory context with user query
1056+ user_content = memory_context + query if memory_context else query
1057+
9991058 # Get chat history
10001059 if user_id not in self .chat_history_manager :
10011060 self ._register_chat_history (user_id )
@@ -1006,7 +1065,7 @@ def chat_with_references(
10061065 current_messages = [
10071066 {"role" : "system" , "content" : system_prompt },
10081067 * chat_history .chat_history ,
1009- {"role" : "user" , "content" : query },
1068+ {"role" : "user" , "content" : user_content },
10101069 ]
10111070 logger .info (
10121071 f"user_id: { user_id } , cube_id: { cube_id } , current_system_prompt: { system_prompt } "
0 commit comments