mirror of
https://github.com/Skyvern-AI/skyvern.git
synced 2025-09-02 02:30:07 +00:00
131 lines
4.3 KiB
Python
131 lines
4.3 KiB
Python
import structlog
|
|
|
|
from skyvern.forge.sdk.api.llm.exceptions import (
|
|
DuplicateLLMConfigError,
|
|
InvalidLLMConfigError,
|
|
MissingLLMProviderEnvVarsError,
|
|
NoProviderEnabledError,
|
|
)
|
|
from skyvern.forge.sdk.api.llm.models import LLMConfig, LLMRouterConfig
|
|
from skyvern.forge.sdk.settings_manager import SettingsManager
|
|
|
|
LOG = structlog.get_logger()
|
|
|
|
|
|
class LLMConfigRegistry:
|
|
_configs: dict[str, LLMRouterConfig | LLMConfig] = {}
|
|
|
|
@staticmethod
|
|
def is_router_config(llm_key: str) -> bool:
|
|
return isinstance(LLMConfigRegistry.get_config(llm_key), LLMRouterConfig)
|
|
|
|
@staticmethod
|
|
def validate_config(llm_key: str, config: LLMRouterConfig | LLMConfig) -> None:
|
|
missing_env_vars = config.get_missing_env_vars()
|
|
if missing_env_vars:
|
|
raise MissingLLMProviderEnvVarsError(llm_key, missing_env_vars)
|
|
|
|
@classmethod
|
|
def register_config(cls, llm_key: str, config: LLMRouterConfig | LLMConfig) -> None:
|
|
if llm_key in cls._configs:
|
|
raise DuplicateLLMConfigError(llm_key)
|
|
|
|
cls.validate_config(llm_key, config)
|
|
|
|
LOG.info("Registering LLM config", llm_key=llm_key)
|
|
cls._configs[llm_key] = config
|
|
|
|
@classmethod
|
|
def get_config(cls, llm_key: str) -> LLMRouterConfig | LLMConfig:
|
|
if llm_key not in cls._configs:
|
|
raise InvalidLLMConfigError(llm_key)
|
|
|
|
return cls._configs[llm_key]
|
|
|
|
|
|
# if none of the LLM providers are enabled, raise an error
|
|
if not any(
|
|
[
|
|
SettingsManager.get_settings().ENABLE_OPENAI,
|
|
SettingsManager.get_settings().ENABLE_ANTHROPIC,
|
|
SettingsManager.get_settings().ENABLE_AZURE,
|
|
]
|
|
):
|
|
raise NoProviderEnabledError()
|
|
|
|
|
|
if SettingsManager.get_settings().ENABLE_OPENAI:
|
|
LLMConfigRegistry.register_config(
|
|
"OPENAI_GPT4_TURBO",
|
|
LLMConfig("gpt-4-turbo", ["OPENAI_API_KEY"], supports_vision=False, add_assistant_prefix=False),
|
|
)
|
|
LLMConfigRegistry.register_config(
|
|
"OPENAI_GPT4V", LLMConfig("gpt-4-turbo", ["OPENAI_API_KEY"], supports_vision=True, add_assistant_prefix=False)
|
|
)
|
|
|
|
if SettingsManager.get_settings().ENABLE_ANTHROPIC:
|
|
LLMConfigRegistry.register_config(
|
|
"ANTHROPIC_CLAUDE3",
|
|
LLMConfig(
|
|
"anthropic/claude-3-sonnet-20240229", ["ANTHROPIC_API_KEY"], supports_vision=True, add_assistant_prefix=True
|
|
),
|
|
)
|
|
LLMConfigRegistry.register_config(
|
|
"ANTHROPIC_CLAUDE3_OPUS",
|
|
LLMConfig(
|
|
"anthropic/claude-3-opus-20240229", ["ANTHROPIC_API_KEY"], supports_vision=True, add_assistant_prefix=True
|
|
),
|
|
)
|
|
LLMConfigRegistry.register_config(
|
|
"ANTHROPIC_CLAUDE3_SONNET",
|
|
LLMConfig(
|
|
"anthropic/claude-3-sonnet-20240229", ["ANTHROPIC_API_KEY"], supports_vision=True, add_assistant_prefix=True
|
|
),
|
|
)
|
|
LLMConfigRegistry.register_config(
|
|
"ANTHROPIC_CLAUDE3_HAIKU",
|
|
LLMConfig(
|
|
"anthropic/claude-3-haiku-20240307", ["ANTHROPIC_API_KEY"], supports_vision=True, add_assistant_prefix=True
|
|
),
|
|
)
|
|
|
|
if SettingsManager.get_settings().ENABLE_BEDROCK:
|
|
# Supported through AWS IAM authentication
|
|
LLMConfigRegistry.register_config(
|
|
"BEDROCK_ANTHROPIC_CLAUDE3_OPUS",
|
|
LLMConfig(
|
|
"bedrock/anthropic.claude-3-opus-20240229-v1:0",
|
|
["AWS_REGION"],
|
|
supports_vision=True,
|
|
add_assistant_prefix=True,
|
|
),
|
|
)
|
|
LLMConfigRegistry.register_config(
|
|
"BEDROCK_ANTHROPIC_CLAUDE3_SONNET",
|
|
LLMConfig(
|
|
"bedrock/anthropic.claude-3-sonnet-20240229-v1:0",
|
|
["AWS_REGION"],
|
|
supports_vision=True,
|
|
add_assistant_prefix=True,
|
|
),
|
|
)
|
|
LLMConfigRegistry.register_config(
|
|
"BEDROCK_ANTHROPIC_CLAUDE3_HAIKU",
|
|
LLMConfig(
|
|
"bedrock/anthropic.claude-3-haiku-20240307-v1:0",
|
|
["AWS_REGION"],
|
|
supports_vision=True,
|
|
add_assistant_prefix=True,
|
|
),
|
|
)
|
|
|
|
if SettingsManager.get_settings().ENABLE_AZURE:
|
|
LLMConfigRegistry.register_config(
|
|
"AZURE_OPENAI_GPT4V",
|
|
LLMConfig(
|
|
f"azure/{SettingsManager.get_settings().AZURE_DEPLOYMENT}",
|
|
["AZURE_DEPLOYMENT", "AZURE_API_KEY", "AZURE_API_BASE", "AZURE_API_VERSION"],
|
|
supports_vision=True,
|
|
add_assistant_prefix=False,
|
|
),
|
|
)
|