diff --git a/pyproject.toml b/pyproject.toml index 66510f3..3a468d1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "gradient-labs" -version = "0.12.0" +version = "0.12.1" description = "Python bindings for the Gradient Labs API" readme = "README.md" requires-python = ">=3.9,<4.0" diff --git a/src/gradient_labs/_back_office_task_delete.py b/src/gradient_labs/_back_office_task_delete.py new file mode 100644 index 0000000..f793a76 --- /dev/null +++ b/src/gradient_labs/_back_office_task_delete.py @@ -0,0 +1,8 @@ +from ._http_client import HttpClient + + +def delete_back_office_task(*, client: HttpClient, task_id: str) -> None: + _ = client.delete( + path=f"back-office-tasks/{task_id}", + body=None, + ) diff --git a/src/gradient_labs/_conversation_delete.py b/src/gradient_labs/_conversation_delete.py new file mode 100644 index 0000000..8237891 --- /dev/null +++ b/src/gradient_labs/_conversation_delete.py @@ -0,0 +1,8 @@ +from ._http_client import HttpClient + + +def delete_conversation(*, client: HttpClient, conversation_id: str) -> None: + _ = client.delete( + path=f"conversations/{conversation_id}", + body=None, + ) diff --git a/src/gradient_labs/client.py b/src/gradient_labs/client.py index 020e449..eb8a1d6 100644 --- a/src/gradient_labs/client.py +++ b/src/gradient_labs/client.py @@ -18,6 +18,7 @@ from ._conversation_rate import rate_conversation, RatingParams from ._conversation_resume import resume_conversation, ResumeParams from ._conversation_read import read_conversation, ReadParams +from ._conversation_delete import delete_conversation from ._conversation_start import ( start_conversation, StartConversationParams, @@ -123,6 +124,7 @@ BackOfficeTaskCreateAttachment as BackOfficeTaskCreateAttachment, ) from ._back_office_task_read import read_back_office_task +from ._back_office_task_delete import delete_back_office_task from .terminology_substitution import TerminologySubstitution from ._terminology_substitution_create import ( @@ -317,6 +319,17 @@ def read_conversation( params=params, ) + def delete_conversation(self, *, conversation_id: str) -> None: + """delete_conversation deletes a conversation and its associated messages, events and other data. + + The deletion happens asynchronously and may not take effect immediately. + + Note: requires a `Management` API key.""" + delete_conversation( + client=self.http_client, + conversation_id=conversation_id, + ) + def start_conversation( self, *, @@ -869,6 +882,17 @@ def read_back_office_task(self, *, task_id: str) -> BackOfficeTask: task_id=task_id, ) + def delete_back_office_task(self, *, task_id: str) -> None: + """delete_back_office_task deletes a back-office task and its associated input data, attachments, decisions and events. + + The deletion happens asynchronously and may not take effect immediately. + + Note: requires a `Management` API key.""" + delete_back_office_task( + client=self.http_client, + task_id=task_id, + ) + # ==================== Terminology Substitution Operations ==================== def create_terminology_substitution( diff --git a/tests/test_back_office_task_delete.py b/tests/test_back_office_task_delete.py new file mode 100644 index 0000000..a096fb6 --- /dev/null +++ b/tests/test_back_office_task_delete.py @@ -0,0 +1,23 @@ +from unittest.mock import MagicMock + +from gradient_labs import Client + +TASK_ID = "task-123" + + +def _client(): + client = Client(api_key="test-key") + delete = MagicMock(return_value=None) + client.http_client.delete = delete + return client, delete + + +def test_delete_back_office_task(): + client, delete = _client() + + result = client.delete_back_office_task(task_id=TASK_ID) + + _, kwargs = delete.call_args + assert kwargs["path"] == f"back-office-tasks/{TASK_ID}" + assert kwargs["body"] is None + assert result is None diff --git a/tests/test_conversation_delete.py b/tests/test_conversation_delete.py new file mode 100644 index 0000000..982c22b --- /dev/null +++ b/tests/test_conversation_delete.py @@ -0,0 +1,23 @@ +from unittest.mock import MagicMock + +from gradient_labs import Client + +CONVERSATION_ID = "conv_01ham6bzcdeja9xzqhjf6daq30" + + +def _client(): + client = Client(api_key="test-key") + delete = MagicMock(return_value=None) + client.http_client.delete = delete + return client, delete + + +def test_delete_conversation(): + client, delete = _client() + + result = client.delete_conversation(conversation_id=CONVERSATION_ID) + + _, kwargs = delete.call_args + assert kwargs["path"] == f"conversations/{CONVERSATION_ID}" + assert kwargs["body"] is None + assert result is None diff --git a/uv.lock b/uv.lock index 30e9dbb..28d64b1 100644 --- a/uv.lock +++ b/uv.lock @@ -128,7 +128,7 @@ wheels = [ [[package]] name = "gradient-labs" -version = "0.12.0" +version = "0.13.0" source = { editable = "." } dependencies = [ { name = "dataclasses-json" },