-
Notifications
You must be signed in to change notification settings - Fork 0
Modules
Un module est l’unité fonctionnelle atomique de Context Compiler.
Un module fait une chose précise, dans un moment précis du pipeline, avec une responsabilité claire et réutilisable.
On peut résumer l’idée ainsi :
Un module = une capacité
Un module peut par exemple :
- lire une source
- enrichir des données
- composer une partie du prompt
- produire une vue
- écrire un artefact
- appliquer une logique métier spécialisée
Le point important est qu’un module n’est pas censé être une “solution complète”. Il apporte une brique ciblée que le runtime peut orchestrer avec d’autres.
Dans Context Compiler, un module est pensé pour être :
- atomique : responsabilité limitée
- stateless : pas d’état global métier persistant
- branchable : inséré dans un pipeline ou une phase précise
- réutilisable : utilisable dans plusieurs packs ou blueprints
- packagé : distribuable via NuGet
Ces modules lisent des formats d’entrée :
ContextCompiler.Modules.Readers.MarkdownContextCompiler.Modules.Readers.TextContextCompiler.Modules.Readers.PdfContextCompiler.Modules.Readers.Excel
Ces modules composent des sections du prompt :
ContextCompiler.Modules.Prompt.Composers.GeneralContextCompiler.Modules.Prompt.Composers.ObjectivesContextCompiler.Modules.Prompt.Composers.ConstraintsContextCompiler.Modules.Prompt.Composers.Views
Ces modules structurent ou rendent des vues :
ContextCompiler.Modules.ViewsContextCompiler.Modules.Views.View.Index.Json
Ces modules injectent du cadrage ou de la spécialisation :
ContextCompiler.Modules.Personas.Developers.DotNetContextCompiler.Modules.Personas.Analysts.BusinessContextCompiler.Modules.Engineering.DotNet
Un module n’existe pas “à côté” du système. Il intervient à un endroit du pipeline.
Selon sa nature, il peut par exemple participer à :
- la lecture des entrées
- l’ingénierie ou l’enrichissement
- la composition du prompt
- le rendu de sorties
Le pipeline reste le mécanisme d’orchestration. Le module reste la capacité spécialisée.
Techniquement, un module Context Compiler est généralement :
- un package
ContextCompiler.Modules.* - un projet packable NuGet
- une implémentation d’un contrat du runtime
- une brique découverte et chargée au runtime
Quelques idées importantes :
- les modules sont des plugins de première classe
- ils sont distribués comme packages NuGet
- ils sont chargés dynamiquement par le système
Cela permet d’étendre le comportement sans recompiler tout l’hôte.
Un module n’est pas :
- un bundle de capacités hétérogènes
- une solution métier complète
- un scénario d’usage de bout en bout
Quand on commence à regrouper plusieurs modules cohérents, on entre dans la notion de pack.
Créer un module est pertinent quand :
- une capacité est clairement isolable
- elle doit être réutilisable indépendamment
- elle peut vivre seule dans un package
- elle s’insère naturellement dans le pipeline existant
Créer un module séparé est moins pertinent quand :
- il ne fait qu’agréger d’autres modules sans logique propre
- il représente un scénario d’usage complet
- il sert surtout à simplifier l’installation
Dans ces cas-là, il faut plutôt regarder du côté des packs ou des blueprints.
- Un module est une capacité atomique
- Il fait une seule chose
- Il s’insère dans le pipeline
- Il se distribue comme package NuGet
- Il sert de brique de base pour les packs et les blueprints
Suite logique : Packs
- Pipeline
- Personas
- Prompt composition
- Views
- Artifacts
- Configuration