@@ -358,6 +358,9 @@ def test_error_handling_before_init():
358358 with pytest .raises (RuntimeError , match = "You must call litlogger.init\\ (\\ )" ):
359359 litlogger .finalize ()
360360
361+ with pytest .raises (RuntimeError , match = "You must call litlogger.init\\ (\\ )" ):
362+ litlogger .get_metadata ()
363+
361364
362365@pytest .mark .cloud ()
363366def test_multiple_experiments_in_sequence ():
@@ -498,6 +501,131 @@ def test_metadata_and_tags():
498501 )
499502
500503
504+ @pytest .mark .cloud ()
505+ def test_get_metadata ():
506+ """Test get_metadata() function and experiment.metadata property."""
507+ experiment_name = f"meta_test-{ uuid .uuid4 ().hex } "
508+ metadata = {
509+ "model" : "GPT-2" ,
510+ "dataset" : "WikiText" ,
511+ "learning_rate" : "0.0001" ,
512+ "batch_size" : "16" ,
513+ }
514+
515+ exp = litlogger .init (
516+ name = experiment_name ,
517+ teamspace = "oss-litlogger" ,
518+ metadata = metadata ,
519+ )
520+
521+ # Test experiment.metadata property returns the metadata from the metrics stream
522+ retrieved_metadata = exp .metadata
523+ assert isinstance (retrieved_metadata , dict )
524+ for key , value in metadata .items ():
525+ assert key in retrieved_metadata , f"Expected key '{ key } ' in metadata"
526+ assert (
527+ retrieved_metadata [key ] == value
528+ ), f"Expected metadata['{ key } '] == '{ value } ', got '{ retrieved_metadata [key ]} '"
529+
530+ # Test litlogger.get_metadata() returns the same metadata
531+ global_metadata = litlogger .get_metadata ()
532+ assert isinstance (global_metadata , dict )
533+ for key , value in metadata .items ():
534+ assert key in global_metadata , f"Expected key '{ key } ' in global metadata"
535+ assert global_metadata [key ] == value
536+
537+ # Verify both return the same data
538+ assert retrieved_metadata == global_metadata
539+
540+ litlogger .finalize ()
541+
542+ # Cleanup
543+ project_id = exp ._teamspace .id
544+ stream_id = exp ._metrics_store .id
545+
546+ client = LitRestClient ()
547+ client .lit_logger_service_delete_metrics_stream (
548+ project_id = project_id ,
549+ body = LitLoggerServiceDeleteMetricsStreamBody (ids = [stream_id ]),
550+ )
551+
552+
553+ @pytest .mark .cloud ()
554+ def test_get_metadata_empty ():
555+ """Test get_metadata() when no metadata is provided."""
556+ experiment_name = f"meta_empty_test-{ uuid .uuid4 ().hex } "
557+
558+ exp = litlogger .init (
559+ name = experiment_name ,
560+ teamspace = "oss-litlogger" ,
561+ )
562+
563+ # Test that metadata is empty dict when none provided
564+ retrieved_metadata = exp .metadata
565+ assert isinstance (retrieved_metadata , dict )
566+ assert len (retrieved_metadata ) == 0
567+
568+ # Test litlogger.get_metadata() also returns empty dict
569+ global_metadata = litlogger .get_metadata ()
570+ assert isinstance (global_metadata , dict )
571+ assert len (global_metadata ) == 0
572+
573+ litlogger .finalize ()
574+
575+ # Cleanup
576+ project_id = exp ._teamspace .id
577+ stream_id = exp ._metrics_store .id
578+
579+ client = LitRestClient ()
580+ client .lit_logger_service_delete_metrics_stream (
581+ project_id = project_id ,
582+ body = LitLoggerServiceDeleteMetricsStreamBody (ids = [stream_id ]),
583+ )
584+
585+
586+ @pytest .mark .cloud ()
587+ def test_get_metadata_direct_experiment ():
588+ """Test experiment.metadata property when using Experiment class directly."""
589+ from datetime import datetime , timezone
590+
591+ experiment_name = f"meta_direct-{ uuid .uuid4 ().hex } "
592+ timestamp = datetime .now (timezone .utc ).isoformat (timespec = "milliseconds" )
593+ version_str = timestamp .replace ("+00:00" , "Z" )
594+
595+ metadata = {
596+ "framework" : "PyTorch" ,
597+ "version" : "2.0" ,
598+ }
599+
600+ with tempfile .TemporaryDirectory () as tmpdir :
601+ exp = Experiment (
602+ name = experiment_name ,
603+ version = version_str ,
604+ teamspace = "oss-litlogger" ,
605+ log_dir = tmpdir ,
606+ metadata = metadata ,
607+ )
608+
609+ # Test experiment.metadata property
610+ retrieved_metadata = exp .metadata
611+ assert isinstance (retrieved_metadata , dict )
612+ for key , value in metadata .items ():
613+ assert key in retrieved_metadata
614+ assert retrieved_metadata [key ] == value
615+
616+ exp .finalize ()
617+
618+ # Cleanup
619+ project_id = exp ._teamspace .id
620+ stream_id = exp ._metrics_store .id
621+
622+ client = LitRestClient ()
623+ client .lit_logger_service_delete_metrics_stream (
624+ project_id = project_id ,
625+ body = LitLoggerServiceDeleteMetricsStreamBody (ids = [stream_id ]),
626+ )
627+
628+
501629@pytest .mark .cloud ()
502630def test_custom_colors ():
503631 """Test experiments with custom colors."""
0 commit comments