Ë
    a{j�  ã                   óH  — d Z ddlmZmZ ddlmZ ddlmZmZ ddl	m
Z ddlmZ ddlmZmZmZmZmZmZmZ  e«       Zd„ Zej1                  d	«       ee«      fd
efd„«       Zej1                  d«       ee«      fd
efd„«       Zej1                  d«       ee«      fd
efd„«       Zej;                  d«       ee«      fded
efd„«       Zej;                  d«       ee«      fded
efd„«       Zej;                  d«       ee«      fded
efd„«       Z ej;                  d«       ee«      fded
efd„«       Z!ej;                  d«       ee«      fded
efd„«       Z"ej;                  d«       ee«      fded
efd„«       Z#ej;                  d«       ee«      fded
efd„«       Z$y) zÏ
AI Language Intelligence routes (OpenAI-backed).

All endpoints require auth. When OpenAI is not configured, endpoints return a
clear 503 (except /languages, /status, and /detect which degrade gracefully).
é    )Ú	APIRouterÚDepends)Úrequire_auth)ÚokÚerr)Úopenai_service)Úcfg)ÚAIScriptRequestÚAIRewriteRequestÚAITranslateRequestÚAISummarizeRequestÚAIPersonalizeRequestÚAIDetectRequestÚAIConverseRequestc                  óD   — t        j                  «       st        dd«      S y )NzTOpenAI is not configured. Add OPENAI_API_KEY to backend/.env and restart the server.i÷  )ÚaiÚ
is_enabledr   © ó    úe/Users/priyanka/Documents/AI_Agent_Assessment/ai-video-generator-gols-v2-new/backend/app/routes/ai.pyÚ_guardr      s#   € Ü�=‰=Œ?Üð -Ø.1ó3ð 	3àr   z/statusÚ_c              ƒ   óª   K  — t        t        j                  «       t        j                  t        j
                  t        j                  «       dœ«      S ­w)N)ÚenabledÚ
text_modelÚ	tts_modelÚcache)r   r   r   r	   ÚOPENAI_TEXT_MODELÚOPENAI_TTS_MODELÚcache_stats)r   s    r   Ústatusr!      s=   è ø€ äÜ—=‘=“?Ü×+Ñ+Ü×)Ñ)Ü—‘Ó!ñ	ó ð ùs   ‚AAz
/languagesc           	   ƒ   ó�   K  — t        t        j                  j                  «       D ��cg c]
  \  }}||dœ‘Œ c}}«      S c c}}w ­w)N)ÚcodeÚname)r   r   ÚSUPPORTED_LANGUAGESÚitems)r   ÚcÚns      r   Ú	languagesr)   %   s=   è ø€ ä´"×2HÑ2H×2NÑ2NÔ2PÔQÑ2P©$¨!¨Q˜ 1Ó%Ð2PÒQÓRÐRùÓQùs   ‚'A©A 
¸Az/enginesc              ƒ   ób  ‡K  — ddl Šddlm} ˆfd„}t        dt	        j
                  «       i|j                  «        |t        j                  «      t        j                  dœ |t        j                  «      ddœd	 |t        j                  «      id	 |t        j                  «      id
