Skip to content

Commit ea49085

Browse files
committed
Merge remote-tracking branch 'refs/remotes/origin/dev' into dev_zdy_1204_neo4j
2 parents 3dad2d1 + 3f99afd commit ea49085

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+1119
-515
lines changed

docker/requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,4 +160,3 @@ xlrd==2.0.2
160160
xlsxwriter==3.2.5
161161
prometheus-client==0.23.1
162162
pymilvus==2.5.12
163-
langchain-text-splitters==1.0.0

examples/mem_scheduler/memos_w_scheduler.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313
from memos.mem_cube.general import GeneralMemCube
1414
from memos.mem_os.main import MOS
1515
from memos.mem_scheduler.general_scheduler import GeneralScheduler
16-
from memos.mem_scheduler.schemas.general_schemas import (
17-
ADD_LABEL,
18-
ANSWER_LABEL,
19-
MEM_ARCHIVE_LABEL,
20-
MEM_ORGANIZE_LABEL,
21-
MEM_UPDATE_LABEL,
22-
QUERY_LABEL,
23-
)
2416
from memos.mem_scheduler.schemas.message_schemas import ScheduleLogForWebItem
17+
from memos.mem_scheduler.schemas.task_schemas import (
18+
ADD_TASK_LABEL,
19+
ANSWER_TASK_LABEL,
20+
MEM_ARCHIVE_TASK_LABEL,
21+
MEM_ORGANIZE_TASK_LABEL,
22+
MEM_UPDATE_TASK_LABEL,
23+
QUERY_TASK_LABEL,
24+
)
2525
from memos.mem_scheduler.utils.filter_utils import transform_name_to_key
2626

2727

@@ -118,24 +118,24 @@ def _first_content() -> str:
118118
return memcube_content[0].get("content", "") or content
119119
return content
120120

121-
if label in ("addMessage", QUERY_LABEL, ANSWER_LABEL):
121+
if label in ("addMessage", QUERY_TASK_LABEL, ANSWER_TASK_LABEL):
122122
target_cube = cube_display.replace("MemCube", "")
123123
title = _format_title(item.timestamp, f"addMessages to {target_cube} MemCube")
124124
return title, _truncate_with_rules(_first_content())
125125

126-
if label in ("addMemory", ADD_LABEL):
126+
if label in ("addMemory", ADD_TASK_LABEL):
127127
title = _format_title(item.timestamp, f"{cube_display} added {memory_len} memories")
128128
return title, _truncate_with_rules(_first_content())
129129

130-
if label in ("updateMemory", MEM_UPDATE_LABEL):
130+
if label in ("updateMemory", MEM_UPDATE_TASK_LABEL):
131131
title = _format_title(item.timestamp, f"{cube_display} updated {memory_len} memories")
132132
return title, _truncate_with_rules(_first_content())
133133

134-
if label in ("archiveMemory", MEM_ARCHIVE_LABEL):
134+
if label in ("archiveMemory", MEM_ARCHIVE_TASK_LABEL):
135135
title = _format_title(item.timestamp, f"{cube_display} archived {memory_len} memories")
136136
return title, _truncate_with_rules(_first_content())
137137

138-
if label in ("mergeMemory", MEM_ORGANIZE_LABEL):
138+
if label in ("mergeMemory", MEM_ORGANIZE_TASK_LABEL):
139139
title = _format_title(item.timestamp, f"{cube_display} merged {memory_len} memories")
140140
merged = [c for c in memcube_content if c.get("type") == "merged"]
141141
post = [c for c in memcube_content if c.get("type") == "postMerge"]

examples/mem_scheduler/redis_example.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
from memos.configs.mem_scheduler import SchedulerConfigFactory
1010
from memos.mem_cube.general import GeneralMemCube
1111
from memos.mem_scheduler.scheduler_factory import SchedulerFactory
12-
from memos.mem_scheduler.schemas.general_schemas import QUERY_LABEL
1312
from memos.mem_scheduler.schemas.message_schemas import ScheduleMessageItem
13+
from memos.mem_scheduler.schemas.task_schemas import QUERY_TASK_LABEL
1414

1515

1616
if TYPE_CHECKING:
@@ -55,7 +55,7 @@ def service_run():
5555
message_item = ScheduleMessageItem(
5656
user_id=user_id,
5757
mem_cube_id="mem_cube_2",
58-
label=QUERY_LABEL,
58+
label=QUERY_TASK_LABEL,
5959
mem_cube=mem_cube,
6060
content=query,
6161
timestamp=datetime.now(),

examples/mem_scheduler/try_schedule_modules.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from memos.mem_cube.general import GeneralMemCube
1515
from memos.mem_scheduler.analyzer.mos_for_test_scheduler import MOSForTestScheduler
1616
from memos.mem_scheduler.general_scheduler import GeneralScheduler
17-
from memos.mem_scheduler.schemas.general_schemas import (
17+
from memos.mem_scheduler.schemas.task_schemas import (
1818
NOT_APPLICABLE_TYPE,
1919
)
2020

src/memos/api/handlers/chat_handler.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@
3030
prepare_reference_data,
3131
process_streaming_references_complete,
3232
)
33-
from memos.mem_scheduler.schemas.general_schemas import (
34-
ANSWER_LABEL,
35-
QUERY_LABEL,
36-
)
3733
from memos.mem_scheduler.schemas.message_schemas import ScheduleMessageItem
34+
from memos.mem_scheduler.schemas.task_schemas import (
35+
ANSWER_TASK_LABEL,
36+
QUERY_TASK_LABEL,
37+
)
3838
from memos.templates.mos_prompts import (
3939
FURTHER_SUGGESTION_PROMPT,
4040
get_memos_prompt,
@@ -244,7 +244,7 @@ def generate_chat_response() -> Generator[str, None, None]:
244244
user_id=chat_req.user_id,
245245
mem_cube_id=scheduler_cube_id,
246246
query=chat_req.query,
247-
label=QUERY_LABEL,
247+
label=QUERY_TASK_LABEL,
248248
)
249249
# Extract memories from search results
250250
memories_list = []
@@ -400,6 +400,7 @@ def generate_chat_response() -> Generator[str, None, None]:
400400
include_preference=chat_req.include_preference,
401401
pref_top_k=chat_req.pref_top_k,
402402
filter=chat_req.filter,
403+
playground_search_goal_parser=True,
403404
)
404405

405406
search_response = self.search_handler.handle_search_memories(search_req)
@@ -422,7 +423,7 @@ def generate_chat_response() -> Generator[str, None, None]:
422423
user_id=chat_req.user_id,
423424
mem_cube_id=scheduler_cube_id,
424425
query=chat_req.query,
425-
label=QUERY_LABEL,
426+
label=QUERY_TASK_LABEL,
426427
)
427428
# Extract memories from search results
428429
memories_list = []
@@ -1033,7 +1034,7 @@ async def _post_chat_processing(
10331034

10341035
# Send answer to scheduler
10351036
self._send_message_to_scheduler(
1036-
user_id=user_id, mem_cube_id=cube_id, query=clean_response, label=ANSWER_LABEL
1037+
user_id=user_id, mem_cube_id=cube_id, query=clean_response, label=ANSWER_TASK_LABEL
10371038
)
10381039

10391040
self.logger.info(f"Post-chat processing completed for user {user_id}")

src/memos/api/product_models.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,9 @@ class APISearchRequest(BaseRequest):
374374
),
375375
)
376376

377+
# TODO: tmp field for playground search goal parser, will be removed later
378+
playground_search_goal_parser: bool = Field(False, description="Playground search goal parser")
379+
377380
# ==== Context ====
378381
chat_history: MessageList | None = Field(
379382
None,

src/memos/configs/mem_reader.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from datetime import datetime
22
from typing import Any, ClassVar
33

4-
from pydantic import Field, field_validator, model_validator
4+
from pydantic import ConfigDict, Field, field_validator, model_validator
55

66
from memos.configs.base import BaseConfig
77
from memos.configs.chunker import ChunkerConfigFactory
@@ -44,6 +44,9 @@ def parse_datetime(cls, value):
4444
class SimpleStructMemReaderConfig(BaseMemReaderConfig):
4545
"""SimpleStruct MemReader configuration class."""
4646

47+
# Allow passing additional fields without raising validation errors
48+
model_config = ConfigDict(extra="allow", strict=True)
49+
4750

4851
class MultiModalStructMemReaderConfig(BaseMemReaderConfig):
4952
"""MultiModalStruct MemReader configuration class."""

src/memos/embedders/universal_api.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from memos.configs.embedder import UniversalAPIEmbedderConfig
55
from memos.embedders.base import BaseEmbedder
66
from memos.log import get_logger
7-
from memos.utils import timed
7+
from memos.utils import timed_with_status
88

99

1010
logger = get_logger(__name__)
@@ -30,8 +30,7 @@ def __init__(self, config: UniversalAPIEmbedderConfig):
3030
else:
3131
raise ValueError(f"Embeddings unsupported provider: {self.provider}")
3232

33-
@timed(
34-
log=True,
33+
@timed_with_status(
3534
log_prefix="model_timed_embedding",
3635
log_extra_args={"model_name_or_path": "text-embedding-3-large"},
3736
)

src/memos/llms/openai.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from memos.llms.utils import remove_thinking_tags
1313
from memos.log import get_logger
1414
from memos.types import MessageList
15-
from memos.utils import timed
15+
from memos.utils import timed_with_status
1616

1717

1818
logger = get_logger(__name__)
@@ -28,7 +28,7 @@ def __init__(self, config: OpenAILLMConfig):
2828
)
2929
logger.info("OpenAI LLM instance initialized")
3030

31-
@timed(log=True, log_prefix="OpenAI LLM", log_args=["model_name_or_path"])
31+
@timed_with_status(log_prefix="OpenAI LLM", log_args=["model_name_or_path"])
3232
def generate(self, messages: MessageList, **kwargs) -> str:
3333
"""Generate a response from OpenAI LLM, optionally overriding generation params."""
3434
response = self.client.chat.completions.create(
@@ -55,7 +55,7 @@ def generate(self, messages: MessageList, **kwargs) -> str:
5555
return reasoning_content + response_content
5656
return response_content
5757

58-
@timed(log=True, log_prefix="OpenAI LLM", log_args=["model_name_or_path"])
58+
@timed_with_status(log_prefix="OpenAI LLM", log_args=["model_name_or_path"])
5959
def generate_stream(self, messages: MessageList, **kwargs) -> Generator[str, None, None]:
6060
"""Stream response from OpenAI LLM with optional reasoning support."""
6161
if kwargs.get("tools"):

src/memos/mem_feedback/feedback.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from memos.mem_feedback.base import BaseMemFeedback
1818
from memos.mem_feedback.utils import should_keep_update, split_into_chunks
1919
from memos.mem_reader.factory import MemReaderFactory
20-
from memos.mem_reader.simple_struct import detect_lang
20+
from memos.mem_reader.read_multi_modal import detect_lang
2121
from memos.memories.textual.item import TextualMemoryItem, TreeNodeTextualMemoryMetadata
2222
from memos.memories.textual.tree_text_memory.organize.manager import (
2323
MemoryManager,

0 commit comments

Comments
 (0)