veadk-python 0.2.7__py3-none-any.whl → 0.2.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of veadk-python might be problematic. Click here for more details.

Files changed (75) hide show
  1. veadk/agent.py +3 -2
  2. veadk/auth/veauth/opensearch_veauth.py +75 -0
  3. veadk/auth/veauth/postgresql_veauth.py +75 -0
  4. veadk/cli/cli.py +3 -1
  5. veadk/cli/cli_eval.py +160 -0
  6. veadk/cli/cli_prompt.py +9 -2
  7. veadk/cli/cli_web.py +6 -1
  8. veadk/configs/database_configs.py +43 -0
  9. veadk/configs/model_configs.py +32 -0
  10. veadk/consts.py +11 -4
  11. veadk/evaluation/adk_evaluator/adk_evaluator.py +5 -2
  12. veadk/evaluation/base_evaluator.py +95 -68
  13. veadk/evaluation/deepeval_evaluator/deepeval_evaluator.py +23 -15
  14. veadk/evaluation/eval_set_recorder.py +2 -2
  15. veadk/integrations/ve_prompt_pilot/ve_prompt_pilot.py +9 -3
  16. veadk/integrations/ve_tls/utils.py +1 -2
  17. veadk/integrations/ve_tls/ve_tls.py +9 -5
  18. veadk/integrations/ve_tos/ve_tos.py +542 -68
  19. veadk/knowledgebase/backends/base_backend.py +59 -0
  20. veadk/knowledgebase/backends/in_memory_backend.py +82 -0
  21. veadk/knowledgebase/backends/opensearch_backend.py +136 -0
  22. veadk/knowledgebase/backends/redis_backend.py +144 -0
  23. veadk/knowledgebase/backends/utils.py +91 -0
  24. veadk/knowledgebase/backends/vikingdb_knowledge_backend.py +524 -0
  25. veadk/{database/__init__.py → knowledgebase/entry.py} +10 -2
  26. veadk/knowledgebase/knowledgebase.py +120 -139
  27. veadk/memory/__init__.py +22 -0
  28. veadk/memory/long_term_memory.py +124 -41
  29. veadk/{database/base_database.py → memory/long_term_memory_backends/base_backend.py} +10 -22
  30. veadk/memory/long_term_memory_backends/in_memory_backend.py +65 -0
  31. veadk/memory/long_term_memory_backends/mem0_backend.py +129 -0
  32. veadk/memory/long_term_memory_backends/opensearch_backend.py +120 -0
  33. veadk/memory/long_term_memory_backends/redis_backend.py +127 -0
  34. veadk/memory/long_term_memory_backends/vikingdb_memory_backend.py +148 -0
  35. veadk/memory/short_term_memory.py +80 -72
  36. veadk/memory/short_term_memory_backends/base_backend.py +31 -0
  37. veadk/memory/short_term_memory_backends/mysql_backend.py +41 -0
  38. veadk/memory/short_term_memory_backends/postgresql_backend.py +41 -0
  39. veadk/memory/short_term_memory_backends/sqlite_backend.py +48 -0
  40. veadk/runner.py +12 -19
  41. veadk/tools/builtin_tools/generate_image.py +355 -0
  42. veadk/tools/builtin_tools/image_edit.py +56 -16
  43. veadk/tools/builtin_tools/image_generate.py +51 -15
  44. veadk/tools/builtin_tools/video_generate.py +41 -41
  45. veadk/tools/builtin_tools/web_scraper.py +1 -1
  46. veadk/tools/builtin_tools/web_search.py +7 -7
  47. veadk/tools/load_knowledgebase_tool.py +2 -8
  48. veadk/tracing/telemetry/attributes/extractors/llm_attributes_extractors.py +21 -3
  49. veadk/tracing/telemetry/exporters/apmplus_exporter.py +24 -6
  50. veadk/tracing/telemetry/exporters/cozeloop_exporter.py +2 -0
  51. veadk/tracing/telemetry/exporters/inmemory_exporter.py +22 -8
  52. veadk/tracing/telemetry/exporters/tls_exporter.py +2 -0
  53. veadk/tracing/telemetry/opentelemetry_tracer.py +13 -10
  54. veadk/tracing/telemetry/telemetry.py +66 -63
  55. veadk/utils/misc.py +15 -0
  56. veadk/version.py +1 -1
  57. {veadk_python-0.2.7.dist-info → veadk_python-0.2.9.dist-info}/METADATA +28 -5
  58. {veadk_python-0.2.7.dist-info → veadk_python-0.2.9.dist-info}/RECORD +65 -56
  59. veadk/database/database_adapter.py +0 -533
  60. veadk/database/database_factory.py +0 -80
  61. veadk/database/kv/redis_database.py +0 -159
  62. veadk/database/local_database.py +0 -62
  63. veadk/database/relational/mysql_database.py +0 -173
  64. veadk/database/vector/opensearch_vector_database.py +0 -263
  65. veadk/database/vector/type.py +0 -50
  66. veadk/database/viking/__init__.py +0 -13
  67. veadk/database/viking/viking_database.py +0 -638
  68. veadk/database/viking/viking_memory_db.py +0 -525
  69. /veadk/{database/kv → knowledgebase/backends}/__init__.py +0 -0
  70. /veadk/{database/relational → memory/long_term_memory_backends}/__init__.py +0 -0
  71. /veadk/{database/vector → memory/short_term_memory_backends}/__init__.py +0 -0
  72. {veadk_python-0.2.7.dist-info → veadk_python-0.2.9.dist-info}/WHEEL +0 -0
  73. {veadk_python-0.2.7.dist-info → veadk_python-0.2.9.dist-info}/entry_points.txt +0 -0
  74. {veadk_python-0.2.7.dist-info → veadk_python-0.2.9.dist-info}/licenses/LICENSE +0 -0
  75. {veadk_python-0.2.7.dist-info → veadk_python-0.2.9.dist-info}/top_level.txt +0 -0
