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

# Persistance des sandboxes héritée

export const SandboxConfigHint = () => {
  if (typeof document === "undefined") {
    return null;
  } else {
    return <Note>Before running the example code in this document, please ensure you have properly configured environment variables. For details, please refer to <a href="/docs/fr/guides/sandbox-your-first-agent-sandbox#configure-environment-variables">Configure Environment Variables</a>.</Note>;
  }
};

<Warning>
  Cette page héritée est conservée pour les utilisateurs qui utilisent encore la gamme de SDK 1.x ou bêta. Les nouvelles intégrations avec le SDK 2.x doivent suivre la documentation Sandbox actuelle.
</Warning>

La persistance de sandbox vous permet de mettre votre sandbox en pause et de la reprendre plus tard dans le même état que celui où elle se trouvait lorsque vous l’avez mise en pause.

Cela inclut non seulement l’état du système de fichiers de la sandbox, mais aussi la mémoire de la sandbox. Cela signifie tous les processus en cours d’exécution, les variables chargées, les données, etc.

<SandboxConfigHint />

<Warning>
  Veuillez noter :

  * Il faut environ 4 secondes par 1 Go de RAM pour mettre la sandbox en pause.
  * Il faut environ 1 seconde pour reprendre la sandbox.
  * Les données d’une sandbox mise en pause sont conservées de manière permanente jusqu’à ce que vous appeliez explicitement la méthode `kill`.
</Warning>

## Mettre une sandbox en pause

Lorsque vous mettez une sandbox en pause, le <Link href="/docs/fr/guides/sandbox-filesystem">système de fichiers</Link> et l’état de la mémoire de la sandbox sont enregistrés. Cela inclut tous les fichiers du système de fichiers de la sandbox ainsi que tous les processus en cours d’exécution, les variables chargées, les données, etc.

<CodeGroup>
  ```js JavaScript & TypeScript icon="js" theme={"system"}
  import { Sandbox } from 'novita-sandbox/code-interpreter'

  const sandbox = await Sandbox.create()
  console.log('Sandbox created', sandbox.sandboxId)

  // Pause the sandbox.
  // You can save the sandbox ID in your database
  // to resume the sandbox later
  const result = await sandbox.betaPause()
  console.log('Sandbox paused', sandbox.sandboxId, result)

  await sandbox.kill()
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.code_interpreter import Sandbox

  sandbox = Sandbox.create()
  print('Sandbox created', sandbox.sandbox_id)

  # You can save the sandbox ID in your database
  # to resume the sandbox later
  sandbox.beta_pause()
  print('Sandbox paused', sandbox.sandbox_id)

  sandbox.kill()
  ```
</CodeGroup>

<Warning>
  **Remarque : brève période de transition après la mise en pause**

  La mise en pause est une opération asynchrone. Après l’appel de `beta_pause()`, la sandbox se met en pause en arrière-plan.

  Pendant cette période de transition, avant que la mise en pause ne soit terminée :

  * **Opérations en lecture seule** (par exemple, `get_info`, `list`) : reviennent normalement ; le statut est affiché comme `paused`
  * **Opérations d’exécution** (par exemple, `commands.run`, accès aux URL publiques de la sandbox) : renverront des erreurs — c’est le comportement attendu. Attendez que la mise en pause soit terminée avant de réessayer (le temps varie selon la taille de la mémoire, voir la remarque ci-dessus)
  * **Opération de reprise** (`connect`) : attend automatiquement que la mise en pause soit terminée avant de reprendre la sandbox — aucune interrogation manuelle ni nouvelle tentative n’est nécessaire
</Warning>

## Reprendre une sandbox

Lorsque vous reprenez une sandbox, elle se trouve dans le même état que celui où elle était lorsque vous l’avez mise en pause.
Cela signifie que tous les fichiers du système de fichiers de la sandbox seront restaurés et que tous les processus en cours d’exécution, les variables chargées, les données, etc. seront restaurés.

<Tip>
  Si vous appelez `connect()` immédiatement après avoir appelé `beta_pause()`, `connect()` attend automatiquement que la mise en pause soit terminée avant de reprendre la sandbox. Aucune interrogation manuelle n’est requise — l’ensemble du processus est transparent pour l’appelant.
</Tip>

<Warning>
  Si vous essayez de reprendre une sandbox qui a été détruite ou qui n’existe pas :

  * Le SDK JavaScript lèvera `NotFoundError`
  * Le SDK Python lèvera `NotFoundException`
</Warning>

