2626 KnowledgeBaseProvider ,
2727 KnowledgeBaseSystemProps ,
2828 KnowledgeBaseUpdateInput ,
29+ OTSDenseVectorSearchConfig ,
30+ OTSEmbeddingConfiguration ,
31+ OTSFullTextSearchConfig ,
32+ OTSMetadataField ,
33+ OTSModelConfig ,
34+ OTSProviderSettings ,
35+ OTSRerankingConfig ,
36+ OTSRetrieveSettings ,
37+ OTSRRFConfig ,
38+ OTSWeightConfig ,
2939 RagFlowProviderSettings ,
3040 RagFlowRetrieveSettings ,
3141 RetrieveInput ,
@@ -302,8 +312,6 @@ def _get_data_api(self, config: Optional[Config] = None):
302312 if isinstance (self .provider_settings , ADBProviderSettings ):
303313 converted_provider_settings = self .provider_settings
304314 elif isinstance (self .provider_settings , dict ):
305- # ADB provider_settings 使用 PascalCase 键名,需要转换为 snake_case
306- # ADB provider_settings uses PascalCase keys, need to convert to snake_case
307315 converted_provider_settings = ADBProviderSettings (
308316 db_instance_id = self .provider_settings .get (
309317 "DBInstanceId" , ""
@@ -323,8 +331,6 @@ def _get_data_api(self, config: Optional[Config] = None):
323331 if isinstance (self .retrieve_settings , ADBRetrieveSettings ):
324332 converted_retrieve_settings = self .retrieve_settings
325333 elif isinstance (self .retrieve_settings , dict ):
326- # ADB retrieve_settings 使用 PascalCase 键名,需要转换为 snake_case
327- # ADB retrieve_settings uses PascalCase keys, need to convert to snake_case
328334 converted_retrieve_settings = ADBRetrieveSettings (
329335 top_k = self .retrieve_settings .get ("TopK" ),
330336 use_full_text_retrieval = self .retrieve_settings .get (
@@ -344,6 +350,115 @@ def _get_data_api(self, config: Optional[Config] = None):
344350 ),
345351 )
346352
353+ elif provider == KnowledgeBaseProvider .OTS :
354+ # OTS 设置 / OTS settings (camelCase → snake_case)
355+ if self .provider_settings :
356+ if isinstance (self .provider_settings , OTSProviderSettings ):
357+ converted_provider_settings = self .provider_settings
358+ elif isinstance (self .provider_settings , dict ):
359+ ps = self .provider_settings
360+
361+ metadata = None
362+ raw_metadata = ps .get ("metadata" )
363+ if raw_metadata and isinstance (raw_metadata , list ):
364+ metadata = [
365+ OTSMetadataField (
366+ name = m .get ("name" , "" ),
367+ type = m .get ("type" , "" ),
368+ )
369+ for m in raw_metadata
370+ ]
371+
372+ embedding_config = None
373+ raw_ec = ps .get ("embeddingConfiguration" )
374+ if raw_ec and isinstance (raw_ec , dict ):
375+ embedding_config = OTSEmbeddingConfiguration (
376+ provider = raw_ec .get ("provider" , "" ),
377+ model = raw_ec .get ("model" , "" ),
378+ dimension = raw_ec .get ("dimension" , 0 ),
379+ url = raw_ec .get ("url" ),
380+ api_key = raw_ec .get ("apiKey" ),
381+ )
382+
383+ converted_provider_settings = OTSProviderSettings (
384+ ots_instance_name = ps .get ("otsInstanceName" , "" ),
385+ tags = ps .get ("tags" ),
386+ metadata = metadata ,
387+ embedding_configuration = embedding_config ,
388+ )
389+
390+ if self .retrieve_settings :
391+ if isinstance (self .retrieve_settings , OTSRetrieveSettings ):
392+ converted_retrieve_settings = self .retrieve_settings
393+ elif isinstance (self .retrieve_settings , dict ):
394+ rs = self .retrieve_settings
395+
396+ dvsc = None
397+ raw_dvsc = rs .get ("denseVectorSearchConfiguration" )
398+ if raw_dvsc and isinstance (raw_dvsc , dict ):
399+ dvsc = OTSDenseVectorSearchConfig (
400+ number_of_results = raw_dvsc .get ("numberOfResults" ),
401+ )
402+
403+ ftsc = None
404+ raw_ftsc = rs .get ("fullTextSearchConfiguration" )
405+ if raw_ftsc and isinstance (raw_ftsc , dict ):
406+ ftsc = OTSFullTextSearchConfig (
407+ number_of_results = raw_ftsc .get ("numberOfResults" ),
408+ )
409+
410+ reranking = None
411+ raw_rr = rs .get ("rerankingConfiguration" )
412+ if raw_rr and isinstance (raw_rr , dict ):
413+ rrf_config = None
414+ raw_rrf = raw_rr .get ("rrfConfiguration" )
415+ if raw_rrf and isinstance (raw_rrf , dict ):
416+ rrf_config = OTSRRFConfig (
417+ dense_vector_search_weight = raw_rrf .get (
418+ "denseVectorSearchWeight"
419+ ),
420+ full_text_search_weight = raw_rrf .get (
421+ "fullTextSearchWeight"
422+ ),
423+ k = raw_rrf .get ("k" ),
424+ )
425+
426+ weight_config = None
427+ raw_wc = raw_rr .get ("weightConfiguration" )
428+ if raw_wc and isinstance (raw_wc , dict ):
429+ weight_config = OTSWeightConfig (
430+ dense_vector_search_weight = raw_wc .get (
431+ "denseVectorSearchWeight"
432+ ),
433+ full_text_search_weight = raw_wc .get (
434+ "fullTextSearchWeight"
435+ ),
436+ )
437+
438+ model_config = None
439+ raw_mc = raw_rr .get ("modelConfiguration" )
440+ if raw_mc and isinstance (raw_mc , dict ):
441+ model_config = OTSModelConfig (
442+ provider = raw_mc .get ("provider" ),
443+ model = raw_mc .get ("model" ),
444+ )
445+
446+ reranking = OTSRerankingConfig (
447+ type = raw_rr .get ("type" ),
448+ number_of_results = raw_rr .get ("numberOfResults" ),
449+ rrf_configuration = rrf_config ,
450+ weight_configuration = weight_config ,
451+ model_configuration = model_config ,
452+ )
453+
454+ converted_retrieve_settings = OTSRetrieveSettings (
455+ search_type = rs .get ("searchType" ),
456+ dense_vector_search_configuration = dvsc ,
457+ full_text_search_configuration = ftsc ,
458+ reranking_configuration = reranking ,
459+ filter = rs .get ("filter" ),
460+ )
461+
347462 return get_data_api (
348463 provider = provider ,
349464 knowledge_base_name = self .knowledge_base_name or "" ,
0 commit comments