Skip to content

Commit 75de5bf

Browse files
feat(auth): support auto viking knowledgebase auth (#248)
1 parent 3a02bf9 commit 75de5bf

File tree

3 files changed

+54
-20
lines changed

3 files changed

+54
-20
lines changed

veadk/integrations/ve_tos/ve_tos.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,14 @@ def __init__(
3636
self,
3737
ak: str = "",
3838
sk: str = "",
39+
session_token: str = "",
3940
region: str = "cn-beijing",
4041
bucket_name: str = DEFAULT_TOS_BUCKET_NAME,
4142
) -> None:
4243
self.ak = ak if ak else os.getenv("VOLCENGINE_ACCESS_KEY", "")
4344
self.sk = sk if sk else os.getenv("VOLCENGINE_SECRET_KEY", "")
45+
self.session_token = session_token
46+
4447
# Add empty value validation
4548
if not self.ak or not self.sk:
4649
raise ValueError(
@@ -71,6 +74,7 @@ def __init__(
7174
self._client = self._tos_module.TosClientV2(
7275
ak=self.ak,
7376
sk=self.sk,
77+
security_token=self.session_token,
7478
endpoint=f"tos-{self.region}.volces.com",
7579
region=self.region,
7680
)
@@ -85,6 +89,7 @@ def _refresh_client(self):
8589
self._client = self._tos_module.TosClientV2(
8690
self.ak,
8791
self.sk,
92+
security_token=self.session_token,
8893
endpoint=f"tos-{self.region}.volces.com",
8994
region=self.region,
9095
)

veadk/knowledgebase/backends/utils.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def build_vikingdb_knowledgebase_request(
4646
path: str,
4747
volcengine_access_key: str,
4848
volcengine_secret_key: str,
49+
session_token: str = "",
4950
method: Literal["GET", "POST", "PUT", "DELETE"] = "POST",
5051
region: str = "cn-beijing",
5152
params=None,
@@ -85,7 +86,7 @@ def build_vikingdb_knowledgebase_request(
8586
r.set_body(json.dumps(data))
8687

8788
credentials = Credentials(
88-
volcengine_access_key, volcengine_secret_key, "air", region
89+
volcengine_access_key, volcengine_secret_key, "air", region, session_token
8990
)
9091
SignerV4.sign(r, credentials)
9192
return r

veadk/knowledgebase/backends/vikingdb_knowledge_backend.py

Lines changed: 47 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import asyncio
1616
import json
17+
import os
1718
import re
1819
from pathlib import Path
1920
from typing import Any, Literal
@@ -23,7 +24,7 @@
2324
from typing_extensions import override
2425

2526
import veadk.config # noqa E401
26-
from veadk.config import getenv
27+
from veadk.auth.veauth.utils import get_credential_from_vefaas_iam
2728
from veadk.configs.database_configs import NormalTOSConfig, TOSConfig
2829
from veadk.knowledgebase.backends.base_backend import BaseKnowledgebaseBackend
2930
from veadk.knowledgebase.backends.utils import build_vikingdb_knowledgebase_request
@@ -58,14 +59,16 @@ def get_files_in_directory(directory: str):
5859

5960

6061
class 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

Comments
 (0)