
    h!                     d    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      Zy)    N)DictListAnyOptional)Groq)SCENARIO_GENERATION_PROMPTCHARACTER_ROLEPLAY_PROMPTSKILL_ANALYSIS_PROMPTget_skill_analysis_templatec            	           e Zd Zd Zdeeef   deeeef      fdZdeeef   de	eeef      dedee   fdZ
deeef   d	e	eeef      deeeef      fd
Zdedee   fdZy)GroqServicec                 x    t        j                  d      }|st        d      t        |      | _        d| _        y )NGROQ_API_KEYz/GROQ_API_KEY not found in environment variables)api_keyzllama3-70b-8192)osgetenv
ValueErrorr   clientmodel)selfr   s     LC:\Users\pusha\Downloads\roleplay_prototype_edurigo\services\groq_service.py__init__zGroqService.__init__   s2    ))N+NOO7+&
    admin_inputreturnc           	         	 t        j                  |d   |d   |d   dj                  |d               }| j                  j                  j
                  j                  ddd	d
|d	g| j                  dd      }|j                  d   j                  j                  j                         }	 |j                  d      r|dd }|j                  d      r|dd }t        j                  |      S # t        j                   $ r&}t#        d|        t#        d|        Y d}~yd}~ww xY w# t$        $ r}t#        d|        Y d}~yd}~ww xY 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es         r   generate_scenariozGroqService.generate_scenario   sa   *	/66$Z0%k2#I.yy-?!@A	F {{''33:: !)#m
 !'#)	 jj ; H  %,,Q/77??EEGM ++I6$1!"$5M ))%0$1#2$6Mzz-00'' ,QC0178
  	/s34	s=   B*D* -A C. .D'D"D* "D''D* *	E3EEscenarioconversation_historyuser_messagec                 B   	 d}|D ]"  }|d   dk(  rdn|d   d   }|| d|d    d	z  }$ t        j                  |d   d   |d   d
   |d   d   |d   d   |d   j                  dd      |d   d   |d   d   |d   d   ||
      }| j                  j                  j
                  j                  dddd|dg| j                  dd      }|j                  d   j                  j                  j                         S # t        $ r}	t        d|	        Y d}	~	yd}	~	ww xY w)z&AI character responses during roleplay speakerlearnerLearnerai_charactername: r8   
personalitygoals
backgroundemotional_stateneutralscenario_setupcontextenvironmentconstraints)
character_namerR   rS   rT   rU   rX   rY   rZ   rG   rH   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	   r2   getr   r4   r5   r6   r   r7   r8   r&   r9   r@   r?   )
r   rF   rG   rH   history_textturnrK   rA   rB   rD   s
             r   play_characterzGroqService.play_characterC   s   (	PL, B'+I)'C)R`IabhIi7)2d9o->b AAB /55'7?$^4]C~.w7#N3LA ( 8 < <=NPY Z !129=$%56}E$%56}E%1)F {{''33:: !) $H
 !'#)	 jj ; H  ##A&..66<<>> 	P1!56O	Ps   C:C= =	DDDconversation_turnsc                    	 d}|D ]  }|d   dk(  rdnd}|| d|d    dz  } d	|d
    d|d    d|d   d    d|d    d|d   d    d|d   d    d}|d   }t        |      }t        j                  dj                  |      |||      }	| j                  j
                  j                  j                  dddd|	dg| j                  dd       }
|
j                  d!   j                  j                  j                         }	 |j                  d"      r|d#d$ }|j                  d%      r|d$d& }t        j                   |      t#        fd'd(D              st%        d)       y$S # t        j&                  $ r&}t%        d*|        t%        d+|        Y d$}~y$d$}~ww xY w# t(        $ r}t%        d,|        Y d$}~y$d$}~ww xY w)-zComprehensive skill analysisrJ   rK   rL   rM   zAI CharacterrP   r8   rQ   z
Category: r   z
Objective: r   z

Context: rW   rX   z
Success Criteria: success_criteriaz
AI Character: rN   rO   z - rT   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/   r0   c              3   &   K   | ]  }|v  
 y w)N ).0keyanalysiss     r   	<genexpr>z-GroqService.analyze_skills.<locals>.<genexpr>   s       Ms3(?  Ms   )skill_analysisoverall_performanceconversation_analysisrecommendationszAnalysis missing required keysz JSON parsing error in analysis: r1   zError analyzing skills: )r   r
   r2   r3   r   r4   r5   r6   r   r7   r8   r&   r9   r:   r;   r<   r=   allr?   r>   r@   )r   rF   r`   conversation_textr^   rK   rc   r"   skill_templaterA   rB   rC   rD   rj   s                @r   analyze_skillszGroqService.analyze_skillso   sV   D	 "* G'+I)'C)!y4	?2C2%FF!G
$J
  ![!" #

#
$Y
/	0 1./0 1'/0H^4L\4Z3[ \  01F8@N*11yy(!1.(6	F {{''33:: !) $F
 !'#)	 jj ; H  %,,Q/77??EEGM ++I6$1!"$5M ))%0$1#2$6M::m4   M  7L  M  M:;'' 8<=78
  	,QC01	sC   DF$ A E( &E( (F!;FF$ F!!F$ $	G-G  GrA   c                 8   	 | j                   j                  j                  j                  dddd|dg| j                  dd      }|j
                  d   j                  j                  j                         S # t        $ r}t        d	|        Y d
}~y
d
}~ww xY 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   r4   r5   r6   r   r7   r8   r&   r9   r@   r?   )r   rA   rB   rD   s       r   get_completionzGroqService.get_completion   s    	{{''33:: !) $C
 !'#)	 jj ; H  ##A&..66<<>> 	.qc23	s   A5A8 8	BBBN)__name__
__module____qualname__r   r   strr   r   rE   r   r_   rs   ru   rg   r   r   r   r      s    ',T#s(^ ,cSVh@X ,\*PtCH~ *PTRVWZ\_W_R`Ma *Pqt *P  zB  CF  zG *PXFtCH~ F4PTUXZ]U]P^K_ Fdlmqruwzrzm{d| FPS Xc] r   r   )r   r<   typingr   r   r   r   groqr   config.promptsr   r	   r
   r   r   rg   r   r   <module>r}      s*    	  , ,  B Br   