|
4 | 4 |
|
5 | 5 | __all__ = ['OpenAIEmbedder', 'OpenAIEmbedderConfig'] |
6 | 6 |
|
| 7 | + |
| 8 | +def _missing_provider(name: str, dependency: str) -> type: |
| 9 | + class _MissingProvider: # pragma: no cover - shim for optional extras |
| 10 | + def __init__(self, *args, **kwargs): |
| 11 | + raise ImportError( |
| 12 | + f'{name} requires the optional dependency "{dependency}". ' |
| 13 | + f'Install it via `uv sync --extra {dependency}` or the corresponding extras group.' |
| 14 | + ) |
| 15 | + |
| 16 | + _MissingProvider.__name__ = f'Missing{name}' |
| 17 | + return _MissingProvider |
| 18 | + |
| 19 | + |
7 | 20 | try: # pragma: no cover - optional dependency |
8 | | - from .gemini import GeminiEmbedder, GeminiEmbedderConfig |
9 | | -except ImportError: # pragma: no cover - optional dependency guard |
10 | | - GeminiEmbedder = None # type: ignore[assignment] |
11 | | - GeminiEmbedderConfig = None # type: ignore[assignment] |
12 | | -else: # pragma: no cover - optional dependency present |
| 21 | + from .gemini import GeminiEmbedder, GeminiEmbedderConfig # type: ignore[unused-import] |
| 22 | +except ImportError: # pragma: no cover |
| 23 | + GeminiEmbedder = _missing_provider('GeminiEmbedder', 'google-genai') # type: ignore[assignment] |
| 24 | + GeminiEmbedderConfig = _missing_provider('GeminiEmbedderConfig', 'google-genai') # type: ignore[assignment] |
| 25 | +else: # pragma: no cover |
13 | 26 | __all__.extend(['GeminiEmbedder', 'GeminiEmbedderConfig']) |
14 | 27 |
|
15 | 28 | try: # pragma: no cover - optional dependency |
16 | | - from .voyage import VoyageAIEmbedder, VoyageAIEmbedderConfig |
17 | | -except ImportError: # pragma: no cover - optional dependency guard |
18 | | - VoyageAIEmbedder = None # type: ignore[assignment] |
19 | | - VoyageAIEmbedderConfig = None # type: ignore[assignment] |
| 29 | + from .voyage import VoyageAIEmbedder, VoyageAIEmbedderConfig # type: ignore[unused-import] |
| 30 | +except ImportError: # pragma: no cover |
| 31 | + VoyageAIEmbedder = _missing_provider('VoyageAIEmbedder', 'voyageai') # type: ignore[assignment] |
| 32 | + VoyageAIEmbedderConfig = _missing_provider('VoyageAIEmbedderConfig', 'voyageai') # type: ignore[assignment] |
20 | 33 | else: # pragma: no cover |
21 | 34 | __all__.extend(['VoyageAIEmbedder', 'VoyageAIEmbedderConfig']) |
22 | 35 |
|
23 | 36 | try: # pragma: no cover - optional dependency |
24 | | - from .embeddinggemma import EmbeddingGemmaConfig, EmbeddingGemmaEmbedder |
25 | | -except ImportError: # pragma: no cover - optional dependency guard |
26 | | - EmbeddingGemmaEmbedder = None # type: ignore[assignment] |
27 | | - EmbeddingGemmaConfig = None # type: ignore[assignment] |
| 37 | + from .embeddinggemma import EmbeddingGemmaConfig, EmbeddingGemmaEmbedder # type: ignore[unused-import] |
| 38 | +except ImportError: # pragma: no cover |
| 39 | + EmbeddingGemmaEmbedder = _missing_provider('EmbeddingGemmaEmbedder', 'sentence-transformers') # type: ignore[assignment] |
| 40 | + EmbeddingGemmaConfig = _missing_provider('EmbeddingGemmaConfig', 'sentence-transformers') # type: ignore[assignment] |
28 | 41 | else: # pragma: no cover |
29 | 42 | __all__.extend(['EmbeddingGemmaEmbedder', 'EmbeddingGemmaConfig']) |
0 commit comments