> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wandb.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Suivre et versionner des objets

> Suivre et versionner tout objet sérialisable en JSON dans W&B Weave

Cette page explique comment publier, récupérer, supprimer et référencer des objets versionnés dans W\&B Weave. Utilisez-la lorsque vous devez suivre des données structurées telles que des jeux de données, des modèles ou des prompts d'un run à l'autre et au fil du temps.

<div id="objects">
  ## Objets
</div>

Un **objet** désigne des données sérialisables et versionnées. Weave versionne automatiquement les objets à chaque modification et crée un historique immuable. Les objets comprennent :

* **Datasets** : collections d'exemples pour l'évaluation
* **Models** : configurations et paramètres pour la logique de votre LLM
* **Prompts** : modèles de prompt versionnés

```python lines theme={null}
dataset = weave.Dataset(
    name="test-cases",
    rows=[
        {"input": "What is 2+2?", "expected": "4"},
        {"input": "What is the capital of France?", "expected": "Paris"},
    ]
)
weave.publish(dataset)
```

<div id="publish-an-object">
  ## Publier un objet
</div>

La couche de sérialisation de Weave enregistre les objets et en gère les versions.

<Tabs>
  <Tab title="Python">
    ```python lines theme={null}
    import weave
    weave.init("your-team-name/your-project-name")
    # Enregistrer une liste sous le nom 'cat-names'
    weave.publish(['felix', 'jimbo', 'billie'], 'cat-names')
    ```
  </Tab>

  <Tab title="TypeScript">
    La prise en charge de la publication en TypeScript est limitée. Tous les objets ne sont pas pris en charge.

    ```typescript twoslash lines theme={null}
    // @noErrors
    import * as weave from 'weave'

    const client = await weave.init("your-team-name/your-project-name")

    // Enregistrer un tableau sous le nom 'cat-names'
    client.publish(['felix', 'jimbo', 'billie'], 'cat-names')
    ```
  </Tab>
</Tabs>

Lorsque vous enregistrez un objet sous un nom, Weave en crée la première version s’il n’existe pas encore.

<div id="get-an-object-back">
  ## Récupérer un objet
</div>

Après publication, vous pouvez récupérer un objet stocké à l’aide de sa référence.

<Tabs>
  <Tab title="Python">
    `weave.publish()` renvoie une réf. Vous pouvez appeler `.get()` sur n’importe quelle réf. pour récupérer l’objet.

    Vous pouvez créer une réf., puis récupérer l’objet.

    ```python lines theme={null}
    weave.init("your-team-name/your-project-name")
    cat_names = weave.ref('cat-names').get()
    ```
  </Tab>

  <Tab title="TypeScript">
    ```plaintext lines theme={null}
    Cette fonctionnalité n’est pas encore disponible en TypeScript.
    ```
  </Tab>
</Tabs>

<div id="delete-an-object">
  ## Supprimer un objet
</div>

Si vous n’avez plus besoin d’une version spécifique d’un objet, vous pouvez la supprimer à l’aide de sa réf.

<Tabs>
  <Tab title="Python">
    Pour supprimer une version d'un objet, appelez `.delete()` sur la réf. de l'objet.

    ```python lines theme={null}
    weave.init("your-team-name/your-project-name")
    cat_names_ref = weave.ref('cat-names:v1')
    cat_names_ref.delete()
    ```

    L'accès à un objet supprimé renvoie une erreur. La résolution d'un objet qui référence un objet supprimé renvoie un `DeletedRef` à la place de l'objet supprimé.
  </Tab>

  <Tab title="TypeScript">
    ```plaintext theme={null}
    Cette fonctionnalité n'est pas encore disponible en TypeScript.
    ```
  </Tab>
</Tabs>

<div id="construct-object-refs">
  ## Construire des réf. d'objet
</div>

Les réf. permettent d'identifier de manière unique un objet stocké et sa version. Les sections suivantes décrivent la structure de l'URI et les différentes façons de construire une réf.

Dans Weave, une URI de réf. d'objet complète se présente comme suit :

