@@ -640,3 +640,75 @@ def simple_task(*, item, **kwargs):
640640 assert result .name == "Versioned Dataset Test"
641641 assert len (result .item_results ) == 1 # Only one item in versioned dataset
642642 assert result .item_results [0 ].output == 4
643+
644+
645+ def test_run_experiment_without_dataset_version (monkeypatch ):
646+ langfuse = Langfuse (debug = False )
647+
648+ # Create dataset
649+ name = create_uuid ()
650+ langfuse .create_dataset (name = name )
651+
652+ # Create item
653+ langfuse .create_dataset_item (
654+ dataset_name = name , input = {"question" : "What is 2+2?" }, expected_output = 4
655+ )
656+ langfuse .flush ()
657+ time .sleep (3 )
658+
659+ # Get dataset without version timestamp - this should have version=None
660+ dataset = langfuse .get_dataset (name )
661+ assert dataset .version is None , "Dataset should have no version"
662+
663+ # Capture HTTP requests to dataset-run-items endpoint to inspect the request body
664+ captured_requests = []
665+ original_request = langfuse .api ._client_wrapper .httpx_client .request
666+
667+ def capture_request (method , url , ** kwargs ):
668+ # Capture requests to the dataset-run-items endpoint
669+ if "dataset-run-items" in str (url ) and method .upper () == "POST" :
670+ # Capture the JSON body being sent
671+ captured_requests .append (kwargs .get ("json" ))
672+ return original_request (method , url , ** kwargs )
673+
674+ monkeypatch .setattr (
675+ langfuse .api ._client_wrapper .httpx_client , "request" , capture_request
676+ )
677+
678+ # Run a simple experiment on the dataset
679+ def simple_task (* , item , ** kwargs ):
680+ # Just return a static answer
681+ return item .expected_output
682+
683+ result = dataset .run_experiment (
684+ name = "Dataset without version Test" ,
685+ description = "Testing experiment with dataset without version" ,
686+ task = simple_task ,
687+ )
688+
689+ # Verify experiment ran successfully
690+ assert result .name == "Dataset without version Test"
691+ assert len (result .item_results ) == 1 # Only one item in dataset
692+ assert result .item_results [0 ].output == 4
693+ assert result .dataset_run_id is not None , "Should have created a dataset run"
694+
695+ # Verify that HTTP requests were captured
696+ assert len (captured_requests ) > 0 , (
697+ "Should have captured dataset run item creation requests"
698+ )
699+
700+ # Verify that datasetVersion was NOT included in any request body
701+ for request_body in captured_requests :
702+ assert request_body is not None , "Request body should not be None"
703+ # Check if request_body is a dict or has a dict method
704+ if hasattr (request_body , "dict" ):
705+ body_dict = request_body .dict ()
706+ elif isinstance (request_body , dict ):
707+ body_dict = request_body
708+ else :
709+ body_dict = json .loads (json .dumps (request_body ))
710+
711+ assert "datasetVersion" not in body_dict , (
712+ f"datasetVersion should not be in request body when dataset has no version. "
713+ f"Found in body: { body_dict } "
714+ )
0 commit comments