From 04fd91a692dcc732aa2951947c849ad86cf8d34d Mon Sep 17 00:00:00 2001 From: "wuqingfu.528" Date: Fri, 30 Jan 2026 19:28:55 +0800 Subject: [PATCH 1/2] feat: support byteplus in viking, web_search and mem0 --- veadk/configs/database_configs.py | 7 +++++ .../backends/vikingdb_knowledge_backend.py | 26 ++++++++++++++--- .../vikingdb_memory_backend.py | 22 ++++++++++++-- veadk/tools/builtin_tools/web_search.py | 29 +++++++++++++++---- 4 files changed, 72 insertions(+), 12 deletions(-) diff --git a/veadk/configs/database_configs.py b/veadk/configs/database_configs.py index 89fbbbe7..ed8c09f7 100644 --- a/veadk/configs/database_configs.py +++ b/veadk/configs/database_configs.py @@ -118,6 +118,13 @@ class TOSConfig(BaseSettings): region: str = "cn-beijing" + def model_post_init(self, __context) -> None: + cloud_provider = os.getenv("CLOUD_PROVIDER", "volces").lower() + + if cloud_provider == "byteplus": + self.endpoint = "tos-ap-southeast-1.bytepluses.com" + self.region = "ap-southeast-1" + @cached_property def bucket(self) -> str: _bucket = os.getenv("DATABASE_TOS_BUCKET") or DEFAULT_TOS_BUCKET_NAME diff --git a/veadk/knowledgebase/backends/vikingdb_knowledge_backend.py b/veadk/knowledgebase/backends/vikingdb_knowledge_backend.py index cab84b87..3eead59c 100644 --- a/veadk/knowledgebase/backends/vikingdb_knowledge_backend.py +++ b/veadk/knowledgebase/backends/vikingdb_knowledge_backend.py @@ -124,12 +124,13 @@ class VikingDBKnowledgeBackend(BaseKnowledgebaseBackend): default_factory=lambda: os.getenv("DATABASE_VIKING_VERSION", "2") ) - region: str = Field( - default_factory=lambda: os.getenv("DATABASE_VIKING_REGION", "cn-beijing") + cloud_provider: str = Field( + default_factory=lambda: os.getenv("CLOUD_PROVIDER", "volces") ) - base_url: str = "https://api-knowledgebase.mlp.cn-beijing.volces.com" - host: str = "api-knowledgebase.mlp.cn-beijing.volces.com" + region: str = Field(default="") + base_url: str = Field(default="") + host: str = Field(default="") schema: str = "https" tos_config: TOSConfig | NormalTOSConfig = Field(default_factory=TOSConfig) @@ -137,6 +138,23 @@ class VikingDBKnowledgeBackend(BaseKnowledgebaseBackend): _viking_sdk_client = None def model_post_init(self, __context: Any) -> None: + if not self.region: + if self.cloud_provider.lower() == "byteplus": + self.region = os.getenv("DATABASE_VIKING_REGION", "cn-hongkong") + self.base_url = ( + f"https://api-knowledgebase.mlp.{self.region}.bytepluses.com" + ) + self.host = f"api-knowledgebase.mlp.{self.region}.bytepluses.com" + else: + self.region = os.getenv("DATABASE_VIKING_REGION", "cn-beijing") + self.base_url = ( + f"https://api-knowledgebase.mlp.{self.region}.volces.com" + ) + self.host = f"api-knowledgebase.mlp.{self.region}.volces.com" + + logger.info(f"Cloud provider: {self.cloud_provider.lower()}") + logger.info(f"VikingDBKnowledgeBackend: region={self.region}, host={self.host}") + self.precheck_index_naming() # check whether collection exist, if not, create it diff --git a/veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py b/veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py index 00f47391..b7168bac 100644 --- a/veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py +++ b/veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py @@ -48,9 +48,11 @@ class VikingDBLTMBackend(BaseLongTermMemoryBackend): session_token: str = "" - region: str = Field( - default_factory=lambda: os.getenv("DATABASE_VIKINGMEM_REGION") or "cn-beijing" + cloud_provider: str = Field( + default_factory=lambda: os.getenv("CLOUD_PROVIDER", "volces") ) + + region: str = Field(default="") """VikingDB memory region""" volcengine_project: str = Field( @@ -61,6 +63,12 @@ class VikingDBLTMBackend(BaseLongTermMemoryBackend): memory_type: list[str] = Field(default_factory=list) def model_post_init(self, __context: Any) -> None: + if not self.region: + if self.cloud_provider.lower() == "byteplus": + self.region = os.getenv("DATABASE_VIKING_REGION", "cn-hongkong") + else: + self.region = os.getenv("DATABASE_VIKING_REGION", "cn-beijing") + # We get memory type from: # 1. user input # 2. environment variable @@ -157,8 +165,16 @@ def _get_sdk_client(self) -> VikingMem: sts_token=sts_token, region=self.region, ) + + host = client.get_host() + if self.cloud_provider.lower() == "byteplus": + host = f"api-knowledgebase.mlp.{self.region}.bytepluses.com" + + logger.info(f"Cloud provider: {self.cloud_provider.lower()}") + logger.info(f"VikingDBLTMBackend: region={self.region}, host={host}") + return VikingMem( - host=client.get_host(), + host=host, region=self.region, auth=IAM( ak=ak, diff --git a/veadk/tools/builtin_tools/web_search.py b/veadk/tools/builtin_tools/web_search.py index 56266097..f3f17e49 100644 --- a/veadk/tools/builtin_tools/web_search.py +++ b/veadk/tools/builtin_tools/web_search.py @@ -63,21 +63,40 @@ def web_search(query: str, tool_context: ToolContext | None = None) -> list[str] else: logger.debug("Successfully get AK/SK from tool context.") - response = ve_request( - request_body={ + provider = (os.getenv("CLOUD_PROVIDER") or "").lower() + logger.info(f"Cloud provider: {provider}") + + if provider == "byteplus": + request_body = { + "Query": query, + "Count": 5, + } + host = "torchlight.byteintlapi.com/search_api/web_search" + api_key = os.getenv("BYTEPLUS_WEB_SEARCH_API_KEY") + header = { + "X-Security-Token": session_token, + "Authorization": f"Bearer {api_key}", + } + else: + request_body = { "Query": query, "SearchType": "web", "Count": 5, "NeedSummary": True, - }, + } + host = "mercury.volcengineapi.com" + header = {"X-Security-Token": session_token} + + response = ve_request( + request_body=request_body, action="WebSearch", ak=ak, sk=sk, service="volc_torchlight_api", version="2025-01-01", region="cn-beijing", - host="mercury.volcengineapi.com", - header={"X-Security-Token": session_token}, + host=host, + header=header, ) try: From e6f8baee22880d2c95d4206aa13f1eb9b5978cca Mon Sep 17 00:00:00 2001 From: "wuqingfu.528" Date: Tue, 3 Feb 2026 20:12:55 +0800 Subject: [PATCH 2/2] fix: support byteplus in viking, web_search and mem0 --- .../backends/vikingdb_knowledge_backend.py | 1 + .../vikingdb_memory_backend.py | 25 +++++---- veadk/tools/builtin_tools/web_search.py | 52 +++++++++++-------- 3 files changed, 47 insertions(+), 31 deletions(-) diff --git a/veadk/knowledgebase/backends/vikingdb_knowledge_backend.py b/veadk/knowledgebase/backends/vikingdb_knowledge_backend.py index 6c72d425..c3120a23 100644 --- a/veadk/knowledgebase/backends/vikingdb_knowledge_backend.py +++ b/veadk/knowledgebase/backends/vikingdb_knowledge_backend.py @@ -705,6 +705,7 @@ def _do_request( session_token=sts_token or self.session_token, method=method, data=body, + region=self.region, ) response = requests.request( method=method, diff --git a/veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py b/veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py index b7168bac..3aa6476b 100644 --- a/veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py +++ b/veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py @@ -150,7 +150,14 @@ def _get_ak_sk_sts(self) -> tuple[str, str, str]: def _get_client(self) -> VikingDBMemoryClient: ak, sk, sts_token = self._get_ak_sk_sts() + if self.cloud_provider.lower() == "byteplus": + host = f"api-knowledgebase.mlp.{self.region}.bytepluses.com" + + logger.info(f"Cloud provider: {self.cloud_provider.lower()}") + logger.info(f"VikingDBLTMBackend: region={self.region}, host={host}") + return VikingDBMemoryClient( + host=host, ak=ak, sk=sk, sts_token=sts_token, @@ -159,23 +166,23 @@ def _get_client(self) -> VikingDBMemoryClient: def _get_sdk_client(self) -> VikingMem: ak, sk, sts_token = self._get_ak_sk_sts() - client = VikingDBMemoryClient( - ak=ak, - sk=sk, - sts_token=sts_token, - region=self.region, - ) - - host = client.get_host() if self.cloud_provider.lower() == "byteplus": host = f"api-knowledgebase.mlp.{self.region}.bytepluses.com" logger.info(f"Cloud provider: {self.cloud_provider.lower()}") logger.info(f"VikingDBLTMBackend: region={self.region}, host={host}") - return VikingMem( + client = VikingDBMemoryClient( host=host, region=self.region, + ak=ak, + sk=sk, + sts_token=sts_token, + ) + + return VikingMem( + host=client.get_host(), + region=self.region, auth=IAM( ak=ak, sk=sk, diff --git a/veadk/tools/builtin_tools/web_search.py b/veadk/tools/builtin_tools/web_search.py index f3f17e49..e81589db 100644 --- a/veadk/tools/builtin_tools/web_search.py +++ b/veadk/tools/builtin_tools/web_search.py @@ -17,6 +17,7 @@ """ import os +import requests from google.adk.tools import ToolContext @@ -71,33 +72,40 @@ def web_search(query: str, tool_context: ToolContext | None = None) -> list[str] "Query": query, "Count": 5, } - host = "torchlight.byteintlapi.com/search_api/web_search" api_key = os.getenv("BYTEPLUS_WEB_SEARCH_API_KEY") + if not api_key: + logger.error("BYTEPLUS_WEB_SEARCH_API_KEY is not set.") + return ["Web search failed: API key is not set."] header = { - "X-Security-Token": session_token, "Authorization": f"Bearer {api_key}", + "Content-Type": "application/json", } - else: - request_body = { - "Query": query, - "SearchType": "web", - "Count": 5, - "NeedSummary": True, - } - host = "mercury.volcengineapi.com" - header = {"X-Security-Token": session_token} - response = ve_request( - request_body=request_body, - action="WebSearch", - ak=ak, - sk=sk, - service="volc_torchlight_api", - version="2025-01-01", - region="cn-beijing", - host=host, - header=header, - ) + response = requests.post( + url="https://torchlight.byteintlapi.com/search_api/web_search", + headers=header, + json=request_body, + timeout=60, + ) + response.raise_for_status() + response = response.json() + else: + response = ve_request( + request_body={ + "Query": query, + "SearchType": "web", + "Count": 5, + "NeedSummary": True, + }, + action="WebSearch", + ak=ak, + sk=sk, + service="volc_torchlight_api", + version="2025-01-01", + region="cn-beijing", + host="mercury.volcengineapi.com", + header={"X-Security-Token": session_token}, + ) try: results: list = response["Result"]["WebResults"]