- Go to URL: https://gemini-chat-app.lab.sspcloud.fr
- Set "test@gmail.com" as username and "azerty" as password
- Click on the upload button, choose a file (PDF or TXT), upload it, then create the database
- Now, you can chat with your document! Click on "chat" in the upper right corner and start chatting!
GitOps Repository: https://github.com/VincentG1234/MLops_ENSAE_gitops
An intelligent web application that enables users to upload documents and engage in conversations about their content using advanced Large Language Model technology. Built with FastAPI, Firebase authentication, and Gemini's models.
- Secure Authentication: User management through Firebase authentication
- Document Processing:
- Support for multiple file formats (PDF, DOCX, TXT, MD)
- Automatic conversion to markdown format
- Smart chunking for optimal processing
- Intelligent Chat Interface:
- Context-aware conversations about uploaded documents
- Source attribution for answers
- Persistent chat history
- Vector Database: Efficient document storage and retrieval using Chroma
- Modern UI: Responsive design with Bootstrap 5
- Background Processing: Asynchronous document processing and database generation
- Python 3.10 or 3.11
- Google API Key
- Firebase project credentials
- Docker (optional, for containerized deployment)
- Kubernetes cluster access (for production deployment)
- Clone the Repository
git clone https://github.com/VincentG1234/MLops_ENSAE.git
cd MLops_ENSAE- Set Up Virtual Environment
Linux/MacOS:
python3 -m venv venv
source venv/bin/activateWindows:
python -m venv .venv
.venv\Scripts\activate- Install Dependencies
pip install -r requirements.txt
pip install "unstructured[md]"Create a free API key with your Google account at: https://aistudio.google.com/app/apikey?hl=a
Create a .env file and add the following:
API_KEY_GOOGLE=your_api_key_hereContact us for the Firebase_config.json file (it's just a file giving the credentials for the Google Authentication service), then upload it in the config folder:
app/config/firebase_config.jsonRun the following command to execute the tests manually.
pytestcd app
python -m uvicorn main:app --reloadGo here: https://gemini-chat-app.lab.sspcloud.fr
Our application follows GitOps principles using ArgoCD and Kubernetes manifests to manage production infrastructure.
- Preβcommit checks
- On every commit,
pre-commit-config.yamlruns Black to enforce code formatting.
- On every commit,
- GitHub Actions
- Linting and unit tests execute via the workflows in
.github/workflows/. - Only tagged commits (e.g.,
v1.2.3) proceed to deployment.
- Linting and unit tests execute via the workflows in
All production deployment manifests live in a dedicated repo:
π MLops_ENSAE_gitops
MLops_ENSAE_gitops/
βββ application.yaml # ArgoCD Application definition
βββ deployment/
βββ deployment.yaml # Kubernetes Deployment spec
βββ service.yaml # Kubernetes Service spec
βββ ingress.yaml # Ingress rules
- Build & Push: Container image is built and pushed to DockerΒ Hub.
- Sync: ArgoCD continuously watches the GitOps repo.
- Apply: On manifest changes, ArgoCD updates the cluster.
- Route: Ingress controller exposes the app to end users.
- Go to: https://gemini-chat-app.lab.sspcloud.fr
- Sign in with the shared test account:
- Username: test@gmail.com
- Password: azerty
- Upload a document and begin chatting!
βΈ»
- Inspect logs: kubectl logs -l app=gemini-chat-app -n
- Check ArgoCD status: In the ArgoCD UI, ensure the Application is Synced and Healthy.
- Validate secrets & configs: Confirm all Kubernetes Secrets and ConfigMaps are present and upβtoβdate.
Still need help? Reach out to us by WhatsApp or email.
This project is licensed under the MIT License - see the LICENSE file for details.
The MLOps implementation, including the GitOps deployment and production infrastructure, was developed by:
- Pierre Clayton (pierre.clayton@ensae.fr)
- Vincent Gimenes (vincent.gimenes@ensae.fr)
- Anna Mosaki (anna.mosaki@ensae.fr)
The initial version of this project was developed as part of the Infrastructure & Systèmes Logiciels course by:
- Marion Chabrol
- Pierre Clayton
- Vincent Gimenes
- Suzie Grondin
- Anna Mosaki
- GitHub Repository: https://github.com/Pierre-Clayton/Project-I-SL