veadk-python 0.2.5__py3-none-any.whl → 0.2.7__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.
- veadk/agent.py +29 -22
- veadk/agent_builder.py +94 -0
- veadk/auth/__init__.py +13 -0
- veadk/auth/base_auth.py +22 -0
- veadk/auth/veauth/__init__.py +13 -0
- veadk/auth/veauth/apmplus_veauth.py +65 -0
- veadk/auth/veauth/ark_veauth.py +77 -0
- veadk/auth/veauth/base_veauth.py +50 -0
- veadk/auth/veauth/cozeloop_veauth.py +13 -0
- veadk/auth/veauth/prompt_pilot_veauth.py +60 -0
- veadk/auth/veauth/vesearch_veauth.py +62 -0
- veadk/cli/cli.py +2 -0
- veadk/cli/cli_deploy.py +5 -2
- veadk/cli/cli_init.py +25 -6
- veadk/cli/cli_pipeline.py +220 -0
- veadk/cli/cli_prompt.py +4 -4
- veadk/config.py +45 -81
- veadk/configs/__init__.py +13 -0
- veadk/configs/database_configs.py +83 -0
- veadk/configs/model_configs.py +42 -0
- veadk/configs/tool_configs.py +42 -0
- veadk/configs/tracing_configs.py +110 -0
- veadk/consts.py +32 -1
- veadk/database/database_adapter.py +256 -3
- veadk/database/kv/redis_database.py +47 -0
- veadk/database/local_database.py +23 -4
- veadk/database/relational/mysql_database.py +58 -0
- veadk/database/vector/opensearch_vector_database.py +6 -3
- veadk/database/viking/viking_database.py +272 -36
- veadk/integrations/ve_code_pipeline/__init__.py +13 -0
- veadk/integrations/ve_code_pipeline/ve_code_pipeline.py +431 -0
- veadk/integrations/ve_cozeloop/__init__.py +13 -0
- veadk/integrations/ve_cozeloop/ve_cozeloop.py +96 -0
- veadk/integrations/ve_cr/__init__.py +13 -0
- veadk/integrations/ve_cr/ve_cr.py +220 -0
- veadk/integrations/ve_faas/template/cookiecutter.json +3 -2
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/deploy.py +2 -2
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/agent.py +1 -1
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/app.py +24 -1
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/requirements.txt +3 -1
- veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/run.sh +1 -12
- veadk/integrations/ve_faas/ve_faas.py +352 -35
- veadk/integrations/ve_faas/web_template/cookiecutter.json +17 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/__init__.py +13 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/clean.py +23 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/config.yaml.example +2 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/deploy.py +41 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/Dockerfile +23 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/app.py +123 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/init_db.py +46 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/models.py +36 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/requirements.txt +4 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/run.sh +21 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/css/style.css +368 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/static/js/admin.js +0 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/dashboard.html +21 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/edit_post.html +24 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/login.html +21 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/admin/posts.html +53 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/base.html +45 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/index.html +29 -0
- veadk/integrations/ve_faas/web_template/{{cookiecutter.local_dir_name}}/src/templates/post.html +14 -0
- veadk/integrations/ve_prompt_pilot/ve_prompt_pilot.py +6 -3
- veadk/integrations/ve_tls/__init__.py +13 -0
- veadk/integrations/ve_tls/utils.py +117 -0
- veadk/integrations/ve_tls/ve_tls.py +208 -0
- veadk/integrations/ve_tos/ve_tos.py +128 -73
- veadk/knowledgebase/knowledgebase.py +116 -20
- veadk/memory/long_term_memory.py +20 -21
- veadk/memory/short_term_memory_processor.py +9 -4
- veadk/runner.py +213 -223
- veadk/tools/builtin_tools/vesearch.py +2 -2
- veadk/tools/builtin_tools/video_generate.py +27 -20
- veadk/tracing/telemetry/attributes/extractors/common_attributes_extractors.py +5 -0
- veadk/tracing/telemetry/attributes/extractors/llm_attributes_extractors.py +253 -129
- veadk/tracing/telemetry/attributes/extractors/types.py +15 -4
- veadk/tracing/telemetry/exporters/apmplus_exporter.py +158 -12
- veadk/tracing/telemetry/exporters/cozeloop_exporter.py +4 -9
- veadk/tracing/telemetry/exporters/tls_exporter.py +4 -10
- veadk/tracing/telemetry/opentelemetry_tracer.py +11 -5
- veadk/tracing/telemetry/telemetry.py +23 -5
- veadk/utils/logger.py +1 -1
- veadk/utils/misc.py +48 -0
- veadk/utils/volcengine_sign.py +6 -2
- veadk/version.py +1 -1
- {veadk_python-0.2.5.dist-info → veadk_python-0.2.7.dist-info}/METADATA +2 -1
- veadk_python-0.2.7.dist-info/RECORD +172 -0
- veadk_python-0.2.5.dist-info/RECORD +0 -127
- /veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{{ cookiecutter.app_name|replace('-', '_') }} → {{ cookiecutter.app_name }}}/__init__.py +0 -0
- /veadk/integrations/ve_faas/template/{{cookiecutter.local_dir_name}}/src/{{{ cookiecutter.app_name|replace('-', '_') }} → {{ cookiecutter.app_name }}}/agent.py +0 -0
- {veadk_python-0.2.5.dist-info → veadk_python-0.2.7.dist-info}/WHEEL +0 -0
- {veadk_python-0.2.5.dist-info → veadk_python-0.2.7.dist-info}/entry_points.txt +0 -0
- {veadk_python-0.2.5.dist-info → veadk_python-0.2.7.dist-info}/licenses/LICENSE +0 -0
- {veadk_python-0.2.5.dist-info → veadk_python-0.2.7.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,220 @@
|
|
|
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 time
|
|
16
|
+
|
|
17
|
+
from veadk.consts import (
|
|
18
|
+
DEFAULT_CR_INSTANCE_NAME,
|
|
19
|
+
DEFAULT_CR_NAMESPACE_NAME,
|
|
20
|
+
DEFAULT_CR_REPO_NAME,
|
|
21
|
+
)
|
|
22
|
+
from veadk.utils.logger import get_logger
|
|
23
|
+
from veadk.utils.volcengine_sign import ve_request
|
|
24
|
+
|
|
25
|
+
logger = get_logger(__name__)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class VeCR:
|
|
29
|
+
def __init__(self, access_key: str, secret_key: str, region: str = "cn-beijing"):
|
|
30
|
+
self.ak = access_key
|
|
31
|
+
self.sk = secret_key
|
|
32
|
+
self.region = region
|
|
33
|
+
assert region in ["cn-beijing", "cn-guangzhou", "cn-shanghai"]
|
|
34
|
+
self.version = "2022-05-12"
|
|
35
|
+
|
|
36
|
+
def _create_instance(self, instance_name: str = DEFAULT_CR_INSTANCE_NAME) -> str:
|
|
37
|
+
"""
|
|
38
|
+
create cr instance
|
|
39
|
+
|
|
40
|
+
Args:
|
|
41
|
+
instance_name: cr instance name
|
|
42
|
+
|
|
43
|
+
Returns:
|
|
44
|
+
cr instance name
|
|
45
|
+
"""
|
|
46
|
+
status = self._check_instance(instance_name)
|
|
47
|
+
if status != "NONEXIST":
|
|
48
|
+
logger.debug(f"cr instance {instance_name} already running")
|
|
49
|
+
return instance_name
|
|
50
|
+
response = ve_request(
|
|
51
|
+
request_body={
|
|
52
|
+
"Name": instance_name,
|
|
53
|
+
"ResourceTags": [
|
|
54
|
+
{"Key": "provider", "Value": "veadk"},
|
|
55
|
+
],
|
|
56
|
+
},
|
|
57
|
+
action="CreateRegistry",
|
|
58
|
+
ak=self.ak,
|
|
59
|
+
sk=self.sk,
|
|
60
|
+
service="cr",
|
|
61
|
+
version=self.version,
|
|
62
|
+
region=self.region,
|
|
63
|
+
host=f"cr.{self.region}.volcengineapi.com",
|
|
64
|
+
)
|
|
65
|
+
logger.debug(f"create cr instance {instance_name}: {response}")
|
|
66
|
+
|
|
67
|
+
if "Error" in response["ResponseMetadata"]:
|
|
68
|
+
error_code = response["ResponseMetadata"]["Error"]["Code"]
|
|
69
|
+
error_message = response["ResponseMetadata"]["Error"]["Message"]
|
|
70
|
+
if error_code == "AlreadyExists.Registry":
|
|
71
|
+
logger.debug(f"cr instance {instance_name} already exists")
|
|
72
|
+
return instance_name
|
|
73
|
+
else:
|
|
74
|
+
logger.error(
|
|
75
|
+
f"Error create cr instance {instance_name}: {error_code} {error_message}"
|
|
76
|
+
)
|
|
77
|
+
raise ValueError(
|
|
78
|
+
f"Error create cr instance {instance_name}: {error_code} {error_message}"
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
while True:
|
|
82
|
+
status = self._check_instance(instance_name)
|
|
83
|
+
if status == "Running":
|
|
84
|
+
break
|
|
85
|
+
elif status == "Failed":
|
|
86
|
+
raise ValueError(f"cr instance {instance_name} create failed")
|
|
87
|
+
else:
|
|
88
|
+
logger.debug(f"cr instance status: {status}")
|
|
89
|
+
time.sleep(30)
|
|
90
|
+
|
|
91
|
+
return instance_name
|
|
92
|
+
|
|
93
|
+
def _check_instance(self, instance_name: str) -> str:
|
|
94
|
+
"""
|
|
95
|
+
check cr instance status
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
instance_name: cr instance name
|
|
99
|
+
|
|
100
|
+
Returns:
|
|
101
|
+
cr instance status
|
|
102
|
+
"""
|
|
103
|
+
response = ve_request(
|
|
104
|
+
request_body={
|
|
105
|
+
"Filter": {
|
|
106
|
+
"Names": [instance_name],
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
action="ListRegistries",
|
|
110
|
+
ak=self.ak,
|
|
111
|
+
sk=self.sk,
|
|
112
|
+
service="cr",
|
|
113
|
+
version=self.version,
|
|
114
|
+
region=self.region,
|
|
115
|
+
host=f"cr.{self.region}.volcengineapi.com",
|
|
116
|
+
)
|
|
117
|
+
logger.debug(f"check cr instance {instance_name}: {response}")
|
|
118
|
+
|
|
119
|
+
try:
|
|
120
|
+
if response["Result"]["TotalCount"] == 0:
|
|
121
|
+
return "NONEXIST"
|
|
122
|
+
return response["Result"]["Items"][0]["Status"]["Phase"]
|
|
123
|
+
except Exception as _:
|
|
124
|
+
raise ValueError(f"Error check cr instance {instance_name}: {response}")
|
|
125
|
+
|
|
126
|
+
def _create_namespace(
|
|
127
|
+
self,
|
|
128
|
+
instance_name: str = DEFAULT_CR_INSTANCE_NAME,
|
|
129
|
+
namespace_name: str = DEFAULT_CR_NAMESPACE_NAME,
|
|
130
|
+
) -> str:
|
|
131
|
+
"""
|
|
132
|
+
create cr namespace
|
|
133
|
+
|
|
134
|
+
Args:
|
|
135
|
+
instance_name: cr instance name
|
|
136
|
+
namespace_name: cr namespace name
|
|
137
|
+
|
|
138
|
+
Returns:
|
|
139
|
+
cr namespace name
|
|
140
|
+
"""
|
|
141
|
+
response = ve_request(
|
|
142
|
+
request_body={
|
|
143
|
+
"Name": namespace_name,
|
|
144
|
+
"Registry": instance_name,
|
|
145
|
+
},
|
|
146
|
+
action="CreateNamespace",
|
|
147
|
+
ak=self.ak,
|
|
148
|
+
sk=self.sk,
|
|
149
|
+
service="cr",
|
|
150
|
+
version=self.version,
|
|
151
|
+
region=self.region,
|
|
152
|
+
host=f"cr.{self.region}.volcengineapi.com",
|
|
153
|
+
)
|
|
154
|
+
logger.debug(f"create cr namespace {namespace_name}: {response}")
|
|
155
|
+
|
|
156
|
+
if "Error" in response["ResponseMetadata"]:
|
|
157
|
+
error_code = response["ResponseMetadata"]["Error"]["Code"]
|
|
158
|
+
error_message = response["ResponseMetadata"]["Error"]["Message"]
|
|
159
|
+
if error_code == "AlreadyExists.Namespace":
|
|
160
|
+
logger.warning(f"cr namespace {namespace_name} already exists")
|
|
161
|
+
return namespace_name
|
|
162
|
+
else:
|
|
163
|
+
logger.error(
|
|
164
|
+
f"Error create cr namespace {namespace_name}: {error_code} {error_message}"
|
|
165
|
+
)
|
|
166
|
+
raise ValueError(
|
|
167
|
+
f"Error create cr namespace {namespace_name}: {error_code} {error_message}"
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
return namespace_name
|
|
171
|
+
|
|
172
|
+
def _create_repo(
|
|
173
|
+
self,
|
|
174
|
+
instance_name: str = DEFAULT_CR_INSTANCE_NAME,
|
|
175
|
+
namespace_name: str = DEFAULT_CR_NAMESPACE_NAME,
|
|
176
|
+
repo_name: str = DEFAULT_CR_REPO_NAME,
|
|
177
|
+
) -> str:
|
|
178
|
+
"""
|
|
179
|
+
create cr repo
|
|
180
|
+
|
|
181
|
+
Args:
|
|
182
|
+
instance_name: cr instance name
|
|
183
|
+
namespace_name: cr namespace name
|
|
184
|
+
repo_name: cr repo name
|
|
185
|
+
|
|
186
|
+
Returns:
|
|
187
|
+
cr repo name
|
|
188
|
+
"""
|
|
189
|
+
response = ve_request(
|
|
190
|
+
request_body={
|
|
191
|
+
"Name": repo_name,
|
|
192
|
+
"Registry": instance_name,
|
|
193
|
+
"Namespace": namespace_name,
|
|
194
|
+
"Description": "veadk cr repo",
|
|
195
|
+
},
|
|
196
|
+
action="CreateRepository",
|
|
197
|
+
ak=self.ak,
|
|
198
|
+
sk=self.sk,
|
|
199
|
+
service="cr",
|
|
200
|
+
version=self.version,
|
|
201
|
+
region=self.region,
|
|
202
|
+
host=f"cr.{self.region}.volcengineapi.com",
|
|
203
|
+
)
|
|
204
|
+
logger.debug(f"create cr repo {repo_name}: {response}")
|
|
205
|
+
|
|
206
|
+
if "Error" in response["ResponseMetadata"]:
|
|
207
|
+
error_code = response["ResponseMetadata"]["Error"]["Code"]
|
|
208
|
+
error_message = response["ResponseMetadata"]["Error"]["Message"]
|
|
209
|
+
if error_code == "AlreadyExists.Repository":
|
|
210
|
+
logger.debug(f"cr repo {repo_name} already exists")
|
|
211
|
+
return repo_name
|
|
212
|
+
else:
|
|
213
|
+
logger.error(
|
|
214
|
+
f"Error create cr repo {repo_name}: {error_code} {error_message}"
|
|
215
|
+
)
|
|
216
|
+
raise ValueError(
|
|
217
|
+
f"Error create cr repo {repo_name}: {error_code} {error_message}"
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
return repo_name
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"local_dir_name": "veadk_vefaas_proj",
|
|
3
|
-
"app_name": "
|
|
3
|
+
"app_name": "weather_report",
|
|
4
4
|
"agent_module_name": "weather_agent",
|
|
5
5
|
"short_term_memory_backend": "local",
|
|
6
6
|
"vefaas_application_name": "weather-reporter",
|
|
7
7
|
"veapig_instance_name": "",
|
|
8
8
|
"veapig_service_name": "",
|
|
9
9
|
"veapig_upstream_name": "",
|
|
10
|
-
"use_adk_web": false
|
|
10
|
+
"use_adk_web": false,
|
|
11
|
+
"veadk_version": ""
|
|
11
12
|
}
|
|
@@ -95,8 +95,8 @@ async def main():
|
|
|
95
95
|
message = "How is the weather like in Beijing?"
|
|
96
96
|
print(f"Test message: {message}")
|
|
97
97
|
|
|
98
|
-
await _send_msg_with_a2a(cloud_app=cloud_app, message=message)
|
|
99
|
-
await _send_msg_with_mcp(cloud_app=cloud_app, message=message)
|
|
98
|
+
# await _send_msg_with_a2a(cloud_app=cloud_app, message=message)
|
|
99
|
+
# await _send_msg_with_mcp(cloud_app=cloud_app, message=message)
|
|
100
100
|
|
|
101
101
|
|
|
102
102
|
if __name__ == "__main__":
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
from {{ cookiecutter.app_name
|
|
15
|
+
from {{ cookiecutter.app_name }}.agent import agent # type: ignore
|
|
16
16
|
|
|
17
17
|
from veadk.memory.short_term_memory import ShortTermMemory
|
|
18
18
|
from veadk.types import AgentRunConfig
|
|
@@ -36,6 +36,8 @@ from veadk.tracing.telemetry.exporters.tls_exporter import TLSExporter
|
|
|
36
36
|
from veadk.tracing.telemetry.opentelemetry_tracer import OpentelemetryTracer
|
|
37
37
|
from veadk.types import AgentRunConfig
|
|
38
38
|
from veadk.utils.logger import get_logger
|
|
39
|
+
from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator
|
|
40
|
+
from opentelemetry import context
|
|
39
41
|
|
|
40
42
|
logger = get_logger(__name__)
|
|
41
43
|
|
|
@@ -117,6 +119,8 @@ async def agent_card() -> dict:
|
|
|
117
119
|
agent_card = await agent_card_builder.build()
|
|
118
120
|
return agent_card.model_dump()
|
|
119
121
|
|
|
122
|
+
async def get_cozeloop_space_id() -> dict:
|
|
123
|
+
return {"space_id": os.getenv("OBSERVABILITY_OPENTELEMETRY_COZELOOP_SERVICE_NAME", default="")}
|
|
120
124
|
|
|
121
125
|
load_tracer()
|
|
122
126
|
|
|
@@ -132,7 +136,7 @@ a2a_app = init_app(
|
|
|
132
136
|
|
|
133
137
|
a2a_app.post("/run_agent", operation_id="run_agent", tags=["mcp"])(run_agent_func)
|
|
134
138
|
a2a_app.get("/agent_card", operation_id="agent_card", tags=["mcp"])(agent_card)
|
|
135
|
-
|
|
139
|
+
a2a_app.get("/get_cozeloop_space_id", operation_id="get_cozeloop_space_id", tags=["mcp"])(get_cozeloop_space_id)
|
|
136
140
|
|
|
137
141
|
# === Build mcp server ===
|
|
138
142
|
|
|
@@ -159,6 +163,25 @@ app = FastAPI(
|
|
|
159
163
|
redoc_url=None
|
|
160
164
|
)
|
|
161
165
|
|
|
166
|
+
@app.middleware("http")
|
|
167
|
+
async def otel_context_middleware(request, call_next):
|
|
168
|
+
carrier = {
|
|
169
|
+
"traceparent": request.headers.get("Traceparent"),
|
|
170
|
+
"tracestate": request.headers.get("Tracestate"),
|
|
171
|
+
}
|
|
172
|
+
logger.debug(f"carrier: {carrier}")
|
|
173
|
+
if carrier["traceparent"] is None:
|
|
174
|
+
return await call_next(request)
|
|
175
|
+
else:
|
|
176
|
+
ctx = TraceContextTextMapPropagator().extract(carrier=carrier)
|
|
177
|
+
logger.debug(f"ctx: {ctx}")
|
|
178
|
+
token = context.attach(ctx)
|
|
179
|
+
try:
|
|
180
|
+
response = await call_next(request)
|
|
181
|
+
finally:
|
|
182
|
+
context.detach(token)
|
|
183
|
+
return response
|
|
184
|
+
|
|
162
185
|
# Mount A2A routes to main app
|
|
163
186
|
for route in a2a_app.routes:
|
|
164
187
|
app.routes.append(route)
|
|
@@ -16,6 +16,7 @@ export SERVER_HOST=$HOST
|
|
|
16
16
|
export SERVER_PORT=$PORT
|
|
17
17
|
|
|
18
18
|
export PYTHONPATH=$PYTHONPATH:./site-packages
|
|
19
|
+
|
|
19
20
|
# Parse arguments
|
|
20
21
|
while [[ $# -gt 0 ]]; do
|
|
21
22
|
case $1 in
|
|
@@ -33,18 +34,6 @@ while [[ $# -gt 0 ]]; do
|
|
|
33
34
|
esac
|
|
34
35
|
done
|
|
35
36
|
|
|
36
|
-
# in case of deployment deps not installed in user's requirements.txt
|
|
37
|
-
if pip list | grep -q "^fastapi \|^uvicorn "; then
|
|
38
|
-
echo "fastapi and uvicorn already installed"
|
|
39
|
-
else
|
|
40
|
-
python3 -m pip install uvicorn[standard] fastapi
|
|
41
|
-
fi
|
|
42
|
-
|
|
43
|
-
# Check if MODEL_AGENT_API_KEY is set
|
|
44
|
-
if [ -z "$MODEL_AGENT_API_KEY" ]; then
|
|
45
|
-
echo "MODEL_AGENT_API_KEY is not set. Please set it in your environment variables."
|
|
46
|
-
exit 1
|
|
47
|
-
fi
|
|
48
37
|
|
|
49
38
|
USE_ADK_WEB=${USE_ADK_WEB:-False}
|
|
50
39
|
|