DTLarchive — Manuel de référence v2.2-5

Référence fonctionnelle et technique du moteur local d'indexation, de recherche et de capitalisation des archives ChatGPT.

versionv2.2-5date14 juillet 2026plateformeWindowsruntimePython 3.14languesfr / enlicenceMIT

Préface

Ce manuel décrit la structure, les formats, les invariants et les interfaces internes de DTLarchive 2.2-5. Il constitue une référence d'architecture et de données. Il ne décrit volontairement ni parcours utilisateur, ni procédure de lancement, ni scénario pas à pas.

DTLarchive transforme des exports de conversations ChatGPT en un corpus local indexé. Son objectif est de rendre les connaissances contenues dans ces archives interrogeables, contextualisables et réutilisables par des traitements ultérieurs, sans dépendance à un service distant.

Audience visée

Le document s'adresse aux développeurs, mainteneurs, responsables de données et intégrateurs qui doivent comprendre le comportement du moteur, contrôler ses sorties ou raccorder ses résultats à d'autres outils de capitalisation des connaissances.

Principes structurants

Portée analytique : les « titres principaux » du rapport sont issus des titres des conversations classées par pertinence. Ils ne constituent ni un clustering, ni une extraction thématique sémantique.

Architecture

Vue d'ensemble

L'architecture sépare l'importation persistante, la présélection par index plein texte et l'analyse exacte des conversations candidates. Cette séparation évite de relire et de recalculer l'ensemble du corpus à chaque recherche.

Composants

ComposantResponsabilité
DTLarchive.pyOrchestration, lecture des exports, analyse lexicale, calcul de pertinence, génération des sorties et interface console.
dtlarchive_index.pySchéma SQLite, import incrémental, déduplication, stockage des messages et interrogation FTS5.
dtlarchive_search.pyFaçade de sélection des conversations candidates et comptage du corpus examiné.
dtlarchive_i18n.pyCatalogue FR/EN, langue active, interpolation et pluriels.
DTLarchive.specDescription de construction de l'exécutable autonome.

Chaîne de traitement

PhaseEntréeSortieInvariant
RésolutionFichiers ou dossiersChemins absolus uniquesOrdre stable par chemin.
ImportationJSON ChatGPTSources, conversations, messages, FTSTransaction par source.
PrésélectionTermes, rôles, datesIdentifiants candidatsFTS réduit le corpus sans produire le résultat final.
AnalyseConversations candidatesMiningResultVérification exacte des groupes et exclusions.
PublicationRésultats triésJSON et HTMLLes messages archivés ne sont pas modifiés.

Organisation des fichiers

Sources

DTLarchive.pydtlarchive_index.pydtlarchive_search.pydtlarchive_i18n.py

Implémentation du moteur, de l'index, de la sélection et du catalogue linguistique.

Données persistantes

DTLarchive-index.sqlite

Base locale regroupant empreintes, provenance, conversations, messages et index FTS5.

Sorties

DTLarchive-output/logs/

Résultats structurés, rapport principal, copies HTML des conversations et journal de diagnostic.

Données et index

Format source ChatGPT

Le lecteur accepte un tableau de conversations ou un objet conversation unique. Chaque conversation exploitable possède un dictionnaire mapping. La branche courante est reconstruite en remontant depuis current_node par les relations parent, puis inversée pour restituer l'ordre chronologique.

Seuls les messages dont le rôle vaut user ou assistant et dont le contenu textuel n'est pas vide sont conservés. Le texte provient de content.parts ou, à défaut, de content.text. Si la branche courante ne produit aucun message, un parcours de repli trie les messages exploitables par date.

Modèles internes

TypeChampsRôle
Messageid, role, text, create_timeMessage extrait d'une conversation.
Conversationsource_file, id, title, create_time, update_time, messagesUnité d'analyse complète.
QueryTermtext, excluded, groupTerme lexical et appartenance à un groupe alternatif.
MiningResultsource, identifiants, date, mots-clés, compteurs, score, rôles, contextes, URLRésultat sérialisable et affichable.
IndexUpdateimported_files, unchanged_files, imported_conversationsBilan d'une synchronisation de l'index.
SearchSelectionconversations, examined_count, candidate_countRésultat de présélection avant analyse exacte.

