Skip to content

Commit 98dbf8a

Browse files
committed
feat:reoganize prompt with reference in user content
1 parent a6a5558 commit 98dbf8a

File tree

1 file changed

+71
-12
lines changed

1 file changed

+71
-12
lines changed

src/memos/mem_os/product.py

Lines changed: 71 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)