Skip to content

Commit 3af70dc

Browse files
authored
feat: support byteplus in viking, web_search and mem0 (#482)
* feat: support byteplus in viking, web_search and mem0 * fix: support byteplus in viking, web_search and mem0
1 parent ca72e30 commit 3af70dc

4 files changed

Lines changed: 97 additions & 21 deletions

File tree

veadk/configs/database_configs.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,13 @@ class TOSConfig(BaseSettings):
118118

119119
region: str = "cn-beijing"
120120

121+
def model_post_init(self, __context) -> None:
122+
cloud_provider = os.getenv("CLOUD_PROVIDER", "volces").lower()
123+
124+
if cloud_provider == "byteplus":
125+
self.endpoint = "tos-ap-southeast-1.bytepluses.com"
126+
self.region = "ap-southeast-1"
127+
121128
@cached_property
122129
def bucket(self) -> str:
123130
_bucket = os.getenv("DATABASE_TOS_BUCKET") or DEFAULT_TOS_BUCKET_NAME

veadk/knowledgebase/backends/vikingdb_knowledge_backend.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -169,19 +169,37 @@ class VikingDBKnowledgeBackend(BaseKnowledgebaseBackend):
169169
default_factory=lambda: os.getenv("DATABASE_VIKING_VERSION", "2")
170170
)
171171

