o
    ]<h                     @   s^   d dl Z d dlZ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mZ G dd dZdS )    N)DictListAnyOptional)Groq)SCENARIO_GENERATION_PROMPTCHARACTER_ROLEPLAY_PROMPTSKILL_ANALYSIS_PROMPTget_skill_analysis_templatec                	   @   s   e Zd Zdd Zdeeef deeeef  fddZdeeef de	eeef  d	edee fd
dZ
deeef de	eeef  deeeef  fddZdS )GroqServicec                 C   s,   t d}|stdt|d| _d| _d S )NGROQ_API_KEYz/GROQ_API_KEY not found in environment variables)api_keyzllama3-70b-8192)osgetenv
ValueErrorr   clientmodel)selfr    r   V/var/www/eduai.edurigo.com/doc_train/edurigo_ai/roleplay/prod/services/groq_service.py__init__   s
   

zGroqService.__init__admin_inputreturnc              
   C   s  zst j|d |d |d d|d d}| jjjjddd	d
|d	g| jddd}|jd j	j
 }z|dr?|dd }|drJ|dd }t|W W S  tjys } ztd|  td|  W Y d}~W dS d}~ww  ty } ztd|  W Y d}~dS d}~ww )z-Generate structured scenario from admin inputcategory	objectivedetails, skills_to_assess)r   r   r   skillssystemzHYou are a training scenario expert. Always respond with valid JSON only.rolecontentusergffffff?i   messagesr   temperature
max_tokensr   ```json   N```zJSON parsing error: Response text: zError generating scenario: )r   formatjoinr   chatcompletionscreater   choicesmessager"   strip
startswithendswithjsonloadsJSONDecodeErrorprint	Exception)r   r   promptresponseresponse_texter   r   r   generate_scenario   sJ   



zGroqService.generate_scenarioscenarioconversation_historyuser_messagec           
      C   s  zqd}|D ]}|d dkrdn|d d }|| d|d  d	7 }qt j|d d |d d
 |d d |d d |d dd|d d |d d |d d ||d
}| jjjjdddd|dg| jddd}|jd j	j
 W S  ty }	 ztd|	  W Y d}	~	dS d}	~	ww )z&AI character responses during roleplay speakerlearnerLearnerai_charactername: r3   
personalitygoals
backgroundemotional_stateneutralscenario_setupcontextenvironmentconstraints)
character_namerL   rM   rN   rO   rR   rS   rT   rB   rC   r   zbYou are a roleplay character. Stay in character at all times. Respond naturally and realistically.r    r#   g?i   r$   r   zError in character roleplay: Nz:I'm having trouble responding right now. Please try again.)r   r-   getr   r/   r0   r1   r   r2   r3   r"   r4   r;   r:   )
r   rA   rB   rC   history_textturnrE   r<   r=   r?   r   r   r   play_characterC   sF   








zGroqService.play_characterconversation_turnsc                    s  zd}|D ]}|d dkrdnd}|| d|d  d7 }qd	|d
  d|d  d|d d  d|d  d|d d  d|d d  d}|d }t |}tjd||||d}	| jjjjdddd|	dg| jddd }
|
j	d! j
j }z2|d"r|d#d$ }|d%r|d$d& }t| t fd'd(d)D std* W W d$S  W W S  tjy } ztd+|  td,|  W Y d$}~W d$S d$}~ww  ty } ztd-|  W Y d$}~d$S d$}~ww ).zComprehensive skill analysisrD   rE   rF   rG   zAI CharacterrJ   r3   rK   z
Category: r   z
Objective: r   z

Context: rQ   rR   z
Success Criteria: success_criteriaz
AI Character: rH   rI   z - rN   r   r   )r   scenario_contextconversationskill_analysis_templater   z`You are an expert skill assessor. Provide detailed, accurate analysis in valid JSON format only.r    r#   g333333?i  r$   r   r(   r)   Nr*   r+   c                 3   s    | ]}| v V  qd S )Nr   ).0keyanalysisr   r   	<genexpr>   s    z-GroqService.analyze_skills.<locals>.<genexpr>)skill_analysisoverall_performanceconversation_analysisrecommendationszAnalysis missing required keysz JSON parsing error in analysis: r,   zError analyzing skills: )r
   r	   r-   r.   r   r/   r0   r1   r   r2   r3   r"   r4   r5   r6   r7   r8   allr:   r9   r;   )r   rA   rZ   conversation_textrX   rE   r\   r   skill_templater<   r=   r>   r?   r   ra   r   analyze_skillso   sx   







zGroqService.analyze_skillsN)__name__
__module____qualname__r   r   strr   r   r@   r   rY   rk   r   r   r   r   r      s
    &2.:,r   )r   r7   typingr   r   r   r   groqr   config.promptsr   r   r	   r
   r   r   r   r   r   <module>   s    