QuentinL52 commited on
Commit
23603e1
·
verified ·
1 Parent(s): 00f0a9c

Update src/services/analysis_service.py

Browse files
Files changed (1) hide show
  1. src/services/analysis_service.py +51 -1
src/services/analysis_service.py CHANGED
@@ -44,4 +44,54 @@ class AnalysisService:
44
  def _get_contextual_feedback(self, structured_analysis: Dict[str, Any]) -> List[str]:
45
  rag_feedback = []
46
 
47
- if structured_analysis.get("intent_analysis
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  def _get_contextual_feedback(self, structured_analysis: Dict[str, Any]) -> List[str]:
45
  rag_feedback = []
46
 
47
+ if structured_analysis.get("intent_analysis"):
48
+ for intent in structured_analysis["intent_analysis"]:
49
+ query = f"Conseils pour un candidat qui cherche à {intent['labels'][0]}"
50
+ rag_feedback.extend(self.rag_handler.get_relevant_feedback(query))
51
+
52
+ if structured_analysis.get("sentiment_analysis"):
53
+ for sentiment_group in structured_analysis["sentiment_analysis"]:
54
+ for sentiment in sentiment_group:
55
+ if sentiment['label'] == 'stress' and sentiment['score'].item() > 0.6:
56
+ rag_feedback.extend(
57
+ self.rag_handler.get_relevant_feedback("gestion du stress en entretien")
58
+ )
59
+
60
+ return list(set(rag_feedback))
61
+
62
+ def _generate_final_report(
63
+ self,
64
+ structured_analysis: Dict[str, Any],
65
+ rag_feedback: List[str]
66
+ ) -> Dict[str, Any]:
67
+
68
+ task = Task(
69
+ description=(
70
+ f"Tu es un rédacteur expert en RH. Ta mission est de rédiger un rapport d'évaluation final. "
71
+ f"Tu dois utiliser deux sources d'information principales : "
72
+ f"1. Les données d'analyse structurées de l'entretien : '{json.dumps(structured_analysis, indent=2)}'. "
73
+ f"2. Une liste de conseils et de feedback pertinents issus de notre base de connaissances : '{chr(10).join(rag_feedback)}'. "
74
+ f"Ta tâche est de synthétiser ces informations en un rapport cohérent et actionnable."
75
+ ),
76
+ expected_output=(
77
+ "Un rapport final exceptionnel basé sur l'analyse fournie. Le rapport doit être structuré comme suit: "
78
+ "1. **Résumé et Score d'Adéquation** : Synthétise le score de similarité sémantique et donne un aperçu global. "
79
+ "2. **Analyse Comportementale** : Interprète les résultats de l'analyse de sentiment et d'intention pour décrire le comportement du candidat. "
80
+ "3. **Adéquation Sémantique avec le Poste** : Explique ce que signifie le score de similarité. "
81
+ "4. **Points Forts & Axes d'Amélioration Personnalisés** : Utilise les données d'analyse pour identifier les points à améliorer. "
82
+ "Ensuite, intègre de manière fluide et naturelle les conseils pertinents pour proposer des pistes d'amélioration concrètes et personnalisées. "
83
+ "5. **Recommandation Finale**."
84
+ ),
85
+ agent=self.report_agent
86
+ )
87
+
88
+ crew = Crew(
89
+ agents=[self.report_agent],
90
+ tasks=[task],
91
+ process=Process.sequential,
92
+ verbose=False,
93
+ telemetry=False
94
+ )
95
+
96
+ result = crew.kickoff()
97
+ return {"analysis_report": result.raw if hasattr(result, 'raw') else str(result)}