Skip to content

sources_officielles

sources_officielles

Les pages officielles qui répondent mieux qu'une recherche (21/09/2026).

« Quel temps fait-il aujourd'hui à Ottawa ? », le 20 septembre au soir : la recherche (vertical actualités, fraîcheur d'une semaine) rendait cinq articles datés sans une seule donnée météo, et le modèle le disait honnêtement — « La recherche n'a pas retourné de données météo pour Ottawa. » Honnête, mais sans réponse. Environnement Canada publie pourtant la prévision sept jours de chaque ville, en français, sur une page que web_read lit d'un coup : « Ce soir et cette nuit 3 °C Partiellement nuageux — mar 22 sep 17 °C Ensoleillé… ».

P6 du jury « recherches véridiques » : une table sujet → page officielle, lue EN COMPLÉMENT de la recherche générale, jamais à sa place, étiquetée comme telle dans les sources. Une table figée périme ; elle est courte et chaque entrée dit ce qu'elle couvre. Une ville absente de la table n'a pas de page officielle : la recherche générale reste seule, comme avant.

Classes

PageOfficielle dataclass

PageOfficielle(
    url: str, titre: str, focus: str, domaine: str
)

Ce que le code lit en complément de la recherche.

Functions:

ville_de

ville_de(question: str, ville_par_defaut: str = '') -> str

La ville nommée dans la question (clé de VILLES), sinon celle de la config, sinon "" — on ne devine pas une ville (§34 : on ne devine pas une direction non plus), et une ville inconnue n'est pas remplacée par celle de la config.

Source code in src/diapason/server/sources_officielles.py
def ville_de(question: str, ville_par_defaut: str = "") -> str:
    """La ville nommée dans la question (clé de VILLES), sinon celle de la
    config, sinon "" — on ne devine pas une ville (§34 : on ne devine pas
    une direction non plus), et une ville inconnue n'est pas remplacée par
    celle de la config."""
    plat = _plat(question)
    for cle in sorted(VILLES, key=len, reverse=True):
        if re.search(rf"(?<![\w-]){re.escape(cle)}(?![\w-])", plat):
            return cle
    if _NOM_PROPRE_MILIEU.search(question.strip()):
        return ""
    defaut = _plat(ville_par_defaut).strip()
    return defaut if defaut in VILLES else ""

page_officielle

page_officielle(
    question: str, ville_par_defaut: str = ""
) -> PageOfficielle | None

La page officielle du sujet de la question, ou None.

Source code in src/diapason/server/sources_officielles.py
def page_officielle(question: str, ville_par_defaut: str = "") -> PageOfficielle | None:
    """La page officielle du sujet de la question, ou None."""
    plat = _plat(question)
    if _METEO.search(plat):
        ville = ville_de(question, ville_par_defaut)
        if not ville:
            return None
        lat, lon, nom = VILLES[ville]
        return PageOfficielle(
            url=_METEO_GC.format(lat=lat, lon=lon),
            titre=f"{nom} — Prévision 7 jours, Environnement Canada",
            # Les fenêtres du lecteur se posent sur ces mots : la prévision du
            # soir, de la nuit et du lendemain avant le reste de la page.
            focus="ce soir cette nuit demain prévisions émises " + question,
            domaine="meteo.gc.ca",
        )
    if _TAUX_DIRECTEUR.search(plat):
        return PageOfficielle(
            url=_BANQUE_DU_CANADA,
            titre="Taux directeur — Banque du Canada",
            focus="taux cible modification date " + question,
            domaine="banqueducanada.ca",
        )
    return None

entete_officielle

entete_officielle(page: PageOfficielle, ref: int) -> str

L'en-tête numéroté d'une page officielle, datée du jour de sa lecture : une page vivante n'a pas de date de publication qui compte.

Source code in src/diapason/server/sources_officielles.py
def entete_officielle(page: PageOfficielle, ref: int) -> str:
    """L'en-tête numéroté d'une page officielle, datée du jour de sa lecture :
    une page vivante n'a pas de date de publication qui compte."""
    return (
        f"[{ref}] {page.titre}{page.domaine} · source officielle · "
        f"consultée le {date.today().isoformat()}"
    )