
    kj-N              
       :   S SK Jr  S SK r S SKrS SKJr  S SKJrJrJrJ	r	J
r
  S SKJr  S SKJr  S SKJr  S SKJr  S S	KJr  S SKrS S
KJr  S SKJr  S SKJr  S SKJr  S SKrS SKrS SKrS SKrS SK r \" 5       r!S SK"J#r#J$r$J%r%J&r&J'r'J(r(  S SK)J*r*J+r+  S SK,J-r-J.r.  \!R_                  S5      S 5       r0  " S S\5      r1 " S S\5      r2S r3\!Ri                  S\1S\20S\20S.S9\	" S5      \	" S5      \	" S5      4S\5S\5S\54S  jj5       r6 \!Ri                  S!\1S\20S\20S.S9\	" S5      \	" S5      \	" S5      4S\5S\5S\54S" jj5       r7 \!Ri                  S#\1S\20S\20S.S9\	" S5      \	" S5      \	" S5      4S\5S\5S\54S$ jj5       r8 S SK9r9\!Ri                  S%5      \	" S5      \	" S5      4S\5S\54S& jj5       r: S S'K;J;r;   " S( S)\5      r<\!Ri                  S*5      \	" S5      \	" S5      \	" S5      \	" S5      4S\=S+\=S\=S,\=4S- jj5       r> S S.K?J?r?  \!Ri                  S/5      \	" S5      \	" S5      \	" S5      \	" S5      4S\=S+\=S\=S,\=4S0 jj5       r@ S S1KAJArA  \!Ri                  S25      \	" S5      \	" S5      \	" S5      \	" S5      4S\=S+\=S\=S,\=4S3 jj5       rB  S S4KCJDrD   " S5 S6\5      rE " S7 S\5      r2\!Ri                  S8\ES\20S\20S.S9\	" S5      \	" S5      4S\5S9\54S: jj5       rF S S;KGJHrHJIrIJJrJJKrKJLrL   " S< S=\5      rM " S> S?\5      rNS@ rO  \!Ri                  SA\MS\N0S\N0S.S9\	" S5      \	" S5      \	" S5      4S\5S\5S\54SB jj5       rP S SCKQJQrQ   " SD S)\5      r<\!Ri                  SE5      \	" S5      \	" S5      \	" S5      \	" S5      4S\=S+\=S\=S,\=4SF jj5       r> g)G    )NamedTemporaryFileN)List)FastAPI
UploadFileFileFormBody)JSONResponse)Document)RecursiveCharacterTextSplitter)	BaseModel)OllamaEmbeddings)AudioSegment)r   )HTTPException)BytesIO)load_pdf split_text_with_semantic_chunkercount_tokens_in_documentssave_documents_to_txtcreate_and_save_embeddingsmerge_all_faiss)load_doccount_tokens_in_doc_documents)load_pptcount_tokens_in_ppt_documentsz)/helloEdurigoAiChatAndGenQuestionsTestingc                  
    SS0$ )Nmessagez!Hello from edurigo_ai testing env r       R/var/www/eduai.edurigo.com/question_generate/testing/question_generate_fast_api.pyhellor!      s    :;;r   c                   *    \ rS rSr% \\S'   \\S'   Srg)TrainResponse&   r   token_countr   N__name__
