noyau_minimal.py
MIRA — Phase 0 — Noyau minimal (modele factice)
Auteur : Da Conceicao Mario
Version : 0.1
Date : 17/10/2026
#
Principe : le contexte (dict N1 a N6) circule entre
les modules. Interface unique : executer(contexte) -> contexte
Pas de Phi-4 Mini ici — structure et routage seulement.
import json
import os
from datetime import datetime
— Chemin du fichier de configuration —
CHEMIN_CONFIG = os.path.join(
os.path.dirname(file),
"config", "chemins.json"
)
def _charger_chemins():
if os.path.exists(CHEMIN_CONFIG):
with open(CHEMIN_CONFIG, "r", encoding="utf-8") as f:
return json.load(f)
return {}
def _nouveau_contexte(question, historique=None):
"""Cree un contexte frais pour un nouveau tour."""
return {
"N1_question" : question,
"N2_historique" : historique if historique else [],
"N3_intention" : None,
"N4_specialiste": None,
"N5_reponse" : None,
"N6_meta" : {
"source_reponse" : None,
"erreurs" : [],
"mode" : "normal"
}
}
def _detecter_intention(contexte):
"""Detecte l’intention a partir de la question (N1)."""
q = contexte["N1_question"].lower()
if any(m in q for m in ["date", "jour", "heure", "aujourd"]):
contexte["N3_intention"] = "question_date"
elif any(m in q for m in ["qui t'a", "cree", "createur", "auteur"]):
contexte["N3_intention"] = "identite"
elif any(m in q for m in ["maintenance", "analyser", "rapport"]):
contexte["N3_intention"] = "maintenance"
else:
contexte["N3_intention"] = "inconnue"
return contexte
def _reponse_degradee(contexte):
"""Repond sans modele IA pour les intentions connues."""
intention = contexte["N3_intention"]
if intention == "question_date":
maintenant = datetime.now().strftime("%A %d %B %Y, %H:%M")
contexte["N5_reponse"] = "Nous sommes le " + maintenant + "."
contexte["N6_meta"]["source_reponse"] = "degradee"
elif intention == "identite":
contexte["N5_reponse"] = "Je suis MIRA, concue et faconnee par Da Conceicao Mario."
contexte["N6_meta"]["source_reponse"] = "degradee"
return contexte
def _reponse_factice(contexte):
"""Remplace Phi-4 Mini pour l’instant (Phase 0)."""
if contexte["N5_reponse"] is None:
contexte["N5_reponse"] = (
"[NOYAU FACTICE] Question recue : "
- contexte["N1_question"]
- " — Le modele Phi-4 Mini sera branche en Phase 4."
)
contexte["N6_meta"]["source_reponse"] = "factice"
return contexte
def _enregistrer_historique(contexte):
"""Ajoute le tour courant a N2_historique."""
tour_num = len(contexte["N2_historique"]) + 1
entree = {
"tour" : tour_num,
"horodatage" : datetime.now().isoformat(),
"question" : contexte["N1_question"],
"reponse" : contexte["N5_reponse"],
"source" : contexte["N6_meta"]["source_reponse"]
}
contexte["N2_historique"].append(entree)
return contexte
def executer(contexte):
"""
Interface principale du noyau.
Entree : contexte dict (N1 a N6)
Sortie : contexte enrichi
"""
try:
contexte = _detecter_intention(contexte)
contexte = _reponse_degradee(contexte)
contexte = _reponse_factice(contexte)
contexte = _enregistrer_historique(contexte)
except Exception as e:
contexte["N6_meta"]["erreurs"].append(str(e))
if contexte["N5_reponse"] is None:
contexte["N5_reponse"] = "Erreur interne dans le noyau."
contexte["N6_meta"]["source_reponse"] = "erreur"
return contexte
— Test rapide si lance directement —
if name == "main":
historique = []
questions = [
"quel jour sommes-nous ?",
"qui t'a cree ?",
"comment fonctionne Python ?"
]
for q in questions:
print("\n--- Question : " + q)
ctx = _nouveau_contexte(q, historique)
ctx = executer(ctx)
print("Reponse : " + str(ctx["N5_reponse"]))
print("Source : " + str(ctx["N6_meta"]["source_reponse"]))
print("Erreurs : " + str(ctx["N6_meta"]["erreurs"]))
historique = ctx["N2_historique"]
print("\n--- Historique final ---")
for entree in historique:
print(str(entree["tour"]) + ". " + entree["question"] + " -> " + entree["source"])