o
    s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edee 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   Y/var/www/eduai.edurigo.com/doc_train/edurigo_ai/roleplay/testing/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userffffff?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: r4   
personalitygoals
backgroundemotional_stateneutralscenario_setupcontextenvironmentconstraints)
character_namerM   rN   rO   rP   rS   rT   rU   rC   rD   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   r0   r1   r2   r   r3   r4   r"   r5   r<   r;   )
r   rB   rC   rD   history_textturnrF   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 analysisrE   rF   rG   rH   zAI CharacterrK   r4   rL   z
Category: r   z
Objective: r   z

Context: rR   rS   z
Success Criteria: success_criteriaz
AI Character: rI   rJ   z - rO   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   r0   r1   r2   r   r3   r4   r"   r5   r6   r7   r8   r9   allr;   r:   r<   )r   rB   r[   conversation_textrY   rF   r]   r   skill_templater=   r>   r?   r@   r   rb   r   analyze_skillso   sx   







zGroqService.analyze_skillsr=   c              
   C   st   z| j jjjdddd|dg| jddd}|jd jj W S  t	y9 } zt
d	|  W Y d
}~d
S d
}~ww )z)Get a simple text completion from the LLMr   z]You are a helpful assistant. Provide clear, natural responses without any formatting symbols.r    r#   r$   i  r%   r   zError getting completion: N)r   r0   r1   r2   r   r3   r4   r"   r5   r<   r;   )r   r=   r>   r@   r   r   r   get_completion   s&   

zGroqService.get_completionN)__name__
__module____qualname__r   r   strr   r   rA   r   rZ   rl   rm   r   r   r   r   r      s    &2.6,Hr   )r   r8   typingr   r   r   r   groqr   config.promptsr   r   r	   r
   r   r   r   r   r   <module>   s    