mirror of
https://github.com/lancedb/lancedb.git
synced 2026-10-21 11:12:27 +00:00
BREAKING CHANGE: `SentenceTransformerEmbeddings.trust_remote_code` now
defaults to `False` (was `True`). When an embedding function is restored
from table metadata, `trust_remote_code=True` and custom endpoints
(OpenAI `base_url`, Ollama `host`/proxy, watsonx `url`) are only honored
if the process approved them; otherwise computing embeddings raises
`UntrustedEmbeddingConfigError`. Functions created in the same process
are approved automatically. To reopen such a table in a new process,
call `get_registry().allow_remote_code(model, revision=...)` or
`get_registry().allow_endpoint(url)` first.
## Summary
Embedding functions are rebuilt from table metadata, which anyone who
can write the table controls. Since sentence-transformers defaulted
`trust_remote_code` to `True`, opening and querying a crafted table ran
arbitrary code from a model repository (GHSA-x8v2-vj73-gfwm). Metadata
could likewise point `base_url` at another server, sending it queries
and the `OPENAI_API_KEY` from the environment.
The table can no longer grant itself trust:
```python
registry = get_registry()
registry.allow_remote_code("nomic-ai/nomic-embed-text-v1.5", revision="<commit>")
registry.allow_endpoint("http://my-ollama-host:11434")
```
Trust is keyed by model name (optionally pinned to a revision), so
approving one model doesn't let a table swap in another. Restored
functions that aren't approved are replaced by a placeholder that raises
on use without constructing the real function (`huggingface` loads its
model in `__init__`), so non-embedding operations on the table keep
working. `sentence-transformers` and `huggingface` gain a `revision`
parameter. Custom embedding functions can opt in by overriding the new
`remote_code_model()` / `endpoints()` hooks.
Not covered: TypeScript (its built-ins have neither remote code nor
configurable endpoints), Bedrock `assumed_role`, and third-party
functions that don't implement the hooks.
## Evidence
`test_embeddings_trust.py` covers restore with and without approval,
revision pinning, swapped model names, endpoint gating, and that the
table stays usable. Opening a table with crafted metadata and searching
it now gives:
```
UntrustedEmbeddingConfigError: Embedding function 'sentence-transformers' was restored from table metadata with settings this process has not approved:
- runs code from model 'attacker/model' at revision None. If you trust it, call get_registry().allow_remote_code('attacker/model', revision=None)
```
## Merge Risk
**Door:** One-way: changes a default and makes previously working
reopen-and-search flows require explicit approval.
**Blast Radius:** public-api (Python embeddings); users of remote-code
models or custom endpoints who reopen tables in a new process.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
171 lines
8.9 KiB
Plaintext
171 lines
8.9 KiB
Plaintext
---
|
|
title: Sentence Transformers
|
|
sidebarTitle: Sentence Transformers
|
|
---
|
|
|
|
import { PyEmbeddingSentenceTransformersBaai } from '/snippets/integrations.mdx';
|
|
|
|
Allows you to set parameters when registering a `sentence-transformers` object.
|
|
|
|
<Info>
|
|
Sentence transformer embeddings are normalized by default. It is recommended to use normalized embeddings for similarity search.
|
|
</Info>
|
|
|
|
<Warning>
|
|
Setting `trust_remote_code=True` allows the model to execute arbitrary code from its Hugging Face repository during loading. Only enable it for repositories you trust, and pin `revision` to a commit hash. When a table using such a model is opened in a new process, the model must be approved with `get_registry().allow_remote_code(...)`. See [Trusting remote code and custom endpoints](/embedding#trusting-remote-code-and-custom-endpoints).
|
|
</Warning>
|
|
|
|
| Parameter | Type | Default Value | Description |
|
|
|---|---|---|---|
|
|
| `name` | `str` | `all-MiniLM-L6-v2` | The name of the model |
|
|
| `device` | `str` | `cpu` | The device to run the model on (can be `cpu` or `gpu`) |
|
|
| `normalize` | `bool` | `True` | Whether to normalize the input text before feeding it to the model |
|
|
| `trust_remote_code` | `bool` | `False` | Whether to trust and execute remote code from the model's Huggingface repository |
|
|
| `revision` | `str` | `None` | The model revision to load, such as a commit hash |
|
|
|
|
|
|
<Details title="Check out available sentence-transformer models here!">
|
|
```markdown
|
|
- sentence-transformers/all-MiniLM-L12-v2
|
|
- sentence-transformers/paraphrase-mpnet-base-v2
|
|
- sentence-transformers/gtr-t5-base
|
|
- sentence-transformers/LaBSE
|
|
- sentence-transformers/all-MiniLM-L6-v2
|
|
- sentence-transformers/bert-base-nli-max-tokens
|
|
- sentence-transformers/bert-base-nli-mean-tokens
|
|
- sentence-transformers/bert-base-nli-stsb-mean-tokens
|
|
- sentence-transformers/bert-base-wikipedia-sections-mean-tokens
|
|
- sentence-transformers/bert-large-nli-cls-token
|
|
- sentence-transformers/bert-large-nli-max-tokens
|
|
- sentence-transformers/bert-large-nli-mean-tokens
|
|
- sentence-transformers/bert-large-nli-stsb-mean-tokens
|
|
- sentence-transformers/distilbert-base-nli-max-tokens
|
|
- sentence-transformers/distilbert-base-nli-mean-tokens
|
|
- sentence-transformers/distilbert-base-nli-stsb-mean-tokens
|
|
- sentence-transformers/distilroberta-base-msmarco-v1
|
|
- sentence-transformers/distilroberta-base-msmarco-v2
|
|
- sentence-transformers/nli-bert-base-cls-pooling
|
|
- sentence-transformers/nli-bert-base-max-pooling
|
|
- sentence-transformers/nli-bert-base
|
|
- sentence-transformers/nli-bert-large-cls-pooling
|
|
- sentence-transformers/nli-bert-large-max-pooling
|
|
- sentence-transformers/nli-bert-large
|
|
- sentence-transformers/nli-distilbert-base-max-pooling
|
|
- sentence-transformers/nli-distilbert-base
|
|
- sentence-transformers/nli-roberta-base
|
|
- sentence-transformers/nli-roberta-large
|
|
- sentence-transformers/roberta-base-nli-mean-tokens
|
|
- sentence-transformers/roberta-base-nli-stsb-mean-tokens
|
|
- sentence-transformers/roberta-large-nli-mean-tokens
|
|
- sentence-transformers/roberta-large-nli-stsb-mean-tokens
|
|
- sentence-transformers/stsb-bert-base
|
|
- sentence-transformers/stsb-bert-large
|
|
- sentence-transformers/stsb-distilbert-base
|
|
- sentence-transformers/stsb-roberta-base
|
|
- sentence-transformers/stsb-roberta-large
|
|
- sentence-transformers/xlm-r-100langs-bert-base-nli-mean-tokens
|
|
- sentence-transformers/xlm-r-100langs-bert-base-nli-stsb-mean-tokens
|
|
- sentence-transformers/xlm-r-base-en-ko-nli-ststb
|
|
- sentence-transformers/xlm-r-bert-base-nli-mean-tokens
|
|
- sentence-transformers/xlm-r-bert-base-nli-stsb-mean-tokens
|
|
- sentence-transformers/xlm-r-large-en-ko-nli-ststb
|
|
- sentence-transformers/bert-base-nli-cls-token
|
|
- sentence-transformers/all-distilroberta-v1
|
|
- sentence-transformers/multi-qa-MiniLM-L6-dot-v1
|
|
- sentence-transformers/multi-qa-distilbert-cos-v1
|
|
- sentence-transformers/multi-qa-distilbert-dot-v1
|
|
- sentence-transformers/multi-qa-mpnet-base-cos-v1
|
|
- sentence-transformers/multi-qa-mpnet-base-dot-v1
|
|
- sentence-transformers/nli-distilroberta-base-v2
|
|
- sentence-transformers/all-MiniLM-L6-v1
|
|
- sentence-transformers/all-mpnet-base-v1
|
|
- sentence-transformers/all-mpnet-base-v2
|
|
- sentence-transformers/all-roberta-large-v1
|
|
- sentence-transformers/allenai-specter
|
|
- sentence-transformers/average_word_embeddings_glove.6B.300d
|
|
- sentence-transformers/average_word_embeddings_glove.840B.300d
|
|
- sentence-transformers/average_word_embeddings_komninos
|
|
- sentence-transformers/average_word_embeddings_levy_dependency
|
|
- sentence-transformers/clip-ViT-B-32-multilingual-v1
|
|
- sentence-transformers/clip-ViT-B-32
|
|
- sentence-transformers/distilbert-base-nli-stsb-quora-ranking
|
|
- sentence-transformers/distilbert-multilingual-nli-stsb-quora-ranking
|
|
- sentence-transformers/distilroberta-base-paraphrase-v1
|
|
- sentence-transformers/distiluse-base-multilingual-cased-v1
|
|
- sentence-transformers/distiluse-base-multilingual-cased-v2
|
|
- sentence-transformers/distiluse-base-multilingual-cased
|
|
- sentence-transformers/facebook-dpr-ctx_encoder-multiset-base
|
|
- sentence-transformers/facebook-dpr-ctx_encoder-single-nq-base
|
|
- sentence-transformers/facebook-dpr-question_encoder-multiset-base
|
|
- sentence-transformers/facebook-dpr-question_encoder-single-nq-base
|
|
- sentence-transformers/gtr-t5-large
|
|
- sentence-transformers/gtr-t5-xl
|
|
- sentence-transformers/gtr-t5-xxl
|
|
- sentence-transformers/msmarco-MiniLM-L-12-v3
|
|
- sentence-transformers/msmarco-MiniLM-L-6-v3
|
|
- sentence-transformers/msmarco-MiniLM-L12-cos-v5
|
|
- sentence-transformers/msmarco-MiniLM-L6-cos-v5
|
|
- sentence-transformers/msmarco-bert-base-dot-v5
|
|
- sentence-transformers/msmarco-bert-co-condensor
|
|
- sentence-transformers/msmarco-distilbert-base-dot-prod-v3
|
|
- sentence-transformers/msmarco-distilbert-base-tas-b
|
|
- sentence-transformers/msmarco-distilbert-base-v2
|
|
- sentence-transformers/msmarco-distilbert-base-v3
|
|
- sentence-transformers/msmarco-distilbert-base-v4
|
|
- sentence-transformers/msmarco-distilbert-cos-v5
|
|
- sentence-transformers/msmarco-distilbert-dot-v5
|
|
- sentence-transformers/msmarco-distilbert-multilingual-en-de-v2-tmp-lng-aligned
|
|
- sentence-transformers/msmarco-distilbert-multilingual-en-de-v2-tmp-trained-scratch
|
|
- sentence-transformers/msmarco-distilroberta-base-v2
|
|
- sentence-transformers/msmarco-roberta-base-ance-firstp
|
|
- sentence-transformers/msmarco-roberta-base-v2
|
|
- sentence-transformers/msmarco-roberta-base-v3
|
|
- sentence-transformers/multi-qa-MiniLM-L6-cos-v1
|
|
- sentence-transformers/nli-mpnet-base-v2
|
|
- sentence-transformers/nli-roberta-base-v2
|
|
- sentence-transformers/nq-distilbert-base-v1
|
|
- sentence-transformers/paraphrase-MiniLM-L12-v2
|
|
- sentence-transformers/paraphrase-MiniLM-L3-v2
|
|
- sentence-transformers/paraphrase-MiniLM-L6-v2
|
|
- sentence-transformers/paraphrase-TinyBERT-L6-v2
|
|
- sentence-transformers/paraphrase-albert-base-v2
|
|
- sentence-transformers/paraphrase-albert-small-v2
|
|
- sentence-transformers/paraphrase-distilroberta-base-v1
|
|
- sentence-transformers/paraphrase-distilroberta-base-v2
|
|
- sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
|
|
- sentence-transformers/paraphrase-multilingual-mpnet-base-v2
|
|
- sentence-transformers/paraphrase-xlm-r-multilingual-v1
|
|
- sentence-transformers/quora-distilbert-base
|
|
- sentence-transformers/quora-distilbert-multilingual
|
|
- sentence-transformers/sentence-t5-base
|
|
- sentence-transformers/sentence-t5-large
|
|
- sentence-transformers/sentence-t5-xxl
|
|
- sentence-transformers/sentence-t5-xl
|
|
- sentence-transformers/stsb-distilroberta-base-v2
|
|
- sentence-transformers/stsb-mpnet-base-v2
|
|
- sentence-transformers/stsb-roberta-base-v2
|
|
- sentence-transformers/stsb-xlm-r-multilingual
|
|
- sentence-transformers/xlm-r-distilroberta-base-paraphrase-v1
|
|
- sentence-transformers/clip-ViT-L-14
|
|
- sentence-transformers/clip-ViT-B-16
|
|
- sentence-transformers/use-cmlm-multilingual
|
|
- sentence-transformers/all-MiniLM-L12-v1
|
|
```
|
|
</Details>
|
|
|
|
<Info>
|
|
You can also load many other model architectures from the library. For example models from sources such as BAAI, Nomic, Salesforce Research, etc. See this HF hub page for all [supported models](https://huggingface.co/models?library=sentence-transformers).
|
|
</Info>
|
|
|
|
<Note title="BAAI embeddings example">
|
|
Here is an example that uses the BAAI embedding model from the Hugging Face Hub [supported models](https://huggingface.co/models?library=sentence-transformers).
|
|
|
|
<CodeGroup>
|
|
<CodeBlock filename="Python" language="Python" icon="python">
|
|
{PyEmbeddingSentenceTransformersBaai}
|
|
</CodeBlock>
|
|
</CodeGroup>
|
|
</Note>
|
|
Visit sentence-transformers [HuggingFace HUB](https://huggingface.co/sentence-transformers) page for more information on the available models.
|
|
|