[bot] Add Replicate Python SDK integration for model run, stream, and async execution instrumentation (345,748 weekly downloads)
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 35/100
- Type d'issue
- Fonctionnalité
- Clarté
- Plutôt claire
- Activité
- Calme
- Stack technique
- python
- Domaine
- observability-sre
Piste de recherche
Commencez par examiner py/src/braintrust/integrations/, py/src/braintrust/wrappers/, py/noxfile.py, integrations/init.py, integrations/versioning.py et py/pyproject.toml afin de comprendre comment les intégrations sont enregistrées et testées. Comparez les intégrations existantes avant de définir l’étendue de la couverture pour replicate.run(), async_run(), stream(), async_stream(), ainsi que les surfaces de Client et AsyncClient. Le travail est terminé lorsque le tracing de Replicate, l’agrégation du streaming, l’exécution asynchrone, l’enregistrement, le versionnage et les tests sont couverts.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Summary
The Replicate Python SDK (replicate) is the official client for the Replicate platform, which hosts 100k+ machine learning models for language generation, image synthesis, video, audio, and more. Its primary execution surface is replicate.run(model, input={}) and replicate.async_run() — a platform-agnostic model execution API distinct from any provider-specific format. This repository has zero instrumentation for any Replicate SDK surface — no integration directory, no wrapper, no patcher, no auto_instrument() support.
The Replicate API is fundamentally different from OpenAI-style APIs: there is no chat.completions.create() shape, model identifiers are version strings (e.g. "meta/llama-3-70b-instruct:..." or "owner/model"), and streaming is token-by-token via an iterator. wrap_openai() cannot be used with the Replicate client. Users who follow Replicate's official documentation and pip install replicate get zero Braintrust tracing.
What needs to be instrumented
The replicate package exposes these execution surfaces via module-level functions and the Client class, none of which are instrumented:
Model execution (highest priority)
| SDK Method | Description | Streaming | Return type |
|---|---|---|---|
replicate.run(model, input) |
Sync model execution — runs a model version and returns the complete output | stream=True yields ServerSentEvent objects |
str, list, or model-specific output |
replicate.async_run(model, input) |
Async model execution | stream=True yields ServerSentEvent |
Same as sync |
replicate.stream(model, input) |
Sync streaming execution — returns an iterator of output tokens/chunks | Always streaming | Iterator[ServerSentEvent] |
replicate.async_stream(model, input) |
Async streaming execution | Always streaming | AsyncIterator[ServerSentEvent] |
Span shape for language models: The model parameter (a version string) maps to span metadata model. Inputs are the input dict (contains prompt, system_prompt, max_tokens, etc. depending on model). Output is the concatenated string of streamed tokens. Token usage is not returned by the standard API (models expose usage differently), so metrics may require best-effort extraction from model-specific output.
Predictions API (lower priority)
| SDK Method | Description | Return type |
|---|---|---|
replicate.predictions.create() |
Create a model prediction (lower-level than run()) |
Prediction |
replicate.predictions.get() |
Poll a prediction by ID | Prediction |
Deployments (lower priority)
| SDK Method | Description |
|---|---|
replicate.deployments.predictions.create() |
Run a model via a named deployment |
All module-level functions delegate to a default Client instance. Client and AsyncClient have corresponding instance methods.
Implementation notes
Model ID format: replicate.run() accepts model as either "owner/model" (latest version) or "owner/model:version_hash". The integration should extract and log both the model name and version.
No single response type: Unlike OpenAI where all chat completions return ChatCompletion, Replicate output varies by model (strings, lists of strings, dicts, file URLs). The integration should log the raw output and handle streaming aggregation generically.
Streaming: stream=True in run() and the dedicated stream() function yield ServerSentEvent objects with data fields. Accumulated output should be logged as the span output.
Async first-class: The SDK has AsyncClient with async_run() and async_stream() — both must be instrumented.
input dict as span input: The input dict is model-specific but typically contains prompt, system_prompt, max_tokens, temperature, etc. for language models.
No coverage in any instrumentation layer
- No integration directory (
py/src/braintrust/integrations/replicate/) - No wrapper function (e.g.
wrap_replicate()) - No patcher in any existing integration
- No nox test session (
test_replicate) - No version entry in
py/src/braintrust/integrations/versioning.py - No mention in
py/src/braintrust/integrations/__init__.py - No entry in
[tool.braintrust.matrix]inpy/pyproject.toml
A grep for replicate across py/src/braintrust/ returns zero matches in integration code.
Braintrust docs status
not_found — Replicate is not listed on the Braintrust integrations directory or the tracing guide.
Upstream references
- Replicate Python SDK on PyPI: https://pypi.org/project/replicate/
- Replicate Python SDK on GitHub: https://github.com/replicate/replicate-python
- Replicate API reference: https://replicate.com/docs/reference/http
- Replicate Python client docs: https://replicate.com/docs/get-started/python
- Replicate streaming guide: https://replicate.com/docs/topics/streaming
Local repo files inspected
py/src/braintrust/integrations/— noreplicate/directory exists onmainpy/src/braintrust/wrappers/— no Replicate wrapperpy/noxfile.py— notest_replicatesessionpy/src/braintrust/integrations/__init__.py— Replicate not listed in integration registrypy/src/braintrust/integrations/versioning.py— no Replicate version matrixpy/pyproject.toml— no Replicate entries in[tool.braintrust.matrix]- Full repo grep for "replicate" across
py/src/braintrust/— zero matches
- Langage dominant
- Python
- Étoiles
- 22
- Forks
- 24
- Merge moyen
- 16 h
- PR mergées (30 j)
- 101
Préparer son environnement
- Fournit un Dockerfile ou un fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de braintrustdata/braintrust-sdk-python
-
feature python
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
braintrustdata/braintrust-sdk-python#868 ·
Les mainteneurs répondent en général sous 1 jour
-
new-integration python
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
braintrustdata/braintrust-sdk-python#854 ·
Les mainteneurs répondent en général sous 1 jour
-
new-integration python
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
braintrustdata/braintrust-sdk-python#853 ·
Les mainteneurs répondent en général sous 1 jour
-
new-integration python
Difficulté 4/5 3-5 jours Accessibilité débutants 52/100
braintrustdata/braintrust-sdk-python#852 ·
Les mainteneurs répondent en général sous 1 jour
-
Migrate legacy HTTPConnection callers to the policy-aware Transport incrementallyPeut-être pris @AbhiPrasad l’a pris il y a 10 jours. Ouvertepython
braintrustdata/braintrust-sdk-python#839 · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de braintrustdata/braintrust-sdk-python
Issues similaires
-
Broken links found in docsOuvertedocs pydanty:is-working
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
pydantic/pydantic-ai#10113 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
GreedyBear-Project/GreedyBear#1727 ·
Les mainteneurs répondent en général sous 2 jours
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
ARM-software/CMSIS-DSP#354 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
kiat/codeAssist#391 ·
-
needs triage
Difficulté 2/5 1-3 heures Accessibilité débutants 83/100
darnitdevorg/darnit#587 ·
Les mainteneurs répondent en général sous 1 jour