From 643f69bb907d1dcb80aa0518550c3ede4782235c Mon Sep 17 00:00:00 2001 From: lanceyq <1982376970@qq.com> Date: Thu, 16 Apr 2026 17:29:00 +0800 Subject: [PATCH] refactor(memory): tighten metadata field types and clean up descriptions - Use Literal['set', 'remove'] for MetadataFieldChange.action instead of str - Simplify field_path description to reflect current schema - Remove redundant isinstance check in extract_user_metadata_task --- api/app/core/memory/models/metadata_models.py | 6 +++--- api/app/tasks.py | 2 -- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/api/app/core/memory/models/metadata_models.py b/api/app/core/memory/models/metadata_models.py index 1b490dbc..e12c3d97 100644 --- a/api/app/core/memory/models/metadata_models.py +++ b/api/app/core/memory/models/metadata_models.py @@ -4,7 +4,7 @@ Independent from triplet_models.py - these models are used by the standalone metadata extraction pipeline (post-dedup async Celery task). """ -from typing import List, Optional +from typing import List, Literal, Optional from pydantic import BaseModel, ConfigDict, Field @@ -35,9 +35,9 @@ class MetadataFieldChange(BaseModel): model_config = ConfigDict(extra="ignore") field_path: str = Field( - description="字段路径,用点号分隔,如 'profile.role'、'knowledge_tags'、'behavioral_hints.tone_preference'" + description="字段路径,用点号分隔,如 'profile.role'、'profile.expertise'" ) - action: str = Field( + action: Literal["set", "remove"] = Field( description="操作类型:'set' 表示新增或修改,'remove' 表示移除" ) value: Optional[str] = Field( diff --git a/api/app/tasks.py b/api/app/tasks.py index 2c2f50a9..6d2e07a3 100644 --- a/api/app/tasks.py +++ b/api/app/tasks.py @@ -3157,8 +3157,6 @@ def extract_user_metadata_task( leaf = parts[-1] current_list = target.get(leaf, []) - if not isinstance(current_list, list): - current_list = [] if action == "set": if value not in current_list: