Skip to content

Commit a162a6d

Browse files
committed
feat(client): add methods to langfuse client to fetch and delete dataset runs
1 parent 0d9bd8f commit a162a6d

2 files changed

Lines changed: 59 additions & 8 deletions

File tree

langfuse/_client/client.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2462,7 +2462,7 @@ def get_dataset(
24622462
raise e
24632463

24642464
def get_dataset_run(
2465-
self, dataset_name: str, *, run_name: str
2465+
self, *, dataset_name: str, run_name: str
24662466
) -> DatasetRunWithItems:
24672467
"""Fetch a dataset run by dataset name and run name.
24682468
@@ -2475,8 +2475,8 @@ def get_dataset_run(
24752475
"""
24762476
try:
24772477
return self.api.datasets.get_run(
2478-
dataset_name=self._url_encode(dataset_name),
2479-
run_name=self._url_encode(run_name),
2478+
dataset_name=self._url_encode(dataset_name, is_url_param=True),
2479+
run_name=self._url_encode(run_name, is_url_param=True),
24802480
request_options=None,
24812481
)
24822482
except Error as e:
@@ -2485,8 +2485,8 @@ def get_dataset_run(
24852485

24862486
def get_dataset_runs(
24872487
self,
2488-
dataset_name: str,
24892488
*,
2489+
dataset_name: str,
24902490
page: Optional[int] = None,
24912491
limit: Optional[int] = None,
24922492
) -> PaginatedDatasetRuns:
@@ -2502,7 +2502,7 @@ def get_dataset_runs(
25022502
"""
25032503
try:
25042504
return self.api.datasets.get_runs(
2505-
dataset_name=self._url_encode(dataset_name),
2505+
dataset_name=self._url_encode(dataset_name, is_url_param=True),
25062506
page=page,
25072507
limit=limit,
25082508
request_options=None,
@@ -2512,7 +2512,7 @@ def get_dataset_runs(
25122512
raise e
25132513

25142514
def delete_dataset_run(
2515-
self, dataset_name: str, *, run_name: str
2515+
self, *, dataset_name: str, run_name: str
25162516
) -> DeleteDatasetRunResponse:
25172517
"""Delete a dataset run and all its run items. This action is irreversible.
25182518
@@ -2525,8 +2525,8 @@ def delete_dataset_run(
25252525
"""
25262526
try:
25272527
return self.api.datasets.delete_run(
2528-
dataset_name=self._url_encode(dataset_name),
2529-
run_name=self._url_encode(run_name),
2528+
dataset_name=self._url_encode(dataset_name, is_url_param=True),
2529+
run_name=self._url_encode(run_name, is_url_param=True),
25302530
request_options=None,
25312531
)
25322532
except Error as e:

tests/test_datasets.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,3 +418,54 @@ def execute_dataset_item(item, run_name):
418418
assert "args" in trace.input
419419
assert trace.input["args"][0] == expected_input
420420
assert trace.output == expected_input
421+
422+
423+
def test_dataset_runs_with_special_characters():
424+
"""Test that dataset runs work correctly with special characters in names."""
425+
langfuse = Langfuse(debug=False)
426+
427+
# Test with various special characters that need URL encoding
428+
dataset_name = f"test/dataset with spaces & special chars {create_uuid()[:5]}"
429+
run_name = f"run/name with % and # {create_uuid()[:5]}"
430+
431+
langfuse.create_dataset(name=dataset_name)
432+
input_data = json.dumps({"input": "Test data"})
433+
langfuse.create_dataset_item(dataset_name=dataset_name, input=input_data)
434+
435+
dataset = langfuse.get_dataset(dataset_name)
436+
assert len(dataset.items) == 1
437+
438+
# Create a dataset run with special characters in the run name
439+
for item in dataset.items:
440+
with item.run(
441+
run_name=run_name,
442+
run_metadata={"test": "value"},
443+
run_description="Test run with special chars",
444+
):
445+
pass
446+
447+
langfuse.flush()
448+
time.sleep(1)
449+
450+
# Test get_dataset_runs with special characters in dataset name
451+
runs = langfuse.get_dataset_runs(dataset_name=dataset_name)
452+
assert len(runs.data) == 1
453+
assert runs.data[0].name == run_name
454+
assert runs.data[0].metadata == {"test": "value"}
455+
assert runs.data[0].description == "Test run with special chars"
456+
457+
# Test get_dataset_run with special characters in both dataset and run name
458+
run = langfuse.get_dataset_run(dataset_name=dataset_name, run_name=run_name)
459+
assert run.run_name == run_name
460+
assert run.dataset_name == dataset_name
461+
assert len(run.dataset_run_items) == 1
462+
463+
# Test delete_dataset_run with special characters
464+
delete_response = langfuse.delete_dataset_run(
465+
dataset_name=dataset_name, run_name=run_name
466+
)
467+
assert delete_response.deleted_run_items_count == 1
468+
469+
# Verify the run was deleted
470+
runs_after_delete = langfuse.get_dataset_runs(dataset_name=dataset_name)
471+
assert len(runs_after_delete.data) == 0

0 commit comments

Comments
 (0)