diff --git a/app/assets/images/impressions/agencement4.jpg b/app/assets/images/impressions/agencement4.jpg
deleted file mode 100644
index 6be7c99..0000000
Binary files a/app/assets/images/impressions/agencement4.jpg and /dev/null differ
diff --git a/app/assets/images/imprimante/lampdeath.jpg b/app/assets/images/impressions/lampdeath.jpg
similarity index 100%
rename from app/assets/images/imprimante/lampdeath.jpg
rename to app/assets/images/impressions/lampdeath.jpg
diff --git a/app/components/ChatBot.js b/app/components/ChatBot.js
new file mode 100644
index 0000000..34acfea
--- /dev/null
+++ b/app/components/ChatBot.js
@@ -0,0 +1,27 @@
+import { useState } from "react";
+import { askAI } from "../utils/askAI";
+
+export default function ChatBot() {
+ const [question, setQuestion] = useState("");
+ const [response, setResponse] = useState("");
+
+ const handleAsk = async () => {
+ if (!question) return;
+ const aiResponse = await askAI(question);
+ setResponse(aiResponse);
+ };
+
+ return (
+
+
Chat avec l'IA
+
setQuestion(e.target.value)}
+ />
+
+ {response &&
Réponse : {response}
}
+
+ );
+}
diff --git a/app/components/ModalGlossaire.tsx b/app/components/ModalGlossaire.tsx
index 3342731..28cda5e 100644
--- a/app/components/ModalGlossaire.tsx
+++ b/app/components/ModalGlossaire.tsx
@@ -1,15 +1,16 @@
import { useEffect } from "react";
-import { createPortal } from "react-dom"; // Insère la modale dans
-import { getApiUrl } from "../utils/getApiUrl"; // ✅ Import de l'URL dynamique
-import CarouselCompetences from "./CarouselCompetences"; // Importation du composant CarouselCompetences
+import { createPortal } from "react-dom";
+import CarouselCompetences from "./CarouselCompetences";
+import { getApiUrl } from "../utils/getApiUrl";
-// ✅ Définition des propriétés du composant ModalGlossaire
interface ImageData {
url: string;
- formats?: {
- large?: { url: string };
- };
name?: string;
+ formats?: {
+ large?: {
+ url: string;
+ };
+ };
}
interface GlossaireMot {
@@ -46,26 +47,31 @@ export default function ModalGlossaire({ mot, onClose }: ModalGlossaireProps) {
return createPortal(
-
+
{/* Bouton de fermeture */}
-
,
document.body
);
-}
+}
\ No newline at end of file
diff --git a/app/contact/page.js b/app/contact/page.js
index b6ec507..3ad7732 100644
--- a/app/contact/page.js
+++ b/app/contact/page.js
@@ -14,28 +14,21 @@ export default function ContactPage() {
{/* Texte d'introduction */}
-
+
Vous pouvez me contacter via ce formulaire ou sur mes réseaux sociaux.
- {/* Liens vers les réseaux sociaux mis à jour */}
-
-
- LinkedIn
-
-
- Facebook
-
-
- Email
-
+ {/* Informations de contact mises à jour */}
+
+
+ LinkedIn: Fernand Gras-Calvet
+
+
+ Facebook: Fernand Gras-Calvet
+
+
+ Email: grascalvet.fernand@gmail.com
+
{/* Formulaire de contact amélioré */}
@@ -44,4 +37,4 @@ export default function ContactPage() {
);
-}
+}
\ No newline at end of file
diff --git a/app/utils/askAI.js b/app/utils/askAI.js
new file mode 100644
index 0000000..e69de29
diff --git a/llm-api/__pycache__/api.cpython-313.pyc b/llm-api/__pycache__/api.cpython-313.pyc
new file mode 100644
index 0000000..45388e9
Binary files /dev/null and b/llm-api/__pycache__/api.cpython-313.pyc differ
diff --git a/llm-api/api.py b/llm-api/api.py
new file mode 100644
index 0000000..cdede33
--- /dev/null
+++ b/llm-api/api.py
@@ -0,0 +1,16 @@
+from fastapi import FastAPI
+import requests
+
+app = FastAPI()
+
+OLLAMA_API_URL = "http://localhost:11434/api/generate"
+
+@app.get("/ask")
+async def ask_question(q: str):
+ data = {
+ "model": "mistral",
+ "prompt": q,
+ "stream": False
+ }
+ response = requests.post(OLLAMA_API_URL, json=data)
+ return response.json()
diff --git a/llm-api/web.config b/llm-api/web.config
new file mode 100644
index 0000000..28a6eed
--- /dev/null
+++ b/llm-api/web.config
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+