🇬🇧 English version
Comportements par défaut (et comment les remplacer)
Voir aussi : Bootstrap et exécution · Sous-systèmes opt-in · Limites et contraintes · Retour à l'index
Les défauts DI d'Orkeon suivent un principe : aucune magie implicite. Rien n'appelle un LLM que vous n'avez pas configuré, rien ne persiste là où vous n'avez pas pointé, et chaque défaut délibérément minimal s'annonce par un Warning unique qui nomme le geste de remédiation. Cette page est l'inventaire de ces défauts — ce que chacun fait, comment il signale qu'il est actif, et le geste exact pour le remplacer.
La plupart des enregistrements ci-dessous utilisent TryAdd : enregistrer votre
propre implémentation avant AddOrkeonApplication() / AddOrkeonInfrastructure()
gagne, sans autre changement. Les exceptions sont signalées dans leur ligne — un
service enregistré inconditionnellement (AddScoped/AddSingleton) se remplace en
enregistrant le vôtre après l'appel Orkeon.
Les défauts qui avertissent au premier usage
| Service | Défaut | Ce qu'il fait réellement | Le remplacer par |
|---|---|---|---|
IAgentPlanner |
AgentPlannerService |
Émet le même plan fixe en 4 étapes pour chaque tâche (confiance 0,8). Le raffinement et la validation sont réels ; la création de plan ignore le contenu de la tâche. | services.AddSingleton<IAgentPlanner, VotrePlanner>(); — un planner adossé au LLM est à l'étude pour V1.x. |
ITaskDelegator |
NullTaskDelegator |
Refuse toute demande de délégation ; FindBestAgentForTaskAsync retourne le premier agent disponible. La délégation Hierarchical/Autonomous reste inerte tant qu'il n'est pas remplacé. |
services.AddSingleton<ITaskDelegator, VotreDelegator>(); |
IKnowledgeStore |
InMemoryKnowledgeStore |
Store in-memory fonctionnel (store/retrieve/delete réels, rien ne persiste) — mais SearchAsync ignore la requête et retourne les premières entrées stockées. |
Activer le sous-système RAG (AddOrkeonRag(configuration)) et utiliser son ingestion/récupération, ou enregistrer votre propre store. |
ILlmCache |
NullLlmCache |
Un cache qui rate toujours — change le coût, pas la justesse. | services.AddSingleton<ILlmCache, VotreCache>(); |
IYamlDiffService |
NullYamlDiffService |
Le diff est un confort d'observabilité optionnel. | Enregistrer votre propre implémentation. |
ITemplateInstantiator |
NullTemplateInstantiator |
Lève aussi NotSupportedException s'il est réellement utilisé — plus bruyant que n'importe quel log. |
Enregistrer votre propre implémentation. |
IToolRegistry |
InMemoryToolRegistry |
Registre vide ; le runner host le remplace par le ServiceProviderToolRegistry adossé à la DI. Les crews qui référencent des outils échouent bruyamment sous StrictTools. |
services.AddSingleton<IToolRegistry, ServiceProviderToolRegistry>(); |
IMemorySystem |
InMemoryMemorySystem |
Vraie implémentation en mémoire — correcte, juste pas persistante. | Configurer un provider persistant (Memory:Provider). |
IAgentSelectionService (FirstFit) |
SimpleAgentSelectionService |
Prend le premier agent disponible — le repli sûr explicite. | Passer OrkeonApplicationOptions.AgentSelectionStrategy à Skill (lexical) ou Embedding (sémantique — exige un vrai fournisseur d'embeddings), via AddOrkeonApplication(o => …) ou services.Configure<OrkeonApplicationOptions>(…). |
IEmbeddingProvider |
chaîne de résolution | BGE local (quand AddOrkeonLocalEmbeddings() est enregistré) → fournisseur distant via Orkeon:Embeddings → fail-fast au premier usage avec une exception actionnable. Jamais de repli hash silencieux. |
Enregistrer AddOrkeonLocalEmbeddings() ou configurer Orkeon:Embeddings. |
IAgentExecutionServicen'est volontairement pas dans cette liste :AddOrkeonApplication()enregistre le vraiAgentExecutionServiceinconditionnellement (AddScoped). Le stubNullAgentExecutionServicene gagne que dans un conteneur câblé avecAddOrkeonInfrastructure()seul (son enregistrement estTryAddScoped). Pour substituer le vôtre dans un bootstrap standard, enregistrez-le aprèsAddOrkeonApplication().
Les défauts véritablement silencieux
Inoffensifs par construction, ils restent en Debug ou n'émettent rien :
| Service | Défaut | Pourquoi le silence convient |
|---|---|---|
| Callbacks step/task | Null*Callback |
Hooks d'observabilité no-op ; Debug par conception. |
IMemoryScope |
NullMemoryScope |
Marqueur explicite « pas de mémoire dans ce contexte » — demandé, pas subi. |
IMemoryProvider |
factory pilotée par la config | Repli sur le provider in-memory quand Memory:Provider est absent ; un type non reconnu, lui, avertit. |
Les défauts TryAdd pleinement fonctionnels (p. ex. IPathValidator → PathValidator)
ne sont volontairement pas listés ici : c'est l'implémentation réelle, pas un
remplaçant — on les remplace de la même façon (enregistrer le vôtre avant l'appel
Orkeon), mais rien ne les annonce parce que rien ne manque.
Pourquoi c'est conçu ainsi
Un framework qui glisserait silencieusement un appel LLM, une dépendance réseau ou un store persistant derrière un défaut prendrait des décisions qui vous appartiennent. La contrepartie : un hôte fraîchement bootstrappé en fait moins qu'un hôte configuré — et le dit dans le log, une fois par service, avec le correctif dans le message. Si vous voyez l'un de ces warnings en production, ce n'est jamais du bruit : une capacité que vous attendez probablement tourne sur son remplaçant minimal.