<CodeGroup>
  ```js JavaScript & TypeScript icon="js" theme={"system"}
  import { Sandbox } from 'novita-sandbox/code-interpreter'

  const sandbox = await Sandbox.create()
  console.log('Sandbox created', sandbox.sandboxId)

  // Pause the sandbox.
  // You can save the sandbox ID in your database
  // to resume the sandbox later
  const result = await sandbox.betaPause()
  console.log('Sandbox paused', sandbox.sandboxId, result)

  // Resume the sandbox.
  // Even if called before pausing completes, connect() automatically waits for the pause to finish.
  const resumedSandbox = await sandbox.connect()
  console.log('Sandbox resumed', resumedSandbox.sandboxId)

  await sandbox.kill()
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.code_interpreter import Sandbox

  sandbox = Sandbox.create()
  print('Sandbox created', sandbox.sandbox_id)

  # Pause the sandbox.
  # You can save the sandbox ID in your database
  # to resume the sandbox later
  sandbox.beta_pause()
  print('Sandbox paused', sandbox.sandbox_id)

  # Resume the sandbox.
  # Even if called before pausing completes, connect() automatically waits for the pause to finish.
  connectedSandbox = sandbox.connect()
  print('Sandbox resumed', connectedSandbox.sandbox_id)

  sandbox.kill()
  ```
</CodeGroup>

## Lister les sandboxes mises en pause

Vous pouvez lister toutes les sandboxes mises en pause en appelant la méthode `Sandbox.list` et en fournissant le paramètre de requête `state`.
Vous trouverez plus d’informations sur l’utilisation de la méthode dans [Lister les sandboxes](/docs/fr/guides/sandbox-list).

<CodeGroup>
  ```js JavaScript & TypeScript icon="js" theme={"system"}
  import { Sandbox, SandboxInfo } from 'novita-sandbox/code-interpreter'

  const sandbox = await Sandbox.create()

  // List all paused sandboxes.
  const paginator = Sandbox.list({ query: { state: ['paused'] } })

  // Get all paused sandboxes.
  const sandboxes: SandboxInfo[] = []
  while (paginator.hasNext) {
    const items = await paginator.nextItems()
    sandboxes.push(...items)
  }

  console.log('all paused sandboxes', sandboxes)

  await sandbox.kill()
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.code_interpreter import Sandbox, SandboxQuery, SandboxState, SandboxInfo

  sandbox = Sandbox.create()

  sandbox.beta_pause()
  print('Sandbox paused', sandbox.sandbox_id)

  # List all paused sandboxes.
  paginator = Sandbox.list(query=SandboxQuery(state=[SandboxState.PAUSED]))

  # Get all paused sandboxes.
  sandboxes: list[SandboxInfo] = []
  while paginator.has_next:
    items = paginator.next_items()
    sandboxes.extend(items)

  print('all paused sandboxes', sandboxes)

  sandbox.kill()
  ```
</CodeGroup>

## Supprimer des sandboxes mises en pause

Vous pouvez supprimer des sandboxes mises en pause en appelant la méthode `kill` sur l’instance de sandbox.

<CodeGroup>
  ```js JavaScript & TypeScript icon="js" theme={"system"}
  import { Sandbox } from 'novita-sandbox/code-interpreter'

  const sandbox = await Sandbox.create()
  console.log('Sandbox created', sandbox.sandboxId)

  // Pause the sandbox.
  await sandbox.betaPause()

  // Kill the paused sandbox.
  await sandbox.kill()
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.code_interpreter import Sandbox

  sandbox = Sandbox.create()

  # Pause the sandbox.
  sandbox.beta_pause()

  # Kill the paused sandbox.
  sandbox.kill()
  ```
</CodeGroup>

## Délai d’expiration de la sandbox

Lorsque vous reprenez une sandbox, le délai d’expiration de la sandbox est réinitialisé au délai d’expiration par défaut d’une sandbox : 5 minutes.

Vous pouvez transmettre un délai d’expiration personnalisé à la méthode `Sandbox.connect()` comme ceci :

<CodeGroup>
  ```js JavaScript & TypeScript icon="js" theme={"system"}
  import { Sandbox } from 'novita-sandbox/code-interpreter'

  const sandbox = await Sandbox.create()

  const connectedSandbox = await Sandbox.connect(sandbox.sandboxId, { timeoutMs: 60 * 1000 })
  console.log('Sandbox connected', connectedSandbox.sandboxId)

  await sandbox.kill()
  ```

  ```python Python icon="python" theme={"system"}
  from novita_sandbox.code_interpreter import Sandbox

  sandbox = Sandbox.create()

  connectedSandbox = Sandbox.connect(sandbox.sandbox_id, timeout=60) # 60 seconds
  print('Sandbox connected', connectedSandbox.sandbox_id)

  sandbox.kill()
  ```
</CodeGroup>

## Réseau

Si vous avez un service (par exemple un serveur) en cours d’exécution à l’intérieur de votre sandbox et que vous mettez la sandbox en pause, le service ne sera pas accessible depuis l’extérieur et tous les clients seront déconnectés.
Si vous reprenez la sandbox, le service sera de nouveau accessible, mais vous devrez reconnecter les clients.