œ«      S ­w)zHLive diagnostic of every avatar engine so issues are visible in the app.r   N)Údid_servicec                 óT   •— t        | xr ‰j                  j                  | «      «      S )N)ÚboolÚpathÚisdir)ÚpÚoss    €r   Úpresentzengines.<locals>.present/   s    ø€ Ü�AÒ*˜"Ÿ'™'Ÿ-™-¨Ó*Ó+Ð+r   r   )Ú	installedr.   zrequires NVIDIA GPU)r3   Únoter3   )Ú
openai_ttsÚdidÚwav2lipÚmusetalkÚ
codeformerÚliveportrait)r1   Úapp.servicesr+   r   r   r   Úcheckr	   ÚWAV2LIP_PATHÚMUSETALK_PATHÚCODEFORMER_PATHÚLIVEPORTRAIT_PATH)r   r+   r2   r1   s      @r   ÚenginesrA   *   s˜   øè ø€ ó Ý(ô,äØ ¤"§-¡-£/Ð2Ø!×'Ñ'Ó)Ù$+¬C×,<Ñ,<Ó$=Ü"×/Ñ/ñ1á$+¬C×,=Ñ,=Ó$>Ø4ñ6à"¡G¬C×,?Ñ,?Ó$@ÐAØ$¡g¬c×.CÑ.CÓ&DÐEñ	ó 	ð 	ùs   ƒB,B/z/generate-scriptÚbodyc              ƒ   ó\  K  — t        «       }|r|S 	 t        j                  | j                  | j                  | j
                  | j                  | j                  | j                  ¬«      }t        d|id«      S # t        j                  $ r}t        t        |«      d«      cY d }~S d }~ww xY w­w)N)Úcontent_typeÚlanguageÚtoneÚlengthÚemotionÚscriptzScript generatedéö  )r   r   Úgenerate_scriptÚpromptrD   rE   rF   rG   rH   r   ÚOpenAIServiceErrorr   Ústr©rB   r   ÚgÚtextÚes        r   rK   rK   =   s�   è ø€ ä‹€AÙØˆð Ü×!Ñ!Ø�K‰K d×&7Ñ&7À$Ç-Á-Ø—‘ 4§;¡;¸¿¹ô
ˆô �8˜TÐ"Ð$6Ó7Ð7øÜ× Ñ ò  Ü”3�q“6˜3ÓÕûð üs5   ‚B,’A$A7 Á6B,Á7B)Â
B$ÂB)ÂB,Â$B)Â)B,z/rewritec              ƒ   ó   K  — t        «       }|r|S 	 | j                  r7t        j                  | j                  | j                  | j
                  ¬«      }n6t        j                  | j                  | j
                  | j                  ¬«      }t        d|id«      S # t        j                  $ r}t        t        |«      d«      cY d }~S d }~ww xY w­w)N©rE   )rE   rF   rI   zScript rewrittenrJ   )r   Úinstructionr   Úrewrite_scriptrI   rE   Úimprove_scriptrF   r   rM   r   rN   rO   s        r   ÚrewriterX   L   sž   è ø€ ä‹€AÙØˆð Ø×ÒÜ×$Ñ$ T§[¡[°$×2BÑ2BÈTÏ]É]Ô[‰Dä×$Ñ$ T§[¡[¸4¿=¹=ÈtÏyÉyÔYˆDÜ�8˜TÐ"Ð$6Ó7Ð7øÜ× Ñ ò  Ü”3�q“6˜3ÓÕûð üs5   ‚C’BB ÂCÂCÂ,CÃ CÃCÃCÃCz
/translatec              ƒ   ó  K  — t        «       }|r|S 	 t        j                  | j                  | j                  «      }t        || j                  dœd«      S # t        j                  $ r}t        t        |«      d«      cY d }~S d }~ww xY w­w)N)rI   rE   Ú
TranslatedrJ   )	r   r   Útranslate_scriptrI   Útarget_languager   rM   r   rN   rO   s        r   Ú	translater]   [   st   è ø€ ä‹€AÙØˆð Ü×"Ñ" 4§;¡;°×0DÑ0DÓEˆÜ˜T¨t×/CÑ/CÑDÀlÓSÐSøÜ× Ñ ò  Ü”3�q“6˜3ÓÕûð üs5   ‚B
’AA ÁB
ÁBÁ(BÁ<BÁ=B
ÂBÂB
z
/summarizec              ƒ   ó  K  — t        «       }|r|S 	 t        j                  | j                  | j                  ¬«      }t        d|id«      S # t        j                  $ r}t        t        |«      d«      cY d }~S d }~ww xY w­w)NrT   rI   Ú
SummarizedrJ   )	r   r   Úsummarize_scriptrI   rE   r   rM   r   rN   rO   s        r   Ú	summarizera   g   sl   è ø€ ä‹€AÙØˆð Ü×"Ñ" 4§;¡;¸¿¹ÔGˆÜ�8˜TÐ" LÓ1Ð1øÜ× Ñ ò  Ü”3�q“6˜3ÓÕûð üs4   ‚B ’8A Á
B ÁA=ÁA8Á2A=Á3B Á8A=Á=B z/personalizec              ƒ   ó  K  — t        «       }|r|S 	 t        j                  | j                  | j                  | j
                  ¬«      }t        d|id«      S # t        j                  $ r}t        t        |«      d«      cY d }~S d }~ww xY w­w)NrT   rI   ÚPersonalizedrJ   )
