
    H*jy-                        S SK JrJrJr  S SKJrJr  S SKrS SK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JrJr  S SKrS SKr\" 5       rS SKrS SKrS rS	 r\R;                  S
5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      4	S\S\S\S\S\S\S\S\S\S\4S jj5       r S SK!J"r"  \R;                  S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      4S\S\S\S\S\S\S\S\S\4S jj5       r!\R;                  S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      4S\S\S\S\S\S\S\S\4S jj5       r#\R;                  S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      4	S\S\S\S\S\S\S\S\S\4S jj5       r$g)    )FastAPIFormHTTPException)JSONResponseStreamingResponseN)generate_slide_content_document)generate_slide_content_youtube)generate_slide_content_html)OptionalCallablec                     [         R                  " U SSS9nUR                  S:X  a  UR                  $ [	        SSUR                   3S9e)NF<   )verifytimeout   i  zDocument not found, status: status_codedetail)requestsgetr   contentr   )urlresponses     J/var/www/eduai.edurigo.com/storigo/production/storigo_creation_fast_api.pyfetch_document_with_curlr      sK    ||Cr:Hs"6RS[SgSgRh4ijj    c           
        #     [        X5        [        U5      n[        XX#XEXg5      I S h  vN n	[        SU S35        U	R	                  5       n
