# Projet ARC

## Contexte du Projet
ARC est une plateforme d'automatisation du développement logiciel basée sur un workflow multi-agents (IA). Le système orchestre plusieurs modèles d'IA spécialisés pour transformer un besoin utilisateur en un code source validé, testé et stocké.
___
### Étape 0 : Préparation de l'environnement du projet
Tâches :
- Créer backend minimal
- Créer modèle de données simple
- langGraph
___
### Étape 1 : Analyse du Besoin & Qualification (Agent PM / Business Analyst)
- L'utilisateur entre une demande en langage naturel.
- **Agent 1 (PM)** analyse la demande. Si des informations manquent pour coder, il pose des questions clarificatrices à l'utilisateur jusqu'à obtenir un cahier des charges complet.
- **Vérification BDD :** Avant de coder, le système cherche dans une base de données vectorielle si un projet similaire existe déjà.
  - *Si oui :* On propose le lien à l'utilisateur. Si l'utilisateur valide, le workflow s'arrête ici.
  - *Si non (ou si l'utilisateur rejette l'existant) :* On passe à l'étape 2.

Outils :
- LangGraph -> LangGraph est adapté aux workflows multi‑agents avec états, transitions conditionnelles, persistance et human‑in‑the‑loop
- Python -> backend, les agents, les appels LLM, les tests, les embeddings et les intégrations + compatible avec autres tools
- Pydantic AI / Pydantic -> forcer l’Agent PM à produire un cahier des charges structuré
- Chainlit -> adapté aux interfaces conversationnelles
	BDD :
- Qdrant -> adapté à la recherche sémantique +  stocker les embeddings de projets/scripts
- Snowflake Arctic Embed 2.0 -> modèle d’embedding
- Redis (optionnel) -> cache de recherche ;sessions utilisateur ;état temporaire ;verrouillage d’un workflow ;file d’attente simple
___
### Étape 2 : Génération de Code (Agent Développeur)
- **Agent 2 (Dev)** reçoit le cahier des charges validé et génère l'arborescence et le code source du projet.

Outils :
- LangGraph -> LangGraph est adapté aux workflows multi‑agents avec états, transitions conditionnelles, persistance et human‑in‑the‑loop
- Mistral ou Gemma (modèle trop généraliste/léger->tache simple) -> DeepSeek Coder/Qwen2.5
- vLLM -> meilleur choix qu’Ollama pour une plateforme plus industrialisée. Llama.cpp modèles quantifiés sur CPU ou machines modestes + moins adapté à une plateforme multi‑utilisateur
- Pydantic
___
### Étape 3 : Tests et Assurance Qualité (Agent QA / Testeur)
- **Agent 3 (QA)** récupère le code de l'Agent 2. Il doit exécuter le code (via une sandbox sécurisée) ou générer/exécuter des tests unitaires pour vérifier la qualité, la sécurité et le fonctionnement.
- **Boucle de correction automatique (Loop 1) :** Si les tests échouent, l'Agent 3 renvoie les erreurs à l'Agent 2 avec les logs. L'Agent 2 corrige et renvoie à l'Agent 3. Cette boucle tourne au maximum 3 fois jusqu'à ce que le code soit "vert".
- **EXTENSION FUTURE** si les tests échouent 3 fois, envoyé à une IA plus puissante.

Outils :
- Docker
- Ruff -> qualité de code
- Bandit -> sécurité
- Semgrep (optionnel) -> règles de sécurité et qualité plus larges
	Boucle correction :
- LangGraph
- Pydantic
___
### Étape 4 : Livraison & Feedback Utilisateur (Boucle Humaine)
- Une fois le code validé par l'Agent 3, il est présenté à l'utilisateur.
- L'utilisateur teste et valide.
  - *Si Validé :* Le projet est sauvegardé dans la base de données (pour la recherche de l'Étape 1) et livré (ex: zip ou dépôt GitHub).
  - *Si Refusé :* L'utilisateur indique ce qui ne va pas. Tout le contexte (code actuel + retours) est renvoyé à l'**Étape 1** pour réanalyse, et le cycle recommence.

Outils :
- Chainlit
- Git
___
### Étape finale :

Tâches :
- Tests fonctionnels de bout en bout
- Sécurité minimale
- Documentation finale
- Présentation

## Lancer le projet

```bash
chmod +x run_project.sh
./run_project.sh
```

## Structure du projet
```bash
ARC/
├── backend/
│   ├── app/
│   │   ├── agents/                     # Gestion agents IA
│   │   │   ├── pm_agent.py
│   │   │   ├── dev_agent.py
│   │   │   └── qa_agent.py
│   │   │
│   │   ├── api/
│   │   │   ├── routes/
│   │   │   │   ├── health.py
│   │   │   │   └── workflow.py
│   │   │   └── deps.py
│   │   │
│   │   ├── core/
│   │   │   ├── config.py
│   │   │   ├── logging.py
│   │   │   └── security.py
│   │   │
│   │   ├── graph/                      # LangGraph
│   │   │   ├── state.py
│   │   │   ├── nodes.py
│   │   │   └── workflow.py
│   │   │
│   │   ├── llm/                        # appels modèles
│   │   │   ├── client.py               # wrapper d’appel
│   │   │   ├── prompts.py              # prompts centralisés
│   │   │   └── providers.py            # Gemma/llama.cpp....
│   │   │
│   │   ├── models/                     # modèles métier / persistance (métadonnées d’un projet/version/statut/lien Git/hash/tags)
│   │   │   └── project.py
│   │   │
│   │   ├── repositories/               # accès externes, Qdrant / Redis / stockage
│   │   │   ├── qdrant_repository.py
│   │   │   ├── redis_repository.py
│   │   │   └── project_repository.py
│   │   │
│   │   ├── sandbox/
│   │   │   ├── qa_client.py
│   │   │   ├── main.py                 # Code exec dans le container sandbox
│   │   │   └── Dockerfile.qa
│   │   │
│   │   ├── schemas/                    # Pydantic 
│   │   │   ├── api.py
│   │   │   ├── spec.py
│   │   │   ├── code_output.py
│   │   │   ├── qa_report.py
│   │   │   └── project.py
│   │   │
│   │   ├── services/
│   │   │   ├── workflow_service.py
│   │   │   ├── embedding_service.py
│   │   │   ├── retrieval_service.py
│   │   │   └── delivery_service.py
│   │   │
│   │   └─── main.py
│   │
│   ├── public/
│   │   ├── logo_dark.png
│   │   └── logo_light.png
│   │
│   ├── tests/
│   │   ├── test_health.py
│   │   ├── test_workflow.py
│   │   ├── test_agents.py
│   │   ├── test_gemma.py
│   │   ├── test_mistral.py
│   │   ├── test_qdrant.py
│   │   └── test_snowflake.py
│   │
│   ├── .env
│   ├── chainlit_app.py
│   ├── chainlit_fr_FR.md
│   ├── docker-compose-ai.yml         # Conteneurs pour les agents et l'embedding
│   ├── docker-compose-infra.yml      # Conteneurs pour les BDD
│   ├── docker-compose-sandbox.yml    # Conteneur pour la sandbox/qa
│   ├── docker-compose.yml            # Conteneur de l'application
│   ├── Dockerfile
│   ├── README.md
│   ├── requirements.txt
│   └── start.sh                      # Lance les applications
│
└── orchestrator.py                   # Lance le projet
```