Checkpoint: Paramètres > Intelligence IA affiche désormais automatiquement le moteur, et le modèle quand il est fourni, décidés par le Référentiel IA dès sa sélection. La consultation ne transmet aucune facture ; un état de chargement et une reprise sur erreur sont affichés. Test Référentiel IA, TypeScript et build validés.
This commit is contained in:
@@ -685,6 +685,8 @@ export default function Settings() {
|
||||
const [showMistralKey, setShowMistralKey] = useState(false);
|
||||
const [showManusKey, setShowManusKey] = useState(false);
|
||||
const [showGeminiKey, setShowGeminiKey] = useState(false);
|
||||
const [referentialEngine, setReferentialEngine] = useState<{ engineName: string | null; model: string | null } | null>(null);
|
||||
const [referentialEngineError, setReferentialEngineError] = useState<string | null>(null);
|
||||
|
||||
useEffect(() => {
|
||||
if (settings) {
|
||||
@@ -724,15 +726,28 @@ export default function Settings() {
|
||||
|
||||
const testReferentielIaMutation = trpc.settings.testReferentielIa.useMutation({
|
||||
onSuccess: (data) => {
|
||||
setReferentialEngine({ engineName: data.engineName, model: data.model });
|
||||
setReferentialEngineError(null);
|
||||
const engine = data.engineName ? ` Moteur sélectionné : ${data.engineName}.` : "";
|
||||
const model = data.model ? ` Modèle : ${data.model}.` : "";
|
||||
toast.success(`Connexion au Référentiel IA réussie.${engine}${model}`);
|
||||
},
|
||||
onError: (error) => {
|
||||
setReferentialEngine(null);
|
||||
setReferentialEngineError(error.message || "Le moteur sélectionné n'a pas pu être obtenu.");
|
||||
toast.error(error.message || "Connexion au Référentiel IA impossible");
|
||||
},
|
||||
});
|
||||
|
||||
const selectReferentielIa = () => {
|
||||
if (testReferentielIaMutation.isPending) return;
|
||||
setAiProvider("referentiel");
|
||||
setReferentialEngine(null);
|
||||
setReferentialEngineError(null);
|
||||
// Cette demande interroge uniquement la recommandation centralisée, sans analyser de facture.
|
||||
testReferentielIaMutation.mutate();
|
||||
};
|
||||
|
||||
const testSftpMutation = trpc.sftp.testConnection.useMutation({
|
||||
onSuccess: (data) => {
|
||||
if (data.success) {
|
||||
@@ -953,7 +968,7 @@ export default function Settings() {
|
||||
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setAiProvider("referentiel")}
|
||||
onClick={selectReferentielIa}
|
||||
className={`relative flex flex-col items-center gap-3 p-5 rounded-xl border-2 transition-all cursor-pointer ${
|
||||
aiProvider === "referentiel"
|
||||
? "border-violet-500 bg-violet-50 dark:bg-violet-950/20 shadow-md"
|
||||
@@ -1115,6 +1130,25 @@ export default function Settings() {
|
||||
Vérifier la connexion
|
||||
</Button>
|
||||
</div>
|
||||
<div className="rounded-lg border border-violet-200 bg-white/70 p-3 text-sm dark:border-violet-800 dark:bg-violet-950/20" aria-live="polite">
|
||||
{testReferentielIaMutation.isPending ? (
|
||||
<div className="flex items-center gap-2 text-violet-800 dark:text-violet-200">
|
||||
<Loader2 className="h-4 w-4 animate-spin" />
|
||||
Recherche du moteur décidé par le Référentiel IA…
|
||||
</div>
|
||||
) : referentialEngine ? (
|
||||
<div className="space-y-1 text-violet-900 dark:text-violet-100">
|
||||
<p className="font-semibold">Moteur qui sera utilisé : {referentialEngine.engineName || "défini par le Référentiel IA"}</p>
|
||||
<p className="text-xs text-violet-700 dark:text-violet-300">
|
||||
{referentialEngine.model ? `Modèle : ${referentialEngine.model}` : "Le modèle est également déterminé par le Référentiel IA."}
|
||||
</p>
|
||||
</div>
|
||||
) : referentialEngineError ? (
|
||||
<p className="text-violet-800 dark:text-violet-200">Impossible d’obtenir le moteur. Utilisez « Vérifier la connexion » pour réessayer.</p>
|
||||
) : (
|
||||
<p className="text-violet-800 dark:text-violet-200">Le moteur recommandé s’affichera automatiquement après la sélection.</p>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
|
||||
4
todo.md
4
todo.md
@@ -9,6 +9,10 @@
|
||||
- [x] Vérifier une invocation contrôlée via la passerelle sans utiliser de document métier
|
||||
- [ ] Vérifier une extraction réelle via la passerelle et sa traçabilité dans le Référentiel IA
|
||||
|
||||
## Affichage du moteur Référentiel IA — recette — 02/10/2026
|
||||
- [x] Afficher le moteur et le modèle recommandés dès la sélection du Référentiel IA
|
||||
- [ ] Valider l’affichage, puis déployer en recette sans toucher à MySQL ni au volume PDF
|
||||
|
||||
## Correction connexion Référentiel IA — recette — 02/10/2026
|
||||
- [x] Identifier le repli bloqué par une variable de jeton vide dans le conteneur
|
||||
- [x] Corriger la lecture du secret Docker lorsqu’une variable vide est présente
|
||||
|
||||
Reference in New Issue
Block a user