File size: 4,416 Bytes
4e9b744
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from typing import List, Optional, Dict, Any
from pydantic import BaseModel, Field

# --- Ice Breaker Agent ---

class IceBreakerOutput(BaseModel):
    profil_type: str = Field(..., description="Type de profil (reconversion, étudiant, junior, expérimenté)")
    annees_experience_domaine: str = Field(..., description="Années d'expérience dans le domaine cible (0-2, 2-5, 5+)")
    coherence_parcours: str = Field(..., description="Cohérence parcours -> poste visé (forte, moyenne, faible)")
    motivation_detectee: bool = Field(..., description="Motivation exprimée")
    contexte_specifique: str = Field(..., description="Contexte spécifique du candidat")
    points_a_explorer: List[str] = Field(default_factory=list, description="Points à explorer dans la suite")

# --- Technical Agent ---

class TechnicalSkillGap(BaseModel):
    skill: str
    niveau_detecte: int = Field(..., description="Niveau détecté (0-4)")
    indicateurs: Dict[str, bool] = Field(..., description="Indicateurs binaires (concept_sous_jacent, experience_liee, outil_adjacent, cas_usage, strategie_montee)")
    transferabilite: str = Field(..., description="Transférabilité (faible, moyenne, forte)")
    questions_posees: List[str] = Field(default_factory=list)

class ProjectTechUnderstanding(BaseModel):
    skill: str
    source_projet: str
    score: int = Field(..., description="Score (1-5)")
    indicateurs: Dict[str, bool] = Field(..., description="Indicateurs binaires (justifie_choix, fonctionnement_interne, identifie_limites, propose_alternatives, quantifie_resultats, resolution_probleme)")
    questions_posees: List[str] = Field(default_factory=list)

class ValidatedSkill(BaseModel):
    skill: str
    score: int
    source: str

class TechnicalOutput(BaseModel):
    competences_validees: List[ValidatedSkill] = Field(default_factory=list)
    lacunes_explorees: List[TechnicalSkillGap] = Field(default_factory=list)
    comprehension_technos_projets: List[ProjectTechUnderstanding] = Field(default_factory=list)
    score_technique_global: float = Field(..., description="Score technique global calculé")
    points_a_explorer_comportemental: List[str] = Field(default_factory=list)

# --- Behavioral Agent ---

class BehavioralCompetency(BaseModel):
    competence: str
    score: int = Field(..., description="Score (1-5)")
    indicateurs: Dict[str, bool] = Field(..., description="Indicateurs binaires spécifiques à la compétence")
    questions_posees: List[str] = Field(default_factory=list)

class SJTResult(BaseModel):
    scenario_id: str
    choix: str
    score_choix: float
    justification_score: float
    score_sjt: float

class BehavioralOutput(BaseModel):
    competences_evaluees: List[BehavioralCompetency] = Field(default_factory=list)
    sjt_results: List[SJTResult] = Field(default_factory=list)
    score_comportemental_global: float = Field(..., description="Score comportemental global calculé")
    signaux_forts: List[str] = Field(default_factory=list)
    signaux_faibles: List[str] = Field(default_factory=list)
    points_a_integrer_mise_en_situation: List[str] = Field(default_factory=list)

# --- Situation Agent ---

class SituationOutput(BaseModel):
    scenario_utilise: str
    score_mise_en_situation: int = Field(..., description="Score sur 5")
    indicateurs: Dict[str, bool] = Field(..., description="Indicateurs (comprehension_probleme, demarche_structuree, pertinence_technique, gestion_contraintes, communication_solution, identification_risques, proposition_alternatives)")
    questions_posees: List[str] = Field(default_factory=list)
    observations: str

# --- Full Report ---

class SimulationReport(BaseModel):
    icebreaker: Optional[IceBreakerOutput] = None
    technical: Optional[TechnicalOutput] = None
    behavioral: Optional[BehavioralOutput] = None
    situation: Optional[SituationOutput] = None
    
    score_global: float = Field(..., description="Score global de l'entretien sur 5")
    synthese_candidat: str = Field(..., description="Synthèse textuelle du profil")
    points_forts: List[str] = Field(default_factory=list, description="Top 3 points forts")
    points_faibles: List[str] = Field(default_factory=list, description="Top 3 points faibles")
    recommandation: str = Field(..., description="GO / NO GO / A CREUSER")
    feedback_candidat: str = Field(..., description="Feedback constructif adressé au candidat")