veadk/agent.py CHANGED
@@ -84,6 +84,9 @@ class Agent(LlmAgent):
84
84
  knowledgebase: Optional[KnowledgeBase] = None
85
85
  """The knowledgebase provided to agent."""
86
86
 
87
+ short_term_memory: Optional[ShortTermMemory] = None
88
+ """The short term memory provided to agent."""
89
+
87
90
  long_term_memory: Optional[LongTermMemory] = None
88
91
  """The long term memory provided to agent.
89
92
 
@@ -196,7 +199,6 @@ class Agent(LlmAgent):
196
199
  collect_runtime_data: bool = False,
197
200
  eval_set_id: str = "",
198
201
  save_session_to_memory: bool = False,
199
- enable_memory_optimization: bool = False,
200
202
  ):
201
203
  """Running the agent. The runner and session service will be created automatically.
202
204
 
@@ -226,7 +228,6 @@ class Agent(LlmAgent):
226
228
  # memory service
227
229
  short_term_memory = ShortTermMemory(
228
230
  backend="database" if load_history_sessions_from_db else "local",
229
- enable_memory_optimization=enable_memory_optimization,
230
231
  db_url=db_url,
231
232
  )
232
233
  session_service = short_term_memory.session_service
@@ -0,0 +1,75 @@
1
+ # Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
16
+ #
17
+ # Licensed under the Apache License, Version 2.0 (the "License");
18
+ # you may not use this file except in compliance with the License.
19
+ # You may obtain a copy of the License at
20
+ #
21
+ # http://www.apache.org/licenses/LICENSE-2.0
22
+ #
23
+ # Unless required by applicable law or agreed to in writing, software
24
+ # distributed under the License is distributed on an "AS IS" BASIS,
25
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26
+ # See the License for the specific language governing permissions and
27
+ # limitations under the License.
28
+
29
+ import os
30
+
31
+ from typing_extensions import override
32
+
33
+ from veadk.auth.veauth.base_veauth import BaseVeAuth
34
+ from veadk.utils.logger import get_logger
35
+
36
+ # from veadk.utils.volcengine_sign import ve_request
37
+
38
+ logger = get_logger(__name__)
39
+
40
+
41
+ class OpensearchVeAuth(BaseVeAuth):
42
+ def __init__(
43
+ self,
44
+ access_key: str = os.getenv("VOLCENGINE_ACCESS_KEY", ""),
45
+ secret_key: str = os.getenv("VOLCENGINE_SECRET_KEY", ""),
46
+ ) -> None:
47
+ super().__init__(access_key, secret_key)
48
+
49
+ self._token: str = ""
50
+
51
+ @override
52
+ def _fetch_token(self) -> None:
53
+ logger.info("Fetching Opensearch STS token...")
54
+
55
+ # res = ve_request(
56
+ # request_body={},
57
+ # action="GetOrCreatePromptPilotAPIKeys",
58
+ # ak=self.access_key,
59
+ # sk=self.secret_key,
60
+ # service="ark",
61
+ # version="2024-01-01",
62
+ # region="cn-beijing",
63
+ # host="open.volcengineapi.com",
64
+ # )
65
+ # try:
66
+ # self._token = res["Result"]["APIKeys"][0]["APIKey"]
67
+ # except KeyError:
68
+ # raise ValueError(f"Failed to get Prompt Pilot token: {res}")
69
+
70
+ @property
71
+ def token(self) -> str:
72
+ if self._token:
73
+ return self._token
74
+ self._fetch_token()
75
+ return self._token
@@ -0,0 +1,75 @@
1
+ # Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
16
+ #
17
+ # Licensed under the Apache License, Version 2.0 (the "License");
18
+ # you may not use this file except in compliance with the License.
19
+ # You may obtain a copy of the License at
20
+ #
21
+ # http://www.apache.org/licenses/LICENSE-2.0
22
+ #
23
+ # Unless required by applicable law or agreed to in writing, software
24
+ # distributed under the License is distributed on an "AS IS" BASIS,
25
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
26
+ # See the License for the specific language governing permissions and
27
+ # limitations under the License.
28
+
29
+ import os
30
+
31
+ from typing_extensions import override
32
+
33
+ from veadk.auth.veauth.base_veauth import BaseVeAuth
34
+ from veadk.utils.logger import get_logger
35
+
36
+ # from veadk.utils.volcengine_sign import ve_request
37
+
38
+ logger = get_logger(__name__)
39
+
40
+
41
+ class PostgreSqlVeAuth(BaseVeAuth):
42
+ def __init__(
43
+ self,
44
+ access_key: str = os.getenv("VOLCENGINE_ACCESS_KEY", ""),
45
+ secret_key: str = os.getenv("VOLCENGINE_SECRET_KEY", ""),
46
+ ) -> None:
47
+ super().__init__(access_key, secret_key)
48
+
49
+ self._token: str = ""
50
+
51
+ @override
52
+ def _fetch_token(self) -> None:
53
+ logger.info("Fetching PostgreSQL STS token...")
54
+
55
+ # res = ve_request(
56
+ # request_body={},
57
+ # action="GetOrCreatePromptPilotAPIKeys",
58
+ # ak=self.access_key,
59
+ # sk=self.secret_key,
60
+ # service="ark",
61
+ # version="2024-01-01",
62
+ # region="cn-beijing",
63
+ # host="open.volcengineapi.com",
64
+ # )
65
+ # try:
66
+ # self._token = res["Result"]["APIKeys"][0]["APIKey"]
67
+ # except KeyError:
68
+ # raise ValueError(f"Failed to get Prompt Pilot token: {res}")
69
+
70
+ @property
71
+ def token(self) -> str:
72
+ if self._token:
73
+ return self._token
74
+ self._fetch_token()
75
+ return self._token
veadk/cli/cli.py CHANGED
@@ -16,10 +16,11 @@
16
16
  import click
