|
| 1 | +from typing import TYPE_CHECKING |
| 2 | + |
| 3 | +from ._import_utils import import_attr as _import_attr |
1 | 4 | from ._version import __version__
|
2 | 5 |
|
3 |
| -# expose embedding model providers on the package root |
4 |
| -from .embedding_providers import ( |
5 |
| - BaseEmbeddingsProvider, |
6 |
| - GPT4AllEmbeddingsProvider, |
7 |
| - HfHubEmbeddingsProvider, |
8 |
| - QianfanEmbeddingsEndpointProvider, |
9 |
| -) |
10 |
| -from .exception import store_exception |
11 |
| -from .magics import AiMagics |
12 |
| - |
13 |
| -# expose JupyternautPersona on the package root |
14 |
| -# required by `jupyter-ai`. |
15 |
| -from .models.persona import JupyternautPersona, Persona |
16 |
| - |
17 |
| -# expose model providers on the package root |
18 |
| -from .providers import ( |
19 |
| - AI21Provider, |
20 |
| - BaseProvider, |
21 |
| - GPT4AllProvider, |
22 |
| - HfHubProvider, |
23 |
| - QianfanProvider, |
24 |
| - TogetherAIProvider, |
25 |
| -) |
| 6 | +if TYPE_CHECKING: |
| 7 | + # same as dynamic imports but understood by mypy |
| 8 | + from .embedding_providers import ( |
| 9 | + BaseEmbeddingsProvider, |
| 10 | + GPT4AllEmbeddingsProvider, |
| 11 | + HfHubEmbeddingsProvider, |
| 12 | + QianfanEmbeddingsEndpointProvider, |
| 13 | + ) |
| 14 | + from .exception import store_exception |
| 15 | + from .magics import AiMagics |
| 16 | + from .models.persona import JupyternautPersona, Persona |
| 17 | + from .providers import ( |
| 18 | + AI21Provider, |
| 19 | + BaseProvider, |
| 20 | + GPT4AllProvider, |
| 21 | + HfHubProvider, |
| 22 | + QianfanProvider, |
| 23 | + TogetherAIProvider, |
| 24 | + ) |
| 25 | +else: |
| 26 | + _exports_by_module = { |
| 27 | + # expose embedding model providers on the package root |
| 28 | + "embedding_providers": [ |
| 29 | + "BaseEmbeddingsProvider", |
| 30 | + "GPT4AllEmbeddingsProvider", |
| 31 | + "HfHubEmbeddingsProvider", |
| 32 | + "QianfanEmbeddingsEndpointProvider", |
| 33 | + ], |
| 34 | + "exception": ["store_exception"], |
| 35 | + "magics": ["AiMagics"], |
| 36 | + # expose JupyternautPersona on the package root |
| 37 | + # required by `jupyter-ai`. |
| 38 | + "models.persona": ["JupyternautPersona", "Persona"], |
| 39 | + # expose model providers on the package root |
| 40 | + "providers": [ |
| 41 | + "AI21Provider", |
| 42 | + "BaseProvider", |
| 43 | + "GPT4AllProvider", |
| 44 | + "HfHubProvider", |
| 45 | + "QianfanProvider", |
| 46 | + "TogetherAIProvider", |
| 47 | + ], |
| 48 | + } |
| 49 | + |
| 50 | + _modules_by_export = { |
| 51 | + import_name: module |
| 52 | + for module, imports in _exports_by_module.items() |
| 53 | + for import_name in imports |
| 54 | + } |
| 55 | + |
| 56 | + def __getattr__(export_name: str) -> object: |
| 57 | + module_name = _modules_by_export.get(export_name) |
| 58 | + result = _import_attr(export_name, module_name, __spec__.parent) |
| 59 | + globals()[export_name] = result |
| 60 | + return result |
26 | 61 |
|
27 | 62 |
|
28 | 63 | def load_ipython_extension(ipython):
|
29 |
| - ipython.register_magics(AiMagics) |
30 |
| - ipython.set_custom_exc((BaseException,), store_exception) |
| 64 | + ipython.register_magics(__getattr__("AiMagics")) |
| 65 | + ipython.set_custom_exc((BaseException,), __getattr__("store_exception")) |
31 | 66 |
|
32 | 67 |
|
33 | 68 | def unload_ipython_extension(ipython):
|
34 | 69 | ipython.set_custom_exc((BaseException,), ipython.CustomTB)
|
| 70 | + |
| 71 | + |
| 72 | +# required to preserve backward compatibility with `from jupyter_ai_magics import *` |
| 73 | +__all__ = [ |
| 74 | + "__version__", |
| 75 | + "load_ipython_extension", |
| 76 | + "unload_ipython_extension", |
| 77 | + "BaseEmbeddingsProvider", |
| 78 | + "GPT4AllEmbeddingsProvider", |
| 79 | + "HfHubEmbeddingsProvider", |
| 80 | + "QianfanEmbeddingsEndpointProvider", |
| 81 | + "store_exception", |
| 82 | + "AiMagics", |
| 83 | + "JupyternautPersona", |
| 84 | + "Persona", |
| 85 | + "AI21Provider", |
| 86 | + "BaseProvider", |
| 87 | + "GPT4AllProvider", |
| 88 | + "HfHubProvider", |
| 89 | + "QianfanProvider", |
| 90 | + "TogetherAIProvider", |
| 91 | +] |
| 92 | + |
| 93 | + |
| 94 | +def __dir__(): |
| 95 | + # Allows more editors (e.g. IPython) to complete on `jupyter_ai_magics.<tab>` |
| 96 | + return list(__all__) |
0 commit comments