Skip to content

tool_turn

tool_turn

Faut-il envoyer les schémas d'outils avec ce tour ?

Envoyer la trousse coûte du préremplissage à chaque message : dix-sept outils pèsent près de trois mille jetons, que le modèle relit avant de répondre. Sur un « merci » c'est du temps pur perdu, et à la voix il s'entend.

Mais la retenir coûte plus cher encore : le prompt annonce des capacités, et un tour privé d'outils répond de son imagination du même ton assuré. C'est ce qui est arrivé au chemin vocal quand le filtre était une liste d'AUTORISATION — « quelles sont mes tâches aujourd'hui » n'y figurait pas, et la réponse était inventée sans que rien ne le signale.

D'où le sens de la règle : par défaut on envoie, et seule une parole reconnaissablement dépourvue de demande en est dispensée. Une liste d'autorisation devrait énumérer toutes les formulations de toutes les capacités pour être juste ; une liste de refus n'a qu'à reconnaître « ouais, merci ».

Extrait de speech/realtime/local_voice.py le 22 août 2026, quand le chat en flux a reçu ses outils à son tour et a hérité du même arbitrage.

Functions:

turn_needs_tools

turn_needs_tools(
    messages: Sequence[Mapping[str, Any]],
) -> bool

Vrai s'il faut joindre la trousse au dernier tour utilisateur.

Source code in src/diapason/core/tool_turn.py
def turn_needs_tools(messages: Sequence[Mapping[str, Any]]) -> bool:
    """Vrai s'il faut joindre la trousse au dernier tour utilisateur."""
    for message in reversed(messages):
        if message.get("role") == "user":
            contenu = str(message.get("content") or "").strip()
            if not contenu:
                return False
            return not NO_TOOL_TURN_RE.match(contenu)
    return False

text_needs_tools

text_needs_tools(texte: str) -> bool

Même arbitrage, sur un texte nu.

Source code in src/diapason/core/tool_turn.py
def text_needs_tools(texte: str) -> bool:
    """Même arbitrage, sur un texte nu."""
    propre = str(texte or "").strip()
    if not propre:
        return False
    return not NO_TOOL_TURN_RE.match(propre)