Schéma SQLite

ObjetCléContenu
metadatakeyVersion du schéma de l'index.
sourcesid / path uniqueTaille, date de modification, SHA-256 et date d'indexation.
conversationsidTitre, dates, horodatage de contenu et nombre de messages.
messagesid / conversation + ordinalIdentifiant externe, rôle, date et texte dans l'ordre original.
source_conversationssource + conversationRelation plusieurs-à-plusieurs de provenance.
search_ftsFTS5Identifiant, rôle et texte indexé avec unicode61 remove_diacritics 2.

Les clés étrangères sont actives et le journal SQLite utilise le mode WAL. Les index relationnels portent sur l'ordre des messages et les dates de conversation.

Importation incrémentale et déduplication

Une source est considérée inchangée lorsque sa taille et son horodatage correspondent à l'état mémorisé. Si ces métadonnées diffèrent mais que l'empreinte SHA-256 reste identique, seules les métadonnées sont actualisées. Une source réellement modifiée est relue dans une transaction.

L'identifiant ChatGPT constitue la clé de déduplication. En son absence, un SHA-256 déterministe est calculé à partir du chemin, du titre et des dates. Lorsqu'une conversation existe déjà, son contenu est remplacé si le couple (horodatage de contenu, nombre de messages) de la version entrante est supérieur ou égal à celui enregistré. Les relations de provenance permettent à une même conversation d'appartenir à plusieurs exports.

Grammaire lexicale

ConstructionSémantique interne
virgule, point-virgule, OU, ORCréation de groupes alternatifs.
ET, ANDConjonction de tous les termes d'un groupe.
-termeExclusion globale de la conversation.
"expression"Suppression des guillemets externes et conservation de l'expression.
préfixe*Extension lexicale par caractères alphanumériques, tiret ou souligné.

Les doublons sont éliminés par texte normalisé, statut d'exclusion et numéro de groupe.

Normalisation et comptage

La normalisation applique Unicode NFKD, supprime les diacritiques, convertit en minuscules, remplace l'apostrophe typographique et compacte les espaces. Les recherches sont donc insensibles à la casse et aux accents. Hors joker, les formes simples acceptent un suffixe pluriel s ou x, sauf lorsque le terme se termine déjà par l'un de ces caractères.

Présélection indexée

Pour chaque terme positif, FTS5 produit un ensemble d'identifiants limité aux sources, rôles et dates retenus. Les termes d'un même groupe sont intersectés ; les groupes alternatifs sont réunis. Le rôle title est toujours ajouté au périmètre. Cette phase produit des candidats et non des résultats définitifs.

Analyse exacte

Le titre et les messages appartenant au périmètre sont réunis puis normalisés. Toute occurrence d'un terme exclu élimine la conversation. Un groupe positif est validé uniquement si chacun de ses termes possède au moins une occurrence. Les comptes, rôles correspondants et positions des messages sont ensuite calculés sur le texte exact.

Calcul de pertinence

Le score est plafonné à 100 et suit la formule déterministe ci-dessous :

