From 30a525994d35fdd05a7d00807b31ee484000e418 Mon Sep 17 00:00:00 2001 From: Siraj R Aizlewood <siraj@aurelio.ai> Date: Tue, 30 Apr 2024 04:03:44 +0400 Subject: [PATCH] Simplified layer and route code. We don't have OpenAI Function Calling Dynamic Routes as an alternative to regular dynamic routes any more, it is now the default. --- docs/02-dynamic-routes.ipynb | 70 ++++++++++++++++++------------------ semantic_router/layer.py | 29 +++------------ semantic_router/route.py | 1 - 3 files changed, 39 insertions(+), 61 deletions(-) diff --git a/docs/02-dynamic-routes.ipynb b/docs/02-dynamic-routes.ipynb index 5b59ecc9..7cb18bd2 100644 --- a/docs/02-dynamic-routes.ipynb +++ b/docs/02-dynamic-routes.ipynb @@ -185,27 +185,27 @@ "name": "stderr", "output_type": "stream", "text": [ - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger local\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 1 length: 34\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 1 trunc length: 34\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 2 length: 51\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 2 trunc length: 51\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 3 length: 66\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 3 trunc length: 66\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 4 length: 38\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 4 trunc length: 38\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 5 length: 27\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 5 trunc length: 27\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 6 length: 24\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 6 trunc length: 24\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 7 length: 21\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 7 trunc length: 21\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 8 length: 20\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 8 trunc length: 20\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 9 length: 25\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 9 trunc length: 25\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 10 length: 22\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:00 INFO semantic_router.utils.logger Document 10 trunc length: 22\u001b[0m\n" + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger local\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 1 length: 34\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 1 trunc length: 34\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 2 length: 51\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 2 trunc length: 51\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 3 length: 66\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 3 trunc length: 66\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 4 length: 38\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 4 trunc length: 38\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 5 length: 27\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 5 trunc length: 27\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 6 length: 24\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 6 trunc length: 24\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 7 length: 21\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 7 trunc length: 21\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 8 length: 20\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 8 trunc length: 20\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 9 length: 25\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 9 trunc length: 25\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 10 length: 22\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:34 INFO semantic_router.utils.logger Document 10 trunc length: 22\u001b[0m\n" ] } ], @@ -254,8 +254,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "\u001b[32m2024-04-30 02:22:01 INFO semantic_router.utils.logger Document 1 length: 24\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:01 INFO semantic_router.utils.logger Document 1 trunc length: 24\u001b[0m\n" + "\u001b[32m2024-04-30 03:58:35 INFO semantic_router.utils.logger Document 1 length: 24\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:35 INFO semantic_router.utils.logger Document 1 trunc length: 24\u001b[0m\n" ] }, { @@ -332,7 +332,7 @@ { "data": { "text/plain": [ - "'18:22'" + "'19:58'" ] }, "execution_count": 6, @@ -449,13 +449,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "\u001b[32m2024-04-30 02:22:01 INFO semantic_router.utils.logger Adding `get_time` route\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:01 INFO semantic_router.utils.logger Document 1 length: 34\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:01 INFO semantic_router.utils.logger Document 1 trunc length: 34\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:01 INFO semantic_router.utils.logger Document 2 length: 27\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:01 INFO semantic_router.utils.logger Document 2 trunc length: 27\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:01 INFO semantic_router.utils.logger Document 3 length: 32\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:01 INFO semantic_router.utils.logger Document 3 trunc length: 32\u001b[0m\n" + "\u001b[32m2024-04-30 03:58:35 INFO semantic_router.utils.logger Adding `get_time` route\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:35 INFO semantic_router.utils.logger Document 1 length: 34\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:35 INFO semantic_router.utils.logger Document 1 trunc length: 34\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:35 INFO semantic_router.utils.logger Document 2 length: 27\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:35 INFO semantic_router.utils.logger Document 2 trunc length: 27\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:35 INFO semantic_router.utils.logger Document 3 length: 32\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:35 INFO semantic_router.utils.logger Document 3 trunc length: 32\u001b[0m\n" ] } ], @@ -497,9 +497,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "\u001b[32m2024-04-30 02:22:02 INFO semantic_router.utils.logger Document 1 length: 34\u001b[0m\n", - "\u001b[32m2024-04-30 02:22:02 INFO semantic_router.utils.logger Document 1 trunc length: 34\u001b[0m\n", - "\u001b[33m2024-04-30 02:22:02 WARNING semantic_router.utils.logger No LLM provided for dynamic route, will use OpenAI LLM default. Ensure API key is set in OPENAI_API_KEY environment variable.\u001b[0m\n" + "\u001b[32m2024-04-30 03:58:36 INFO semantic_router.utils.logger Document 1 length: 34\u001b[0m\n", + "\u001b[32m2024-04-30 03:58:36 INFO semantic_router.utils.logger Document 1 trunc length: 34\u001b[0m\n", + "\u001b[33m2024-04-30 03:58:36 WARNING semantic_router.utils.logger No LLM provided for dynamic route, will use OpenAI LLM default. Ensure API key is set in OPENAI_API_KEY environment variable.\u001b[0m\n" ] }, { @@ -526,7 +526,7 @@ { "data": { "text/plain": [ - "'18:22'" + "'19:58'" ] }, "execution_count": 13, diff --git a/semantic_router/layer.py b/semantic_router/layer.py index 99bf57a6..02e626f4 100644 --- a/semantic_router/layer.py +++ b/semantic_router/layer.py @@ -244,15 +244,10 @@ class RouteLayer: passed = self._check_threshold(top_class_scores, route) if passed and route is not None and not simulate_static: - if text is None: - if route.function_schema: - raise ValueError( - "Route has a function schema, but no text was provided." - ) - if route.openai_function_schema: - raise ValueError( - "Route has an OpenAI function schema, but no text was provided." - ) + if route.function_schema and text is None: + raise ValueError( + "Route has a function schema, but no text was provided." + ) if route.function_schema and not isinstance(route.llm, BaseLLM): if not self.llm: logger.warning( @@ -265,22 +260,6 @@ class RouteLayer: route.llm = self.llm else: route.llm = self.llm - if route.openai_function_schema and not isinstance(route.llm, BaseLLM): - if not self.llm: - logger.warning( - "No LLM provided for dynamic route, will use OpenAI LLM " - "default. Ensure API key is set in OPENAI_API_KEY environment " - "variable." - ) - - self.llm = OpenAILLM() - route.llm = self.llm - else: - if not isinstance(self.llm, OpenAILLM): - raise TypeError( - "LLM must be an instance of OpenAILLM for openai_function_schema." - ) - route.llm = self.llm return route(text) elif passed and route is not None and simulate_static: return RouteChoice( diff --git a/semantic_router/route.py b/semantic_router/route.py index 40f8453f..3d46a8b4 100644 --- a/semantic_router/route.py +++ b/semantic_router/route.py @@ -48,7 +48,6 @@ class Route(BaseModel): utterances: Union[List[str], List[Union[Any, "Image"]]] description: Optional[str] = None function_schema: Optional[Dict[str, Any]] = None - openai_function_schema: Optional[Dict[str, Any]] = None llm: Optional[BaseLLM] = None score_threshold: Optional[float] = None -- GitLab