@@ -653,3 +653,113 @@ def test_validation_with_none_values(self, enhanced_test_client):
653
653
654
654
# Should not raise
655
655
enhanced_test_client .validate_memory_record (memory )
656
+
657
+
658
+ class TestContextUsagePercentage :
659
+ """Tests for context usage percentage functionality."""
660
+
661
+ @pytest .mark .asyncio
662
+ async def test_working_memory_response_with_context_percentage (
663
+ self , enhanced_test_client
664
+ ):
665
+ """Test that WorkingMemoryResponse properly handles context_usage_percentage field."""
666
+ session_id = "test-session"
667
+
668
+ # Test with context percentage set
669
+ working_memory_response = WorkingMemoryResponse (
670
+ session_id = session_id ,
671
+ messages = [],
672
+ memories = [],
673
+ data = {},
674
+ context = None ,
675
+ user_id = None ,
676
+ context_usage_percentage = 45.5 ,
677
+ )
678
+
679
+ assert working_memory_response .context_usage_percentage == 45.5
680
+ assert working_memory_response .session_id == session_id
681
+
682
+ # Test with None context percentage (default)
683
+ working_memory_response_none = WorkingMemoryResponse (
684
+ session_id = session_id ,
685
+ messages = [],
686
+ memories = [],
687
+ data = {},
688
+ context = None ,
689
+ user_id = None ,
690
+ )
691
+
692
+ assert working_memory_response_none .context_usage_percentage is None
693
+
694
+ @pytest .mark .asyncio
695
+ async def test_context_percentage_serialization (self , enhanced_test_client ):
696
+ """Test that context_usage_percentage is properly serialized."""
697
+ session_id = "test-session"
698
+
699
+ # Create response with context percentage
700
+ working_memory_response = WorkingMemoryResponse (
701
+ session_id = session_id ,
702
+ messages = [],
703
+ memories = [],
704
+ data = {},
705
+ context = None ,
706
+ user_id = None ,
707
+ context_usage_percentage = 75.0 ,
708
+ )
709
+
710
+ # Test model_dump includes the field
711
+ dumped = working_memory_response .model_dump ()
712
+ assert "context_usage_percentage" in dumped
713
+ assert dumped ["context_usage_percentage" ] == 75.0
714
+
715
+ # Test JSON serialization
716
+ json_data = working_memory_response .model_dump_json ()
717
+ assert "context_usage_percentage" in json_data
718
+ assert "75.0" in json_data
719
+
720
+ @pytest .mark .asyncio
721
+ async def test_context_percentage_validation (self , enhanced_test_client ):
722
+ """Test that context_usage_percentage accepts valid values."""
723
+ session_id = "test-session"
724
+
725
+ # Test valid percentages
726
+ valid_percentages = [0.0 , 25.5 , 50.0 , 99.9 , 100.0 , None ]
727
+
728
+ for percentage in valid_percentages :
729
+ working_memory_response = WorkingMemoryResponse (
730
+ session_id = session_id ,
731
+ messages = [],
732
+ memories = [],
733
+ data = {},
734
+ context = None ,
735
+ user_id = None ,
736
+ context_usage_percentage = percentage ,
737
+ )
738
+ assert working_memory_response .context_usage_percentage == percentage
739
+
740
+ def test_working_memory_response_from_dict_with_context_percentage (self ):
741
+ """Test that WorkingMemoryResponse can be created from dict with context_usage_percentage."""
742
+ session_id = "test-session"
743
+
744
+ # Test creating WorkingMemoryResponse from dict (simulating API response parsing)
745
+ response_dict = {
746
+ "session_id" : session_id ,
747
+ "messages" : [],
748
+ "memories" : [],
749
+ "data" : {},
750
+ "context" : None ,
751
+ "user_id" : None ,
752
+ "context_usage_percentage" : 33.3 ,
753
+ "tokens" : 0 ,
754
+ "namespace" : None ,
755
+ "ttl_seconds" : None ,
756
+ "last_accessed" : "2024-01-01T00:00:00Z" ,
757
+ }
758
+
759
+ # This simulates what happens when the API client parses the JSON response
760
+ result = WorkingMemoryResponse (** response_dict )
761
+
762
+ # Verify the context_usage_percentage is included
763
+ assert isinstance (result , WorkingMemoryResponse )
764
+ assert result .context_usage_percentage == 33.3
765
+ assert result .session_id == session_id
0 commit comments