Просмотр исходного кода

fix(api/core/model_manager.py): Avoid mutation during iteration. (#6536)

-LAN- 9 месяцев назад
Родитель
Сommit
cd7fa8027a

+ 1 - 2
api/core/model_manager.py

@@ -410,10 +410,9 @@ class LBModelManager:
         self._model = model
         self._load_balancing_configs = load_balancing_configs
 
-        for load_balancing_config in self._load_balancing_configs:
+        for load_balancing_config in self._load_balancing_configs[:]:  # Iterate over a shallow copy of the list
             if load_balancing_config.name == "__inherit__":
                 if not managed_credentials:
-                    # FIXME: Mutation to loop iterable `self._load_balancing_configs` during iteration
                     # remove __inherit__ if managed credentials is not provided
                     self._load_balancing_configs.remove(load_balancing_config)
                 else:

+ 1 - 2
api/core/rag/datasource/keyword/keyword_base.py

@@ -38,11 +38,10 @@ class BaseKeyword(ABC):
         raise NotImplementedError
 
     def _filter_duplicate_texts(self, texts: list[Document]) -> list[Document]:
-        for text in texts:
+        for text in texts[:]:
             doc_id = text.metadata['doc_id']
             exists_duplicate_node = self.text_exists(doc_id)
             if exists_duplicate_node:
-                # FIXME: Mutation to loop iterable `texts` during iteration
                 texts.remove(text)
 
         return texts

+ 1 - 2
api/core/rag/datasource/vdb/vector_base.py

@@ -57,11 +57,10 @@ class BaseVector(ABC):
         raise NotImplementedError
 
     def _filter_duplicate_texts(self, texts: list[Document]) -> list[Document]:
-        for text in texts:
+        for text in texts[:]:
             doc_id = text.metadata['doc_id']
             exists_duplicate_node = self.text_exists(doc_id)
             if exists_duplicate_node:
-                # FIXME: Mutation to loop iterable `texts` during iteration
                 texts.remove(text)
 
         return texts

+ 1 - 2
api/core/rag/datasource/vdb/vector_factory.py

@@ -153,11 +153,10 @@ class Vector:
         return CacheEmbedding(embedding_model)
 
     def _filter_duplicate_texts(self, texts: list[Document]) -> list[Document]:
-        for text in texts:
+        for text in texts[:]:
             doc_id = text.metadata['doc_id']
             exists_duplicate_node = self.text_exists(doc_id)
             if exists_duplicate_node:
-                # FIXME: Mutation to loop iterable `texts` during iteration
                 texts.remove(text)
 
         return texts

+ 1 - 2
api/services/model_load_balancing_service.py

@@ -131,9 +131,8 @@ class ModelLoadBalancingService:
                 load_balancing_configs.insert(0, inherit_config)
             else:
                 # move the inherit configuration to the first
-                for i, load_balancing_config in enumerate(load_balancing_configs):
+                for i, load_balancing_config in enumerate(load_balancing_configs[:]):
                     if load_balancing_config.name == '__inherit__':
-                        # FIXME: Mutation to loop iterable `load_balancing_configs` during iteration
                         inherit_config = load_balancing_configs.pop(i)
                         load_balancing_configs.insert(0, inherit_config)