diff --git a/setup.sh b/setup.sh index be98c53a..48c50e63 100755 --- a/setup.sh +++ b/setup.sh @@ -52,7 +52,12 @@ setup_llm_providers() { else update_or_add_env_var "OPENAI_API_KEY" "$openai_api_key" update_or_add_env_var "ENABLE_OPENAI" "true" - model_options+=("OPENAI_GPT4_TURBO" "OPENAI_GPT4V" "OPENAI_GPT4O") + model_options+=( + "OPENAI_GPT4_1" + "OPENAI_GPT4_1_MINI" + "OPENAI_GPT4_1_NANO" + "OPENAI_GPT4O" + ) fi else update_or_add_env_var "ENABLE_OPENAI" "false" @@ -69,7 +74,10 @@ setup_llm_providers() { else update_or_add_env_var "ANTHROPIC_API_KEY" "$anthropic_api_key" update_or_add_env_var "ENABLE_ANTHROPIC" "true" - model_options+=("ANTHROPIC_CLAUDE3_OPUS" "ANTHROPIC_CLAUDE3_SONNET" "ANTHROPIC_CLAUDE3_HAIKU" "ANTHROPIC_CLAUDE3.5_SONNET") + model_options+=( + "ANTHROPIC_CLAUDE3.5_SONNET" + "ANTHROPIC_CLAUDE3.7_SONNET" + ) fi else update_or_add_env_var "ENABLE_ANTHROPIC" "false" @@ -92,7 +100,9 @@ setup_llm_providers() { update_or_add_env_var "AZURE_API_BASE" "$azure_api_base" update_or_add_env_var "AZURE_API_VERSION" "$azure_api_version" update_or_add_env_var "ENABLE_AZURE" "true" - model_options+=("AZURE_OPENAI_GPT4V") + model_options+=( + "AZURE_OPENAI_GPT4O" + ) fi else update_or_add_env_var "ENABLE_AZURE" "false" @@ -112,7 +122,6 @@ setup_llm_providers() { model_options+=( "GEMINI_FLASH_2_0" "GEMINI_FLASH_2_0_LITE" - "GEMINI_PRO" "GEMINI_2.5_PRO_PREVIEW_03_25" "GEMINI_2.5_PRO_EXP_03_25" ) diff --git a/skyvern/cli/commands.py b/skyvern/cli/commands.py index d882e398..46348246 100644 --- a/skyvern/cli/commands.py +++ b/skyvern/cli/commands.py @@ -221,7 +221,14 @@ def setup_llm_providers() -> None: else: update_or_add_env_var("OPENAI_API_KEY", openai_api_key) update_or_add_env_var("ENABLE_OPENAI", "true") - model_options.extend(["OPENAI_GPT4O"]) + model_options.extend( + [ + "OPENAI_GPT4_1", + "OPENAI_GPT4_1_MINI", + "OPENAI_GPT4_1_NANO", + "OPENAI_GPT4O", + ] + ) else: update_or_add_env_var("ENABLE_OPENAI", "false") @@ -238,8 +245,6 @@ def setup_llm_providers() -> None: update_or_add_env_var("ENABLE_ANTHROPIC", "true") model_options.extend( [ - "ANTHROPIC_CLAUDE3_OPUS", - "ANTHROPIC_CLAUDE3_HAIKU", "ANTHROPIC_CLAUDE3.5_SONNET", "ANTHROPIC_CLAUDE3.7_SONNET", ] @@ -283,7 +288,6 @@ def setup_llm_providers() -> None: [ "GEMINI_FLASH_2_0", "GEMINI_FLASH_2_0_LITE", - "GEMINI_PRO", "GEMINI_2.5_PRO_PREVIEW_03_25", "GEMINI_2.5_PRO_EXP_03_25", ] @@ -856,5 +860,9 @@ def init() -> None: print("\nMCP configuration is complete! Your AI applications are now ready to use Skyvern Cloud.") if run_local: + print("\nInstalling Chromium browser...") + subprocess.run(["playwright", "install", "chromium"], check=True) + print("Chromium installation complete.") + print("\nTo start using Skyvern, run:") print(" skyvern run server") diff --git a/skyvern/config.py b/skyvern/config.py index 223ab153..992cf5c6 100644 --- a/skyvern/config.py +++ b/skyvern/config.py @@ -99,7 +99,8 @@ class Settings(BaseSettings): # LLM Configuration # ##################### # ACTIVE LLM PROVIDER - LLM_KEY: str = "OPENAI_GPT4O" + LLM_KEY: str = "OPENAI_GPT4O" # This is the model name + LLM_API_KEY: str | None = None # API key for the model SECONDARY_LLM_KEY: str | None = None SELECT_AGENT_LLM_KEY: str | None = None SINGLE_CLICK_AGENT_LLM_KEY: str | None = None @@ -108,6 +109,8 @@ class Settings(BaseSettings): LLM_CONFIG_TIMEOUT: int = 300 LLM_CONFIG_MAX_TOKENS: int = 4096 LLM_CONFIG_TEMPERATURE: float = 0 + LLM_CONFIG_SUPPORT_VISION: bool = True # Whether the model supports vision + LLM_CONFIG_ADD_ASSISTANT_PREFIX: bool = False # Whether to add assistant prefix # LLM PROVIDER SPECIFIC ENABLE_OPENAI: bool = False ENABLE_ANTHROPIC: bool = False diff --git a/skyvern/forge/sdk/api/llm/config_registry.py b/skyvern/forge/sdk/api/llm/config_registry.py index b03f1a3a..500465d9 100644 --- a/skyvern/forge/sdk/api/llm/config_registry.py +++ b/skyvern/forge/sdk/api/llm/config_registry.py @@ -37,7 +37,17 @@ class LLMConfigRegistry: @classmethod def get_config(cls, llm_key: str) -> LLMRouterConfig | LLMConfig: if llm_key not in cls._configs: - raise InvalidLLMConfigError(llm_key) + # If the key is not found in registered configs, treat it as a general model + LOG.info("Using general model configuration for unknown LLM key", llm_key=llm_key) + if not llm_key: + raise InvalidLLMConfigError(f"LLM_KEY not set for {llm_key}") + return LLMConfig( + llm_key, # Use the LLM_KEY as the model name + ["LLM_API_KEY"], + supports_vision=settings.LLM_CONFIG_SUPPORT_VISION, + add_assistant_prefix=settings.LLM_CONFIG_ADD_ASSISTANT_PREFIX, + max_completion_tokens=settings.LLM_CONFIG_MAX_TOKENS, + ) return cls._configs[llm_key] @@ -52,6 +62,36 @@ if settings.ENABLE_OPENAI: add_assistant_prefix=False, ), ) + LLMConfigRegistry.register_config( + "OPENAI_GPT4_1", + LLMConfig( + "gpt-4.1", + ["OPENAI_API_KEY"], + supports_vision=True, + add_assistant_prefix=False, + max_completion_tokens=16384, + ), + ) + LLMConfigRegistry.register_config( + "OPENAI_GPT4_1_MINI", + LLMConfig( + "gpt-4.1-mini", + ["OPENAI_API_KEY"], + supports_vision=True, + add_assistant_prefix=False, + max_completion_tokens=16384, + ), + ) + LLMConfigRegistry.register_config( + "OPENAI_GPT4_1_NANO", + LLMConfig( + "gpt-4.1-nano", + ["OPENAI_API_KEY"], + supports_vision=True, + add_assistant_prefix=False, + max_completion_tokens=16384, + ), + ) LLMConfigRegistry.register_config( "OPENAI_GPT4_5", LLMConfig(