Skip to content

Commit e1c7db2

Browse files
feat(auth): support apmplus auto auth (#270)
1 parent 4406aa0 commit e1c7db2

File tree

6 files changed

+53
-45
lines changed

6 files changed

+53
-45
lines changed

veadk/auth/veauth/apmplus_veauth.py

Lines changed: 32 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -14,52 +14,45 @@
1414

1515
import os
1616

17-
from typing_extensions import override
18-
19-
from veadk.auth.veauth.base_veauth import BaseVeAuth
17+
from veadk.auth.veauth.utils import get_credential_from_vefaas_iam
2018
from veadk.utils.logger import get_logger
2119
from veadk.utils.volcengine_sign import ve_request
2220

2321
logger = get_logger(__name__)
2422

2523

26-
class APMPlusVeAuth(BaseVeAuth):
27-
def __init__(
28-
self,
29-
access_key: str = os.getenv("VOLCENGINE_ACCESS_KEY", ""),
30-
secret_key: str = os.getenv("VOLCENGINE_SECRET_KEY", ""),
31-
region: str = "cn-beijing",
32-
) -> None:
33-
super().__init__(access_key, secret_key)
34-
35-
self.region = region
24+
def get_apmplus_token(region: str = "cn-beijing") -> str:
25+
logger.info("Fetching APMPlus token...")
3626

37-
self._token: str = ""
27+
access_key = os.getenv("VOLCENGINE_ACCESS_KEY")
28+
secret_key = os.getenv("VOLCENGINE_SECRET_KEY")
29+
session_token = ""
3830

39-
@override
40-
def _fetch_token(self) -> None:
41-
logger.info("Fetching APMPlus token...")
31+
if not (access_key and secret_key):
32+
# try to get from vefaas iam
33+
cred = get_credential_from_vefaas_iam()
34+
access_key = cred.access_key_id
35+
secret_key = cred.secret_access_key
36+
session_token = cred.session_token
4237

43-
res = ve_request(
44-
request_body={},
45-
action="GetAppKey",
46-
ak=self.access_key,
47-
sk=self.secret_key,
48-
service="apmplus_server",
49-
version="2024-07-30",
50-
region=self.region,
51-
host="open.volcengineapi.com",
38+
res = ve_request(
39+
request_body={},
40+
header={
41+
"X-Security-Token": session_token,
5242
# APMPlus frontend required
53-
header={"X-Apmplus-Region": self.region.replace("-", "_")},
54-
)
55-
try:
56-
self._token = res["data"]["app_key"]
57-
except KeyError:
58-
raise ValueError(f"Failed to get APMPlus token: {res}")
59-
60-
@property
61-
def token(self) -> str:
62-
if self._token:
63-
return self._token
64-
self._fetch_token()
65-
return self._token
43+
"X-Apmplus-Region": region.replace("-", "_"),
44+
},
45+
action="GetAppKey",
46+
ak=access_key,
47+
sk=secret_key,
48+
service="apmplus_server",
49+
version="2024-07-30",
50+
region=region,
51+
host="open.volcengineapi.com",
52+
)
53+
try:
54+
api_key = res["data"]["app_key"]
55+
logger.info("Successfully fetching APMPlus API Key.")
56+
return api_key
57+
except KeyError:
58+
raise ValueError(f"Failed to get APMPlus token: {res}")

veadk/auth/veauth/ark_veauth.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ def get_ark_token(region: str = "cn-beijing") -> str:
6464
host="open.volcengineapi.com",
6565
)
6666
try:
67-
return res["Result"]["ApiKey"]
67+
api_key = res["Result"]["ApiKey"]
68+
logger.info("Successfully fetching ARK API Key.")
69+
return api_key
6870
except KeyError:
6971
raise ValueError(f"Failed to get ARK api key: {res}")

veadk/auth/veauth/utils.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ def get_credential_from_vefaas_iam() -> VeIAMCredential:
5050
access_key = cred_dict["access_key_id"]
5151
secret_key = cred_dict["secret_access_key"]
5252
session_token = cred_dict["session_token"]
53+
54+
logger.info("Get credential from IAM file successfully.")
55+
5356
return VeIAMCredential(
5457
access_key_id=access_key,
5558
secret_access_key=secret_key,

veadk/cli/cli_web.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,12 @@ async def wrapper(*args, **kwargs) -> ADKRunner:
132132

133133
from google.adk.cli.cli_tools_click import cli_web
134134

135-
extra_args = ctx.args
136-
logger.debug(f"User args: {ctx.args}")
135+
extra_args: list = ctx.args
136+
logger.debug(f"User args: {extra_args}")
137+
138+
# set a default log level to avoid unnecessary outputs
139+
# from Google ADK and Litellm
140+
if "--log_level" not in extra_args:
141+
extra_args.extend(["--log_level", "ERROR"])
142+
137143
cli_web.main(args=extra_args, standalone_mode=False)

veadk/configs/model_configs.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,11 @@ class EmbeddingModelConfig(BaseSettings):
5656

5757
@cached_property
5858
def api_key(self) -> str:
59-
return os.getenv("MODEL_EMBEDDING_API_KEY") or get_ark_token()
59+
return (
60+
os.getenv("MODEL_EMBEDDING_API_KEY")
61+
or os.getenv("MODEL_AGENT_API_KEY") # try to use agent's model api key
62+
or get_ark_token()
63+
)
6064

6165

6266
class NormalEmbeddingModelConfig(BaseSettings):

veadk/configs/tracing_configs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from pydantic import Field
1919
from pydantic_settings import BaseSettings, SettingsConfigDict
2020

21-
from veadk.auth.veauth.apmplus_veauth import APMPlusVeAuth
21+
from veadk.auth.veauth.apmplus_veauth import get_apmplus_token
2222
from veadk.consts import (
2323
DEFAULT_APMPLUS_OTEL_EXPORTER_ENDPOINT,
2424
DEFAULT_APMPLUS_OTEL_EXPORTER_SERVICE_NAME,
@@ -46,7 +46,7 @@ class APMPlusConfig(BaseSettings):
4646
def otel_exporter_api_key(self) -> str:
4747
return (
4848
os.getenv("OBSERVABILITY_OPENTELEMETRY_APMPLUS_API_KEY")
49-
or APMPlusVeAuth().token
49+
or get_apmplus_token()
5050
)
5151

5252

0 commit comments

Comments
 (0)