
    @i}                     `    S SK JrJrJrJr  S SKJr  S SKJr  S SK	J
r
  S SKJr   " S S5      rg)	    )DictListAnyOptional)RoleplayScenario)GroqService)OllamaService)JSONHandlerc            "           \ rS rSrSS jrS\4S jr   SS\S\S\S	\\\	4   S
\S\S\
\   S\S\S\
\\\4      S\S\S\S\S\S\\   4 S jjrS\S\S\\   4S jrS\S\
\\\	4      4S jrS\S\
\   4S jrSrg)ScenarioGenerator   Nc                     U=(       d
    [        5       U l        U=(       d
    [        5       U l        [	        5       U l        g N)r   groq_servicer	   ollama_servicer
   json_handler)selfr   r   s      M/var/www/eduai.edurigo.com/roleplay/production/services/scenario_generator.py__init__ScenarioGenerator.__init__   s*    (9KM,?'M    use_groqc                 @    U(       a  U R                   $ U R                  $ )z9Get the appropriate AI service based on groqRoleplay flag)r   r   )r   r   s     r   _get_ai_service!ScenarioGenerator._get_ai_service   s    $,t  E$2E2EEr   
session_idcategory	objectivedetailsai_rolelearner_roleskills_to_assessis_adminroleplay_questionsroleplay_namerole
difficultydurationmax_attemptsreturnc                 H  ^#    [        U5      S:  a  USS nUUUUUUU
S.nU R                  U	5      nUR                  U5      I Sh  vN mT(       d  g/ SQn[        U4S jU 5       5      (       d  [	        SU 35        g[
        R                  " S0 SU_SU_S	U_S
U_SU_SU_SU_STS   _STS   _STS   _STS   _STS   _SU
_SU_SU=(       d    U_SU_SU_SU_6nU R                  R                  UR                  5       X5      (       a  U$ [	        S5        g N7f)zCreate a new roleplay scenario   N)r   r   r   r    r!   r"   r$   )scenario_setupai_characterscenario_introconversation_startersuccess_criteriac              3   ,   >#    U  H	  oT;   v   M     g 7fr    ).0keyscenario_datas     r   	<genexpr>4ScenarioGenerator.create_scenario.<locals>.<genexpr>1   s     A=C-'=s   z*Generated scenario missing required keys: r   r   r   r   r    r!   r"   r-   r.   r/   r0   r1   r$   r%   r&   r'   r(   r)   zFailed to save scenarior3   )
lenr   generate_scenarioallprintr   
create_newr   save_scenarioto_dict)r   r   r   r   r   r    r!   r"   r#   r   r$   r%   r&   r'   r(   r)   admin_input
ai_servicerequired_keysscenarior6   s                       @r   create_scenario!ScenarioGenerator.create_scenario   s      1$/3 !"( 0"4
 ))(3
(::;GG yA=AAA>}oNO $.. 
!

  
 	

 
 &
 .
 ))9:
 '~6
 ))9:
 "//E!F
 ++=>
  2
 (
 %
  "!
" #
$ &%
, **8+;+;+=xTTO+,M Hs   AD"D CD"c                 t    U R                   R                  X5      nU(       a  [        R                  " U5      $ g)zLoad an existing scenarioN)r   load_scenarior   	from_dict)r   r   r#   r6   s       r   rG   ScenarioGenerator.load_scenarioR   s/    ))77
M#--m<<r   c                 8    U R                   R                  U5      $ )zList all available scenarios)r   list_scenarios)r   r#   s     r   list_available_scenarios*ScenarioGenerator.list_available_scenariosY   s      //99r   c                 N    / SQ/ SQ/ SQ/ SQ/ SQS.nUR                  U/ SQ5      $ )z'Get default skills for a given category)zPolicy AdherenceEmpathyzCommunication ClarityzConflict ResolutionProblem Solving)zNeeds AssessmentzProduct Knowledge
PersuasionzObjection HandlingzRelationship Building)zDecision MakingzTeam Communication
Motivation
DelegationzConflict Management)PreparationzActive ListeningzCreative Problem Solving
CompromisezRelationship Management)zProblem DiagnosiszTechnical CommunicationPatienceDocumentationz	Follow-up)zCustomer ServiceSales
LeadershipNegotiationzTechnical Support)CommunicationrP   ProfessionalismAdaptabilityzResults Orientation)get)r   r   skill_mappingss      r   get_default_skills_for_category1ScenarioGenerator.get_default_skills_for_category]   s?    !";$
L !!( -
  	r   )r   r   r   )NN)TN rb   mediumi,     )__name__
__module____qualname____firstlineno__r   boolr   strr   r   r   intr   r   rD   rG   rL   r`   __static_attributes__r3   r   r   r   r      s0   *F F Z^RZ@A	> >s >s >]abegjbj]k > #>36>JNs)>_b>!%>BFtCQTH~BV> '*> 7:> MP> "%	> ;>	> GOO_F`	>@ s xHX?Y : :d38n9M :. .S	 .r   r   N)typingr   r   r   r   models.scenarior   services.groq_servicer   services.ollama_servicer	   utils.json_handlerr
   r   r3   r   r   <module>rr      s#    , , , - 1 *D Dr   