Skip to content

Commit 5d0a6fa

Browse files
Merge pull request #193 from coolsky99/feature/deployment-env-vars-on-main
feat(agentstudio): support deployment environment variables
2 parents a4476e3 + d7dd386 commit 5d0a6fa

4 files changed

Lines changed: 39 additions & 0 deletions

File tree

‎dashscope/agentstudio/resources/deployments.py‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ def create(
4545
schedule: Any = None,
4646
resources: Optional[Sequence[Any]] = None,
4747
vault_ids: Optional[Sequence[str]] = None,
48+
environment_variables: Optional[Mapping[str, str]] = None,
4849
metadata: Optional[Mapping[str, str]] = None,
4950
) -> Deployment:
5051
body = DeploymentCreateParams(
@@ -56,6 +57,7 @@ def create(
5657
schedule=schedule,
5758
resources=resources,
5859
vault_ids=vault_ids,
60+
environment_variables=environment_variables,
5961
metadata=metadata,
6062
).to_dict()
6163
resp = self._client.transport.request(
@@ -86,6 +88,7 @@ def update(
8688
initial_events: Optional[Sequence[Mapping[str, Any]]] = None,
8789
resources: Optional[Sequence[Any]] = None,
8890
vault_ids: Optional[Sequence[str]] = None,
91+
environment_variables: Optional[Mapping[str, str]] = None,
8992
metadata: Optional[Mapping[str, str]] = None,
9093
) -> Deployment:
9194
body = DeploymentUpdateParams(
@@ -97,6 +100,7 @@ def update(
97100
initial_events=initial_events,
98101
resources=resources,
99102
vault_ids=vault_ids,
103+
environment_variables=environment_variables,
100104
metadata=metadata,
101105
).to_dict()
102106
resp = self._client.transport.request(
@@ -249,6 +253,7 @@ async def create(
249253
schedule: Any = None,
250254
resources: Optional[Sequence[Any]] = None,
251255
vault_ids: Optional[Sequence[str]] = None,
256+
environment_variables: Optional[Mapping[str, str]] = None,
252257
metadata: Optional[Mapping[str, str]] = None,
253258
) -> Deployment:
254259
body = DeploymentCreateParams(
@@ -260,6 +265,7 @@ async def create(
260265
schedule=schedule,
261266
resources=resources,
262267
vault_ids=vault_ids,
268+
environment_variables=environment_variables,
263269
metadata=metadata,
264270
).to_dict()
265271
resp = await self._client.transport.request(
@@ -290,6 +296,7 @@ async def update(
290296
initial_events: Optional[Sequence[Mapping[str, Any]]] = None,
291297
resources: Optional[Sequence[Any]] = None,
292298
vault_ids: Optional[Sequence[str]] = None,
299+
environment_variables: Optional[Mapping[str, str]] = None,
293300
metadata: Optional[Mapping[str, str]] = None,
294301
) -> Deployment:
295302
body = DeploymentUpdateParams(
@@ -301,6 +308,7 @@ async def update(
301308
initial_events=initial_events,
302309
resources=resources,
303310
vault_ids=vault_ids,
311+
environment_variables=environment_variables,
304312
metadata=metadata,
305313
).to_dict()
306314
resp = await self._client.transport.request(

‎dashscope/agentstudio/types/models.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -847,6 +847,7 @@ def __init__(self, **kwargs: Any) -> None:
847847
class Deployment(BaseModel):
848848
"""Managed Agent deployment."""
849849

850+
environment_variables: Optional[Dict[str, str]]
850851
metadata: Optional[Dict[str, str]]
851852

852853
_fields = (
@@ -860,6 +861,7 @@ class Deployment(BaseModel):
860861
"initial_events",
861862
"resources",
862863
"vault_ids",
864+
"environment_variables",
863865
"metadata",
864866
"status",
865867
"paused_reason",

‎dashscope/agentstudio/types/params.py‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,7 @@ class DeploymentCreateParams(BaseModel):
549549
"initial_events",
550550
"resources",
551551
"vault_ids",
552+
"environment_variables",
552553
"metadata",
553554
)
554555

@@ -563,6 +564,7 @@ def __init__(
563564
schedule: Any = None,
564565
resources: Optional[Sequence[Any]] = None,
565566
vault_ids: Optional[Sequence[str]] = None,
567+
environment_variables: Optional[Mapping[str, str]] = None,
566568
metadata: Optional[Mapping[str, str]] = None,
567569
) -> None:
568570
BaseModel.__init__(
@@ -579,6 +581,11 @@ def __init__(
579581
else None
580582
),
581583
vault_ids=(list(vault_ids) if vault_ids is not None else None),
584+
environment_variables=(
585+
dict(environment_variables)
586+
if environment_variables is not None
587+
else None
588+
),
582589
metadata=(dict(metadata) if metadata is not None else None),
583590
)
584591

@@ -600,6 +607,7 @@ class DeploymentUpdateParams(BaseModel):
600607
"initial_events",
601608
"resources",
602609
"vault_ids",
610+
"environment_variables",
603611
"metadata",
604612
)
605613

@@ -614,6 +622,7 @@ def __init__(
614622
initial_events: Optional[Sequence[Mapping[str, Any]]] = None,
615623
resources: Optional[Sequence[Any]] = None,
616624
vault_ids: Optional[Sequence[str]] = None,
625+
environment_variables: Optional[Mapping[str, str]] = None,
617626
metadata: Optional[Mapping[str, str]] = None,
618627
) -> None:
619628
self._environment_id_given = environment_id is not _NOT_GIVEN
@@ -641,6 +650,11 @@ def __init__(
641650
else None
642651
),
643652
vault_ids=(list(vault_ids) if vault_ids is not None else None),
653+
environment_variables=(
654+
dict(environment_variables)
655+
if environment_variables is not None
656+
else None
657+
),
644658
metadata=(dict(metadata) if metadata is not None else None),
645659
)
646660

‎tests/unit/test_agentstudio_deployments.py‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ def _deployment_payload() -> Dict[str, Any]:
5050
},
5151
],
5252
"vault_ids": ["vault_01"],
53+
"environment_variables": {"API_BASE_URL": "https://example.test"},
5354
"metadata": {"biz": "summary"},
5455
"status": "active",
5556
"paused_reason": {
@@ -162,6 +163,7 @@ def test_create_serializes_contract_and_hydrates_nested_models(client: Client):
162163
},
163164
],
164165
vault_ids=["vault_01"],
166+
environment_variables={"API_BASE_URL": "https://example.test"},
165167
metadata={"biz": "summary"},
166168
)
167169

@@ -171,13 +173,19 @@ def test_create_serializes_contract_and_hydrates_nested_models(client: Client):
171173
assert call["json"]["agent"] == {"id": "agent_01", "version": 12}
172174
assert call["json"]["initial_events"][0]["type"] == "message"
173175
assert call["json"]["schedule"]["timezone"] == "Asia/Shanghai"
176+
assert call["json"]["environment_variables"] == {
177+
"API_BASE_URL": "https://example.test",
178+
}
174179
assert call["json"]["metadata"] == {"biz": "summary"}
175180
assert isinstance(deployment.agent, Agent)
176181
assert deployment.agent.version == 12
177182
assert isinstance(deployment.schedule, DeploymentSchedule)
178183
assert isinstance(deployment.resources[0], DeploymentResource)
179184
assert isinstance(deployment.paused_reason, DeploymentPausedReason)
180185
assert isinstance(deployment.paused_reason.error, DeploymentError)
186+
assert deployment.environment_variables == {
187+
"API_BASE_URL": "https://example.test",
188+
}
181189
assert deployment.metadata == {"biz": "summary"}
182190
assert deployment.request_id == "req_01"
183191

@@ -187,18 +195,21 @@ def test_update_distinguishes_omitted_and_explicit_null(client: Client):
187195
omitted_body = client.transport.calls[-1]["json"]
188196
assert "environment_id" not in omitted_body
189197
assert "schedule" not in omitted_body
198+
assert "environment_variables" not in omitted_body
190199

191200
client.deployments.update(
192201
"depl_01",
193202
environment_id=None,
194203
schedule=None,
195204
resources=[],
205+
environment_variables={},
196206
metadata={},
197207
)
198208
clear_body = client.transport.calls[-1]["json"]
199209
assert clear_body["environment_id"] is None
200210
assert clear_body["schedule"] is None
201211
assert clear_body["resources"] == []
212+
assert clear_body["environment_variables"] == {}
202213
assert clear_body["metadata"] == {}
203214

204215

@@ -263,6 +274,7 @@ async def exercise() -> None:
263274
name="daily-summary",
264275
agent={"id": "agent_01"},
265276
initial_events=[user_message("Summarize")],
277+
environment_variables={"API_BASE_URL": "https://example.test"},
266278
metadata={"biz": "summary"},
267279
)
268280
run = await client.deployments.run("depl_01")
@@ -272,6 +284,9 @@ async def exercise() -> None:
272284
assert client.transport.calls[0]["json"]["metadata"] == {
273285
"biz": "summary",
274286
}
287+
assert client.transport.calls[0]["json"]["environment_variables"] == {
288+
"API_BASE_URL": "https://example.test",
289+
}
275290
assert run.id == "drun_01"
276291
assert runs.data[0].id == "drun_01"
277292
await client.aclose()

0 commit comments

Comments
 (0)