__module____qualname____firstlineno__str__annotations__int__static_attributes__r   r   r    r#   r#   &       Lr   r#   c                        \ rS rSr% \\S'   Srg)ErrorResponse*   errorr   Nr'   r(   r)   r*   r+   r,   r.   r   r   r    r1   r1   *       Jr   r1   c                      [         R                  " SSSU /SSS9nUR                  $ ! [         R                   a  n[	        SSU 3S9eS nAff = f	Ncurlz-kz-sT)capture_outputcheck  zError fetching document: status_codedetail
subprocessrunstdoutCalledProcessErrorr   urlresultes      r    fetch_document_with_curlrH   .   s\    UtS 9$VZ[}}(( U6OPQs4STTU   %( AA		Az/train_with_document_edurigo_aimodel)r;     )response_model	responses.	client_iddocument_urlreference_idc                    [         R                  R                  U5      S   R                  5       nUS;  a
  [	        SSS9e[
        R
                  " 5       n [
        R
                  " 5       n[        U5      n[        S[
        R
                  " 5       U-
  S S35        [
        R
                  " 5       n[        R                  " S	[         R                  R                  U5      S   S
9 nUR                  U5        UR                  n	S S S 5        [        S[
        R
                  " 5       U-
  S S35        [
        R
                  " 5       n
[        W	5      n[        S[
        R
                  " 5       U
-
  S S[        U5       35        [
        R
                  " 5       n[        SS9n[        X5      n[        S[
        R
                  " 5       U-
  S S[        U5       35        [
        R
                  " 5       nSU  SU 3n[!        UU5        [        S[
        R
                  " 5       U-
  S S35        [
        R
                  " 5       n[#        XU5        [        S[
        R
                  " 5       U-
  S S35        [
        R
                  " 5       n[%        X5      n[        S[
        R
                  " 5       U-
  S S35        [
        R
                  " 5       n['        U5      n[        S[
        R
                  " 5       U-
  S S35        [        S[
        R
                  " 5       U-
  S S35        SUS.[         R                  R)                  U	5      (       a  [         R*                  " U	5        $ $ ! , (       d  f       GNh= f! [,         a  n[	        SSU 3S9eS nAff = f! [         R                  R)                  W	5      (       a  [         R*                  " U	5        f f = f)N   )z.pdf.txt.docx.doc.pptx.pptr;   zRUnsupported file type. Only .pdf, .txt, .docx, .doc, .pptx and .ppt are supported.r<   z[TIME] Download: .2fsFdeletesuffixz[TIME] Save temp file: z[TIME] Load PDF: zs | Pages: nomic-embed-textrJ   z[TIME] Split text: s | Chunks: temp/_z[TIME] Save text: z[TIME] Embeddings: z[TIME] Merge FAISS: z[TIME] Token count: z[TOTAL TIME]: z7Training and embedding creation completed successfully.r   r%   rK   Processing failed: )ospathsplitextlowerr   timerH   printtempfiler   writenamer   lenr   r   r   r   r   r   existsremove	Exception)rN   rO   rP   file_extensionstart_totalt1document_contentt2	temp_filetemp_file_patht3docst4
embeddingssplit_documentst5
output_dirt6t7merged_embeddingst8r%   rG   s                          r    process_documentr   6   s%    WW%%l3A6<<>NOO  5I  J  	J))+KA&YY[3LA!$))+"23!7q9: YY[((bgg>N>N|>\]^>_`dmOO,-&^^N a 	'		b(8'=Q?@ YY['!$))+"23!7{3t9+NO YY[%,>?
:4L 	#DIIK"$4S#9c/FZE[\] YY[YKq7
oz:"499;#3C"8:; YY["?|L#DIIK"$4S#9;< YY[+ID$TYY[2%5c$:!<= YY[/5$TYY[2%5c$:!<=tyy{[8=Q?@Tdop 77>>.))IIn% *c a`Z  O6I!4MNNO 77>>.))IIn% *s>   BM8 'M&H%M8 &
M50M8 8
NNNN =Oz/train_with_doc_edurigo_aic                    [         R                  R                  U5      S   R                  5       nUS;  a
  [	        SSS9e[
        R
                  " 5       nSn [
        R
                  " 5       n[        U5      n[        S[
        R
                  " 5       U-
  S S	35        [
        R
                  " 5       n[        R                  " S
US9 n	U	R                  U5        U	R                  nSSS5        [        S[
        R
                  " 5       U-
  S S	35        [
        R
                  " 5       n
[        U5      n[        S[
        R
                  " 5       U
-
  S S[        U5       35        U(       d
  [	        SSS9e[
        R
                  " 5       n[        SS9n[        X5      n[        S[
        R
                  " 5       U-
  S S[        U5       35        [
        R
                  " 5       nSU  SU 3n[!        UU5        [        S[
        R
                  " 5       U-
  S S	35        [
        R
                  " 5       n[#        XU5        [        S[
        R
                  " 5       U-
  S S	35        [
        R
                  " 5       n[%        X5        [        S[
        R
                  " 5       U-
  S S	35        [
        R
                  " 5       n['        U5      n[        S[
        R
                  " 5       U-
  S S	35        [        S[
        R
                  " 5       U-
  S S	35        SUS.U(       a<  [         R                  R)                  U5      (       a  [         R*                  " U5        $ $ $ ! , (       d  f       GN= f! [         a    e [,         a  n[	        SSU 3S9eSnAff = f! U(       a<  [         R                  R)                  U5      (       a  [         R*                  " U5        f f f = f)z.Train embeddings from DOC/DOCX document files.rR   )rU   rT   r;   z9Unsupported file type. Only .doc and .docx are supported.r<   Nz[DOC] [TIME] Download: rX   rY   FrZ   z[DOC] [TIME] Save temp file: z[DOC] [TIME] Load document: s | Documents: z5No text content could be extracted from the document.r]   r^   z[DOC] [TIME] Split text: r_   r`   ra   z[DOC] [TIME] Save text: z[DOC] [TIME] Embeddings: z[DOC] [TIME] Merge FAISS: z[DOC] [TIME] Token count: z[DOC] [TOTAL TIME]: z@DOC/DOCX training and embedding creation completed successfully.rb   rK   rc   )rd   re   rf   rg   r   rh   rH   ri   rj   r   rk   rl   r   rm   r   r   r   r   r   r   rn   ro   rp   rN   rO   rP   rq   rr   rw   rs   rt   ru   rv   rx   ry   rz   r{   r|   r}   r~   r   r   r   r%   rG   s                         r    process_document_docr      s0    WW%%l3A6<<>N..4opp))+KN:&YY[3LA'		b(8'=Q?@ YY[((nMQZOO,-&^^N N 	-diikB.>s-C1EF YY[',TYY[2-=c,B/RUVZR[Q\]^C8opp YY[%,>?
:4L)$))+*:3)?|CP_L`Kabc YY[YKq7
oz:(r)9#(>a@A YY["?|L)$))+*:3)?qAB YY[	0*499;+;C*@BC YY[3D9*499;+;C*@BC$TYY[;%>s$C1EF]nyz bggnn^<<IIn% =>c NMX   O6I!4MNNO bggnn^<<IIn% =>?   A0M3 	M!'H6M3 !
M0+M3 3NNNN AO!z/train_with_ppt_edurigo_aic                    [         R                  R                  U5      S   R                  5       nUS;  a
  [	        SSS9e[
        R
                  " 5       nSn [
        R
                  " 5       n[        U5      n[        S[
        R
                  " 5       U-
  S S	35        [
        R
                  " 5       n[        R                  " S
US9 n	U	R                  U5        U	R                  nSSS5        [        S[
        R
                  " 5       U-
  S S	35        [
        R
                  " 5       n
[        U5      n[        S[
        R
                  " 5       U
-
  S S[        U5       35        U(       d
  [	        SSS9e[
        R
                  " 5       n[        SS9n[        X5      n[        S[
        R
                  " 5       U-
  S S[        U5       35        [
        R
                  " 5       nSU  SU 3n[!        UU5        [        S[
        R
                  " 5       U-
  S S	35        [
        R
                  " 5       n[#        XU5        [        S[
        R
                  " 5       U-
  S S	35        [
        R
                  " 5       n[%        X5        [        S[
        R
                  " 5       U-
  S S	35        [
        R
                  " 5       n['        U5      n[        S[
        R
                  " 5       U-
  S S	35        [        S[
        R
                  " 5       U-
  S S	35        SUS.U(       a<  [         R                  R)                  U5      (       a  [         R*                  " U5        $ $ $ ! , (       d  f       GN= f! [         a    e [,         a  n[	        SSU 3S9eSnAff = f! U(       a<  [         R                  R)                  U5      (       a  [         R*                  " U5        f f f = f)z2Train embeddings from PPT/PPTX presentation files.rR   )rW   rV   r;   z9Unsupported file type. Only .ppt and .pptx are supported.r<   Nz[PPT] [TIME] Download: rX   rY   FrZ   z[PPT] [TIME] Save temp file: z [PPT] [TIME] Load presentation: r   z9No text content could be extracted from the presentation.r]   r^   z[PPT] [TIME] Split text: r_   r`   ra   z[PPT] [TIME] Save text: z[PPT] [TIME] Embeddings: z[PPT] [TIME] Merge FAISS: z[PPT] [TIME] Token count: z[PPT] [TOTAL TIME]: z@PPT/PPTX training and embedding creation completed successfully.rb   rK   rc   )rd   re   rf   rg   r   rh   rH   ri   rj   r   rk   rl   r   rm   r   r   r   r   r   r   rn   ro   rp   r   s                         r    process_document_pptr      s0    WW%%l3A6<<>N..4opp))+KN:&YY[3LA'		b(8'=Q?@ YY[((nMQZOO,-&^^N N 	-diikB.>s-C1EF YY['0r1A#0FoVYZ^V_U`abC8stt YY[%,>?
:4L)$))+*:3)?|CP_L`Kabc YY[YKq7
oz:(r)9#(>a@A YY["?|L)$))+*:3)?qAB YY[	0*499;+;C*@BC YY[3D9*499;+;C*@BC$TYY[;%>s$C1EF]nyz bggnn^<<IIn% =>c NMX   O6I!4MNNO bggnn^<<IIn% =>r   z/untrain_document_edurigo_aic                   #     SU 3n[         R                  R                  X 5      n[         R                  R                  U5      (       aU  [         R                  R	                  U5      (       a  [         R
                  " U5        O[        R                  " U5        SS0$ [        SSS9e! [         a  n[        S[        U5      S9eS nAff = f7f)Nzmy_embeddings/r   zDocument untrained successfullyi  zDocument not foundr<   rK   )rd   re   joinrn   isfilero   shutilrmtreer   rp   r+   )rP   rN   
local_path	file_pathrG   s        r    delete_documentr     s     <%i[1
GGLL:	77>>)$$ww~~i((		)$i(@AAC8LMM <CF;;<s/   CBB+  C!
B+ +
C5CCCgenerate_mcqc                   >    \ rS rSr% \\S'   \\S'   \\S'   \\S'   Srg)GenerateMCQRequesti/  rN   num_questionsrP   isGPUr   Nr'   r(   r)   r*   r-   r,   r.   r   r   r    r   r   /      N
Ir   r   z/generate_mcqr   r   c                 B   #    [        XX#5      I S h  vN u  pEXTS.$  N
7f)Nhistory_countmcqsr   rN   r   rP   r   r   r   s         r    generate_mcq_endpointr   5  s&      ,Y| [[D*99 \   generate_mcq_docz/generate_mcq_docc                 B   #    [        XX#5      I Sh  vN u  pEXTS.$  N
7f)z8Generate MCQs from trained DOC/DOCX document embeddings.Nr   r   r   s         r    generate_mcq_doc_endpointr   ?  (      !1< __D*99 `r   generate_mcq_pptz/generate_mcq_pptc                 B   #    [        XX#5      I Sh  vN u  pEXTS.$  N
7f)z<Generate MCQs from trained PPT/PPTX presentation embeddings.Nr   r   r   s         r    generate_mcq_ppt_endpointr   J  r   r   )answer_questionc                   D    \ rS rSr% \\S'   \\S'   \\S'   \\   \S'   Sr	g)ChatResponseid  answerprocessing_timetotal_tokenssource_documentsr   N)
r'   r(   r)   r*   r+   r,   floatr-   r   r.   r   r   r    r   r   d  s    K3ir   r   c                        \ rS rSr% \\S'   Srg)r1   ij  r3   r   Nr4   r   r   r    r1   r1   j  r5   r   z/chat_with_edurigo_aiquestionc                    #     [        [        U 5      U5      u  p#pE[        UUUUS9$ ! [         a  n[	        S[        U5      S9eS nAf[         a  n[	        SS[        U5       3S9eS nAff = f7f)N)r   r   r   r   r;   r<   rK   zAn error occurred: )r   r-   r   FileNotFoundErrorr   r+   rp   )rN   r   r   source_reference_idsr   r   rG   s          r    chat_with_documentr   m  s     TFUVYZcVdfnFoCl+%1	
 	
  <CF;; T6I#a&4RSSTs0   A0#( A0
A-AA-A((A--A0)convert_video_to_audioaudio_to_textload_and_split_document1save_faiss_indexcount_tokens_videoc                   *    \ rS rSr% \\S'   \\S'   Srg)TrainResponse1i  r   r%   r   Nr&   r   r   r    r   r     r/   r   r   c                        \ rS rSr% \\S'   Srg)ErrorResponse1i  r3   r   Nr4   r   r   r    r   r     r5   r   r   c                      [         R                  " SSSU /SSS9nUR                  $ ! [         R                   a  n[	        SSU 3S9eS nAff = fr7   r?   rD   s      r    fetch_document_with_curl1r     s\    UtS 9$VZ[}}(( U6OPQs4STTUrI   z/train_with_video_edurigo_aic                 f  #    [         R                  R                  U5      S   R                  5       nUS;  a
  [	        SSS9eSU 3n SU S3nU S	3nS
U  SU 3n[        U5      n[        US5       n	U	R                  U5        S S S 5        Sn
U
S:  a
  [	        SSS9e[        XE5        [        XV5      n[        U5      nU(       d
  [	        SSS9e[        U5      nS
U  SU 3n[         R                  " USS9  [        X5        SUS.[         R                  R                  U5      (       a  [         R                  " U5        [         R                  R                  U5      (       a  [         R                  " U5        $ $ ! , (       d  f       N= f! [          a  n[	        SS[#        U5       3S9eS nAff = f! [         R                  R                  U5      (       a  [         R                  " U5        [         R                  R                  W5      (       a  [         R                  " U5        f f = f7f)NrR   )z.mp4r;   z+Unsupported file type. Only .mp4 supported.r<   temp_documentz
mp3-files/z.mp3rS   zmy_embeddings_video//wb      zVideo file too large.zNo valid documents to process.T)exist_okSuccessrb   rK   rc   )rd   re   rf   rg   r   r   openrk   r   r   r   r   makedirsr   rn   ro   rp   r+   )rN   rO   rP   rq   rw   mp3_output_pathoutput_filefaiss_save_pathrt   rv   video_durationtextfinal_documentsr%   folder_pathrG   s                   r    process_document_videor     s    WW%%l3A6<<>NX%4abb$^$45N)'&|nD9%d+01\NK 5\B.$'9OO,- ( BC8OPP~?_: 3;?C8XYY(9 -YKqG
K$/:$[A 77>>.))IIn%77>>/**IIo& +C ('8  T6I#a&4RSST 77>>.))IIn%77>>/**IIo& +sQ   AH1	*F 3E>BF A6H1>
FF 
F4F//F44F7 7A7H..H1generate_mcq_videoc                   >    \ rS rSr% \\S'   \\S'   \\S'   \\S'   Srg)r   i  rN   r   rP   r   r   Nr   r   r   r    r   r     r   r   z/generate_mcq_videoc                 F   #    [        XX#5      I S h  vN u  pEnXTUS.$  N7f)N)r   r   r%   r   )rN   r   rP   r   r   r   r%   s          r    r   r     s+     -?	Zf-n'n$D*UU (os   !!)Rrj   r   	tracebacktypingr   fastapir   r   r   r   r	   fastapi.responsesr
   langchain_core.documentsr   langchain_text_splittersr   pydanticr   langchain_ollamar   uvicornpydubr   fastapi.datastructuresr   ior   r@   rd   asynciorequestsrh   apptrainingr   r   r   r   r   r   training_docr   r   training_pptr   r   getr!   r#   r1   rH   postr+   r   r   r   r   r   r   r   r-   r   r   r   r   r   chattingr   r   r   training_videor   r   r   r   r   r   r   r   r   r   r   r   r    <module>r      s   '    9 9 * - C  -   - !   	   i _  _ @ @ 	45< 6< <I I U 
+M\cer[s  |C  ER  {S  VT  U&*3iT#Ydhildm I& I&s I&^a I& UI&X @
&}W^`mVnv}  @M  vN  QO  P*.s)chlmphq C&C C&3 C&be C& PC&L D
&}W^`mVnv}  @M  vN  QO  P*.s)chlmphq C&C C&3 C&be C& PC&L  
().23i$s) < <C < *<   %  /15cQUVYQZptuxpy  IM  NQ  IR :3 :3 :jm :  CF : :
 . -
59#YUYZ]U^txy|t}  MQ  RU  MV :s :s :nq :  GJ : : 2 -
59#YUYZ]U^txy|t}  MQ  RU  MV :s :s :nq :  GJ : :   $ 9  I  
!,QXZgPhpw  zG  pH  KI  J.23ic T T3 T JT   ~ ~Y Y U[G 
(ZacqYr  {B  DR  zS  TT  U26s)QUVYQZptuxpy 0'C 0'3 0'jm 0' U0'f # 1  
 15cQUVYQZptuxpy  IM  NQ  IR V3 V3 Vjm V  CF V !V ;Mr   