diff --git a/dashscope/agentstudio/resources/deployments.py b/dashscope/agentstudio/resources/deployments.py index 613e472..149b64f 100644 --- a/dashscope/agentstudio/resources/deployments.py +++ b/dashscope/agentstudio/resources/deployments.py @@ -45,6 +45,7 @@ def create( schedule: Any = None, resources: Optional[Sequence[Any]] = None, vault_ids: Optional[Sequence[str]] = None, + environment_variables: Optional[Mapping[str, str]] = None, metadata: Optional[Mapping[str, str]] = None, ) -> Deployment: body = DeploymentCreateParams( @@ -56,6 +57,7 @@ def create( schedule=schedule, resources=resources, vault_ids=vault_ids, + environment_variables=environment_variables, metadata=metadata, ).to_dict() resp = self._client.transport.request( @@ -86,6 +88,7 @@ def update( initial_events: Optional[Sequence[Mapping[str, Any]]] = None, resources: Optional[Sequence[Any]] = None, vault_ids: Optional[Sequence[str]] = None, + environment_variables: Optional[Mapping[str, str]] = None, metadata: Optional[Mapping[str, str]] = None, ) -> Deployment: body = DeploymentUpdateParams( @@ -97,6 +100,7 @@ def update( initial_events=initial_events, resources=resources, vault_ids=vault_ids, + environment_variables=environment_variables, metadata=metadata, ).to_dict() resp = self._client.transport.request( @@ -249,6 +253,7 @@ async def create( schedule: Any = None, resources: Optional[Sequence[Any]] = None, vault_ids: Optional[Sequence[str]] = None, + environment_variables: Optional[Mapping[str, str]] = None, metadata: Optional[Mapping[str, str]] = None, ) -> Deployment: body = DeploymentCreateParams( @@ -260,6 +265,7 @@ async def create( schedule=schedule, resources=resources, vault_ids=vault_ids, + environment_variables=environment_variables, metadata=metadata, ).to_dict() resp = await self._client.transport.request( @@ -290,6 +296,7 @@ async def update( initial_events: Optional[Sequence[Mapping[str, Any]]] = None, resources: Optional[Sequence[Any]] = None, vault_ids: Optional[Sequence[str]] = None, + environment_variables: Optional[Mapping[str, str]] = None, metadata: Optional[Mapping[str, str]] = None, ) -> Deployment: body = DeploymentUpdateParams( @@ -301,6 +308,7 @@ async def update( initial_events=initial_events, resources=resources, vault_ids=vault_ids, + environment_variables=environment_variables, metadata=metadata, ).to_dict() resp = await self._client.transport.request( diff --git a/dashscope/agentstudio/types/models.py b/dashscope/agentstudio/types/models.py index c5071c4..3274fe8 100644 --- a/dashscope/agentstudio/types/models.py +++ b/dashscope/agentstudio/types/models.py @@ -847,6 +847,7 @@ def __init__(self, **kwargs: Any) -> None: class Deployment(BaseModel): """Managed Agent deployment.""" + environment_variables: Optional[Dict[str, str]] metadata: Optional[Dict[str, str]] _fields = ( @@ -860,6 +861,7 @@ class Deployment(BaseModel): "initial_events", "resources", "vault_ids", + "environment_variables", "metadata", "status", "paused_reason", diff --git a/dashscope/agentstudio/types/params.py b/dashscope/agentstudio/types/params.py index dae9192..0b44e1a 100644 --- a/dashscope/agentstudio/types/params.py +++ b/dashscope/agentstudio/types/params.py @@ -549,6 +549,7 @@ class DeploymentCreateParams(BaseModel): "initial_events", "resources", "vault_ids", + "environment_variables", "metadata", ) @@ -563,6 +564,7 @@ def __init__( schedule: Any = None, resources: Optional[Sequence[Any]] = None, vault_ids: Optional[Sequence[str]] = None, + environment_variables: Optional[Mapping[str, str]] = None, metadata: Optional[Mapping[str, str]] = None, ) -> None: BaseModel.__init__( @@ -579,6 +581,11 @@ def __init__( else None ), vault_ids=(list(vault_ids) if vault_ids is not None else None), + environment_variables=( + dict(environment_variables) + if environment_variables is not None + else None + ), metadata=(dict(metadata) if metadata is not None else None), ) @@ -600,6 +607,7 @@ class DeploymentUpdateParams(BaseModel): "initial_events", "resources", "vault_ids", + "environment_variables", "metadata", ) @@ -614,6 +622,7 @@ def __init__( initial_events: Optional[Sequence[Mapping[str, Any]]] = None, resources: Optional[Sequence[Any]] = None, vault_ids: Optional[Sequence[str]] = None, + environment_variables: Optional[Mapping[str, str]] = None, metadata: Optional[Mapping[str, str]] = None, ) -> None: self._environment_id_given = environment_id is not _NOT_GIVEN @@ -641,6 +650,11 @@ def __init__( else None ), vault_ids=(list(vault_ids) if vault_ids is not None else None), + environment_variables=( + dict(environment_variables) + if environment_variables is not None + else None + ), metadata=(dict(metadata) if metadata is not None else None), ) diff --git a/tests/unit/test_agentstudio_deployments.py b/tests/unit/test_agentstudio_deployments.py index e99c345..22f1997 100644 --- a/tests/unit/test_agentstudio_deployments.py +++ b/tests/unit/test_agentstudio_deployments.py @@ -50,6 +50,7 @@ def _deployment_payload() -> Dict[str, Any]: }, ], "vault_ids": ["vault_01"], + "environment_variables": {"API_BASE_URL": "https://example.test"}, "metadata": {"biz": "summary"}, "status": "active", "paused_reason": { @@ -162,6 +163,7 @@ def test_create_serializes_contract_and_hydrates_nested_models(client: Client): }, ], vault_ids=["vault_01"], + environment_variables={"API_BASE_URL": "https://example.test"}, metadata={"biz": "summary"}, ) @@ -171,6 +173,9 @@ def test_create_serializes_contract_and_hydrates_nested_models(client: Client): assert call["json"]["agent"] == {"id": "agent_01", "version": 12} assert call["json"]["initial_events"][0]["type"] == "message" assert call["json"]["schedule"]["timezone"] == "Asia/Shanghai" + assert call["json"]["environment_variables"] == { + "API_BASE_URL": "https://example.test", + } assert call["json"]["metadata"] == {"biz": "summary"} assert isinstance(deployment.agent, Agent) assert deployment.agent.version == 12 @@ -178,6 +183,9 @@ def test_create_serializes_contract_and_hydrates_nested_models(client: Client): assert isinstance(deployment.resources[0], DeploymentResource) assert isinstance(deployment.paused_reason, DeploymentPausedReason) assert isinstance(deployment.paused_reason.error, DeploymentError) + assert deployment.environment_variables == { + "API_BASE_URL": "https://example.test", + } assert deployment.metadata == {"biz": "summary"} assert deployment.request_id == "req_01" @@ -187,18 +195,21 @@ def test_update_distinguishes_omitted_and_explicit_null(client: Client): omitted_body = client.transport.calls[-1]["json"] assert "environment_id" not in omitted_body assert "schedule" not in omitted_body + assert "environment_variables" not in omitted_body client.deployments.update( "depl_01", environment_id=None, schedule=None, resources=[], + environment_variables={}, metadata={}, ) clear_body = client.transport.calls[-1]["json"] assert clear_body["environment_id"] is None assert clear_body["schedule"] is None assert clear_body["resources"] == [] + assert clear_body["environment_variables"] == {} assert clear_body["metadata"] == {} @@ -263,6 +274,7 @@ async def exercise() -> None: name="daily-summary", agent={"id": "agent_01"}, initial_events=[user_message("Summarize")], + environment_variables={"API_BASE_URL": "https://example.test"}, metadata={"biz": "summary"}, ) run = await client.deployments.run("depl_01") @@ -272,6 +284,9 @@ async def exercise() -> None: assert client.transport.calls[0]["json"]["metadata"] == { "biz": "summary", } + assert client.transport.calls[0]["json"]["environment_variables"] == { + "API_BASE_URL": "https://example.test", + } assert run.id == "drun_01" assert runs.data[0].id == "drun_01" await client.aclose()