r   r   Úpersonalize_scriptrI   ÚaudiencerE   r   rM   r   rN   rO   s        r   Úpersonalizerf   s   sr   è ø€ ä‹€AÙØˆð Ü×$Ñ$ T§[¡[°$·-±-È$Ï-É-ÔXˆÜ�8˜TÐ" NÓ3Ð3øÜ× Ñ ò  Ü”3�q“6˜3ÓÕûð üs5   ‚B’AA ÁBÁBÁ)BÁ=BÁ>BÂBÂBz/detect-languagec              ƒ   óŠ   K  — t        j                  | j                  «      }t        |t        j                  |«      dœ«      S ­w)N)rE   r$   )r   Údetect_languagerQ   r   Ú	lang_name)rB   r   r#   s      r   rh   rh      s5   è ø€ ô ×Ñ˜dŸi™iÓ(€DÜ˜4¬¯©°dÓ);Ñ<Ó=Ð=ùs   ‚AAz	/conversec              ƒ   óF  K  — t        «       }|r|S 	 t        j                  | j                  D �cg c]  }|j	                  «       ‘Œ c}| j
                  ¬«      }t        d|id«      S c c}w # t        j                  $ r}t        t        |«      d«      cY d }~S d }~ww xY w­w)NrT   Úreplyr   rJ   )
r   r   ÚconverseÚmessagesÚ
model_dumprE   r   rM   r   rN   )rB   r   rP   Úmrk   rR   s         r   rl   rl   †   s…   è ø€ ä‹€AÙØˆð Ü—‘°T·]²]ÓC±]°˜QŸ\™\�^°]ÑCÈdÏmÉmÔ\ˆÜ�7˜EÐ" DÓ)Ð)ùò Døä× Ñ ò  Ü”3�q“6˜3ÓÕûð üsE   ‚B!’A, ¯A'Á A, Á&B!Á'A, Á,BÁ?BÂBÂB!ÂBÂB!N)%Ú__doc__Úfastapir   r   Úapp.middleware.authr   Úapp.utils.responser   r   r;   r   r   Ú
app.configr	   Úapp.schemas.schemasr
   r   r   r   r   r   r   Úrouterr   ÚgetrN   r!   r)   rA   ÚpostrK   rX   r]   ra   rf   rh   rl   r   r   r   Ú<module>ry      s+  ðñ÷ 'Ý ,ß &Ý -Ý ÷÷ ñ ñ
 
‹€òð ‡�ˆIÓÙ! ,Ó/ñ �Cò ó ðð ‡�ˆLÓÙ$ \Ó2ñ S�sò Só ðSð ‡�ˆJÓÙ" <Ó0ñ �Sò ó ðð$ ‡�ÐÓ Ù:AÀ,Ó:Oñ   ð  °Cò  ó !ð ð ‡�ˆZÓÙ3:¸<Ó3Hñ  Ð(ð  ¨Sò  ó ð ð ‡�ˆ\ÓÙ7>¸|Ó7Lñ  Ð,ð  °ò  ó ð ð ‡�ˆ\ÓÙ7>¸|Ó7Lñ  Ð,ð  °ò  ó ð ð ‡�ˆ^ÓÙ;BÀ<Ó;Pñ  Ð0ð  °Sò  ó ð ð ‡�ÐÓ Ù:AÀ,Ó:Oñ > ð >°Cò >ó !ð>ð ‡�ˆ[ÓÙ5<¸\Ó5Jñ  Ð*ð  ¨sò  ó ñ r   