Bambo TRAORE [SNT DRPS/PEX/SDN] commited on
Commit
27b8e78
·
1 Parent(s): 7cc0285
Files changed (35) hide show
  1. .dockerignore +0 -0
  2. .gitignore +1 -1
  3. Dockerfile +16 -0
  4. README.md +1 -1
  5. app/__pycache__/main.cpython-313.pyc +0 -0
  6. app/src/base/__pycache__/__init__.cpython-313.pyc +0 -0
  7. app/src/base/__pycache__/application_service.cpython-313.pyc +0 -0
  8. app/src/base/__pycache__/base_ia_service.cpython-313.pyc +0 -0
  9. app/src/base/__pycache__/nvidia_api_service.cpython-313.pyc +0 -0
  10. app/src/base/application_service.py +13 -10
  11. app/src/base/base_ia_service.py +13 -0
  12. app/src/base/nvidia_api_service.py +2 -1
  13. app/src/models/__pycache__/__init__.cpython-313.pyc +0 -0
  14. app/src/models/__pycache__/schema.cpython-313.pyc +0 -0
  15. app/src/router/__pycache__/__init__.cpython-313.pyc +0 -0
  16. app/src/router/__pycache__/chat_router.cpython-313.pyc +0 -0
  17. app/src/router/chat_router.py +5 -0
  18. app/src/services/adminstrations/__pycache__/__init__.cpython-313.pyc +0 -0
  19. app/src/services/adminstrations/__pycache__/administration_service.cpython-313.pyc +0 -0
  20. app/src/services/adminstrations/administration_service.py +15 -4
  21. app/src/services/droitsociaux/__pycache__/__init__.cpython-313.pyc +0 -0
  22. app/src/services/droitsociaux/__pycache__/droitsociaux_service.cpython-313.pyc +0 -0
  23. app/src/services/droitsociaux/droitsociaux_service.py +12 -2
  24. app/src/services/education/__pycache__/__init__.cpython-313.pyc +0 -0
  25. app/src/services/education/__pycache__/education_service.cpython-313.pyc +0 -0
  26. app/src/services/education/education_service.py +13 -2
  27. app/src/services/emploi/__pycache__/__init__.cpython-313.pyc +0 -0
  28. app/src/services/emploi/__pycache__/emploi_service.cpython-313.pyc +0 -0
  29. app/src/services/emploi/emploi_service.py +12 -2
  30. app/src/services/logements/__pycache__/__init__.cpython-313.pyc +0 -0
  31. app/src/services/logements/__pycache__/logement_service.cpython-313.pyc +0 -0
  32. app/src/services/logements/logement_service.py +13 -3
  33. app/src/services/sante/__pycache__/__init__.cpython-313.pyc +0 -0
  34. app/src/services/sante/__pycache__/sante_service.cpython-313.pyc +0 -0
  35. app/src/services/sante/sante_service.py +12 -3
.dockerignore ADDED
File without changes
.gitignore CHANGED
@@ -1,2 +1,2 @@
1
- venv
2
  .env
 
1
+ venv/
2
  .env
Dockerfile CHANGED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Read the doc: https://huggingface.co/docs/hub/spaces-sdks-docker
2
+ # you will also find guides on how best to write your Dockerfile
3
+
4
+ FROM python:3.9
5
+
6
+ RUN useradd -m -u 1000 user
7
+ USER user
8
+ ENV PATH="/home/user/.local/bin:$PATH"
9
+
10
+ WORKDIR /app
11
+
12
+ COPY --chown=user ./requirements.txt requirements.txt
13
+ RUN pip install --no-cache-dir --upgrade -r requirements.txt
14
+
15
+ COPY --chown=user . /app
16
+ CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"]
README.md CHANGED
@@ -5,7 +5,7 @@
5
 
6
  **API CHAT** FAST API est une application conçue pour fournir un chatbot rapide et efficace. Il est capable de sélectionner les informations les plus pertinentes à partir de vos données, vous permettant ainsi d'optimiser votre temps.
7
 
8
- Ce projet est spécialement adapté pour analyser et répondre aux données relatives aux 6 domaines **** via une URL générée dynamiquement. Cette API est également intégrée aux applications NUR, permettant une utilisation directe pour l'analyse des performances réseau.
9
 
