Spaces:
Sleeping
Sleeping
Update src/services/analysis_service.py
Browse files
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)}
|