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,25 @@ 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_service_info ()
127+
128+ self ._viking_sdk_client = VikingKnowledgeBaseService (
129+ host = self .host ,
130+ ak = self .volcengine_access_key ,
131+ sk = self .volcengine_secret_key ,
132+ sts_token = self .session_token ,
133+ scheme = self .schema ,
134+ )
135+
120136 self .precheck_index_naming ()
121137
122138 # check whether collection exist, if not, create it
@@ -502,8 +518,6 @@ def _search_knowledge(
502518 rerank : bool = True ,
503519 chunk_diffusion_count : int | None = 0 ,
504520 ) -> list [KnowledgebaseEntry ]:
505- SEARCH_KNOWLEDGE_PATH = "/api/knowledge/collection/search_knowledge"
506-
507521 query_param = (
508522 {
509523 "doc_filter" : {
@@ -523,26 +537,17 @@ def _search_knowledge(
523537 "chunk_diffusion_count" : chunk_diffusion_count ,
524538 }
525539
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" ,
540+ response = self ._viking_sdk_client .search_knowledge (
541+ collection_name = self .index ,
542+ project = self .volcengine_project ,
543+ query = query ,
544+ limit = top_k ,
545+ query_param = query_param ,
546+ post_processing = post_precessing ,
537547 )
538548
539- if response .get ("code" ) != 0 :
540- raise ValueError (
541- f"Error during knowledge search: { response .get ('code' )} , message: { response .get ('message' )} "
542- )
543-
544549 entries = []
545- for result in response .get ("data" , {}). get ( " result_list" , []):
550+ for result in response .get ("result_list" , []):
546551 doc_meta_raw_str = result .get ("doc_info" , {}).get ("doc_meta" )
547552 doc_meta_list = json .loads (doc_meta_raw_str ) if doc_meta_raw_str else []
548553 metadata = {}
@@ -555,43 +560,40 @@ def _search_knowledge(
555560
556561 return entries
557562
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-
563+ def _set_service_info (self ):
569564 env_host = getenv (
570565 "DATABASE_VIKING_BASE_URL" , default_value = None , allow_false_values = True
571566 )
572567 if env_host :
573568 if env_host .startswith ("http://" ) or env_host .startswith ("https://" ):
574- full_path = f"{ env_host } { path } "
569+ self .base_url = env_host
570+ split_url = env_host .split ("://" )
571+ self .host = split_url [- 1 ]
572+ self .schema = split_url [0 ]
575573 else :
576574 raise ValueError (
577575 "DATABASE_VIKING_BASE_URL must start with http:// or https://"
578576 )
579577
580- volcengine_access_key = self .volcengine_access_key
581- volcengine_secret_key = self .volcengine_secret_key
582- session_token = self .session_token
583-
584- if not (volcengine_access_key and volcengine_secret_key ):
578+ if not (self .volcengine_access_key and self .volcengine_secret_key ):
585579 cred = get_credential_from_vefaas_iam ()
586- volcengine_access_key = cred .access_key_id
587- volcengine_secret_key = cred .secret_access_key
588- session_token = cred .session_token
580+ self .volcengine_access_key = cred .access_key_id
581+ self .volcengine_secret_key = cred .secret_access_key
582+ self .session_token = cred .session_token
583+
584+ def _do_request (
585+ self ,
586+ body : dict ,
587+ path : str ,
588+ method : Literal ["GET" , "POST" , "PUT" , "DELETE" ] = "POST" ,
589+ ) -> dict :
590+ full_path = f"{ self .base_url } { path } "
589591
590592 request = build_vikingdb_knowledgebase_request (
591593 path = path ,
592- volcengine_access_key = volcengine_access_key ,
593- volcengine_secret_key = volcengine_secret_key ,
594- session_token = session_token ,
594+ volcengine_access_key = self . volcengine_access_key ,
595+ volcengine_secret_key = self . volcengine_secret_key ,
596+ session_token = self . session_token ,
595597 method = method ,
596598 data = body ,
597599 )
0 commit comments