diff --git a/tests/unit/test_layer.py b/tests/unit/test_layer.py index a746c4ec8f220f0896abb5c415749cb7b62a5796..0571071af6c8be476a4f23e7b648135cdb9d74be 100644 --- a/tests/unit/test_layer.py +++ b/tests/unit/test_layer.py @@ -2,10 +2,10 @@ import pytest from semantic_router.encoders import BaseEncoder, CohereEncoder, OpenAIEncoder from semantic_router.layer import ( - DecisionLayer, - HybridDecisionLayer, + RouteLayer, + HybridRouteLayer, ) # Replace with the actual module name -from semantic_router.schema import Decision +from semantic_router.schema import Route def mock_encoder_call(utterances): @@ -38,159 +38,159 @@ def openai_encoder(mocker): @pytest.fixture -def decisions(): +def routes(): return [ - Decision(name="Decision 1", utterances=["Hello", "Hi"]), - Decision(name="Decision 2", utterances=["Goodbye", "Bye", "Au revoir"]), + Route(name="Route 1", utterances=["Hello", "Hi"]), + Route(name="Route 2", utterances=["Goodbye", "Bye", "Au revoir"]), ] -class TestDecisionLayer: - def test_initialization(self, openai_encoder, decisions): - decision_layer = DecisionLayer(encoder=openai_encoder, decisions=decisions) - assert decision_layer.score_threshold == 0.82 - assert len(decision_layer.index) == 5 - assert len(set(decision_layer.categories)) == 2 +class TestRouteLayer: + def test_initialization(self, openai_encoder, routes): + route_layer = RouteLayer(encoder=openai_encoder, routes=routes) + assert route_layer.score_threshold == 0.82 + assert len(route_layer.index) == 5 + assert len(set(route_layer.categories)) == 2 def test_initialization_different_encoders(self, cohere_encoder, openai_encoder): - decision_layer_cohere = DecisionLayer(encoder=cohere_encoder) - assert decision_layer_cohere.score_threshold == 0.3 - - decision_layer_openai = DecisionLayer(encoder=openai_encoder) - assert decision_layer_openai.score_threshold == 0.82 - - def test_add_decision(self, openai_encoder): - decision_layer = DecisionLayer(encoder=openai_encoder) - decision = Decision(name="Decision 3", utterances=["Yes", "No"]) - decision_layer.add(decision) - assert len(decision_layer.index) == 2 - assert len(set(decision_layer.categories)) == 1 - - def test_add_multiple_decisions(self, openai_encoder, decisions): - decision_layer = DecisionLayer(encoder=openai_encoder) - for decision in decisions: - decision_layer.add(decision) - assert len(decision_layer.index) == 5 - assert len(set(decision_layer.categories)) == 2 - - def test_query_and_classification(self, openai_encoder, decisions): - decision_layer = DecisionLayer(encoder=openai_encoder, decisions=decisions) - query_result = decision_layer("Hello") - assert query_result in ["Decision 1", "Decision 2"] + route_layer_cohere = RouteLayer(encoder=cohere_encoder) + assert route_layer_cohere.score_threshold == 0.3 + + route_layer_openai = RouteLayer(encoder=openai_encoder) + assert route_layer_openai.score_threshold == 0.82 + + def test_add_route(self, openai_encoder): + route_layer = RouteLayer(encoder=openai_encoder) + route = Route(name="Route 3", utterances=["Yes", "No"]) + route_layer.add(route) + assert len(route_layer.index) == 2 + assert len(set(route_layer.categories)) == 1 + + def test_add_multiple_routes(self, openai_encoder, routes): + route_layer = RouteLayer(encoder=openai_encoder) + for route in routes: + route_layer.add(route) + assert len(route_layer.index) == 5 + assert len(set(route_layer.categories)) == 2 + + def test_query_and_classification(self, openai_encoder, routes): + route_layer = RouteLayer(encoder=openai_encoder, routes=routes) + query_result = route_layer("Hello") + assert query_result in ["Route 1", "Route 2"] def test_query_with_no_index(self, openai_encoder): - decision_layer = DecisionLayer(encoder=openai_encoder) - assert decision_layer("Anything") is None + route_layer = RouteLayer(encoder=openai_encoder) + assert route_layer("Anything") is None - def test_semantic_classify(self, openai_encoder, decisions): - decision_layer = DecisionLayer(encoder=openai_encoder, decisions=decisions) - classification, score = decision_layer._semantic_classify( + def test_semantic_classify(self, openai_encoder, routes): + route_layer = RouteLayer(encoder=openai_encoder, routes=routes) + classification, score = route_layer._semantic_classify( [ - {"decision": "Decision 1", "score": 0.9}, - {"decision": "Decision 2", "score": 0.1}, + {"route": "Route 1", "score": 0.9}, + {"route": "Route 2", "score": 0.1}, ] ) - assert classification == "Decision 1" + assert classification == "Route 1" assert score == [0.9] - def test_semantic_classify_multiple_decisions(self, openai_encoder, decisions): - decision_layer = DecisionLayer(encoder=openai_encoder, decisions=decisions) - classification, score = decision_layer._semantic_classify( + def test_semantic_classify_multiple_routes(self, openai_encoder, routes): + route_layer = RouteLayer(encoder=openai_encoder, routes=routes) + classification, score = route_layer._semantic_classify( [ - {"decision": "Decision 1", "score": 0.9}, - {"decision": "Decision 2", "score": 0.1}, - {"decision": "Decision 1", "score": 0.8}, + {"route": "Route 1", "score": 0.9}, + {"route": "Route 2", "score": 0.1}, + {"route": "Route 1", "score": 0.8}, ] ) - assert classification == "Decision 1" + assert classification == "Route 1" assert score == [0.9, 0.8] def test_pass_threshold(self, openai_encoder): - decision_layer = DecisionLayer(encoder=openai_encoder) - assert not decision_layer._pass_threshold([], 0.5) - assert decision_layer._pass_threshold([0.6, 0.7], 0.5) + route_layer = RouteLayer(encoder=openai_encoder) + assert not route_layer._pass_threshold([], 0.5) + assert route_layer._pass_threshold([0.6, 0.7], 0.5) def test_failover_score_threshold(self, base_encoder): - decision_layer = DecisionLayer(encoder=base_encoder) - assert decision_layer.score_threshold == 0.82 + route_layer = RouteLayer(encoder=base_encoder) + assert route_layer.score_threshold == 0.82 -class TestHybridDecisionLayer: - def test_initialization(self, openai_encoder, decisions): - decision_layer = HybridDecisionLayer( - encoder=openai_encoder, decisions=decisions +class TestHybridRouteLayer: + def test_initialization(self, openai_encoder, routes): + route_layer = HybridRouteLayer( + encoder=openai_encoder, routes=routes ) - assert decision_layer.score_threshold == 0.82 - assert len(decision_layer.index) == 5 - assert len(set(decision_layer.categories)) == 2 + assert route_layer.score_threshold == 0.82 + assert len(route_layer.index) == 5 + assert len(set(route_layer.categories)) == 2 def test_initialization_different_encoders(self, cohere_encoder, openai_encoder): - decision_layer_cohere = HybridDecisionLayer(encoder=cohere_encoder) - assert decision_layer_cohere.score_threshold == 0.3 - - decision_layer_openai = HybridDecisionLayer(encoder=openai_encoder) - assert decision_layer_openai.score_threshold == 0.82 - - def test_add_decision(self, openai_encoder): - decision_layer = HybridDecisionLayer(encoder=openai_encoder) - decision = Decision(name="Decision 3", utterances=["Yes", "No"]) - decision_layer.add(decision) - assert len(decision_layer.index) == 2 - assert len(set(decision_layer.categories)) == 1 - - def test_add_multiple_decisions(self, openai_encoder, decisions): - decision_layer = HybridDecisionLayer(encoder=openai_encoder) - for decision in decisions: - decision_layer.add(decision) - assert len(decision_layer.index) == 5 - assert len(set(decision_layer.categories)) == 2 - - def test_query_and_classification(self, openai_encoder, decisions): - decision_layer = HybridDecisionLayer( - encoder=openai_encoder, decisions=decisions + route_layer_cohere = HybridRouteLayer(encoder=cohere_encoder) + assert route_layer_cohere.score_threshold == 0.3 + + route_layer_openai = HybridRouteLayer(encoder=openai_encoder) + assert route_layer_openai.score_threshold == 0.82 + + def test_add_route(self, openai_encoder): + route_layer = HybridRouteLayer(encoder=openai_encoder) + route = Route(name="Route 3", utterances=["Yes", "No"]) + route_layer.add(route) + assert len(route_layer.index) == 2 + assert len(set(route_layer.categories)) == 1 + + def test_add_multiple_routes(self, openai_encoder, routes): + route_layer = HybridRouteLayer(encoder=openai_encoder) + for route in routes: + route_layer.add(route) + assert len(route_layer.index) == 5 + assert len(set(route_layer.categories)) == 2 + + def test_query_and_classification(self, openai_encoder, routes): + route_layer = HybridRouteLayer( + encoder=openai_encoder, routes=routes ) - query_result = decision_layer("Hello") - assert query_result in ["Decision 1", "Decision 2"] + query_result = route_layer("Hello") + assert query_result in ["Route 1", "Route 2"] def test_query_with_no_index(self, openai_encoder): - decision_layer = HybridDecisionLayer(encoder=openai_encoder) - assert decision_layer("Anything") is None + route_layer = HybridRouteLayer(encoder=openai_encoder) + assert route_layer("Anything") is None - def test_semantic_classify(self, openai_encoder, decisions): - decision_layer = HybridDecisionLayer( - encoder=openai_encoder, decisions=decisions + def test_semantic_classify(self, openai_encoder, routes): + route_layer = HybridRouteLayer( + encoder=openai_encoder, routes=routes ) - classification, score = decision_layer._semantic_classify( + classification, score = route_layer._semantic_classify( [ - {"decision": "Decision 1", "score": 0.9}, - {"decision": "Decision 2", "score": 0.1}, + {"route": "Route 1", "score": 0.9}, + {"route": "Route 2", "score": 0.1}, ] ) - assert classification == "Decision 1" + assert classification == "Route 1" assert score == [0.9] - def test_semantic_classify_multiple_decisions(self, openai_encoder, decisions): - decision_layer = HybridDecisionLayer( - encoder=openai_encoder, decisions=decisions + def test_semantic_classify_multiple_routes(self, openai_encoder, routes): + route_layer = HybridRouteLayer( + encoder=openai_encoder, routes=routes ) - classification, score = decision_layer._semantic_classify( + classification, score = route_layer._semantic_classify( [ - {"decision": "Decision 1", "score": 0.9}, - {"decision": "Decision 2", "score": 0.1}, - {"decision": "Decision 1", "score": 0.8}, + {"route": "Route 1", "score": 0.9}, + {"route": "Route 2", "score": 0.1}, + {"route": "Route 1", "score": 0.8}, ] ) - assert classification == "Decision 1" + assert classification == "Route 1" assert score == [0.9, 0.8] def test_pass_threshold(self, openai_encoder): - decision_layer = HybridDecisionLayer(encoder=openai_encoder) - assert not decision_layer._pass_threshold([], 0.5) - assert decision_layer._pass_threshold([0.6, 0.7], 0.5) + route_layer = HybridRouteLayer(encoder=openai_encoder) + assert not route_layer._pass_threshold([], 0.5) + assert route_layer._pass_threshold([0.6, 0.7], 0.5) def test_failover_score_threshold(self, base_encoder): - decision_layer = HybridDecisionLayer(encoder=base_encoder) - assert decision_layer.score_threshold == 0.82 + route_layer = HybridRouteLayer(encoder=base_encoder) + assert route_layer.score_threshold == 0.82 # Add more tests for edge cases and error handling as needed. diff --git a/tests/unit/test_schema.py b/tests/unit/test_schema.py index 2563bf0bc21b7769f96d1119fdc29b6afab66d1a..9128835a4d164f2c60512ff20f7df90dde3b705c 100644 --- a/tests/unit/test_schema.py +++ b/tests/unit/test_schema.py @@ -2,7 +2,7 @@ import pytest from semantic_router.schema import ( CohereEncoder, - Decision, + Route, Encoder, EncoderType, OpenAIEncoder, @@ -46,16 +46,16 @@ class TestSemanticSpaceDataclass: def test_semanticspace_initialization(self): semantic_space = SemanticSpace() assert semantic_space.id == "" - assert semantic_space.decisions == [] + assert semantic_space.routes == [] - def test_semanticspace_add_decision(self): - decision = Decision( + def test_semanticspace_add_route(self): + route = Route( name="test", utterances=["hello", "hi"], description="greeting" ) semantic_space = SemanticSpace() - semantic_space.add(decision) + semantic_space.add(route) - assert len(semantic_space.decisions) == 1 - assert semantic_space.decisions[0].name == "test" - assert semantic_space.decisions[0].utterances == ["hello", "hi"] - assert semantic_space.decisions[0].description == "greeting" + assert len(semantic_space.routes) == 1 + assert semantic_space.routes[0].name == "test" + assert semantic_space.routes[0].utterances == ["hello", "hi"] + assert semantic_space.routes[0].description == "greeting"