17
17
 
18
18
  from veadk.cli.cli_deploy import deploy
19
+ from veadk.cli.cli_eval import eval
19
20
  from veadk.cli.cli_init import init
21
+ from veadk.cli.cli_pipeline import pipeline
20
22
  from veadk.cli.cli_prompt import prompt
21
23
  from veadk.cli.cli_web import web
22
- from veadk.cli.cli_pipeline import pipeline
23
24
  from veadk.version import VERSION
24
25
 
25
26
 
@@ -37,6 +38,7 @@ veadk.add_command(init)
37
38
  veadk.add_command(prompt)
38
39
  veadk.add_command(web)
39
40
  veadk.add_command(pipeline)
41
+ veadk.add_command(eval)
40
42
 
41
43
  if __name__ == "__main__":
42
44
  veadk()
veadk/cli/cli_eval.py ADDED
@@ -0,0 +1,160 @@
1
+ # Copyright (c) 2025 Beijing Volcano Engine Technology Co., Ltd. and/or its affiliates.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ import click
16
+
17
+ from veadk.utils.logger import get_logger
18
+
19
+ logger = get_logger(__name__)
20
+
21
+
22
+ @click.command()
23
+ @click.option(
24
+ "--agent-dir",
25
+ default=".",
26
+ help="To-be-evaluated agent directory. Must export `root_agent` in `agent.py`",
27
+ )
28
+ @click.option(
29
+ "--agent-a2a-url",
30
+ default=None,
31
+ help="To-be-evaluated agent URL. The agent should be deployed as A2A mode.",
32
+ )
33
+ @click.option(
34
+ "--evalset-file",
35
+ required=True,
36
+ help="Google ADK formatted evalset file path",
37
+ )
38
+ @click.option(
39
+ "--evaluator",
40
+ type=click.Choice(["adk", "deepeval"], case_sensitive=False),
41
+ help="Evaluator type, choose `adk` or `deepeval`",
42
+ )
43
+ @click.option(
44
+ "--judge-model-name",
45
+ default="doubao-1-5-pro-256k-250115",
46
+ help="Judge model name, default is `doubao-1-5-pro-256k-250115`. Useless under `adk` evaluator.",
47
+ )
48
+ @click.option(
49
+ "--volcengine-access-key",
50
+ default=None,
51
+ help="Volcengine access key for using Volcengine models",
52
+ )
53
+ @click.option(
54
+ "--volcengine-secret-key",
55
+ default=None,
56
+ help="Volcengine secret key for using Volcengine models",
57
+ )
58
+ def eval(
59
+ agent_dir: str,
60
+ agent_a2a_url: str,
61
+ evalset_file: str,
62
+ evaluator: str,
63
+ judge_model_name: str,
64
+ volcengine_access_key: str,
65
+ volcengine_secret_key: str,
66
+ ) -> None:
67
+ import asyncio
68
+ import os
69
+ from pathlib import Path
70
+
71
+ from google.adk.cli.utils.agent_loader import AgentLoader
72
+
73
+ from veadk.a2a.remote_ve_agent import RemoteVeAgent
74
+ from veadk.config import getenv, settings
75
+ from veadk.prompts.prompt_evaluator import eval_principle_prompt
76
+
77
+ try:
78
+ from deepeval.metrics import GEval, ToolCorrectnessMetric
79
+ from deepeval.test_case import LLMTestCaseParams
80
+
81
+ from veadk.evaluation.adk_evaluator import ADKEvaluator
82
+ from veadk.evaluation.deepeval_evaluator import DeepevalEvaluator
83
+ except ImportError:
84
+ raise ImportError(
85
+ "Please install veadk with `[evaluation]` extras, e.g., `pip install veadk-python[eval]`"
86
+ )
87
+
88
+ # ====== prepare agent instance ======
89
+ if not agent_dir and not agent_a2a_url:
90
+ raise ValueError(
91
+ "Option `--agent-dir` or `--agent-a2a-url` should be provided one of them."
92
+ )
93
+
94
+ if agent_dir and agent_a2a_url:
95
+ logger.warning(
96
+ "`--agent-dir` and `--agent-a2a-url` are both provided, will use `--agent-a2a-url`."
97
+ )
98
+ agent_instance = RemoteVeAgent(name="a2a_agent", url=agent_a2a_url)
99
+ logger.info(f"Loaded agent from {agent_a2a_url}")
100
+
101
+ if not agent_dir and agent_a2a_url:
102
+ agent_instance = RemoteVeAgent(name="a2a_agent", url=agent_a2a_url)
103
+ logger.info(f"Loaded agent from {agent_a2a_url}")
104
+
105
+ if agent_dir and not agent_a2a_url:
106
+ agent_instance = AgentLoader(str(Path(agent_dir).parent.resolve())).load_agent(
107
+ str(Path(agent_dir).name)
108
+ )
109
+ logger.info(f"Loaded agent from {agent_dir}, agent name: {agent_instance.name}")
110
+
111
+ # ====== prepare envs ======
112
+ if volcengine_access_key and "VOLCENGINE_ACCESS_KEY" not in os.environ:
113
+ os.environ["VOLCENGINE_ACCESS_KEY"] = volcengine_access_key
114
+ if volcengine_secret_key and "VOLCENGINE_SECRET_KEY" not in os.environ:
115
+ os.environ["VOLCENGINE_SECRET_KEY"] = volcengine_secret_key
116
+
117
+ # ====== prepare evaluator instance ======
118
+ evaluator_instance = None
119
+ if evaluator == "adk" and judge_model_name:
120
+ logger.warning(
121
+ "Using Google ADK evaluator, `--judge-model-name` will be ignored."
122
+ )
123
+ evaluator_instance = ADKEvaluator(agent=agent_instance)
124
+
125
+ asyncio.run(evaluator_instance.evaluate(eval_set_file_path=evalset_file))
126
+
127
+ if evaluator == "deepeval":
128
+ if not volcengine_access_key:
129
+ volcengine_access_key = getenv("VOLCENGINE_ACCESS_KEY")
130
+ if not volcengine_secret_key:
131
+ volcengine_secret_key = getenv("VOLCENGINE_SECRET_KEY")
132
+
133
+ evaluator_instance = DeepevalEvaluator(
134
+ agent=agent_instance,
135
+ judge_model_api_key=settings.model.api_key,
136
+ judge_model_name=judge_model_name,
137
+ )
138
+
139
+ judge_model = evaluator_instance.judge_model
140
+
141
+ metrics = [
142
+ GEval(
143
+ threshold=0.8,
144
+ name="Base Evaluation",
145
+ criteria=eval_principle_prompt,
146
+ evaluation_params=[
147
+ LLMTestCaseParams.INPUT,
148
+ LLMTestCaseParams.ACTUAL_OUTPUT,
149
+ LLMTestCaseParams.EXPECTED_OUTPUT,
150
+ ],
151
+ model=judge_model,
152
+ ),
153
+ ToolCorrectnessMetric(threshold=0.5),
154
+ ]
155
+
156
+ asyncio.run(
157
+ evaluator_instance.evaluate(
158
+ eval_set_file_path=evalset_file, metrics=metrics
159
+ )
160
+ )
veadk/cli/cli_prompt.py CHANGED
@@ -21,12 +21,15 @@ import click
21
21
  )