10
  Dans ce projet, nous utilisons le modèle **Llama 3,mistral** via la plateforme **Nvidia Build** : [Nvidia build](https://build.nvidia.com/explore/discover).
11
 
 
5
 
6
  **API CHAT** FAST API est une application conçue pour fournir un chatbot rapide et efficace. Il est capable de sélectionner les informations les plus pertinentes à partir de vos données, vous permettant ainsi d'optimiser votre temps.
7
 
8
+ Ce projet est spécialement adapté pour analyser et répondre aux données relatives aux 6 domaines **** .
9
 
10
  Dans ce projet, nous utilisons le modèle **Llama 3,mistral** via la plateforme **Nvidia Build** : [Nvidia build](https://build.nvidia.com/explore/discover).
11
 
app/__pycache__/main.cpython-313.pyc ADDED
Binary file (1.2 kB). View file
 
app/src/base/__pycache__/__init__.cpython-313.pyc ADDED
Binary file (204 Bytes). View file
 
app/src/base/__pycache__/application_service.cpython-313.pyc ADDED
Binary file (2.29 kB). View file
 
app/src/base/__pycache__/base_ia_service.cpython-313.pyc ADDED
Binary file (3.27 kB). View file
 
app/src/base/__pycache__/nvidia_api_service.cpython-313.pyc ADDED
Binary file (1.37 kB). View file
 
app/src/base/application_service.py CHANGED
@@ -11,25 +11,28 @@ import logging
11
  logger = logging.getLogger(__name__)
12
 
13
  class DomaineService:
14
- @staticmethod
15
- async def get_domaines(request):
16
- domaine = request.domaine
17
- if not domaine:
18
- raise HTTPException(status_code=400, detail="Domaine non fourni")
19
-
20
- domaine_map = {
21
- "administrration": AdministrationService,
22
  "droit": DroitSocialService,
23
  "sante": SanteService,
24
  "emploi": EmploiService,
25
  "education": EducationService,
26
  "logement": LogementService,
27
  }
 
 
 
 
 
28
 
29
- domaine_class = domaine_map.get(domaine)
30
  if domaine_class:
31
  logger.info(f"Domaine {domaine} trouvé")
32
  return domaine_class()
33
  else:
34
  logger.warning(f"domaine {domaine} non trouvé")
35
- return None
 
 
 
 
 
11
  logger = logging.getLogger(__name__)
12
 
13
  class DomaineService:
14
+ domaine_map = {
15
+ "administration": AdministrationService,
 
 
 
 
 
 
16
  "droit": DroitSocialService,
17
  "sante": SanteService,
18
  "emploi": EmploiService,
19
  "education": EducationService,
20
  "logement": LogementService,
21
  }
22
+ @staticmethod
23
+ async def get_domaines(request):
24
+ domaine = request.domaine
25
+ if not domaine:
26
+ raise HTTPException(status_code=400, detail="Domaine non fourni")
27
 
28
+ domaine_class = DomaineService.domaine_map.get(domaine)
29
  if domaine_class:
30
  logger.info(f"Domaine {domaine} trouvé")
31
  return domaine_class()
32
  else:
33
  logger.warning(f"domaine {domaine} non trouvé")
34
+ return None
35
+
36
+ @staticmethod
37
+ def list_domaines():
38
+ return list(DomaineService.domaine_map.keys())
app/src/base/base_ia_service.py CHANGED
@@ -1,6 +1,8 @@
1
  from abc import ABC, abstractmethod
2
  from .nvidia_api_service import OpenClientService
3
  from fastapi import HTTPException
 
 
4
 
5
  class BaseService(ABC):
6
  def __init__(self):
@@ -43,3 +45,14 @@ class BaseService(ABC):
43
  except Exception as e:
44
  raise HTTPException(status_code=500, detail=f"Erreur lors de la génération : {e}")
45
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  from abc import ABC, abstractmethod
2
  from .nvidia_api_service import OpenClientService
3
  from fastapi import HTTPException
4
+ import datetime
5
+
6
 
7
  class BaseService(ABC):
8
  def __init__(self):
 
45
  except Exception as e:
46
  raise HTTPException(status_code=500, detail=f"Erreur lors de la génération : {e}")
47
 
48
+ @staticmethod
49
+ def get_salutation() -> str:
50
+ hour = datetime.datetime.now().hour
51
+ if hour < 12:
52
+ return "Bonjour"
53
+ elif hour < 18:
54
+ return "Bon après-midi"
55
+ else:
56
+ return "Bonsoir"
57
+
58
+
app/src/base/nvidia_api_service.py CHANGED
@@ -9,7 +9,8 @@ class OpenClientService:
9
  self.client = self._init_client()
10
 
11
  def _init_client(self):
12
- api_key = os.getenv("NVIDIA_API_KEY")
 
13
  if not api_key:
14
  raise ValueError("NVIDIA_API_KEY is not set in the environment variables.")
15
  return OpenAI(
 
9
  self.client = self._init_client()
10
 
11
  def _init_client(self):
12
+ #api_key=os.getenv("NVIDIA_API_KEY")
13
+ api_key="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"
14
  if not api_key:
15
  raise ValueError("NVIDIA_API_KEY is not set in the environment variables.")
16
  return OpenAI(
app/src/models/__pycache__/__init__.cpython-313.pyc ADDED
Binary file (206 Bytes). View file
 
app/src/models/__pycache__/schema.cpython-313.pyc ADDED
Binary file (831 Bytes). View file
 
app/src/router/__pycache__/__init__.cpython-313.pyc ADDED
Binary file (206 Bytes). View file
 
app/src/router/__pycache__/chat_router.cpython-313.pyc ADDED
Binary file (2.1 kB). View file
 
app/src/router/chat_router.py CHANGED
@@ -15,6 +15,11 @@ logger = logging.getLogger(__name__)
15
 
16
  router = APIRouter(prefix="/ia",tags=["CHATAPI"])
17
  domaine_service = DomaineService()
 
 
 
 
 
18
  @router.post("/chat")
19
  async def chat(request: QuestionRequest):
20
  logger.info(f"Chat request: {request}")
 
15
 
16
  router = APIRouter(prefix="/ia",tags=["CHATAPI"])
17
  domaine_service = DomaineService()
18
+
19
+ @router.get("/domaines")
20
+ def get_all_domaines():
21
+ return {"domaines": domaine_service.list_domaines()}
22
+
23
  @router.post("/chat")
24
  async def chat(request: QuestionRequest):
25
  logger.info(f"Chat request: {request}")
app/src/services/adminstrations/__pycache__/__init__.cpython-313.pyc ADDED
Binary file (223 Bytes). View file
 
app/src/services/adminstrations/__pycache__/administration_service.cpython-313.pyc ADDED
Binary file (2.45 kB). View file
 
app/src/services/adminstrations/administration_service.py CHANGED
@@ -8,9 +8,20 @@ class AdministrationService(BaseService):
8
 
9
  def __init__(self):
10
  super().__init__()
11
- self.context = "Vous êtes un assistant virtuel spécialisé dans l'administration. " \
12
- "Répondez aux questions de manière concise et précise."
13
-
 
 
 
 
 
 
 
 
 
 
 
14
  async def handle_request(self, request):
15
  """
16
  Gère la requête d'administration.
@@ -28,5 +39,5 @@ class AdministrationService(BaseService):
28
  return {
29
  "answer": response,
30
  "historique": historique,
31
- "domaine": "ADMINISTRATION"
32
  }
 
8
 
9
  def __init__(self):
10
  super().__init__()
11
+ self.context = (
12
+ f"{self.get_salutation()}, vous êtes un assistant virtuel spécialisé dans l'administration en France. "
13
+ "Répondez toujours en français, sauf si l'utilisateur pose une question dans une autre langue. "
14
+ "Formatez toutes vos réponses en HTML simple, adapté à une intégration directe dans une interface web (via innerHTML). "
15
+ "Utilisez les balises suivantes : <p>, <strong>, <ul>, <li>, <a>. "
16
+ "Si vous mentionnez un lien (ex: www.exemple.com ou https://...), formatez-le automatiquement avec la balise <a> "
17
+ "et ajoutez l’attribut target='_blank'. "
18
+ "N'utilisez jamais les balises <html> ou <body>. "
19
+ "Soyez clair, professionnel et concis dans vos réponses. "
20
+ "Si l'utilisateur écrit simplement une salutation comme 'bonjour', 'salut' ou 'merci', "
21
+ "répondez avec une salutation adaptée à l'heure actuelle, sans générer d'information inutile."
22
+ )
23
+
24
+
25
  async def handle_request(self, request):
26
  """
27
  Gère la requête d'administration.
 
39
  return {
40
  "answer": response,
41
  "historique": historique,
42
+ "domaine": "administration"
43
  }
app/src/services/droitsociaux/__pycache__/__init__.cpython-313.pyc ADDED
Binary file (221 Bytes). View file
 
app/src/services/droitsociaux/__pycache__/droitsociaux_service.cpython-313.pyc ADDED
Binary file (2.43 kB). View file
 
app/src/services/droitsociaux/droitsociaux_service.py CHANGED
@@ -8,8 +8,18 @@ class DroitSocialService(BaseService):
8
 
9
  def __init__(self):
10
  super().__init__()
11
- self.context = "Vous êtes un assistant virtuel spécialisé dans les droits sociaux. " \
12
- "Répondez aux questions de manière concise et précise."
 
 
 
 
 
 
 
 
 
 
13
 
14
  async def handle_request(self, request):
15
  """
 
8
 
9
  def __init__(self):
10
  super().__init__()
11
+ self.context = (
12
+ f"{self.get_salutation()}, vous êtes un assistant virtuel spécialisé dans les droits sociaux en France. "
13
+ "Répondez toujours en français, sauf si l'utilisateur pose une question dans une autre langue. "
14
+ "Formatez toutes vos réponses en HTML simple, adapté à une intégration directe dans une interface web (via innerHTML). "
15
+ "Utilisez les balises suivantes : <p>, <strong>, <ul>, <li>, <a>. "
16
+ "Si vous mentionnez un lien (ex: www.exemple.com ou https://...), formatez-le automatiquement avec la balise <a> "
17
+ "et ajoutez l’attribut target='_blank'. "
18
+ "N'utilisez jamais les balises <html> ou <body>. "
19
+ "Soyez clair, professionnel et concis dans vos réponses. "
20
+ "Si l'utilisateur écrit simplement une salutation comme 'bonjour', 'salut' ou 'merci', "
21
+ "répondez avec une salutation adaptée à l'heure actuelle, sans générer d'information inutile."
22
+ )
23
 
24
  async def handle_request(self, request):
25
  """
app/src/services/education/__pycache__/__init__.cpython-313.pyc ADDED
Binary file (218 Bytes). View file
 
app/src/services/education/__pycache__/education_service.cpython-313.pyc ADDED
Binary file (2.41 kB). View file
 
app/src/services/education/education_service.py CHANGED
@@ -9,8 +9,19 @@ class EducationService(BaseService):
9
 
10
  def __init__(self):
11
  super().__init__()
12
- self.context = "Vous êtes un assistant virtuel spécialisé dans l'éducation. " \
13
- "Répondez aux questions de manière concise et précise."
 
 
 
 
 
 
 
 
 
 
 
14
  async def handle_request(self, request):
15
  """
16
  Gère la requête d'administration.
 
9
 
10
  def __init__(self):
11
  super().__init__()
12
+ self.context = (
13
+ f"{self.get_salutation()}, vous êtes un assistant virtuel spécialisé dans l'éducation en France. "
14
+ "Répondez toujours en français, sauf si l'utilisateur pose une question dans une autre langue. "
15
+ "Formatez toutes vos réponses en HTML simple, adapté à une intégration directe dans une interface web (via innerHTML). "
16
+ "Utilisez les balises suivantes : <p>, <strong>, <ul>, <li>, <a>. "
17
+ "Si vous mentionnez un lien (ex: www.exemple.com ou https://...), formatez-le automatiquement avec la balise <a> "
18
+ "et ajoutez l’attribut target='_blank'. "
19
+ "N'utilisez jamais les balises <html> ou <body>. "
20
+ "Soyez clair, professionnel et concis dans vos réponses. "
21
+ "Si l'utilisateur écrit simplement une salutation comme 'bonjour', 'salut' ou 'merci', "
22
+ "répondez avec une salutation adaptée à l'heure actuelle, sans générer d'information inutile."
23
+ )
24
+
25
  async def handle_request(self, request):
26
  """
27
  Gère la requête d'administration.
app/src/services/emploi/__pycache__/__init__.cpython-313.pyc ADDED
Binary file (215 Bytes). View file
 
app/src/services/emploi/__pycache__/emploi_service.cpython-313.pyc ADDED
Binary file (2.38 kB). View file
 
app/src/services/emploi/emploi_service.py CHANGED
@@ -7,8 +7,18 @@ class EmploiService(BaseService):
7
 
8
  def __init__(self):
9
  super().__init__()
10
- self.context = "Vous êtes un assistant virtuel spécialisé dans l'emploi. " \
11
- "Répondez aux questions de manière concise et précise."
 
 
 
 
 
 
 
 
 
 
12
 
13
  async def handle_request(self, request):
14
  """
 
7
 
8
  def __init__(self):
9
  super().__init__()
10
+ self.context = (
11
+ f"{self.get_salutation()}, vous êtes un assistant virtuel spécialisé dans l'emploi en France. "
12
+ "Répondez toujours en français, sauf si l'utilisateur pose une question dans une autre langue. "
13
+ "Formatez toutes vos réponses en HTML simple, adapté à une intégration directe dans une interface web (via innerHTML). "
14
+ "Utilisez les balises suivantes : <p>, <strong>, <ul>, <li>, <a>. "
15
+ "Si vous mentionnez un lien (ex: www.exemple.com ou https://...), formatez-le automatiquement avec la balise <a> "
16
+ "et ajoutez l’attribut target='_blank'. "
17
+ "N'utilisez jamais les balises <html> ou <body>. "
18
+ "Soyez clair, professionnel et concis dans vos réponses. "
19
+ "Si l'utilisateur écrit simplement une salutation comme 'bonjour', 'salut' ou 'merci', "
20
+ "répondez avec une salutation adaptée à l'heure actuelle, sans générer d'information inutile."
21
+ )
22
 
23
  async def handle_request(self, request):
24
  """
app/src/services/logements/__pycache__/__init__.cpython-313.pyc ADDED
Binary file (218 Bytes). View file
 
app/src/services/logements/__pycache__/logement_service.cpython-313.pyc ADDED
Binary file (2.4 kB). View file
 
app/src/services/logements/logement_service.py CHANGED
@@ -7,9 +7,19 @@ class LogementService(BaseService):
7
 
8
  def __init__(self):
9
  super().__init__()
10
- self.context = "Vous êtes un assistant virtuel spécialisé dans le logement. " \
11
- "Répondez aux questions de manière concise et précise."
12
-
 
 
 
 
 
 
 
 
 
 
13
  async def handle_request(self, request):
14
  """
15
  Gère la requête d'administration.
 
7
 
8
  def __init__(self):
9
  super().__init__()
10
+ self.context = (
11
+ f"{self.get_salutation()}, vous êtes un assistant virtuel spécialisé dans le logement en France. "
12
+ "Répondez toujours en français, sauf si l'utilisateur pose une question dans une autre langue. "
13
+ "Formatez toutes vos réponses en HTML simple, adapté à une intégration directe dans une interface web (via innerHTML). "
14
+ "Utilisez les balises suivantes : <p>, <strong>, <ul>, <li>, <a>. "
15
+ "Si vous mentionnez un lien (ex: www.exemple.com ou https://...), formatez-le automatiquement avec la balise <a> "
16
+ "et ajoutez l’attribut target='_blank'. "
17
+ "N'utilisez jamais les balises <html> ou <body>. "
18
+ "Soyez clair, professionnel et concis dans vos réponses. "
19
+ "Si l'utilisateur écrit simplement une salutation comme 'bonjour', 'salut' ou 'merci', "
20
+ "répondez avec une salutation adaptée à l'heure actuelle, sans générer d'information inutile."
21
+ )
22
+
23
  async def handle_request(self, request):
24
  """
25
  Gère la requête d'administration.
app/src/services/sante/__pycache__/__init__.cpython-313.pyc ADDED
Binary file (214 Bytes). View file
 
app/src/services/sante/__pycache__/sante_service.cpython-313.pyc ADDED
Binary file (2.38 kB). View file
 
app/src/services/sante/sante_service.py CHANGED
@@ -8,9 +8,18 @@ class SanteService(BaseService):
8
 
9
  def __init__(self):
10
  super().__init__()
11
- self.context = "Vous êtes un assistant virtuel spécialisé dans la santé. " \
12
- "Répondez aux questions de manière concise et précise."
13
-
 
 
 
 
 
 
 
 
 
14
  async def handle_request(self, request):
15
  """
16
  Gère la requête d'administration.
 
8
 
9
  def __init__(self):
10
  super().__init__()
11
+ self.context = (
12
+ f"{self.get_salutation()}, vous êtes un assistant virtuel spécialisé dans la santé en France. "
13
+ "Répondez toujours en français, sauf si l'utilisateur pose une question dans une autre langue. "
14
+ "Formatez toutes vos réponses en HTML simple, adapté à une intégration directe dans une interface web (via innerHTML). "
15
+ "Utilisez les balises suivantes : <p>, <strong>, <ul>, <li>, <a>. "
16
+ "Si vous mentionnez un lien (ex: www.exemple.com ou https://...), formatez-le automatiquement avec la balise <a> "
17
+ "et ajoutez l’attribut target='_blank'. "
18
+ "N'utilisez jamais les balises <html> ou <body>. "
19
+ "Soyez clair, professionnel et concis dans vos réponses. "
20
+ "Si l'utilisateur écrit simplement une salutation comme 'bonjour', 'salut' ou 'merci', "
21
+ "répondez avec une salutation adaptée à l'heure actuelle, sans générer d'information inutile."
22
+ )
23
  async def handle_request(self, request):
24
  """
25
  Gère la requête d'administration.