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