@@ -109,7 +109,9 @@ def create(
109109 Returns:
110110 KnowledgeBase: 创建的知识库对象 / Created knowledge base object
111111 """
112- return cls .__get_client (config = config ).create (input , config = config )
112+ return cls .__get_client (config = config ).create (
113+ input , config = config
114+ )
113115
114116 @classmethod
115117 async def delete_by_name_async (
@@ -357,7 +359,9 @@ def delete(self, config: Optional[Config] = None):
357359 "knowledge_base_name is required to delete a KnowledgeBase"
358360 )
359361
360- return self .delete_by_name (self .knowledge_base_name , config = config )
362+ return self .delete_by_name (
363+ self .knowledge_base_name , config = config
364+ )
361365
362366 async def get_async (self , config : Optional [Config ] = None ):
363367 """刷新知识库信息(异步)/ Refresh knowledge base info asynchronously
@@ -394,7 +398,9 @@ def get(self, config: Optional[Config] = None):
394398 "knowledge_base_name is required to refresh a KnowledgeBase"
395399 )
396400
397- result = self .get_by_name (self .knowledge_base_name , config = config )
401+ result = self .get_by_name (
402+ self .knowledge_base_name , config = config
403+ )
398404 self .update_self (result )
399405
400406 return self
@@ -458,6 +464,18 @@ def _get_data_api(self, config: Optional[Config] = None):
458464 converted_provider_settings = None
459465 converted_retrieve_settings = None
460466
467+ # 当 retrieve_settings 被 pydantic Union 匹配到错误的类型时(由于 extra="allow"),
468+ # 从 __pydantic_extra__ 提取原始数据作为 dict 使用
469+ # When retrieve_settings is matched to wrong Union type by pydantic (due to extra="allow"),
470+ # extract raw data from __pydantic_extra__ as dict
471+ if (
472+ self .retrieve_settings is not None
473+ and not isinstance (self .retrieve_settings , dict )
474+ and hasattr (self .retrieve_settings , "__pydantic_extra__" )
475+ and self .retrieve_settings .__pydantic_extra__
476+ ):
477+ self .retrieve_settings = self .retrieve_settings .__pydantic_extra__
478+
461479 if provider == KnowledgeBaseProvider .BAILIAN :
462480 # 百炼设置 / Bailian settings
463481 if self .provider_settings :
@@ -544,6 +562,9 @@ def _get_data_api(self, config: Optional[Config] = None):
544562 hybrid_search_args = self .retrieve_settings .get (
545563 "HybridSearchArgs"
546564 ),
565+ filter = self .retrieve_settings .get (
566+ "Filter"
567+ ),
547568 )
548569
549570 elif provider == KnowledgeBaseProvider .OTS :
@@ -905,19 +926,21 @@ def multi_retrieve(
905926 """
906927 # 1. 根据 knowledge_base_names 并发获取各知识库配置(安全方式)
907928 # Fetch all knowledge bases concurrently by name (safely)
908- knowledge_base_results = [
929+ knowledge_base_results = ( [
909930 cls ._safe_get_kb (name , config = config )
910931 for name in knowledge_base_names
911- ]
932+ ])
912933
913934 # 2. 并发执行各知识库的检索(安全方式)
914935 # Execute retrieval for each knowledge base concurrently (safely)
915- retrieve_results = [
916- cls ._safe_retrieve_kb (kb_name , kb_or_error , query , config = config )
936+ retrieve_results = ([
937+ cls ._safe_retrieve_kb (
938+ kb_name , kb_or_error , query , config = config
939+ )
917940 for kb_name , kb_or_error in zip (
918941 knowledge_base_names , knowledge_base_results
919942 )
920- ]
943+ ])
921944
922945 # 3. 合并返回结果,按知识库名称分组
923946 # Merge results, grouped by knowledge base name
0 commit comments