---
title: "Plugin de chat"
description: "Conversations à un ou plusieurs tours contre n'importe quel point de terminaison compatible avec Ollama."
---

Le plugin de chat est la pièce la plus simple du module IA. Il encapsule l'API `/api/chat` d'Ollama avec un constructeur fluide, une mémoire de conversation, un basculement automatique vers un modèle de sauvegarde et un raccourci `ask()` en une seule étape.

## Vue d'ensemble de l'API
```php
$ai   = new \Nibiru\Module\Ai\Ai();
$chat = $ai->chat();

$chat->system('Be terse.');           // optional system prompt
$chat->model('qwen2.5-coder:14b');    // override the configured model
$chat->temperature(0.2);              // override config
$chat->maxTokens(512);                // override config

$chat->user('Hello');                 // append a user message
$chat->assistant('Hi.');              // append an assistant message (rare)

$reply = $chat->complete();           // run the call, return text
$reply = $chat->ask('How are you?');  // = ->user(...)->complete()

$chat->reset();                       // clear messages, keep model + system
$chat->history();                     // [{role, content}, …]
```
## Un coup unique
```php
echo (new \Nibiru\Module\Ai\Ai())
    ->chat()
    ->ask('In one sentence, what does Form::create() do?');
```
## Multiturn
```php
$chat = $ai->chat();

$chat->user('Name three Nibiru singletons.');
$singletons = $chat->complete();        // appended to history

$chat->user('What does the second one do?');
$detail = $chat->complete();            // model has full context
```
## Remplacement du modèle et du style par appel
```php
$german = $ai->chat()
    ->system('Answer in German. Be precise.')
    ->model('qwen2.5-coder:14b')
    ->temperature(0.1)
    ->ask('Wie definiere ich einen Controller?');
```
## Mise en rechute automatique

Si `chat.model` (par exemple `nibiru-coder:1.0`) n'est pas sur le serveur Ollama, le plugin relance l'appel avec `chat.fallback_model` (par exemple `qwen2.5-coder:14b`). Cela assure que votre application continue de fonctionner pendant que vous construisez la fine-tune.
```ini
[AI]
chat.model          = "nibiru-coder:1.0"
chat.fallback_model = "qwen2.5-coder:14b"
```
## Passage à un autre fournisseur

Par défaut : Ollama. Pour utiliser Anthropic Claude comme backend :
```ini
[AI]
chat.provider       = "anthropic"
anthropic.api_key   = "sk-ant-..."
anthropic.model     = "claude-haiku-4-5-20251001"
```
Le plugin de conversation ne fournit pas encore le transport Anthropic dans le module du cadre — pour l'instant, le modèle de `scripts/lib/providers.mjs` sur le site des documents est la référence. (Consultez le [Roadmap](/en/ai/roadmap/).)

## Un modèle pratique : le chat en tant qu'action
```php
namespace Nibiru;
use Nibiru\Adapter\Controller;
use Nibiru\Module\Ai\Ai;

class supportController extends Controller
{
    public function askAction(): void {
        View::forwardToJsonHeader();
        $q = trim($this->getPost('question', ''));
        if ($q === '') {
            View::assign(['data' => ['error' => 'question required']]);
            return;
        }
        $reply = (new Ai())->chat()
            ->system('You are the Nibiru support assistant. Be brief.')
            ->ask($q);
        View::assign(['data' => ['answer' => $reply]]);
    }

    public function pageAction(): void {}
    public function navigationAction(): void {
        JsonNavigation::getInstance()->loadJsonNavigationArray();
    }
}
```
Six lignes plus du code standard, et vous avez un point d'entrée IA appelable via AJAX basé sur votre propre Ollama.

## Traps courants

- **Oublier `complete()`.** Le constructeur fluide ne fait rien jusqu'à ce que `complete()` ou `ask()` soit appelé.
- **Appeler `assistant()` entre les tours de l'utilisateur.** C'est là pour relire une conversation enregistrée, pas pour un usage normal.
- **Longues conversations.** Chaque tour renvoie l'ensemble de l'historique. Utilisez `reset()` ou découpez `history()` lorsque vous n'avez plus besoin du contexte plus ancien.
- **Définir la température trop basse.** 0 rend le modèle rigide ; 0,3–0,5 est le point d'équilibre idéal pour les réponses techniques.
