diff --git a/AGENTS.md b/AGENTS.md index b7b2950d..6cb66905 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -39,7 +39,9 @@ uv run ruff format . && uv run ruff check . # Lint & format - **Google-style docstrings** - **Ruff** for linting/formatting - Use `...` in `@generative` function bodies +- Use `...` in `@generative` function bodies - Prefer primitives over classes +- **Friendly Dependency Errors**: Wraps optional backend imports in `try/except ImportError` with a helpful message (e.g., "Please pip install mellea[hf]"). See `mellea/stdlib/session.py` for examples. ## 5. Commits & Hooks [Angular format](https://github.com/angular/angular/blob/main/CONTRIBUTING.md#commit): `feat:`, `fix:`, `docs:`, `test:`, `refactor:`, `release:` diff --git a/mellea/stdlib/session.py b/mellea/stdlib/session.py index 0c1df16f..1d706cf5 100644 --- a/mellea/stdlib/session.py +++ b/mellea/stdlib/session.py @@ -58,21 +58,39 @@ def backend_name_to_class(name: str) -> Any: return OllamaModelBackend elif name == "hf" or name == "huggingface": - from mellea.backends.huggingface import LocalHFBackend - - return LocalHFBackend + try: + from mellea.backends.huggingface import LocalHFBackend + + return LocalHFBackend + except ImportError as e: + raise ImportError( + "The 'hf' backend requires extra dependencies. " + "Please install them with: pip install 'mellea[hf]'" + ) from e elif name == "openai": from ..backends.openai import OpenAIBackend return OpenAIBackend elif name == "watsonx": - from ..backends.watsonx import WatsonxAIBackend - - return WatsonxAIBackend + try: + from ..backends.watsonx import WatsonxAIBackend + + return WatsonxAIBackend + except ImportError as e: + raise ImportError( + "The 'watsonx' backend requires extra dependencies. " + "Please install them with: pip install 'mellea[watsonx]'" + ) from e elif name == "litellm": - from ..backends.litellm import LiteLLMBackend - - return LiteLLMBackend + try: + from ..backends.litellm import LiteLLMBackend + + return LiteLLMBackend + except ImportError as e: + raise ImportError( + "The 'litellm' backend requires extra dependencies. " + "Please install them with: pip install 'mellea[litellm]'" + ) from e else: return None