22
22
  @click.option("--feedback", default="", help="Suggestions for prompt optimization")
23
23
  @click.option("--api-key", default="", help="API Key of PromptPilot")
24
+ @click.option("--workspace-id", default="", help="Workspace ID of PromptPilot")
24
25
  @click.option(
25
26
  "--model-name",
26
27
  default="doubao-1.5-pro-32k-250115",
27
28
  help="Model name for prompt optimization",
28
29
  )
29
- def prompt(path: str, feedback: str, api_key: str, model_name: str) -> None:
30
+ def prompt(
31
+ path: str, feedback: str, api_key: str, workspace_id: str, model_name: str
32
+ ) -> None:
30
33
  """Optimize agent system prompt from a local file."""
31
34
  from pathlib import Path
32
35
 
@@ -56,7 +59,11 @@ def prompt(path: str, feedback: str, api_key: str, model_name: str) -> None:
56
59
 
57
60
  if not api_key:
58
61
  api_key = settings.prompt_pilot.api_key
59
- ve_prompt_pilot = VePromptPilot(api_key)
62
+
63
+ if not workspace_id:
64
+ raise ValueError("Please provide workspace_id for PromptPilot service.")
65
+
66
+ ve_prompt_pilot = VePromptPilot(api_key=api_key, workspace_id=workspace_id)
60
67
  ve_prompt_pilot.optimize(
61
68
  agents=agents, feedback=feedback, model_name=model_name
62
69
  )
