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

# Prise en charge d’Interleaved Thinking

> **Dernière mise à jour** : 2025-12-03 <br />
> **Statut** : Pris en charge (compatible OpenAI)

## 1. Présentation

**Interleaved Thinking** est un cadre de raisonnement avancé qui permet aux modèles d’effectuer des étapes de raisonnement explicites entre les appels d’outils.

Les modèles avec Interleaved Thinking peuvent :

* Réfléchir à l’environnement actuel et aux sorties des outils
* Décider de l’action suivante en fonction du raisonnement mis à jour
* Maintenir une chaîne de raisonnement continue sur plusieurs invocations d’outils
* Fournir une pensée multi-étapes transparente et inspectable via `reasoning_details` ou `reasoning_content`

Cette capacité transforme l’appel de fonctions traditionnel en **utilisation d’outils au niveau agent**, rendant les workflows complexes plus précis, fiables et sensibles au contexte.

Novita prend entièrement en charge Interleaved Thinking pour tous les modèles qui exposent nativement des flux de raisonnement (par exemple, MiniMax-M2 et d’autres modèles de raisonnement compatibles OpenAI).

## 2. Concepts clés

### 2.1 Entrelacement

Au lieu d’exécuter une seule phase de raisonnement suivie d’un appel d’outil, le modèle effectue :

```BASH theme={"system"}
Reason → Tool Call → Observe → Reason → Tool Call → ...
```

Cela permet au modèle d’ajuster sa stratégie dynamiquement en fonction des sorties d’outils précédentes.

### 2.2 Détails du raisonnement (`reasoning_details`)

Pour certains modèles, le contenu de la pensée du modèle sera renvoyé sous la forme d’une structure séparée :

```JSON theme={"system"}
"reasoning_details": [
  {
    "type": "reasoning.text",
    "format": "openai-responses-v1",
    "text": "Model’s step-by-step reasoning..."
  }
]
```

Pour ces modèles, Novita prend en charge le renvoi de ce champ en modes streaming et non-streaming.

### 2.3 Exigence de mémoire conversationnelle

Pour maintenir la continuité du raisonnement : vous **devez ajouter la réponse complète du modèle**, y compris `reasoning_details`, `tool_calls` et `content`, aux `messages` suivants.

Ne pas préserver la chaîne peut entraîner :

* Une utilisation incorrecte des outils
* Une perte du contexte de raisonnement
* Des appels d’outils répétés ou circulaires
* Une fiabilité réduite

Cette exigence reflète les API de raisonnement d’OpenAI.

## 3. Comportement de l’API

### 3.1 Format de requête

Aucune modification n’est requise côté utilisateur.
Interleaved Thinking fonctionne avec l’API Chat Completions standard compatible OpenAI.

### 3.2 Format de réponse

Le modèle peut renvoyer les champs suivants :

* `reasoning_content` : contenu de pensée original
* `reasoning_details` : segments de raisonnement structurés, ce champ est facultatif
* `tool_calls` : plan d’invocation d’outil
* `content` : sortie en langage naturel

Ceux-ci étendent le format OpenAI standard.

## 4. Exemple de requête (MiniMax-M2)

```JSON theme={"system"}
{
  "model": "minimax/minimax-m2",
  "messages": [
    {
      "role": "user",
      "content": "How's the weather in San Francisco?"
    },
    {
      "role": "assistant",
      "name": "MiniMax AI",
      "content": "",
      "tool_calls": [
        {
          "id": "call_function_asqvfevfc8af_1",
          "type": "function",
          "function": {
            "name": "get_weather",
            "arguments": "{\"location\": \"San Francisco, US\"}"
          }
        }
      ],
      "reasoning_details": [
        {
          "type": "reasoning.text",
          "id": "reasoning-text-1",
          "format": "openai-responses-v1",
          "index": 0,
          "text": "The user is asking about the weather in San Francisco..."
        }
      ]
    },
    {
      "role": "tool",
      "tool_call_id": "call_function_asqvfevfc8af_1",
      "content": "24℃, sunny"
    }
  ],
  "stream": true,
  "reasoning_split": true,
  "max_tokens": 1024,
  "temperature": 0.7,
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Get weather for a specific location",
        "parameters": {
          "type": "object",
          "properties": {
            "location": { "type": "string" }
          },
          "required": ["location"]
        }
      }
    }
  ]
}
```

