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

# Extension Pi

> Tracez dans Weave les sessions agentiques, les appels LLM et les exécutions d’outils de Pi.

export const AgentLensBanner = ({href}) => <Tip>
    <strong>This workflow is also available in CoreWeave Agent Lens.</strong> Agent Lens is the Forge experience built for tracing, monitoring, and analyzing AI agents, with automated insights into agent failures and user intents. It uses the same trace data as Weights & Biases Weave, so the traces you already send appear there with nothing to migrate.{' '}
    <a href={href || '/products/agent-lens'}>{href ? 'See how to do this in Agent Lens' : 'Learn about Agent Lens'}</a>.
  </Tip>;

<AgentLensBanner href="/fr/products/agent-lens/integrations/pi" />

[Pi](https://pi.dev/) est un agent de développement qui s’exécute dans le terminal. Weave trace automatiquement les sessions Pi, les appels LLM et les exécutions d’outils grâce à l’intégration `createOtelExtension`, conforme aux [conventions sémantiques GenAI](https://opentelemetry.io/docs/specs/semconv/gen-ai/). Cette page explique comment activer le traçage Weave dans une application Pi afin d’observer le comportement de l’agent, de déboguer les runs et d’analyser l’utilisation des jetons et les coûts.

<Warning>
  Cette intégration envoie les données de session Pi vers Weave. Ces données peuvent inclure les prompts des utilisateurs, les réponses du modèle, les entrées et sorties des outils, le contenu des fichiers lus par les outils Pi, les commandes shell et leur sortie, ainsi que les URL récupérées et le contenu des pages.

  L’intégration n'effectue aucune suppression des données personnelles (PII) ni aucun masquage des données sensibles. Si vos exigences de sécurité ou de conformité ne vous permettent pas d'envoyer ces données vers Weave, n'activez pas le traçage Weave dans votre application Pi.
</Warning>

<h2 id="prerequisites">
  Prérequis
</h2>

* [Node.js](https://nodejs.org/) (v18 ou version ultérieure).
* Un compte CoreWeave Forge et une [clé API](https://forge.coreweave.com/settings#apikeys) définie dans la variable d’environnement `WANDB_API_KEY`.

<Note>
  Pi est un framework TypeScript et Node.js qui n’a pas d’équivalent en Python. Pi nécessite le système de modules ESM. Votre projet doit utiliser `"type": "module"` dans `package.json`, ou compiler le TypeScript en ESM. Les projets CommonJS génèrent une erreur. Pour en savoir plus sur la configuration d’un projet ESM, consultez [Intégration du SDK TypeScript](/fr/products/wandb/weave/guides/integrations/js#set-up-an-esm-project).
</Note>

<h2 id="install-packages">
  Installer les packages
</h2>

Installez Weave, Pi et les définitions de types Node en tant que dépendances locales du projet :

```bash lines theme={"system"}
npm install weave @earendil-works/pi-coding-agent
npm install --save-dev @types/node tsx typescript
```

<h2 id="trace-a-pi-prompt-and-response">
  Tracer un prompt et une réponse Pi
</h2>

L’exemple suivant présente la configuration minimale requise pour tracer un seul prompt et sa réponse avec Pi. Appelez `weave.init()` avant de créer votre session d’agent, puis passez `createOtelExtension()` comme fabrique d’extensions. Weave trace le cycle de vie complet de l’agent : la conversation, chaque cycle prompt-réponse (`invoke_agent`), chaque appel LLM (`chat`) et chaque exécution d’outil (`execute_tool`). `SessionManager.inMemory()` génère automatiquement l’ID de session.

```typescript lines twoslash theme={"system"}
// @noErrors
import {init, createOtelExtension} from 'weave';

import {
  createAgentSession,
  DefaultResourceLoader,
  SessionManager,
  getAgentDir,
} from '@earendil-works/pi-coding-agent';

async function main() {
  // 1. Initialiser Weave. Cette étape configure le TracerProvider OTEL qui pointe vers votre
  //    projet Weave. Tous les spans créés par createOtelExtension() y sont
  //    automatiquement exportés.
  await init('[YOUR-TEAM]/[YOUR-PROJECT]');

  // 2. Créer un chargeur de ressources et y injecter l’extension OTEL de Weave.
  //    Le chargeur de ressources fournit l’environnement d’exécution Pi et le
  //    cycle de vie des extensions utilisés pour le traçage de l’activité de l’agent.
  const resourceLoader = new DefaultResourceLoader({
    cwd: process.cwd(),
    agentDir: getAgentDir(),
    extensionFactories: [createOtelExtension({})],
  });

  await resourceLoader.reload();

  // 3. Démarrer la session de l’agent
  const {session} = await createAgentSession({
    resourceLoader,
    sessionManager: SessionManager.inMemory(),
  });

  // 4. Lier les extensions. Cette étape déclenche l’événement session_start afin que l’adaptateur OTEL
  //    crée le span racine de la conversation et capture l’ID de celle-ci.
  await session.bindExtensions({});

  // 5. Diffuser en continu la sortie de l’assistant vers stdout
  session.subscribe(event => {
    if (
      event.type === 'message_update' &&
      event.assistantMessageEvent.type === 'text_delta'
    ) {
      process.stdout.write(event.assistantMessageEvent.delta);
    }
  });

  // 6. Envoyer un prompt et attendre la réponse complète
  await session.prompt('What files are in the current directory?');
  console.log();
}

main();
```

Compilez et exécutez le script avec `tsx`, en remplaçant `[FILENAME]` par le nom de votre fichier TypeScript :

```bash theme={"system"}
npx tsx [FILENAME].ts
```

Lorsque vous exécutez votre code, vos traces s’affichent dans l’onglet **Agents** de votre projet Weave, à l’adresse `https://forge.coreweave.com/wandb/[YOUR-TEAM]/[YOUR-PROJECT]/weave/agents`. Weave capture les sessions Pi, les appels LLM et les exécutions d’outils pour chaque run de votre application.

<h3 id="next-steps">
  Étapes suivantes
</h3>

Pour transformer cet exemple en conversation sur plusieurs tours, ajoutez d’autres prompts. Weave trace chaque appel à `session.prompt()` sous la forme d’un span `invoke_agent` distinct, tous imbriqués dans un même span racine. L’agent conserve automatiquement le contexte d’un prompt à l’autre.

Après l’exécution du code, l’onglet **Agents** affiche la chronologie complète de tous les tours de conversation, avec les appels LLM imbriqués, les exécutions d’outils, l’utilisation des jetons et le coût.