veadk/cli/cli_web.py CHANGED
@@ -12,6 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ from typing import Optional
15
16
 
16
17
  import click
17
18
 
@@ -152,6 +153,7 @@ def web(host: str) -> None:
152
153
  eval_sets_manager: Any,
153
154
  eval_set_results_manager: Any,
154
155
  agents_dir: str,
156
+ extra_plugins: Optional[list[str]] = None,
155
157
  ):
156
158
  self.agent_loader = agent_loader
157
159
  self.artifact_service = artifact_service
@@ -162,6 +164,7 @@ def web(host: str) -> None:
162
164
  self.runners_to_clean = set()
163
165
  self.current_app_name_ref = SharedValue(value="")
164
166
  self.runner_dict = {}
167
+ self.extra_plugins = extra_plugins or []
165
168
 
166
169
  # parse VeADK memories
167
170
  short_term_memory, long_term_memory = _get_memory(module_path=agents_dir)
@@ -178,4 +181,6 @@ def web(host: str) -> None:
178
181
  agents_dir = os.getcwd()
179
182
  logger.info(f"Load agents from {agents_dir}")
180
183
 
181
- cli_tools_click.cli_web.main(args=[agents_dir, "--host", host])
184
+ cli_tools_click.cli_web.main(
185
+ args=[agents_dir, "--host", host, "--log_level", "ERROR"]
186
+ )
@@ -32,6 +32,8 @@ class OpensearchConfig(BaseSettings):
32
32
 