[        U
S9$  N,! [         aX  n[        R                  " S[        U5       35        [        S[        U5       3[        R                  " 5       S.SS9s S nA$ S nAff = f7f)	NzSlide content generated for z slides.r   Error generating content: Error: errordetails  r   r   )create_and_save_embeddingsmerge_all_faissgenerate_slide_contentprintdictr   	Exceptionloggingr"   str	traceback
format_exc)split_documents	client_id
num_slidesnum_mcqsis_imageis_questionquestion_positionisGPUmerge_embeddingsslide_contentresponse_dataes               r   process_and_generate_responser<      s     
"?>*95 55ER\go  ~O  V  V,ZLAB &**,M22 V  
23q6(;<  'Ax0Y=Q=Q=ST
 	

sE   B?'A A+A B?A 
B<$AB71B<2B?7B<<B?z/generate-storigo-content.r1   r2   document_urlr4   document_typer5   r3   r6   r7   returnc	           
      :  #     US:X  a  [        SU 35        [        U5      n	[        S[        U	5       S35        [        R                  " SSS9 n
U
R                  U	5        U
R                  n[        SU 35        S S S 5         [        WXXcXWU5      I S h  vN nUR                  5       n[        S	[        UR                  S
0 5      5       S35        [        US9[        R                  " U5        $ US:X  a=  [        SU 35        [        X XX5Xx5      I S h  vN nUR                  5       n[        US9$ US:X  a=  [        SU 35        [        X XX5Xx5      I S h  vN nUR                  5       n[        US9$ [        SSS9e! , (       d  f       GN= f N! [        R                  " W5        f = f N NX! [          aX  n["        R$                  " S['        U5       35        [        S['        U5       3[(        R*                  " 5       S.SS9s S nA$ S nAff = f7f)NpdfzFetching document from: zDocument fetched, size: z bytesF.pdfdeletesuffixzTemporary file saved at: zGenerated response data with slidesz slides/items.r   youtubezProcessing YouTube URL: htmlzFetching HTML content from: i  z@Unsupported source type. Please use 'pdf', 'html', or 'youtube'.r   r   r    r!   r$   r%   )r)   r   lentempfileNamedTemporaryFilewritenamer   r*   r   r   osremover	   r
   r   r+   r,   r"   r-   r.   r/   )r1   r2   r=   r4   r>   r5   r3   r6   r7   document_content	temp_filetemp_file_pathr9   r:   r;   s                  r   generate_storigo_contentrS   4   s3    >
E!,\N;<7E,S1A-B,C6JK ,,E&IY 01!*1.1ABC J
*&EnV_mu  BM  bg  'h  !h - 2 2 45c-:K:KHVX:Y6Z5[[ijk#M: 		.)i',\N;<"@Zdpx  HY  #a  aM)..0M66f$0?@"=lWamu  EV  #^  ^M)..0M66  C8z{{7 JI !h 		.) a ^2  
23q6(;<  'Ax0Y=Q=Q=ST
 	

s   HAF6 ,F<F6 F FAF F6 2H3%F6 F2F6 5H6%F6 F4F6 8H9
F6 
FF6 F F//F6 4F6 6
H AHHHHH)"generate_slide_content_from_promptz%/generate-storigo-content-from-promptpromptc           	      *  #     [        XXSS:H  XFU5      nUR                  5       n	[        U	S9$ ! [         aX  n
[        R
                  " S[        U
5       35        [        S[        U
5       3[        R                  " 5       S.SS9s S n
A
$ S n
A
ff = f7f)N   r   r   r    r!   r$   r%   )	rT   r*   r   r+   r,   r"   r-   r.   r/   )r1   rU   r2   r4   r5   r3   r6   r7   storigo_contentr:   r;   s              r   $generate_storigo_content_from_promptrY      s     
<VQYgh[hju  LQ  R (,,.M22  
23q6(;<  'Ax0Y=Q=Q=ST
 	

s1   B). B
BABBBBBz)/generate-storigo-content-from-prompt-ssec                    ^^^^^^^^
^#    [         R                  " 5       mS[        4U4S jjm
UUUUUU
UU4S jn[        R                  " USS9R                  5         U4S jn	[        U	" 5       SS9$ 7f)	zd
Stream progress events as Server-Sent Events (SSE).
Each message is sent as JSON in `data:` lines.
evtc                    > [        U =(       d    0 5      n U R                  S[        [        R                  " 5       S-  5      5        TR	                  U 5        g Ntsi  r*   
setdefaultinttimeputr[   qs    r   progress_cb=generate_storigo_content_from_prompt_sse.<locals>.progress_cb   s9    39"otSt!345	c
r   c                  *  >  T" SSS.5        [        T[        T5      [        T5      [        T5      S:H  TT	TTS9n T" SU R                  5       S.5        g ! [         a2  nT" S[	        U5      [
        R                  " 5       S	.5         S nAg S nAff = f)
NstatuszStarting generation...typemessagerW   )rU   r2   r3   r4   r5   r6   GPUrf   donerk   resultr"   rk   r"   r#   )rT   ra   r*   r+   r-   r.   r/   )
rX   r;   r7   r4   r5   r3   r2   rf   rU   r6   s
     r   worker8generate_storigo_content_from_prompt_sse.<locals>.worker   s    	_6NOP@z?Xh-1,'"3'	O ?3G3G3IJK 	_3q6iFZFZF\]^^	_s   AA 
B (BBTtargetdaemonc               3      >#     TR                  5       n U R                  SS5      n[        R                  " U SS9nSU S3v   SU S3v   US	;   a  g MP  7f
Nrk   progressF)ensure_asciizevent: 
zdata: z

)rn   r"   r   jsondumpsr[   evt_typepayloadre   s      r   event_stream>generate_storigo_content_from_prompt_sse.<locals>.event_stream   c     %%'Cwwvz2Hjj59GH:R((7)4((,,    AAtext/event-stream
media_typequeueQueuer*   	threadingThreadstartr   )r1   rU   r2   r4   r5   r3   r6   r7   rr   r   rf   re   s    ```````  @@r   (generate_storigo_content_from_prompt_sser      s^      #[[]A _ _" F40668 \^8KLLs   A)A4z/generate-storigo-content-ssec	           
         ^ ^^^^^^^^^^#    [         R                  " 5       mS[        4U4S jjmU UUUUUUUUU4
S jn	[        R                  " U	SS9R                  5         U4S jn
[        U
" 5       SS9$ 7f)	zS
Stream progress events for document-based generation as Server-Sent Events (SSE).
r[   c                    > [        U =(       d    0 5      n U R                  S[        [        R                  " 5       S-  5      5        TR	                  U 5        g r]   r_   rd   s    r   rf   1generate_storigo_content_sse.<locals>.progress_cb   s9    39"otSt!345	c
r   c                    >
 S n  T" SST S3S.5        TS:X  a  T" SSS.5        [        T5      n[        R                  " SSS	9 nUR                  U5        UR                  n S S S 5        [
        R                  " [        U T[        T5      [        T5      [        T	5      S
:H  T
[        T5      [        T5      TS9	5      nOTS:X  aV  [
        R                  " [        TT[        T5      [        T5      [        T	5      S
:H  T
[        T5      [        T5      TS9	5      nOjTS:X  aV  [
        R                  " [        TT[        T5      [        T5      [        T	5      S
:H  T
[        T5      [        T5      TS9	5      nO[        ST 35      eT" SUR                  5       S.5        U (       a<  [         R"                  R%                  U 5      (       a  [         R&                  " U 5        g g g ! , (       d  f       GN= f! [         a2  nT" S[        U5      [        R                  " 5       S.5         S nANS nAff = f! U (       a<  [         R"                  R%                  U 5      (       a  [         R&                  " U 5        f f f = f)Nri   z	Starting z generation...rj   rA   zFetching PDF document...FrB   rC   rW   )rf   rG   rH   zUnsupported document type: rn   ro   r"   rq   )r   rJ   rK   rL   rM   asynciorunr   ra   r	   r
   r+   r*   r-   r.   r/   rN   pathexistsrO   )rR   rP   rQ   rX   r;   r1   r>   r=   r7   r4   r5   r3   r2   rf   r6   s        r   rr   ,generate_storigo_content_sse.<locals>.worker   s   (	*	-P^6_`a%X:TUV#;L#I 00fMQZOO$45%.^^N N #*++.M"Is:HMQ&S9J5KJK/ # )+")++.L )S_c(mMQ&S9J5KJK/ # &(")++.I )S_c(mMQ&S9J5KJK/ #  "=m_ MNN?3G3G3IJK
 "''.."@"@		.) #A~A NM:  	_3q6iFZFZF\]^^	_ "''.."@"@		.) #A~sD   A G6 G$#D=G6 $
G3.G6 6
H2 (H-(H5 -H22H5 5AI:Trt   c               3      >#     TR                  5       n U R                  SS5      n[        R                  " U SS9nSU S3v   SU S3v   US	;   a  g MP  7frx   r|   r   s      r   r   2generate_storigo_content_sse.<locals>.event_stream%  r   r   r   r   r   )r1   r2   r=   r4   r>   r5   r3   r6   r7   rr   r   rf   re   s   `````````  @@r   generate_storigo_content_sser      s]      #[[]A 
** **X F40668 \^8KLLs   A+A8)%fastapir   r   r   fastapi.responsesr   r   rJ   r   !generate_storigo_content_documentr    generate_storigo_content_youtuber	   generate_storigo_content_htmlr
   r}   r   r   rb   typingr   r   rN   r   appr,   r.   r   r<   postr-   ra   rS   rY   rT   r   r    r   r   <module>r      s;   0 0 =   M K E     % 	 i  k
2 
%&#Y3iS	IS	CyI"3icI
I
I
 I
 	I

 I
 I
 I
 I
 I
 I
 'I
X T
12#Ys)3iICyI"3ic#
#
#
 #
 	#

 #
 #
 #
 #
 #
 3#
L 
56#Ys)3iICyI!#Yc3M3M3M 3M 	3M
 3M 3M 3M 3M 73Ml 
)*#Y3iS	IcCyI!#YcMMMMMM MM 	MM
 MM MM MM MM MM +MMr   