## 5. Exemple de réponse (non-streaming)

```JSON theme={"system"}
{
  "id": "07a4dedfdb1498b045498dfd42497639",
  "object": "chat.completion",
  "created": 1764303147,
  "model": "MiniMax",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "",
        "name": "MiniMax",
        "tool_calls": [
          {
            "index": 0,
            "id": "call_function_9w7wq1j9zmpl_1",
            "type": "function",
            "function": {
              "name": "get_weather",
              "arguments": "{\"location\": \"ShangHai\"}"
            }
          }
        ],
        "reasoning_content": "The user asked for Shanghai weather...",
        "reasoning_details": [
          {
            "type": "reasoning.text",
            "text": "The user is asking about the weather in Shanghai...",
            "id": "reasoning-text-1",
            "format": "openai-responses-v1",
            "index": 0
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ]
}
```

## 6. Exemple de réponse en streaming

```JSON theme={"system"}
{
  "id": "664c5ad870c1888fbcbd267d9829e354",
  "object": "chat.completion.chunk",
  "created": 1764303504,
  "model": "minimax-m2",
  "choices": [
    {
      "index": 0,
      "delta": {
        "role": "assistant",
        "reasoning_content": "...\n\nThe user has specifically asked...",
        "reasoning_details": [
          {
            "type": "reasoning.text",
            "text": ".\n\nThe user has specifically asked...",
            "id": "reasoning-text-1",
            "format": "openai-responses-v1",
            "index": 0
          }
        ]
      },
      "finish_reason": null
    }
  ]
}
```

## 7. Notes pour les développeurs

### 7.1 Modèles prenant en charge Interleaved Thinking

Tous les modèles exposant `reasoning_details` via des API compatibles OpenAI, notamment :

* MiniMax-M2
* Série Novita Reasoning (à venir)
* Autres modèles partenaires avec raisonnement activé

### 7.2 Tarification

La facturation est basée sur les jetons de raisonnement, conformément aux règles de tarification du modèle.
`reasoning_details` augmentera l’utilisation de jetons.

### 7.3 Gestion des erreurs

Vous pouvez rencontrer :

* Des paramètres d’outil manquants
* Des appels d’outils récursifs ou répétés
* Des hypothèses incorrectes dans la phase de raisonnement

Assurez-vous que votre application valide les arguments des outils et gère les erreurs du modèle avec élégance.

## 8. Bonnes pratiques

**✓ Incluez toujours les messages complets du modèle dans la requête suivante**

Incluez :

* `content`
* `tool_calls`
* `reasoning_details`

**✓ Activez le streaming pour les raisonnements à longue chaîne**

Le streaming permet au client de :

* Surveiller le processus de raisonnement
* Détecter tôt les plans d’outils incorrects
* Fournir un retour utilisateur plus rapide

**✓ Combinez avec des machines à états côté serveur pour plus de stabilité**

Pour les systèmes de production, nous recommandons d’associer Interleaved Thinking à des garde-fous déterministes, par exemple :

* Validateurs de paramètres
* Bac à sable d’exécution
* Protections contre la récursion maximale

## 9. Résumé

Interleaved Thinking améliore considérablement le raisonnement multi-étapes et la fiabilité de l’utilisation des outils :

* Raisonnement étape par étape transparent et inspectable
* Planification adaptative entre les invocations d’outils
* Meilleure rétention du contexte dans les workflows longs
* Entièrement compatible avec l’API Chat Completions de style OpenAI

Novita continuera d’étendre la prise en charge des modèles de raisonnement avancés, apportant une intelligence de niveau agent à la couche API.