15 + 35 si le titre correspond + min(nombre de messages utilisateur × 25, 35) + min(nombre de messages assistant × 15, 25) + min(nombre d'occurrences × 5, 20) + min((nombre de termes distincts − 1) × 10, 20)
IntervalleLibellé
80 à 100Très pertinent
45 à 79Pertinent
0 à 44Mention secondaire

Le tri final est décroissant sur le score, puis sur la date de conversation. Il ne représente pas une probabilité et ne résulte d'aucun apprentissage statistique.

Fenêtres de contexte

Chaque message correspondant génère une fenêtre allant jusqu'à deux messages avant et deux après. Les fenêtres adjacentes ou chevauchantes sont fusionnées. Six fenêtres au maximum sont conservées par conversation. Le texte de chaque message de contexte est compacté à 1 200 caractères.

Sorties structurées

mining_results.json

Le document racine contient metadata et results. Les métadonnées décrivent l'application, la version, le schéma logique, l'heure UTC, les sources, l'index, les dates, la requête et le périmètre. Chaque résultat est la sérialisation complète d'un MiningResult.

FamilleChamps principaux
Identificationsource_file, conversation_id, conversation_title, conversation_url
Mesuresoccurrence_count, message_count, relevance_score, relevance_label
Correspondancesmatched_keywords, matched_roles, contexts
Contexte de traitementsource_files, index_path, période, recherche, role_scope
Capitalisation : cette sortie structurée peut constituer la première étape d'outils d'extraction, de comparaison ou d'enrichissement de bases de connaissances.

Rapports HTML

DTLarchive-report.html présente les métriques, la répartition des termes, les premiers titres de conversations classées, le tableau des résultats et les fenêtres de contexte. Les titres affichés ne sont pas une synthèse sémantique. Chaque page conversation-<empreinte>.html reproduit la branche complète et positionne une ancre sur le premier message correspondant.

Les documents sont autonomes en CSS, encodés en UTF-8 et localisés selon la langue active. Le contenu des conversations reste dans sa langue originale.

Journal HTML

Le journal quotidien logs/DTLarchive_AAAAMMJJ.html reçoit des entrées horodatées de niveau information, action ou erreur. Il mémorise les grandes phases, les paramètres synthétiques, les compteurs d'importation et les exceptions. Une impossibilité d'écriture du journal n'interrompt pas le moteur.

Référence interne

Modules publics du projet

ModuleDépendances principalesÉtat détenu
DTLarchiveargparse, pathlib, sqlite3, tkinter, webbrowserLangue de processus, arguments, corpus sélectionné et résultats.
dtlarchive_indexsqlite3, hashlibConnexion SQLite et schéma persistant.
dtlarchive_searchArchiveIndexSources autorisées pour une sélection.
dtlarchive_i18nos.environCatalogue et variable DTLARCHIVE_LANG.

Groupes de fonctions

GroupeFonctions représentativesContrat
Textenormalize, compact, unique, keyword_pattern, count_termNormalisation et mesure lexicale déterministes.
Lecturetext_from_content, current_branch_messages, iter_conversationsConversion tolérante du JSON ChatGPT vers les modèles internes.
Tempsparse_french_date, period_overlaps_archive, archive_period_labelBornes inclusives et validation de recouvrement.
Analysemine_conversation, build_contexts, relevance_labelProduction d'un résultat exact ou de None.
Publicationwrite_json, write_html_report, write_conversation_pageÉcriture UTF-8 des sorties structurées et navigables.

Internationalisation

Le catalogue TRANSLATIONS associe chaque clé à une valeur fr et en. current_language() lit DTLARCHIVE_LANG et revient au français si la valeur n'est pas prise en charge. t() sélectionne puis interpole le modèle ; plural_key() choisit les variantes singulière et plurielle.

La langue couvre la console, les boîtes de dialogue, l'aide, les erreurs, les rapports et le journal. Elle ne traduit pas le contenu source des conversations.

Erreurs, transactions et intégrité

Annexes

Limites connues

Versions et schémas

IdentifiantValeurPortée
Applicationv2.2-5Fonctionnalités et interface distribuées.
Schéma logique2.1Valeur publiée dans les métadonnées de résultat.
Schéma d'index1Compatibilité de la base SQLite persistante.

Glossaire

TermeDéfinition
CorpusEnsemble des conversations rattachées aux archives sélectionnées.
CandidateConversation retenue par FTS5 avant validation lexicale exacte.
ContexteFenêtre de messages entourant une correspondance.
ProvenanceRelation entre une conversation dédupliquée et ses fichiers sources.
FTS5Moteur de recherche plein texte intégré à SQLite.
WALMode de journalisation SQLite favorisant robustesse et concurrence de lecture.