3131from veadk .knowledgebase .entry import KnowledgebaseEntry
3232from veadk .utils .logger import get_logger
3333from veadk .utils .misc import formatted_timestamp
34+ from volcengine .viking_knowledgebase import VikingKnowledgeBaseService
3435
3536try :
3637 from veadk .integrations .ve_tos .ve_tos import VeTOS
@@ -113,10 +114,24 @@ class VikingDBKnowledgeBackend(BaseKnowledgebaseBackend):
113114 volcengine_project : str = "default"
114115
115116 region : str = "cn-beijing"
117+ base_url : str = "https://api-knowledgebase.mlp.cn-beijing.volces.com"
118+ host : str = "api-knowledgebase.mlp.cn-beijing.volces.com"
119+ schema : str = "https"
116120
117121 tos_config : TOSConfig | NormalTOSConfig = Field (default_factory = TOSConfig )
118122
123+ _viking_sdk_client = None
124+
119125 def model_post_init (self , __context : Any ) -> None :
126+ self ._set_env_host ()
127+
128+ self ._viking_sdk_client = VikingKnowledgeBaseService (
129+ host = self .host ,
130+ ak = self .volcengine_access_key ,
131+ sk = self .volcengine_secret_key ,
132+ scheme = self .schema ,
133+ )
134+
120135 self .precheck_index_naming ()
121136
122137 # check whether collection exist, if not, create it
@@ -502,8 +517,6 @@ def _search_knowledge(
502517 rerank : bool = True ,
503518 chunk_diffusion_count : int | None = 3 ,
504519 ) -> list [KnowledgebaseEntry ]:
505- SEARCH_KNOWLEDGE_PATH = "/api/knowledge/collection/search_knowledge"
506-
507520 query_param = (
508521 {
509522 "doc_filter" : {
@@ -523,26 +536,17 @@ def _search_knowledge(
523536 "chunk_diffusion_count" : chunk_diffusion_count ,
524537 }
525538
526- response = self ._do_request (
527- body = {
528- "name" : self .index ,
529- "project" : self .volcengine_project ,
530- "query" : query ,
531- "limit" : top_k ,
532- "query_param" : query_param ,
533- "post_processing" : post_precessing ,
534- },
535- path = SEARCH_KNOWLEDGE_PATH ,
536- method = "POST" ,
539+ response = self ._viking_sdk_client .search_knowledge (
540+ collection_name = self .index ,
541+ project = self .volcengine_project ,
542+ query = query ,
543+ limit = top_k ,
544+ query_param = query_param ,
545+ post_processing = post_precessing ,
537546 )
538547
539- if response .get ("code" ) != 0 :
540- raise ValueError (
541- f"Error during knowledge search: { response .get ('code' )} , message: { response .get ('message' )} "
542- )
543-
544548 entries = []
545- for result in response .get ("data" , {}). get ( " result_list" , []):
549+ for result in response .get ("result_list" , []):
546550 doc_meta_raw_str = result .get ("doc_info" , {}).get ("doc_meta" )
547551 doc_meta_list = json .loads (doc_meta_raw_str ) if doc_meta_raw_str else []
548552 metadata = {}
@@ -555,28 +559,28 @@ def _search_knowledge(
555559
556560 return entries
557561
558- def _do_request (
559- self ,
560- body : dict ,
561- path : str ,
562- method : Literal ["GET" , "POST" , "PUT" , "DELETE" ] = "POST" ,
563- ) -> dict :
564- VIKINGDB_KNOWLEDGEBASE_BASE_URL = (
565- "https://api-knowledgebase.mlp.cn-beijing.volces.com"
566- )
567- full_path = f"{ VIKINGDB_KNOWLEDGEBASE_BASE_URL } { path } "
568-
562+ def _set_env_host (self ):
569563 env_host = getenv (
570564 "DATABASE_VIKING_BASE_URL" , default_value = None , allow_false_values = True
571565 )
572566 if env_host :
573567 if env_host .startswith ("http://" ) or env_host .startswith ("https://" ):
574- full_path = f"{ env_host } { path } "
568+ self .base_url = env_host
569+ split_url = env_host .split ("://" )
570+ self .host = split_url [- 1 ]
571+ self .schema = split_url [0 ]
575572 else :
576573 raise ValueError (
577574 "DATABASE_VIKING_BASE_URL must start with http:// or https://"
578575 )
579576
577+ def _do_request (
578+ self ,
579+ body : dict ,
580+ path : str ,
581+ method : Literal ["GET" , "POST" , "PUT" , "DELETE" ] = "POST" ,
582+ ) -> dict :
583+ full_path = f"{ self .base_url } { path } "
580584 volcengine_access_key = self .volcengine_access_key
581585 volcengine_secret_key = self .volcengine_secret_key
582586 session_token = self .session_token
0 commit comments