1414
1515import asyncio
1616import json
17+ import os
1718import re
1819from pathlib import Path
1920from typing import Any , Literal
2324from typing_extensions import override
2425
2526import veadk .config # noqa E401
26- from veadk .config import getenv
27+ from veadk .auth . veauth . utils import get_credential_from_vefaas_iam
2728from veadk .configs .database_configs import NormalTOSConfig , TOSConfig
2829from veadk .knowledgebase .backends .base_backend import BaseKnowledgebaseBackend
2930from veadk .knowledgebase .backends .utils import build_vikingdb_knowledgebase_request
@@ -58,14 +59,16 @@ def get_files_in_directory(directory: str):
5859
5960
6061class VikingDBKnowledgeBackend (BaseKnowledgebaseBackend ):
61- volcengine_access_key : str = Field (
62- default_factory = lambda : getenv ("VOLCENGINE_ACCESS_KEY" )
62+ volcengine_access_key : str | None = Field (
63+ default_factory = lambda : os . getenv ("VOLCENGINE_ACCESS_KEY" )
6364 )
6465
65- volcengine_secret_key : str = Field (
66- default_factory = lambda : getenv ("VOLCENGINE_SECRET_KEY" )
66+ volcengine_secret_key : str | None = Field (
67+ default_factory = lambda : os . getenv ("VOLCENGINE_SECRET_KEY" )
6768 )
6869
70+ session_token : str = ""
71+
6972 volcengine_project : str = "default"
7073 """VikingDB knowledgebase project in Volcengine console platform. Default by `default`"""
7174
@@ -75,6 +78,15 @@ class VikingDBKnowledgeBackend(BaseKnowledgebaseBackend):
7578 tos_config : TOSConfig | NormalTOSConfig = Field (default_factory = TOSConfig )
7679 """TOS config, used to upload files to TOS"""
7780
81+ def model_post_init (self , __context : Any ) -> None :
82+ self .precheck_index_naming ()
83+
84+ # check whether collection exist, if not, create it
85+ if not self .collection_status ()["existed" ]:
86+ logger .warning (
87+ f"VikingDB knowledgebase collection { self .index } does not exist, please create it first..."
88+ )
89+
7890 def precheck_index_naming (self ):
7991 if not (
8092 isinstance (self .index , str )
@@ -86,18 +98,21 @@ def precheck_index_naming(self):
8698 "it must start with an English letter, contain only letters, numbers, and underscores, and have a length of 1-128."
8799 )
88100
89- def model_post_init (self , __context : Any ) -> None :
90- self .precheck_index_naming ()
91-
92- # check whether collection exist, if not, create it
93- if not self .collection_status ()["existed" ]:
94- logger .warning (
95- f"VikingDB knowledgebase collection { self .index } does not exist, please create it first..."
96- )
97-
98- self ._tos_client = VeTOS (
99- ak = self .volcengine_access_key ,
100- sk = self .volcengine_secret_key ,
101+ def _get_tos_client (self ) -> VeTOS :
102+ volcengine_access_key = self .volcengine_access_key
103+ volcengine_secret_key = self .volcengine_secret_key
104+ session_token = self .session_token
105+
106+ if not (volcengine_access_key and volcengine_secret_key ):
107+ cred = get_credential_from_vefaas_iam ()
108+ volcengine_access_key = cred .access_key_id
109+ volcengine_secret_key = cred .secret_access_key
110+ session_token = cred .session_token
111+
112+ return VeTOS (
113+ ak = volcengine_access_key ,
114+ sk = volcengine_secret_key ,
115+ session_token = session_token ,
101116 region = self .tos_config .region ,
102117 bucket_name = self .tos_config .bucket ,
103118 )
@@ -404,6 +419,8 @@ def _upload_bytes_to_tos(
404419 metadata : dict | None = None ,
405420 ) -> str :
406421 # Here, we set the metadata via the TOS object, ref: https://www.volcengine.com/docs/84313/1254624
422+ self ._tos_client = self ._get_tos_client ()
423+
407424 self ._tos_client .bucket_name = tos_bucket_name
408425 coro = self ._tos_client .upload (
409426 object_key = object_key ,
@@ -504,10 +521,21 @@ def _do_request(
504521 ) -> dict :
505522 VIKINGDB_KNOWLEDGEBASE_BASE_URL = "api-knowledgebase.mlp.cn-beijing.volces.com"
506523
524+ volcengine_access_key = self .volcengine_access_key
525+ volcengine_secret_key = self .volcengine_secret_key
526+ session_token = self .session_token
527+
528+ if not (volcengine_access_key and volcengine_secret_key ):
529+ cred = get_credential_from_vefaas_iam ()
530+ volcengine_access_key = cred .access_key_id
531+ volcengine_secret_key = cred .secret_access_key
532+ session_token = cred .session_token
533+
507534 request = build_vikingdb_knowledgebase_request (
508535 path = path ,
509- volcengine_access_key = self .volcengine_access_key ,
510- volcengine_secret_key = self .volcengine_secret_key ,
536+ volcengine_access_key = volcengine_access_key ,
537+ volcengine_secret_key = volcengine_secret_key ,
538+ session_token = session_token ,
511539 method = method ,
512540 data = body ,
513541 )
0 commit comments