Ë
    `7›h¶  ã                   ót   — d dl mZmZmZmZ d dlmZ d dlZd dlmZ d dl	m
Z
 d dlmZ d dlmZ  G d„ d	«      Zy)
é    )ÚDictÚListÚAnyÚOptional)ÚdatetimeN)ÚRoleplayScenario)ÚConversationTurn)ÚGroqService)ÚJSONHandlerc            	       óÂ   — e Zd Zd„ Zdedefd„Zdedededee   fd„Zdede	fd„Z
dedeeeeef         fd	„Zdedeee      fd
„Zdede	fd„Zdedeeeef      fd„Zy)ÚRoleplayEnginec                 ó@   — t        «       | _        t        «       | _        y )N)r
   Úgroq_servicer   Újson_handler)Úselfs    úOC:\Users\pusha\Downloads\roleplay_prototype_edurigo\services\roleplay_engine.pyÚ__init__zRoleplayEngine.__init__
   s   € Ü'›MˆÔÜ'›MˆÕó    ÚscenarioÚreturnc           	      ó<  — t        t        j                  «       «      }||j                  t	        j
                  «       j                  «       ddd|j                  t	        j
                  «       j                  «       dœgdœ}| j                  j                  ||«       |S )zStart a new roleplay sessionÚactiveé   Úsystem©Úturn_numberÚspeakerÚmessageÚ	timestamp)Ú
session_idÚscenario_idÚ
started_atÚstatusÚturns)
ÚstrÚuuidÚuuid4Úidr   ÚnowÚ	isoformatÚscenario_intror   Úsave_conversation)r   r   r    Úconversation_datas       r   Ústart_sessionzRoleplayEngine.start_session   s‡   € äœŸ™›Ó&ˆ
ð %Ø#Ÿ;™;Ü"Ÿ,™,›.×2Ñ2Ó4Øð $%Ø'Ø'×6Ñ6Ü!)§¡£×!9Ñ!9Ó!;ñ	ðñ
Ðð  	×Ñ×+Ñ+¨JÐ8IÔJàÐr   r    Úlearner_messagec                 óº  — | j                   j                  |«      }|syt        |d   «      dz   }|d|t        j                  «       j                  «       dœ}|d   j                  |«       |d   D cg c]  }|d   dk(  sŒ|‘Œ }}t        |«      dk(  }	|	r|j                  }
nQ|d   dd D cg c]  }|d   dk7  r|d   |d	   d
œ‘Œ }}| j                  j                  |j                  «       ||«      }
|
sy|dz   d|
t        j                  «       j                  «       dœ}|d   j                  |«       | j                   j                  ||«       |
S c c}w c c}w )z%Add learner response and get AI replyNr$   r   Úlearnerr   r   éÿÿÿÿr   r   )r   r   Úai)r   Úload_conversationÚlenr   r)   r*   ÚappendÚconversation_starterr   Úplay_characterÚto_dictr,   )r   r    r   r/   r-   r   Úlearner_turnÚturnÚlearner_turnsÚis_first_learner_responseÚai_responseÚconversation_historyÚai_turns                r   Úadd_learner_responsez#RoleplayEngine.add_learner_response'   s—  € ð !×-Ñ-×?Ñ?À
ÓKÐÙ Øô Ð+¨GÑ4Ó5¸Ñ9ˆà&Ø Ø&Ü!Ÿ™›×1Ñ1Ó3ñ	
ˆð 	˜'Ñ"×)Ñ)¨,Ô7ð +<¸GÑ*DÖe $ÈÈYÉÐ[dÓHdšÐeˆÐeÜ$'¨Ó$6¸!Ñ$;Ð!á$à"×7Ñ7‰Kð .¨gÑ6°s¸Ð;ö$ð
 ¸tÀI¹ÐRZÒ?Zð  $ I™Ø# I™óð$Ð ð $ð ×+Ñ+×:Ñ:Ø× Ñ Ó"Ø$ØóˆKñ Øð '¨™?ØØ"Ü!Ÿ™›×1Ñ1Ó3ñ	
ˆð 	˜'Ñ"×)Ñ)¨'Ô2ð 	×Ñ×+Ñ+¨JÐ8IÔJàÐùòM fùò$s   Á2EÂ EÂ-Ec                 óÊ   — | j                   j                  |«      }|syd|d<   t        j                  «       j	                  «       |d<   | j                   j                  ||«      S )zEnd a roleplay sessionFÚ	completedr#   Úended_at)r   r4   r   r)   r*   r,   ©r   r    r-   s      r   Úend_sessionzRoleplayEngine.end_sessionb   s^   € à ×-Ñ-×?Ñ?À
ÓKÐÙ Øà&1Ð˜(Ñ#Ü(0¯©«×(@Ñ(@Ó(BÐ˜*Ñ%à× Ñ ×2Ñ2°:Ð?PÓQÐQr   c                 óH   — | j                   j                  |«      }|sy|d   S )zGet full conversation historyNr$   )r   r4   rE   s      r   Úget_conversation_historyz'RoleplayEngine.get_conversation_historym   s*   € à ×-Ñ-×?Ñ?À
ÓKÐÙ Øà  Ñ)Ð)r   c                 ó²   — | j                   j                  |«      }|syg }|d   D ].  }t        |d   |d   |d   |d   ¬«      }|j                  |«       Œ0 |S )z/Get conversation turns formatted for assessmentNr$   r   r   r   r   r   )r   r4   r	   r6   )r   r    r-   r$   Ú	turn_datar;   s         r   Ú%get_conversation_turns_for_assessmentz4RoleplayEngine.get_conversation_turns_for_assessmentu   sw   € à ×-Ñ-×?Ñ?À
ÓKÐÙ ØàˆØ*¨7Ñ3ò 	ˆIÜ#Ø% mÑ4Ø! )Ñ,Ø! )Ñ,Ø# KÑ0ô	ˆDð L‰L˜Õð	ð ˆr   c                 óh   — | j                   j                  |«      }|sy|j                  dd«      dk(  S )z"Check if a session is still activeFr#   r   )r   r4   ÚgetrE   s      r   Úis_session_activez RoleplayEngine.is_session_active‡   s7   € à ×-Ñ-×?Ñ?À
ÓKÐÙ Øà ×$Ñ$ X¨xÓ8¸HÑDÐDr   c                 ó¸   — | j                   j                  |«      }|sy|d   |d   |d   |j                  dd«      t        |d   «      |j                  d«      d	œS )
zGet basic session informationNr    r!   r"   r#   r   r$   rD   )r    r!   r"   r#   Ú
turn_countrD   )r   r4   rM   r5   rE   s      r   Úget_session_infozRoleplayEngine.get_session_info   so   € à ×-Ñ-×?Ñ?À
ÓKÐÙ Øð ,¨LÑ9Ø,¨]Ñ;Ø+¨LÑ9Ø'×+Ñ+¨H°hÓ?ÜÐ/°Ñ8Ó9Ø)×-Ñ-¨jÓ9ñ
ð 	
r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r%   r.   r   rA   ÚboolrF   r   r   r   rH   r	   rK   rN   rQ   © r   r   r   r   	   s×   „ ò*ðÐ&6ð ¸3ó ð29¨sð 9Ð>Nð 9Ðadð 9ÐiqÐruÑivó 9ðv	R cð 	R¨dó 	Rð*°3ð *¸8ÀDÈÈcÐSVÈhÉÑDXÑ;Yó *ðÀð ÈÐQUÐVfÑQgÑHhó ð$E¨Cð E°Dó Eð
¨3ð 
°8¸DÀÀcÀ¹NÑ3Kô 
r   r   )Útypingr   r   r   r   r   r&   Úmodels.scenarior   Úmodels.assessmentr	   Úservices.groq_servicer
   Úutils.json_handlerr   r   rV   r   r   ú<module>r\      s)   ðß ,Ó ,Ý Û Ý ,Ý .Ý -Ý *÷S
ò S
r   