Skip to content

promesse

promesse

Le filet anti-promesse — partagé entre la voix et le chat.

Né à la voix (23 août 2026) : après un dialogue de clarification, le tour répondait « d'accord, je cherche du R&B sur YouTube pour toi » — dit, rien fait. Étendu au chat et AFFINÉ (Atlas, 24 août 2026) : le filet original attrapait aussi les OFFRES (« veux-tu que je cherche ? », « je peux le faire si tu veux ») — or une offre attend une réponse, elle ne promet rien. L'analyse se fait PHRASE PAR PHRASE : une question ne somme jamais, une offre conditionnelle non plus.

Deux régimes : - oral (défaut) : le filet historique, plus l'exclusion des offres ; - ecrit=True (chat) : s'y ajoutent les verbes de discours écrits (« je note que… »), le « c'est fait » d'instruction (« quand c'est fait, dis-le-moi »), et l'abandon de « un instant » (prose courante) et de « est ouverte/fermée » (le cliché du bureau rend « Safari est ouvert » parfaitement légitime).

Functions:

est_une_promesse_sans_acte

est_une_promesse_sans_acte(
    texte: str, *, ecrit: bool = False
) -> bool

Ce texte annonce-t-il une action sans l'avoir faite ?

Phrase par phrase : une question ne somme jamais, une offre non plus.

Source code in src/diapason/core/promesse.py
def est_une_promesse_sans_acte(texte: str, *, ecrit: bool = False) -> bool:
    """Ce texte annonce-t-il une action sans l'avoir faite ?

    Phrase par phrase : une question ne somme jamais, une offre non plus.
    """
    regex = _PROMESSE_ECRITE_RE if ecrit else PROMESSE_SANS_ACTE_RE
    for brut in _PHRASES_RE.findall(texte or ""):
        phrase = brut.strip()
        if not phrase or phrase.endswith("?"):
            continue
        if _OFFRE_RE.search(phrase):
            continue
        if ecrit:
            if _DISCOURS_ECRIT_RE.search(phrase):
                continue
            if _FAIT_CONDITIONNEL_RE.search(phrase):
                # « quand c'est fait, préviens-moi » : le c'est fait est une
                # instruction à l'usager, pas une proclamation.
                phrase = _C_EST_FAIT_RE.sub("", phrase)
        if regex.search(phrase):
            return True
    return False