From 205e2b35c08beaf0cb097731e7dc73636ea8b46b Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Mon, 17 Mar 2025 12:37:10 -0700 Subject: [PATCH] return dummy llm api handler which will raise exception if called (#1954) --- skyvern/forge/sdk/api/llm/api_handler_factory.py | 7 +++++-- skyvern/forge/sdk/api/llm/config_registry.py | 2 +- skyvern/forge/sdk/api/llm/models.py | 13 +++++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/skyvern/forge/sdk/api/llm/api_handler_factory.py b/skyvern/forge/sdk/api/llm/api_handler_factory.py index 2617b3a7..c7cef93c 100644 --- a/skyvern/forge/sdk/api/llm/api_handler_factory.py +++ b/skyvern/forge/sdk/api/llm/api_handler_factory.py @@ -18,7 +18,7 @@ from skyvern.forge.sdk.api.llm.exceptions import ( LLMProviderError, LLMProviderErrorRetryableTask, ) -from skyvern.forge.sdk.api.llm.models import LLMAPIHandler, LLMConfig, LLMRouterConfig +from skyvern.forge.sdk.api.llm.models import LLMAPIHandler, LLMConfig, LLMRouterConfig, dummy_llm_api_handler from skyvern.forge.sdk.api.llm.utils import llm_messages_builder, parse_api_response from skyvern.forge.sdk.artifact.models import ArtifactType from skyvern.forge.sdk.core import skyvern_context @@ -229,7 +229,10 @@ class LLMAPIHandlerFactory: @staticmethod def get_llm_api_handler(llm_key: str, base_parameters: dict[str, Any] | None = None) -> LLMAPIHandler: - llm_config = LLMConfigRegistry.get_config(llm_key) + try: + llm_config = LLMConfigRegistry.get_config(llm_key) + except InvalidLLMConfigError: + return dummy_llm_api_handler if LLMConfigRegistry.is_router_config(llm_key): return LLMAPIHandlerFactory.get_llm_api_handler_with_router(llm_key) diff --git a/skyvern/forge/sdk/api/llm/config_registry.py b/skyvern/forge/sdk/api/llm/config_registry.py index 1444db70..a3e2754b 100644 --- a/skyvern/forge/sdk/api/llm/config_registry.py +++ b/skyvern/forge/sdk/api/llm/config_registry.py @@ -55,7 +55,7 @@ if not any( ] ): LOG.warning( - "At least one LLM provider must be enabled. Run setup.sh and follow through the LLM provider setup, or " + "To run skyvern locally, you need to enable at least one LLM provider. Run setup.sh and follow through the LLM provider setup, or " "update the .env file (check out .env.example to see the required environment variables)." ) diff --git a/skyvern/forge/sdk/api/llm/models.py b/skyvern/forge/sdk/api/llm/models.py index 043a8583..c7813055 100644 --- a/skyvern/forge/sdk/api/llm/models.py +++ b/skyvern/forge/sdk/api/llm/models.py @@ -93,3 +93,16 @@ class LLMAPIHandler(Protocol): screenshots: list[bytes] | None = None, parameters: dict[str, Any] | None = None, ) -> Awaitable[dict[str, Any]]: ... + + +async def dummy_llm_api_handler( + prompt: str, + prompt_name: str, + step: Step | None = None, + task_v2: TaskV2 | None = None, + thought: Thought | None = None, + ai_suggestion: AISuggestion | None = None, + screenshots: list[bytes] | None = None, + parameters: dict[str, Any] | None = None, +) -> dict[str, Any]: + raise NotImplementedError("Your LLM provider is not configured. Please configure it in the .env file.")