interview_agents_api / tests /test_simulation_flow.py
quentinL52
Initial commit
4e9b744
raw
history blame
3.34 kB
import os
import sys
import json
import logging
from dotenv import load_dotenv
# Add src to path
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
from src.services.graph_service import GraphInterviewProcessor
# Force re-configuration of logging
for handler in logging.root.handlers[:]:
logging.root.removeHandler(handler)
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
filename='simulation_test.log',
filemode='w'
)
logger = logging.getLogger(__name__)
load_dotenv()
# Mock data
USER_ID = "test_user"
JOB_OFFER_ID = "test_job"
CV_DATA = {
"candidat": {
"info_personnelle": {"nom": "Doe", "prenom": "John"},
"reconversion": {"is_reconversion": False},
"etudiant": {
"is_etudiant": True,
"niveau_etudes": "Master 2",
"specialite": "IA",
"latest_education_end_date": "2025"
},
"expériences": [{"poste": "Dev", "entreprise": "TestCorp", "durée": "2 ans"}],
"compétences": {
"hard_skills": ["Python", "Docker"],
"soft_skills": ["Curiosité"],
"skills_with_context": [
{"skill": "Python", "context": "Projet académique"},
{"skill": "Docker", "context": "Stage"}
]
},
"projets": {
"professional": [
{
"title": "Projet A",
"technologies": ["Python", "Flask"],
"outcomes": ["API déployée", "User base +10%"]
}
],
"personal": []
},
"centres_interet": ["Football", "Voyage"]
}
}
JOB_OFFER = {
"poste": "Backend Developer",
"entreprise": "AIRH",
"mission": "Develop API",
"profil_recherche": "Passionné",
"competences": "Python, FastAPI"
}
PAYLOAD = {
"user_id": USER_ID,
"job_offer_id": JOB_OFFER_ID,
"cv_document": CV_DATA,
"job_offer": JOB_OFFER,
"messages": []
}
def run_simulation_start():
logger.info("Initializing Processor for START SCENARIO...")
processor = GraphInterviewProcessor(PAYLOAD)
# 0 messages -> Should trigger IceBreaker first message
output = processor.invoke([])
logger.info(f"\n=== START OF INTERVIEW ===")
logger.info(f"Agent Response: {output['response']}")
logger.info(f"Status: {output['status']}")
def run_simulation_end():
logger.info("Initializing Processor for END SCENARIO...")
processor = GraphInterviewProcessor(PAYLOAD)
# Simulate a history with 10 user messages (Completed flow)
# The Orchestrator counts only HUMAN messages.
conversation = []
for i in range(10):
conversation.append({"role": "user", "content": f"Response {i+1}"})
conversation.append({"role": "assistant", "content": f"Question {i+2}"})
logger.info(f"\n=== TRIGGERING END OF INTERVIEW (10 User Messages) ===")
output = processor.invoke(conversation)
logger.info(f"Final Agent Response: {output['response'][:100]}...")
logger.info(f"Final Status: {output['status']}")
if __name__ == "__main__":
try:
run_simulation_start()
# run_simulation_end()
except Exception as e:
logger.error(f"Simulation failed: {e}", exc_info=True)