
    "h:                     h    d dl mZmZmZmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ  G d d      Zy)	    )DictListAnyOptional)RoleplayScenario)SkillAssessment
SkillScoreConversationTurn)GroqService)JSONHandlerc            	           e Zd Zd Zdededee   dee	   fdZ
dedefdZdedee	   fd	Zdeeeef      fd
Zdee	   deeef   fdZdee   defdZy)SkillAnalyzerc                 @    t               | _        t               | _        y N)r   groq_servicer   json_handlerselfs    FC:\Users\pusha\Downloads\roleplay_prototype\services\skill_analyzer.py__init__zSkillAnalyzer.__init__   s    'M'M    
session_idscenarioconversation_turnsreturnc                    |D cg c]  }|j                   |j                  d }}| j                  j                  |j	                         |      }|sy	 g }|j
                  D ]|  }||d   v s|d   |   }	t        |t        |	j                  dd            |	j                  dg       |	j                  dg       |	j                  dg       	      }
|j                  |
       ~ |rt        d
 |D              t        |      z  }nd}| j                  |      }t        j                  |j                  t!        |d      ||||j                  di       |j                  di             }| j"                  j%                  |j	                               r|S t'        d       yc c}w # t(        $ r}t'        d|        Y d}~yd}~ww xY w)z;Perform comprehensive skill analysis on a completed session)speakermessageNskill_analysisscorer   evidence	strengthsimprovement_areas)
skill_namer    r!   r"   r#   c              3   4   K   | ]  }|j                     y wr   )r    ).0r    s     r   	<genexpr>z0SkillAnalyzer.analyze_session.<locals>.<genexpr>1   s     #JEEKK#Js   g           conversation_analysisrecommendations)scenario_idoverall_scoreperformance_levelskill_scoresr   r)   r*   zFailed to save assessmentz"Error processing analysis result: )r   r   r   analyze_skillsto_dictskills_to_assessr	   intgetappendsumlen_determine_performance_levelr   
create_newidroundr   save_assessmentprint	Exception)r   r   r   r   turnconversation_dataanalysis_resultr.   r$   
skill_dataskill_scorer,   r-   
assessmentes                  r   analyze_sessionzSkillAnalyzer.analyze_session   s    +

   <<<<
 
 ++::8;K;K;MO`a-	L&77 5
1A!BB!01A!B:!NJ",#-!*..!"<=!+
B!?",..b"A*4..9Lb*Q#K !''45  ##J\#J JSQ]M^ ^ # !% A A- P )33$KK#M15"3)#5&5&9&9:QSU&V / 3 34Er JJ   001C1C1EF!!12o
r  	6qc:;	s*    FF" .D"F" F" "	G+F>>Gr,   c                 (    |dk\  ry|dk\  ry|dk\  ryy)z2Determine performance level based on overall scoreg      "@Expertg      @Advancedg      @IntermediateBeginner )r   r,   s     r   r7   z*SkillAnalyzer._determine_performance_levelN   s&    Cc!c!!r   c                 h    | j                   j                  |      }|rt        j                  |      S y)zLoad an existing assessmentN)r   load_assessmentr   	from_dict)r   r   assessment_datas      r   rM   zSkillAnalyzer.load_assessmentY   s/    ++;;JG",,_==r   c                 6    | j                   j                         S )zList all assessments)r   list_assessmentsr   s    r   rQ   zSkillAnalyzer.list_assessments`   s      1133r   assessmentsc                 F   |si S i }g }|D ]a  }|j                  |j                         |j                  D ]5  }|j                  }||vrg ||<   ||   j                  |j                         7 c i }|j                         D ]S  \  }}t        t        |      t        |      z  d      t        |      |d   t        |      dkD  r|d   |d   z
  ndd||<   U t        |      t        t        |      t        |      z  d      t        |      |d   || j                  |      dS )z7Generate summary statistics across multiple assessmentsr(   r   )average_score
best_scorelatest_scoreimprovement)total_sessionsoverall_averagebest_overalllatest_overallskill_breakdownperformance_trend)r4   r,   r.   r$   r    itemsr:   r5   r6   max_calculate_trend)	r   rR   rA   overall_scoresrC   rB   r$   skill_averagesscoress	            r   get_skill_summaryzSkillAnalyzer.get_skill_summaryd   sH   I 
% 	AJ!!*":":;)66 A(33
Z/-/Jz*:&--k.?.?@	A	A ","2"2"4 	J!&s6{S['@!!D!&k &r
9<VqvbzF1I5a	*N:&	 "+.$S%83~;N%NPQR/,R0-!%!6!6~!F
 	
r   rd   c                     t        |      dk  ryt        |dd       t        |dd       z  }t        |dd       t        |dd       z  }||z
  }|dkD  ry|dk  ry	y
)zCalculate performance trend   zInsufficient dataN   g      ?	Improvingg      	DecliningStable)r6   r5   )r   rd   
recent_avg	early_avgrX   s        r   ra   zSkillAnalyzer._calculate_trend   sq    v;?&%F23K(88
r
Oc&!*o5	 9,4r   N)__name__
__module____qualname__r   strr   r   r
   r   r   rE   floatr7   rM   r   r   rQ   re   ra   rK   r   r   r   r      s    *@# @9I @+/0@+A@FNF_@D	% 	C 	# (?2K 4$tCH~"6 4#
T/-B #
tCQTH~ #
JtE{ s r   r   N)typingr   r   r   r   models.scenarior   models.assessmentr   r	   r
   services.groq_servicer   utils.json_handlerr   r   rK   r   r   <module>ry      s&    , , , K K - *Q Qr   