33
33
  password: str = ""
34
34
 
35
+ secret_token: str = ""
36
+
35
37
 
36
38
  class MysqlConfig(BaseSettings):
37
39
  model_config = SettingsConfigDict(env_prefix="DATABASE_MYSQL_")
@@ -46,6 +48,25 @@ class MysqlConfig(BaseSettings):
46
48
 
47
49
  charset: str = "utf8"
48
50
 
51
+ secret_token: str = ""
52
+ """STS token for MySQL auth, not supported yet."""
53
+
54
+
55
+ class PostgreSqlConfig(BaseSettings):
56
+ model_config = SettingsConfigDict(env_prefix="DATABASE_POSTGRESQL_")
57
+
58
+ host: str = ""
59
+
60
+ port: int = 5432
61
+
62
+ user: str = ""
63
+
64
+ password: str = ""
65
+
66
+ database: str = ""
67
+
68
+ secret_token: str = ""
69
+
49
70
 
50
71
  class RedisConfig(BaseSettings):
51
72
  model_config = SettingsConfigDict(env_prefix="DATABASE_REDIS_")
@@ -58,6 +79,18 @@ class RedisConfig(BaseSettings):
58
79
 
59
80
  db: int = 0
60
81
 
82
+ secret_token: str = ""
83
+ """STS token for Redis auth, not supported yet."""
84
+
85
+
86
+ class Mem0Config(BaseSettings):
87
+ model_config = SettingsConfigDict(env_prefix="DATABASE_MEM0_")
88
+
89
+ api_key: str = ""
90
+ """Mem0 API key"""
91
+
92
+ base_url: str = "" # "https://api.mem0.ai/v1"
93
+
61
94
 
62
95
  class VikingKnowledgebaseConfig(BaseSettings):
63
96
  model_config = SettingsConfigDict(env_prefix="DATABASE_VIKING_")
@@ -81,3 +114,13 @@ class TOSConfig(BaseSettings):
81
114
 
82
115
  VeTOS(bucket_name=_bucket).create_bucket()
83
116
  return _bucket
117
+
118
+
119
+ class NormalTOSConfig(BaseSettings):
120
+ model_config = SettingsConfigDict(env_prefix="DATABASE_TOS_")
121
+
122
+ endpoint: str = "tos-cn-beijing.volces.com"
123
+
124
+ region: str = "cn-beijing"
125
+
126
+ bucket: str
@@ -40,3 +40,35 @@ class ModelConfig(BaseSettings):
40
40
  @cached_property
41
41
  def api_key(self) -> str:
42
42
  return os.getenv("MODEL_AGENT_API_KEY") or ARKVeAuth().token
