> ## 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.

# Tool

> La classe Tool enregistre une exécution d’outil sous la forme d’un span execute_tool.

```python theme={"system"}
class Tool(BaseModel): ...
```

Une exécution d’outil. Correspond à un span OTel execute\_tool.

`arguments` et `result` utilisent l’annotation `JSONString` :
les appelants peuvent attribuer un dict, une liste ou un scalaire, et le SDK l’encode
en JSON lors de la construction ou de l’attribution. La valeur stockée est toujours une
string, conformément au format de transmission défini par les conventions sémantiques GenAI.

`Tool` est un modèle Pydantic. Vous pouvez définir chacun des champs ci-dessous comme argument nommé lors de sa construction.

`Tool` est un gestionnaire de contexte et peut être utilisé dans une instruction `with`.

<h2 id="fields">
  Champs
</h2>

| Champ | Type | Par défaut |
| - | - | - |
| `name` | `str` | `''` |
| `arguments` | `JSONString` | `''` |
| `result` | `JSONString` | `''` |
| `tool_call_id` | `str` | `''` |
| `tool_type` | `str` | `''` |
| `tool_description` | `str` | `''` |
| `tool_definitions` | `str` | `''` |
| `duration_ms` | `int` | `0` |
| `started_at` | `Union[datetime, None]` | `None` |
| `ended_at` | `Union[datetime, None]` | `None` |

<h2 id="methods">
  Méthodes
</h2>

<h3 id="end">
  end
</h3>

```python theme={"system"}
def end() -> None: ...
```

<h3 id="start">
  start
</h3>

```python theme={"system"}
def start() -> Self: ...
```

Démarre ce span une seule fois ; l’entrée dans le gestionnaire de contexte emprunte le même chemin.

<h3 id="record_error">
  record\_error
</h3>

```python theme={"system"}
def record_error(error: BaseException) -> Self: ...
```

Enregistre un échec sans terminer le span ; appelez `end()` le moment venu.

<h3 id="set_attributes">
  set\_attributes
</h3>

```python theme={"system"}
def set_attributes(attributes: dict[str, Any]) -> Self: ...
```

Appose des attributs OTel arbitraires sur ce span.

Transmettez un dict, que vous ayez une seule clé ou plusieurs ; pour une seule clé,
utilisez `span.set_attributes({"weave.tag": "value"})`. Reproduit la méthode
`Span.set_attributes` d'OTel.

Doit être appelé après le démarrage du span par une fabrique `start_*`, par `start()` ou par `with`,
et avant sa fin. En dehors de cette fenêtre, l'appel est sans effet (no-op) et
journalise un avertissement. Pour l'ingestion par lots, renseignez directement les champs déclarés de l'objet
et transmettez-le à `log_turn` / `log_conversation`.
