Auteur: Nedim Mejri
Application complète de chatbot intelligent spécialisé dans le domaine pharmaceutique et médical. Cette application offre une interface conversationnelle avancée permettant d'obtenir des réponses fiables et contextualisées sur des sujets pharma/MedTech.
Le projet propose deux variantes de déploiement pour répondre à différents besoins :
- Architecture Full-stack : Backend FastAPI avec API RESTful + Frontend React moderne et réactif
- Application Streamlit : Solution standalone rapide à déployer et utiliser
L'application peut fonctionner avec des modèles locaux (via Hugging Face) ou utiliser l'API OpenAI pour des performances optimales en production.
Pour des réponses plus fiables, configurez l'API OpenAI :
- Installer les dépendances API :
cd backend
pip install openai requests- Configurer la clé API (PowerShell) :
$env:USE_API="true"
$env:OPENAI_API_KEY="votre-cle-api-ici"
$env:OPENAI_MODEL="gpt-3.5-turbo"
$env:API_TYPE="openai"- Démarrer le backend :
uvicorn app.main:app --reload --port 8000Le système utilisera automatiquement l'API OpenAI si configurée, sinon il utilisera le modèle local.
📖 Guide complet : Voir backend/README_API.md
# Windows PowerShell
cd backend
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r app/requirements.txt
uvicorn app.main:app --reload --port 8000# Linux/Mac
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r app/requirements.txt
uvicorn app.main:app --reload --port 8000Le backend sera accessible sur http://localhost:8000
cd frontend
npm install
npm run devLe frontend sera accessible sur http://localhost:5173
# Windows PowerShell
cd streamlit_app
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
streamlit run app.py# Linux/Mac
cd streamlit_app
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
streamlit run app.pyL'application sera accessible sur http://localhost:8501
ai-chat-webapp/
├── backend/ # Backend FastAPI
│ ├── app/
│ │ ├── main.py # Application FastAPI principale
│ │ ├── model.py # Wrapper pour le modèle IA
│ │ └── requirements.txt
│ └── README.md
├── frontend/ # Frontend React
│ ├── src/
│ │ ├── App.jsx # Composant principal React
│ │ ├── App.css # Styles
│ │ ├── main.jsx
│ │ └── index.css
│ ├── package.json
│ ├── vite.config.js
│ └── README.md
├── streamlit_app/ # Application Streamlit
│ ├── app.py # Application Streamlit complète
│ ├── requirements.txt
│ └── README.md
├── models/ # Instructions pour les modèles
│ └── README.md
├── README.md # Ce fichier
└── LICENSE
Le backend utilise par défaut le modèle microsoft/DialoGPT-small. Pour changer de modèle, modifiez backend/app/model.py:
chat_model = ChatModel(model_name="votre-modele")Pour changer l'URL de l'API backend, créez un fichier .env dans frontend/:
VITE_API_URL=http://localhost:8000
- Créez un compte sur Render ou Heroku
- Connectez votre repo GitHub
- Créez un nouveau service web
- Configurez:
- Build Command:
pip install -r backend/app/requirements.txt - Start Command:
uvicorn app.main:app --host 0.0.0.0 --port $PORT - Working Directory:
backend
- Build Command:
- Connectez votre repo GitHub à Railway
- Sélectionnez le dossier
backend - Railway détectera automatiquement FastAPI et installera les dépendances
- Connectez votre repo GitHub à Vercel
- Configurez:
- Framework Preset: Vite
- Root Directory:
frontend - Build Command:
npm run build - Output Directory:
dist
- Ajoutez la variable d'environnement
VITE_API_URLavec l'URL de votre backend déployé
- Connectez votre repo GitHub à Netlify
- Configurez:
- Base directory:
frontend - Build command:
npm run build - Publish directory:
frontend/dist
- Base directory:
- Ajoutez la variable d'environnement
VITE_API_URL
- Poussez votre code sur GitHub
- Allez sur share.streamlit.io
- Connectez votre compte GitHub
- Créez une nouvelle app:
- Repository: Votre repo
- Branch:
main(oumaster) - Main file path:
streamlit_app/app.py
- Cliquez sur "Deploy"
L'application sera accessible sur https://votre-app.streamlit.app
# Health check
curl http://localhost:8000/health
# Chat endpoint
curl -X POST http://localhost:8000/chat \
-H "Content-Type: application/json" \
-d '{"message": "Bonjour!", "history": []}'Ouvrez http://localhost:5173 dans votre navigateur et testez l'interface de chat.
Ouvrez http://localhost:8501 dans votre navigateur et testez l'application.
Une fois le backend lancé, accédez à:
- Swagger UI:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
- Rate limiting: Ajoutez un middleware de rate limiting pour éviter les abus
- Modèles légers: Utilisez des modèles petits pour réduire l'utilisation mémoire
- API Hugging Face: Pour la production, considérez l'utilisation de l'API Hugging Face Inference au lieu de charger le modèle localement
- CORS: Configurez correctement les origines CORS pour la production
Ajoutez dans backend/app/main.py:
from slowapi import Limiter, _rate_limit_exceeded_handler
from slowapi.util import get_remote_address
from slowapi.errors import RateLimitExceeded
limiter = Limiter(key_func=get_remote_address)
app.state.limiter = limiter
app.add_exception_handler(RateLimitExceeded, _rate_limit_exceeded_handler)
@app.post("/chat")
@limiter.limit("10/minute")
async def chat(request: Request, chat_request: ChatRequest):
# ...- Vérifiez votre connexion internet (téléchargement initial)
- Assurez-vous d'avoir suffisamment d'espace disque (2-3 GB)
- Vérifiez les logs pour plus de détails
- Utilisez un modèle plus petit
- Réduisez la taille du batch
- Utilisez l'API Hugging Face Inference
- Vérifiez que l'URL du frontend est dans
allow_originsdu backend - Pour la production, remplacez
localhostpar votre domaine
Voir le fichier LICENSE pour plus de détails.
Les contributions sont les bienvenues! N'hésitez pas à ouvrir une issue ou une pull request.
Pour toute question ou problème, ouvrez une issue sur GitHub.