43
+
44
+
45
+ class EmbeddingModelConfig(BaseSettings):
46
+ model_config = SettingsConfigDict(env_prefix="MODEL_EMBEDDING_")
47
+
48
+ name: str = "doubao-embedding-text-240715"
49
+ """Model name for embedding."""
50
+
51
+ dim: int = 2560
52
+ """Embedding dim is different from different models."""
53
+
54
+ api_base: str = "https://ark.cn-beijing.volces.com/api/v3/"
55
+ """The api base of the model for embedding."""
56
+
57
+ @cached_property
58
+ def api_key(self) -> str:
59
+ return os.getenv("MODEL_EMBEDDING_API_KEY") or ARKVeAuth().token
60
+
61
+
62
+ class NormalEmbeddingModelConfig(BaseSettings):
63
+ model_config = SettingsConfigDict(env_prefix="MODEL_EMBEDDING_")
64
+
65
+ name: str = "doubao-embedding-text-240715"
66
+ """Model name for embedding."""
67
+
68
+ dim: int = 2560
69
+ """Embedding dim is different from different models."""
70
+
71
+ api_base: str = "https://ark.cn-beijing.volces.com/api/v3/"
72
+ """The api base of the model for embedding."""
73
+
74
+ api_key: str
veadk/consts.py CHANGED
@@ -27,14 +27,16 @@ DEFAULT_MODEL_EXTRA_CONFIG = {
27
27
  "x-is-encrypted": getenv("MODEL_AGENT_ENCRYPTED", "true"),
28
28
  "veadk-source": "veadk",
29
29
  "veadk-version": VERSION,
30
+ "User-Agent": f"VeADK/{VERSION}",
31
+ "X-Client-Request-Id": f"veadk/{VERSION}",
30
32
  },
31
33
  "extra_body": {
32
34
  "caching": {
33
35
  "type": getenv("MODEL_AGENT_CACHING", "enabled"),
34
36
  },
35
- "thinking": {
36
- "type": "disabled"
37
- }, # disable thinking for token saving and shorter TTFT by default
37
+ # "thinking": {
38
+ # "type": "disabled"
39
+ # },
38
40
  "expire_at": int(time.time()) + 3600, # expire after 1 hour
39
41
  },
40
42
  }
@@ -56,6 +58,11 @@ DEFAULT_CR_REPO_NAME = "veadk-user-repo"
56
58
  DEFAULT_TLS_LOG_PROJECT_NAME = "veadk-logs"
57
59
  DEFAULT_TLS_TRACING_INSTANCE_NAME = "veadk-tracing"
58
60
 
59
- DEFAULT_TOS_BUCKET_NAME = "veadk-default-bucket"
61
+ DEFAULT_TOS_BUCKET_NAME = "ark-tutorial"
60
62
 
61
63
  DEFAULT_COZELOOP_SPACE_NAME = "VeADK Space"
64
+
65
+ DEFAULT_TEXT_TO_IMAGE_MODEL_NAME = "doubao-seedream-3-0-t2i-250415"
66
+ DEFAULT_IMAGE_EDIT_MODEL_NAME = "doubao-seededit-3-0-i2i-250628"
67
+ DEFAULT_VIDEO_MODEL_NAME = "doubao-seedance-1-0-pro-250528"
68
+ DEFAULT_IMAGE_GENERATE_MODEL_NAME = "doubao-seedream-4-0-250828"
@@ -24,6 +24,8 @@ from google.adk.evaluation.agent_evaluator import (
24
24
  )
25
25
  from google.adk.evaluation.eval_case import IntermediateData, Invocation
26
26
  from google.adk.evaluation.evaluator import EvalStatus
27
+ from google.adk.evaluation.eval_set import EvalSet
28
+ from typing import Optional
27
29
  from typing_extensions import override
28
30
  from veadk.evaluation.base_evaluator import BaseEvaluator
29
31
  from types import SimpleNamespace
@@ -52,7 +54,8 @@ class ADKEvaluator(BaseEvaluator):
52
54
  @override
53
55
  async def evaluate(
54
56
  self,
55
- eval_set_file_path: str,
57
+ eval_set: Optional[EvalSet] = None,
58
+ eval_set_file_path: Optional[str] = None,
56
59
  eval_id: str = f"test_{formatted_timestamp()}",
57
60
  tool_score_threshold: float = 1.0,
58
61
  response_match_score_threshold: float = 0.8,
@@ -104,7 +107,7 @@ class ADKEvaluator(BaseEvaluator):
104
107
  # Iterate each test file and evaluate per-case, per-metric
105
108
  for test_file in test_files:
106
109
  # Build in-memory evaluation cases via BaseEvaluator from the provided file
107
- self.build_eval_set(test_file)
110
+ self.build_eval_set(eval_set, test_file)
108
111
 
109
112
  evaluation_result_list = []
110
113