Skip to content

Commit 4eeb93b

Browse files
authored
fix(import): import sentence_transformers on demand as it's too slow (#750)
1 parent 193aa35 commit 4eeb93b

File tree

1 file changed

+7
-13
lines changed

1 file changed

+7
-13
lines changed

python/cocoindex/functions.py

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,6 @@
99
from . import llm, op
1010
from .typing import TypeAttr, Vector
1111

12-
# Check if sentence_transformers is available
13-
try:
14-
import sentence_transformers # type: ignore
15-
16-
_SENTENCE_TRANSFORMERS_AVAILABLE = True
17-
except ImportError:
18-
_SENTENCE_TRANSFORMERS_AVAILABLE = False
19-
2012

2113
class ParseJson(op.FunctionSpec):
2214
"""Parse a text into a JSON object."""
@@ -79,18 +71,19 @@ class SentenceTransformerEmbedExecutor:
7971
"""Executor for SentenceTransformerEmbed."""
8072

8173
spec: SentenceTransformerEmbed
82-
_model: "sentence_transformers.SentenceTransformer"
74+
_model: Any | None = None
8375

8476
def analyze(self, text: Any) -> type:
85-
if not _SENTENCE_TRANSFORMERS_AVAILABLE:
77+
try:
78+
# Only import sentence_transformers locally when it's needed, as its import is very slow.
79+
import sentence_transformers # pylint: disable=import-outside-toplevel
80+
except ImportError as e:
8681
raise ImportError(
8782
"sentence_transformers is required for SentenceTransformerEmbed function. "
8883
"Install it with one of these commands:\n"
8984
" pip install 'cocoindex[embeddings]'\n"
9085
" pip install sentence-transformers"
91-
)
92-
93-
import sentence_transformers # pylint: disable=import-outside-toplevel
86+
) from e
9487

9588
args = self.spec.args or {}
9689
self._model = sentence_transformers.SentenceTransformer(self.spec.model, **args)
@@ -102,5 +95,6 @@ def analyze(self, text: Any) -> type:
10295
return result
10396

10497
def __call__(self, text: str) -> NDArray[np.float32]:
98+
assert self._model is not None
10599
result: NDArray[np.float32] = self._model.encode(text, convert_to_numpy=True)
106100
return result

0 commit comments

Comments
 (0)