```text theme={null}
weave:///[YOUR-TEAM-NAME]/[YOUR-PROJECT-NAME]/object/[OBJECT-NAME]:[OBJECT-VERSION]
```

* `[YOUR-TEAM-NAME]` : entité W\&B (nom d'utilisateur ou nom d'équipe)
* `[YOUR-PROJECT-NAME]` : projet W\&B
* `[OBJECT-NAME]` : nom de l'objet
* `[OBJECT-VERSION]` : soit un hachage de version, une chaîne comme `v0` ou `v1`, soit un alias comme `:latest`. Tous les objets ont l'alias `:latest`. Voir [Organize object versions with tags and aliases](#organize-object-versions-with-tags-and-aliases) pour créer vos propres alias.

Vous pouvez construire des réf. de plusieurs manières :

* `weave.ref([NAME])` : récupère la version `:latest` d'un objet. Nécessite d'appeler `weave.init(...)`.
* `weave.ref([NAME]:[VERSION])` : récupère la version spécifiée d'un objet. Nécessite d'appeler `weave.init(...)`.
* `weave.ref([FULLY-QUALIFIED-REF-URI])` : récupère l'objet situé à l'URI de réf. d'objet complète indiquée. Ne nécessite pas d'appeler `weave.init()`.

<div id="organize-object-versions-with-tags-and-aliases">
  ## Organiser les versions d’objets avec des tags et des alias
</div>

Utilisez des **tags** et des **alias** pour étiqueter des versions spécifiques de n’importe quel objet Weave, y compris `Dataset`, `Model`, `Prompt` ou tout autre objet que vous publiez avec `weave.publish`. Ces libellés fonctionnent avec n’importe quel `ObjectRef`, donc les mêmes API s’appliquent à tous les types d’objets.

* **Alias :** nom unique qui renvoie à une seule version. Vous pouvez déplacer un alias vers une autre version à tout moment, ce qui le rend utile pour des références stables comme `production` ou `staging`. Chaque objet dispose automatiquement d’un alias `:latest` qui pointe vers la version la plus récente.
* **Tag :** libellé descriptif associé à une version. Une version peut avoir plusieurs tags, et un même tag peut apparaître sur plusieurs versions. Utilisez les tags pour catégoriser et filtrer les versions, par exemple `reviewed` ou `passed-eval`.

Résolvez un alias ou une version spécifique en l’ajoutant au nom de l’objet dans une réf. :

L’exemple suivant publie deux versions d’un jeu de données, puis attribue et met à jour des tags et des alias sur chaque version.

<CodeGroup>
  ```python Python lines theme={null}
  import weave

  client = weave.init("[YOUR-TEAM-NAME]/[YOUR-PROJECT-NAME]")

  # Publier deux versions d'un objet.
  dataset_v0 = weave.publish(
      weave.Dataset(name="test-cases", rows=[{"input": "ping", "expected": "pong"}]),
  )
  dataset_v1 = weave.publish(
      weave.Dataset(name="test-cases", rows=[{"input": "ping", "expected": "pong!"}]),
  )

  # Définir des alias sur une version.
  client.set_aliases(dataset_v0, "staging")
  client.set_aliases(dataset_v1, "production")

  # Récupérer un objet à l'aide de son alias
  dataset = weave.ref("test-cases:production").get()

  # Lister tous les alias du projet.
  client.list_aliases()

  # --- Tags : libellés sur une version spécifique. ---

  # Ajouter des tags à une version.
  client.add_tags(dataset_v0, ["reviewed", "passed-eval"])
  client.add_tags(dataset_v1, ["reviewed", "needs-improvement"])

  # Obtenir les tags d'une version.
  client.get_tags(dataset_v0)  # ["passed-eval", "reviewed"]

  # Lister tous les tags distincts du projet.
  client.list_tags()
  ```

  ```plaintext TypeScript lines theme={null}
  Cette fonctionnalité n’est pas encore disponible dans le SDK TypeScript.
  ```
</CodeGroup>
