Spaces:
Sleeping
Sleeping
| import json | |
| from crewai import Crew, Process | |
| from .agents import report_generator_agent, skills_extractor_agent, experience_extractor_agent, project_extractor_agent, education_extractor_agent, ProfileBuilderAgent, informations_personnelle_agent, reconversion_detector_agent | |
| from .tasks import generate_report_task | |
| from typing import List | |
| def run_interview_analysis(conversation_history: list, job_description_text: str, analyzer_model, rag_handler) -> str: | |
| """ | |
| Analyse l'intégralité de la conversation et génère un rapport de feedback. | |
| Cette fonction est conçue pour être appelée en arrière-plan. | |
| """ | |
| structured_analysis = analyzer_model.run_full_analysis(conversation_history, job_description_text) | |
| rag_feedback = [] | |
| if structured_analysis.get("intent_analysis"): | |
| for intent in structured_analysis["intent_analysis"]: | |
| query = f"Conseils pour un candidat qui cherche à {intent['labels'][0]}" | |
| rag_feedback.extend(rag_handler.get_relevant_feedback(query)) | |
| if structured_analysis.get("sentiment_analysis"): | |
| for sentiment_group in structured_analysis["sentiment_analysis"]: | |
| for sentiment in sentiment_group: | |
| if sentiment['label'] == 'stress' and sentiment['score'] > 0.6: | |
| rag_feedback.extend(rag_handler.get_relevant_feedback("gestion du stress en entretien")) | |
| unique_feedback = list(set(rag_feedback)) | |
| interview_crew = Crew( | |
| agents=[report_generator_agent], | |
| tasks=[generate_report_task], | |
| process=Process.sequential, | |
| verbose=False, | |
| telemetry=False | |
| ) | |
| final_report = interview_crew.kickoff(inputs={ | |
| 'structured_analysis_data': json.dumps(structured_analysis, indent=2), | |
| 'rag_contextual_feedback': "\n".join(unique_feedback) | |
| }) | |
| return final_report | |
| def analyse_cv(cv_content: str) -> json: | |
| crew = Crew( | |
| agents=[ | |
| informations_personnelle_agent, | |
| skills_extractor_agent, | |
| experience_extractor_agent, | |
| project_extractor_agent, | |
| education_extractor_agent, | |
| reconversion_detector_agent, | |
| ProfileBuilderAgent | |
| ], | |
| tasks=[ | |
| task_extract_informations, | |
| task_extract_skills, | |
| task_extract_experience, | |
| task_extract_projects, | |
| task_extract_education, | |
| task_detect_reconversion, | |
| task_build_profile | |
| ], | |
| process=Process.sequential, | |
| verbose=False, | |
| telemetry=False | |
| ) | |
| result = crew.kickoff(inputs={"cv_content": cv_content}) | |
| return result |