[bot] Add sentence-transformers integration for SentenceTransformer.encode, CrossEncoder, and SparseEncoder embedding instrumentation (7,562,767 weekly downloads)
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 42/100
- Issue-Typ
- Feature
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Ruhig
- Bereich
- ai, machine-learning, observability
Rechercherichtung
Beginne damit, die vorhandenen Integrationen unter py/src/braintrust/integrations/ und die Wrapper zu vergleichen, und lies anschließend py/src/braintrust/auto.py, integrations/init.py, versioning.py, py/noxfile.py und pyproject.toml. Als abgeschlossen gilt die Aufgabe, wenn die aufgeführten SentenceTransformer-, CrossEncoder- und SparseEncoder-Schnittstellen instrumentiert und die Integration mit der Test- und Versionskonfiguration registriert ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Summary
The sentence-transformers package is the most widely used Python library for generating local text embeddings. Its SentenceTransformer.encode() method is the primary embedding execution API in the Python AI ecosystem, powering RAG pipelines, semantic search, clustering, and reranking across thousands of applications. The latest release is v5.5.1 (May 12, 2026). This repository has zero instrumentation for any sentence-transformers execution surface — no integration directory, no wrapper, no patcher, no auto_instrument() support.
This gap is distinct from the existing huggingface_hub integration, which traces cloud inference through InferenceClient.feature_extraction() (HuggingFace Inference API). sentence-transformers runs models locally using a different execution path: SentenceTransformer(model_name).encode(texts) does not call any remote API and cannot be traced through huggingface_hub or any existing integration.
Comparable embedding/execution libraries with dedicated integrations in this repo: huggingface_hub (cloud inference), openai (embeddings via client.embeddings.create()), cohere (embeddings via client.embed()).
What needs to be instrumented
The sentence-transformers package exposes these execution surfaces, none of which are instrumented:
Dense embeddings (highest priority)
| Class / Method | Description | Return type |
|---|---|---|
SentenceTransformer.encode(sentences, ...) |
Generate dense vector embeddings for a list of sentences — the primary execution surface | np.ndarray or list[Tensor] |
SentenceTransformer.encode_multi_process(sentences, pool, ...) |
Parallel embedding generation across multiple CPUs/GPUs | np.ndarray |
encode() accepts batch_size, show_progress_bar, output_value (sentence_embedding, token_embeddings), precision (float32, int8, uint8, binary, ubinary), convert_to_numpy, convert_to_tensor, device, normalize_embeddings.
Token counting: encode() calls the underlying tokenizer; prompt token counts can be extracted from the tokenizer before encoding.
Async: No async variant exists in the standard API; parallelism is via encode_multi_process().
Reranking (CrossEncoder)
| Class / Method | Description | Return type |
|---|---|---|
CrossEncoder.predict(sentence_pairs, ...) |
Compute similarity scores for sentence pairs — used for reranking retrieved documents | np.ndarray |
CrossEncoder.rank(query, documents, ...) |
Rank documents against a query using cross-encoder scoring | list[dict] |
Sparse embeddings (SparseEncoder)
| Class / Method | Description | Return type |
|---|---|---|
SparseEncoder.encode(sentences, ...) |
Generate sparse vector representations — used with SPLADE and similar models | dict with token IDs and weights |
Implementation notes
Local inference model: Unlike cloud API SDKs, sentence-transformers loads models locally using PyTorch. Patching the execution surface means wrapping SentenceTransformer.encode() directly rather than intercepting HTTP requests.
Span metrics: Useful span fields include:
input: the list of sentences encodedoutput: embedding dimensions/count (not the raw vectors — potentially large)metadata:model_name_or_path,device,precision,normalize_embeddings, model architecture details fromSentenceTransformer.model_card_datametrics: encoding latency, sentence count, approximate token counts
Token count estimation: The tokenizer is accessible at SentenceTransformer.tokenizer. Token counts for the input can be computed before encoding via len(tokenizer.encode(sentence)).
Model identification: SentenceTransformer.model_card_data.model_id or the constructor argument provides the model name for span metadata.
Patching strategy: Wrap SentenceTransformer.encode and CrossEncoder.predict at the class level. The SparseEncoder.encode follows the same pattern as SentenceTransformer.encode.
No coverage in any instrumentation layer
- No integration directory (
py/src/braintrust/integrations/sentence_transformers/) - No wrapper function (e.g.
wrap_sentence_transformers()) - No patcher in any existing integration
- No nox test session (
test_sentence_transformers) - No version entry in
py/src/braintrust/integrations/versioning.py - No mention in
py/src/braintrust/integrations/__init__.py
A grep for sentence.transformers, sentence_transformers, or sbert across py/src/braintrust/ returns zero matches.
Braintrust docs status
not_found — sentence-transformers is not listed on the Braintrust integrations directory or the tracing guide. There is no auto_instrument() reference, no wrap_sentence_transformers() function, and no sentence-transformers setup documentation anywhere in Braintrust docs.
Upstream references
- sentence-transformers on PyPI: https://pypi.org/project/sentence-transformers/ (v5.5.1, May 12, 2026)
- sentence-transformers on GitHub: https://github.com/UKPLab/sentence-transformers
- sentence-transformers documentation: https://www.sbert.net/
SentenceTransformer.encode()API reference: https://www.sbert.net/docs/package_reference/SentenceTransformer.htmlCrossEncoderAPI reference: https://www.sbert.net/docs/package_reference/cross_encoder/CrossEncoder.htmlSparseEncoderusage: https://www.sbert.net/docs/package_reference/sparse_encoder/SparseEncoder.html
Local repo files inspected
py/src/braintrust/integrations/— nosentence_transformers/directory exists onmainpy/src/braintrust/wrappers/— no sentence-transformers wrapperpy/noxfile.py— notest_sentence_transformerssessionpy/src/braintrust/integrations/__init__.py— sentence-transformers not listed in integration registrypy/src/braintrust/integrations/versioning.py— no sentence-transformers version matrixpy/pyproject.toml[tool.braintrust.matrix]— no sentence-transformers entrypy/src/braintrust/auto.py— sentence-transformers not listed inauto_instrument()parameters- Full repo grep for
sentence.transformers,sentence_transformers,sbertacrosspy/src/braintrust/— zero matches
- Vorherrschende Sprache
- Python
- Sterne
- 21
- Forks
- 23
- Ø Merge
- 18 Std. 23 Min.
- Gemergte PRs (30 T.)
- 104
Entwicklungsumgebung
- Enthält ein Dockerfile oder eine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus braintrustdata/braintrust-sdk-python
-
feature python
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
braintrustdata/braintrust-sdk-python#868 ·
Maintainer antworten meist innerhalb von 1 Tag
-
new-integration python
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 55/100
braintrustdata/braintrust-sdk-python#854 ·
Maintainer antworten meist innerhalb von 1 Tag
-
new-integration python
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
braintrustdata/braintrust-sdk-python#853 ·
Maintainer antworten meist innerhalb von 1 Tag
-
new-integration python
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 52/100
braintrustdata/braintrust-sdk-python#852 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Migrate legacy HTTPConnection callers to the policy-aware Transport incrementallyEvtl. vergeben @AbhiPrasad hat das vor 8 Tagen übernommen. Offenpython
braintrustdata/braintrust-sdk-python#839 · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in braintrustdata/braintrust-sdk-python
Ähnliche Issues
-
dependencies feature github_actions good first issue
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
wemake-services/wemake-django-template#3149 ·
Maintainer antworten meist innerhalb von 1 Tag
-
[request] vsg/1.1.16Offenupstream update
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
conan-io/conan-center-index#31142 ·
Maintainer antworten meist innerhalb von 1 Tag
-
area:core bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
request-theme
Schwierigkeit 2/5 Unter einer Stunde Anfängerfreundlichkeit 70/100
LizardByte/ThemerrDB#8877 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
area/install-update comp/gateway P0 sweeper:risk-compatibility type/bug
Schwierigkeit 2/5 Unter einer Stunde Anfängerfreundlichkeit 72/100
NousResearch/hermes-agent#135997 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag