File size: 3,681 Bytes
90d6a84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Interview Simulation API Documentation

Cette documentation détaille l'utilisation de l'API de simulation d'entretiens, motorisée par LangGraph et FastAPI.

## Introduction

L'**Interview Simulation API** permet de mener des simulations d'entretiens d'embauche réalistes. Elle utilise un système d'agents spécialisés (Icebreaker, Auditeur, Enquêteur, Stratège, Projecteur) pour évaluer un candidat par rapport à une offre d'emploi spécifique.

**Base URL:** `http://localhost:7860` (ou URL de déploiement)  
**Version:** `1.0.0`

## Configuration & Authentification

L'API utilise des variables d'environnement pour la configuration :
- `OPENAI_API_KEY`: Requis pour les agents LLM.
- `LANGTRACE_API_KEY`: Pour l'observabilité (Langtrace).
- `CORS_ORIGINS`: Liste des origines autorisées (défaut: `*`).

## Endpoints

### 1. Health Check
Vérifie que l'API est opérationnelle.

- **URL:** `/`
- **Method:** `GET`
- **Success Response (200 OK):**
  ```json
  {
    "status": "ok"
  }
  ```

### 2. Simulate Interview
Déclenche ou poursuit une simulation d'entretien.

- **URL:** `/simulate-interview/`
- **Method:** `POST`
- **Request Body:**
  ```json
  {
    "user_id": "string",          // ID unique de l'utilisateur
    "job_offer_id": "string",     // ID de l'offre d'emploi
    "cv_document": {              // Données extraites du CV
      "candidat": { ... }         // Voir section "Data Models"
    },
    "job_offer": {                // Détails de l'offre
      "poste": "string",
      "entreprise": "string",
      "mission": "string",
      ...
    },
    "messages": [                 // Historique de la conversation (optionnel)
      {
        "role": "user",
        "content": "Bonjour"
      },
      ...
    ],
    "cheat_metrics": { ... }      // Métriques anti-triche (optionnel)
  }
  ```

- **Success Response (200 OK):**
  ```json
  {
    "response": "Texte généré par l'agent IA",
    "status": "interviewing" | "interview_finished"
  }
  ```

- **Error Responses:**
  - `400 Bad Request`: Payload incomplet ou données invalides.
  - `500 Internal Server Error`: Erreur lors de l'exécution du graph LangGraph.

## Data Models (Schemas)

### Feedback Output (Output final de l'analyse)
Une fois l'entretien terminé, un rapport complet est généré (via Celery) suivant cette structure :

- **CandidatFeedback**: Points forts, axes d'amélioration, conseils, score global.
- **EntrepriseInsights**:
    - **Dashboard**: Technique, Cognitive, Comportementale (0-100).
    - **Decision**: RECRUTER, APPROFONDIR ou REJETER.
    - **Fraud Detection**: Score global d'usage d'IA, mots-clés détectés, alertes (red flags).

## Exemples d'Usage

### Exemple cURL
```bash
curl -X POST http://localhost:7860/simulate-interview/ \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "user_123",
    "job_offer_id": "job_456",
    "cv_document": { "candidat": { "first_name": "Jean", "expériences": [] } },
    "job_offer": { "poste": "Développeur Python", "entreprise": "TechCorp" },
    "messages": []
  }'
```

### Exemple Python (Requests)
```python
import requests

url = "http://localhost:7860/simulate-interview/"
payload = {
    "user_id": "user_123",
    "job_offer_id": "job_456",
    "cv_document": { "candidat": { "first_name": "Jean", "expériences": [] } },
    "job_offer": { "poste": "Développeur Python", "entreprise": "TechCorp" },
    "messages": [{"role": "user", "content": "Je suis prêt."}]
}

response = requests.post(url, json=payload)
print(response.json())
```

## Error Handling

Toutes les erreurs renvoient un format JSON standardisé :
```json
{
  "error": "Description de l'erreur"
}
```