172-
region: str = Field(
173-
default_factory=lambda: os.getenv("DATABASE_VIKING_REGION", "cn-beijing")
172+
cloud_provider: str = Field(
173+
default_factory=lambda: os.getenv("CLOUD_PROVIDER", "volces")
174174
)
175175

176-
base_url: str = "https://api-knowledgebase.mlp.cn-beijing.volces.com"
177-
host: str = "api-knowledgebase.mlp.cn-beijing.volces.com"
176+
region: str = Field(default="")
177+
base_url: str = Field(default="")
178+
host: str = Field(default="")
178179
schema: str = "https"
179180

180181
tos_config: TOSConfig | NormalTOSConfig = Field(default_factory=TOSConfig)
181182

182183
_viking_sdk_client = None
183184

184185
def model_post_init(self, __context: Any) -> None:
186+
if not self.region:
187+
if self.cloud_provider.lower() == "byteplus":
188+
self.region = os.getenv("DATABASE_VIKING_REGION", "cn-hongkong")
189+
self.base_url = (
190+
f"https://api-knowledgebase.mlp.{self.region}.bytepluses.com"
191+
)
192+
self.host = f"api-knowledgebase.mlp.{self.region}.bytepluses.com"
193+
else:
194+
self.region = os.getenv("DATABASE_VIKING_REGION", "cn-beijing")
195+
self.base_url = (
196+
f"https://api-knowledgebase.mlp.{self.region}.volces.com"
197+
)
198+
self.host = f"api-knowledgebase.mlp.{self.region}.volces.com"
199+
200+
logger.info(f"Cloud provider: {self.cloud_provider.lower()}")
201+
logger.info(f"VikingDBKnowledgeBackend: region={self.region}, host={self.host}")
202+
185203
self.precheck_index_naming()
186204

187205
# check whether collection exist, if not, create it
@@ -687,6 +705,7 @@ def _do_request(
687705
session_token=sts_token or self.session_token,
688706
method=method,
689707
data=body,
708+
region=self.region,
690709
)
691710
response = requests.request(
692711
method=method,

veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,11 @@ class VikingDBLTMBackend(BaseLongTermMemoryBackend):
4848

4949
session_token: str = ""
5050

51-
region: str = Field(
52-
default_factory=lambda: os.getenv("DATABASE_VIKINGMEM_REGION") or "cn-beijing"
51+
cloud_provider: str = Field(
52+
default_factory=lambda: os.getenv("CLOUD_PROVIDER", "volces")
5353
)
54+
55+
region: str = Field(default="")
5456
"""VikingDB memory region"""
5557

5658
volcengine_project: str = Field(
@@ -61,6 +63,12 @@ class VikingDBLTMBackend(BaseLongTermMemoryBackend):
6163
memory_type: list[str] = Field(default_factory=list)
6264

6365
def model_post_init(self, __context: Any) -> None:
66+
if not self.region:
67+
if self.cloud_provider.lower() == "byteplus":
68+
self.region = os.getenv("DATABASE_VIKING_REGION", "cn-hongkong")
69+
else:
70+
self.region = os.getenv("DATABASE_VIKING_REGION", "cn-beijing")
71+
6472
# We get memory type from:
6573
# 1. user input
6674
# 2. environment variable
@@ -142,7 +150,14 @@ def _get_ak_sk_sts(self) -> tuple[str, str, str]:
142150

143151
def _get_client(self) -> VikingDBMemoryClient:
144152
ak, sk, sts_token = self._get_ak_sk_sts()
153+
if self.cloud_provider.lower() == "byteplus":
154+
host = f"api-knowledgebase.mlp.{self.region}.bytepluses.com"
155+
156+
logger.info(f"Cloud provider: {self.cloud_provider.lower()}")
157+
logger.info(f"VikingDBLTMBackend: region={self.region}, host={host}")
158+
145159
return VikingDBMemoryClient(
160+
host=host,
146161
ak=ak,
147162
sk=sk,
148163
sts_token=sts_token,
@@ -151,12 +166,20 @@ def _get_client(self) -> VikingDBMemoryClient:
151166

152167
def _get_sdk_client(self) -> VikingMem:
153168
ak, sk, sts_token = self._get_ak_sk_sts()
169+
if self.cloud_provider.lower() == "byteplus":
170+
host = f"api-knowledgebase.mlp.{self.region}.bytepluses.com"
171+
172+
logger.info(f"Cloud provider: {self.cloud_provider.lower()}")
173+
logger.info(f"VikingDBLTMBackend: region={self.region}, host={host}")
174+
154175
client = VikingDBMemoryClient(
176+
host=host,
177+
region=self.region,
155178
ak=ak,
156179
sk=sk,
157180
sts_token=sts_token,
158-
region=self.region,
159181
)
182+
160183
return VikingMem(
161184
host=client.get_host(),
162185
region=self.region,

veadk/tools/builtin_tools/web_search.py

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
"""
1818

1919
import os
20+
import requests
2021

2122
from google.adk.tools import ToolContext
2223

@@ -63,22 +64,48 @@ def web_search(query: str, tool_context: ToolContext | None = None) -> list[str]
6364
else:
6465
logger.debug("Successfully get AK/SK from tool context.")
6566

66-
response = ve_request(
67-
request_body={
67+
provider = (os.getenv("CLOUD_PROVIDER") or "").lower()
68+
logger.info(f"Cloud provider: {provider}")
69+
70+
if provider == "byteplus":
71+
request_body = {
6872
"Query": query,
69-
"SearchType": "web",
7073
"Count": 5,
71-
"NeedSummary": True,
72-
},
73-
action="WebSearch",
74-
ak=ak,
75-
sk=sk,
76-
service="volc_torchlight_api",
77-
version="2025-01-01",
78-
region="cn-beijing",
79-
host="mercury.volcengineapi.com",
80-
header={"X-Security-Token": session_token},
81-
)
74+
}
75+
api_key = os.getenv("BYTEPLUS_WEB_SEARCH_API_KEY")
76+
if not api_key:
77+
logger.error("BYTEPLUS_WEB_SEARCH_API_KEY is not set.")
78+
return ["Web search failed: API key is not set."]
79+
header = {
80+
"Authorization": f"Bearer {api_key}",
81+
"Content-Type": "application/json",
82+
}
83+
84+
response = requests.post(
85+
url="https://torchlight.byteintlapi.com/search_api/web_search",
86+
headers=header,
87+
json=request_body,
88+
timeout=60,
89+
)
90+
response.raise_for_status()
91+
response = response.json()
92+
else:
93+
response = ve_request(
94+
request_body={
95+
"Query": query,
96+
"SearchType": "web",
97+
"Count": 5,
98+
"NeedSummary": True,
99+
},
100+
action="WebSearch",
101+
ak=ak,
102+
sk=sk,
103+
service="volc_torchlight_api",
104+
version="2025-01-01",
105+
region="cn-beijing",
106+
host="mercury.volcengineapi.com",
107+
header={"X-Security-Token": session_token},
108+
)
82109

83110
try:
84111
results: list = response["Result"]["WebResults"]

0 commit comments

Comments
 (0)