| 
					
				 | 
			
			
				@@ -7,8 +7,8 @@ _import_err_msg = ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     "`alibabacloud_gpdb20160503` and `alibabacloud_tea_openapi` packages not found, " 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     "please run `pip install alibabacloud_gpdb20160503 alibabacloud_tea_openapi`" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-from flask import current_app 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+from configs import dify_config 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from core.rag.datasource.entity.embedding import Embeddings 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from core.rag.datasource.vdb.vector_base import BaseVector 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 from core.rag.datasource.vdb.vector_factory import AbstractVectorFactory 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -36,7 +36,7 @@ class AnalyticdbConfig(BaseModel): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             "region_id": self.region_id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             "read_timeout": self.read_timeout, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 class AnalyticdbVector(BaseVector): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     _instance = None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     _init = False 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -45,7 +45,7 @@ class AnalyticdbVector(BaseVector): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if cls._instance is None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             cls._instance = super().__new__(cls) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return cls._instance 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def __init__(self, collection_name: str, config: AnalyticdbConfig): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # collection_name must be updated every time 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self._collection_name = collection_name.lower() 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -105,7 +105,7 @@ class AnalyticdbVector(BaseVector): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 raise ValueError( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     f"failed to create namespace {self.config.namespace}: {e}" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def _create_collection_if_not_exists(self, embedding_dimension: int): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         from alibabacloud_gpdb20160503 import models as gpdb_20160503_models 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         from Tea.exceptions import TeaException 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -149,7 +149,7 @@ class AnalyticdbVector(BaseVector): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def get_type(self) -> str: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return VectorType.ANALYTICDB 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def create(self, texts: list[Document], embeddings: list[list[float]], **kwargs): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         dimension = len(embeddings[0]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         self._create_collection_if_not_exists(dimension) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -199,7 +199,7 @@ class AnalyticdbVector(BaseVector): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         response = self._client.query_collection_data(request) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return len(response.body.matches.match) > 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def delete_by_ids(self, ids: list[str]) -> None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         from alibabacloud_gpdb20160503 import models as gpdb_20160503_models 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ids_str = ",".join(f"'{id}'" for id in ids) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -260,7 +260,7 @@ class AnalyticdbVector(BaseVector): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 documents.append(doc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return documents 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def search_by_full_text(self, query: str, **kwargs: Any) -> list[Document]: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         from alibabacloud_gpdb20160503 import models as gpdb_20160503_models 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         score_threshold = ( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -291,7 +291,7 @@ class AnalyticdbVector(BaseVector): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 documents.append(doc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return documents 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def delete(self) -> None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         from alibabacloud_gpdb20160503 import models as gpdb_20160503_models 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         request = gpdb_20160503_models.DeleteCollectionRequest( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -316,17 +316,18 @@ class AnalyticdbVectorFactory(AbstractVectorFactory): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             dataset.index_struct = json.dumps( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 self.gen_index_struct_dict(VectorType.ANALYTICDB, collection_name) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        config = current_app.config 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        # TODO handle optional params 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return AnalyticdbVector( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             collection_name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             AnalyticdbConfig( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                access_key_id=config.get("ANALYTICDB_KEY_ID"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                access_key_secret=config.get("ANALYTICDB_KEY_SECRET"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                region_id=config.get("ANALYTICDB_REGION_ID"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                instance_id=config.get("ANALYTICDB_INSTANCE_ID"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                account=config.get("ANALYTICDB_ACCOUNT"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                account_password=config.get("ANALYTICDB_PASSWORD"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                namespace=config.get("ANALYTICDB_NAMESPACE"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                namespace_password=config.get("ANALYTICDB_NAMESPACE_PASSWORD"), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                access_key_id=dify_config.ANALYTICDB_KEY_ID, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                access_key_secret=dify_config.ANALYTICDB_KEY_SECRET, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                region_id=dify_config.ANALYTICDB_REGION_ID, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                instance_id=dify_config.ANALYTICDB_INSTANCE_ID, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                account=dify_config.ANALYTICDB_ACCOUNT, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                account_password=dify_config.ANALYTICDB_PASSWORD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                namespace=dify_config.ANALYTICDB_NAMESPACE, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                namespace_password=dify_config.ANALYTICDB_NAMESPACE_PASSWORD, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             ), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ) 
			 |