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 [showMistralKey, setShowMistralKey] = useState(false);
|
||||||
const [showManusKey, setShowManusKey] = useState(false);
|
const [showManusKey, setShowManusKey] = useState(false);
|
||||||
const [showGeminiKey, setShowGeminiKey] = 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(() => {
|
useEffect(() => {
|
||||||
if (settings) {
|
if (settings) {
|
||||||
@@ -724,15 +726,28 @@ export default function Settings() {
|
|||||||
|
|
||||||
const testReferentielIaMutation = trpc.settings.testReferentielIa.useMutation({
|
const testReferentielIaMutation = trpc.settings.testReferentielIa.useMutation({
|
||||||
onSuccess: (data) => {
|
onSuccess: (data) => {
|
||||||
|
setReferentialEngine({ engineName: data.engineName, model: data.model });
|
||||||
|
setReferentialEngineError(null);
|
||||||
const engine = data.engineName ? ` Moteur sélectionné : ${data.engineName}.` : "";
|
const engine = data.engineName ? ` Moteur sélectionné : ${data.engineName}.` : "";
|
||||||
const model = data.model ? ` Modèle : ${data.model}.` : "";
|
const model = data.model ? ` Modèle : ${data.model}.` : "";
|
||||||
toast.success(`Connexion au Référentiel IA réussie.${engine}${model}`);
|
toast.success(`Connexion au Référentiel IA réussie.${engine}${model}`);
|
||||||
},
|
},
|
||||||
onError: (error) => {
|
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");
|
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({
|
const testSftpMutation = trpc.sftp.testConnection.useMutation({
|
||||||
onSuccess: (data) => {
|
onSuccess: (data) => {
|
||||||
if (data.success) {
|
if (data.success) {
|
||||||
@@ -953,7 +968,7 @@ export default function Settings() {
|
|||||||
|
|
||||||
<button
|
<button
|
||||||
type="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 ${
|
className={`relative flex flex-col items-center gap-3 p-5 rounded-xl border-2 transition-all cursor-pointer ${
|
||||||
aiProvider === "referentiel"
|
aiProvider === "referentiel"
|
||||||
? "border-violet-500 bg-violet-50 dark:bg-violet-950/20 shadow-md"
|
? "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
|
Vérifier la connexion
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</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>
|
</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
|
- [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
|
- [ ] 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
|
## 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] 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
|
- [x] Corriger la lecture du secret Docker lorsqu’une variable vide est présente
|
||||||
|
|||||||
Reference in New Issue
Block a user