diff --git a/docs/02-dynamic-routes.ipynb b/docs/02-dynamic-routes.ipynb index e1ab77164ec67cc5d56084d6b0b9ee8eeb706689..131749867820161e7e45e7fcdfda9a9246be73cc 100644 --- a/docs/02-dynamic-routes.ipynb +++ b/docs/02-dynamic-routes.ipynb @@ -79,7 +79,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: tzdata in c:\\users\\siraj\\documents\\personal\\work\\aurelio\\virtual environments\\semantic_router_3\\lib\\site-packages (2024.1)\n" + "Requirement already satisfied: tzdata in c:\\users\\siraj\\documents\\personal\\work\\aurelio\\virtual environments\\semantic_router_3\\lib\\site-packages (2024.1)" ] }, { @@ -88,7 +88,20 @@ "text": [ "\n", "[notice] A new release of pip is available: 23.1.2 -> 24.0\n", - "[notice] To update, run: python.exe -m pip install --upgrade pip\n", + "[notice] To update, run: python.exe -m pip install --upgrade pip\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ "\n", "[notice] A new release of pip is available: 23.1.2 -> 24.0\n", "[notice] To update, run: python.exe -m pip install --upgrade pip\n" @@ -185,27 +198,27 @@ "name": "stderr", "output_type": "stream", "text": [ - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger local\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 1 length: 34\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 1 trunc length: 34\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 2 length: 51\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 2 trunc length: 51\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 3 length: 66\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 3 trunc length: 66\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 4 length: 38\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 4 trunc length: 38\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 5 length: 27\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 5 trunc length: 27\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 6 length: 24\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 6 trunc length: 24\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 7 length: 21\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 7 trunc length: 21\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 8 length: 20\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 8 trunc length: 20\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 9 length: 25\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 9 trunc length: 25\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 10 length: 22\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:28 INFO semantic_router.utils.logger Document 10 trunc length: 22\u001b[0m\n" + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger local\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 1 length: 34\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 1 trunc length: 34\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 2 length: 51\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 2 trunc length: 51\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 3 length: 66\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 3 trunc length: 66\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 4 length: 38\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 4 trunc length: 38\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 5 length: 27\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 5 trunc length: 27\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 6 length: 24\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 6 trunc length: 24\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 7 length: 21\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 7 trunc length: 21\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 8 length: 20\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 8 trunc length: 20\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 9 length: 25\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 9 trunc length: 25\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 10 length: 22\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:24 INFO semantic_router.utils.logger Document 10 trunc length: 22\u001b[0m\n" ] } ], @@ -254,8 +267,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "\u001b[32m2024-04-30 01:50:29 INFO semantic_router.utils.logger Document 1 length: 24\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:29 INFO semantic_router.utils.logger Document 1 trunc length: 24\u001b[0m\n" + "\u001b[32m2024-04-30 01:57:25 INFO semantic_router.utils.logger Document 1 length: 24\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:25 INFO semantic_router.utils.logger Document 1 trunc length: 24\u001b[0m\n" ] }, { @@ -332,7 +345,7 @@ { "data": { "text/plain": [ - "'17:50'" + "'17:57'" ] }, "execution_count": 6, @@ -449,13 +462,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "\u001b[32m2024-04-30 01:50:29 INFO semantic_router.utils.logger Adding `get_time` route\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:29 INFO semantic_router.utils.logger Document 1 length: 34\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:29 INFO semantic_router.utils.logger Document 1 trunc length: 34\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:29 INFO semantic_router.utils.logger Document 2 length: 27\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:29 INFO semantic_router.utils.logger Document 2 trunc length: 27\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:29 INFO semantic_router.utils.logger Document 3 length: 32\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:29 INFO semantic_router.utils.logger Document 3 trunc length: 32\u001b[0m\n" + "\u001b[32m2024-04-30 01:57:25 INFO semantic_router.utils.logger Adding `get_time` route\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:25 INFO semantic_router.utils.logger Document 1 length: 34\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:25 INFO semantic_router.utils.logger Document 1 trunc length: 34\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:25 INFO semantic_router.utils.logger Document 2 length: 27\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:25 INFO semantic_router.utils.logger Document 2 trunc length: 27\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:25 INFO semantic_router.utils.logger Document 3 length: 32\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:25 INFO semantic_router.utils.logger Document 3 trunc length: 32\u001b[0m\n" ] } ], @@ -497,9 +510,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "\u001b[32m2024-04-30 01:50:30 INFO semantic_router.utils.logger Document 1 length: 34\u001b[0m\n", - "\u001b[32m2024-04-30 01:50:30 INFO semantic_router.utils.logger Document 1 trunc length: 34\u001b[0m\n", - "\u001b[33m2024-04-30 01:50:30 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 01:57:26 INFO semantic_router.utils.logger Document 1 length: 34\u001b[0m\n", + "\u001b[32m2024-04-30 01:57:26 INFO semantic_router.utils.logger Document 1 trunc length: 34\u001b[0m\n", + "\u001b[33m2024-04-30 01:57:26 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 +539,7 @@ { "data": { "text/plain": [ - "'17:50'" + "'17:57'" ] }, "execution_count": 13, diff --git a/semantic_router/route.py b/semantic_router/route.py index 5d90ff6ecbf14a5741a1ac3bbac4586f5716a55e..01901ff903be926d00d421059ca661842a8dc63f 100644 --- a/semantic_router/route.py +++ b/semantic_router/route.py @@ -57,37 +57,22 @@ class Route(BaseModel): arbitrary_types_allowed = True def __call__(self, query: Optional[str] = None) -> RouteChoice: - if self.function_schema and self.openai_function_schema: - raise ValueError( - "Both function_schema and openai_function_schema cannot be provided. Please provide only one." - ) - if self.function_schema or self.openai_function_schema: + if self.function_schema: if not self.llm: raise ValueError( "LLM is required for dynamic routes. Please ensure the `llm` " "attribute is set." ) - if query is None or not isinstance(query, str): + elif query is None: raise ValueError( "Query is required for dynamic routes. Please ensure the `query` " "argument is passed." ) - if self.function_schema: - extracted_inputs = self.llm.extract_function_inputs( - query=query, function_schema=self.function_schema - ) - func_call = extracted_inputs - elif ( - self.openai_function_schema - ): # Logically must be self.openai_function_schema, but keeps MyPy happy. - if not isinstance(self.llm, OpenAILLM): - raise TypeError( - "LLM must be an instance of OpenAILLM for openai_function_schema." - ) - extracted_inputs = self.llm.extract_function_inputs_openai( - query=query, openai_function_schema=self.openai_function_schema - ) - func_call = extracted_inputs + # if a function schema is provided we generate the inputs + extracted_inputs = self.llm.extract_function_inputs( + query=query, function_schema=self.function_schema + ) + func_call = extracted_inputs else: # otherwise we just pass None for the call func_call = None