
    Bi                        d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
Z
d dlZd dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ  e            Zdae
j                            ej                  r ej        ej                  a G d de          Z G d de          Z  G d de          Z! G d de          Z" e	d          Z#e#$                    d           e%                    de           defd            Z&e%                    de"          de!fd            Z'e%                    d           ed          fdefd             Z(e)                    d!          d"             Z*e)                    d#          d$e+fd%            Z,e)                    d&          d'             Z-e)                    d(          d)             Z.dS )*    )FastAPI
UploadFileFile)	BaseModel)FileResponse)PathN)embed_queryanswer_question_with_llm)build_report_from_query)
FaissStore)render_docx)config)ingest_folder_incrementalc                   (    e Zd ZU eed<   dZeed<   dS )QuestionRequestquestion   kN)__name__
__module____qualname__str__annotations__r   int     BC:\Users\Terasoftware\OneDrive\Desktop\Graph Rag\rag_suite\push.pyr   r      s&         MMMAsKKKKKr   r   c                   .    e Zd ZU eed<   eed<   eed<   dS )AnswerResponser   answersources_usedN)r   r   r   r   r   r   r   r   r   r   r      s0         MMMKKKr   r   c                   6    e Zd ZU eed<   dZeed<   dZeed<   dS )ReportRequestqueryzreport.docxfilenamed   r   N)r   r   r   r   r   r%   r   r   r   r   r   r#   r#   "   s6         JJJ!Hc!!!AsLLLLLr   r#   c                   .    e Zd ZU eed<   eed<   eed<   dS )ReportResponsemessager%   download_urlN)r   r   r   r   r   r   r   r   r(   r(   '   s0         LLLMMMr   r(   dataT)exist_okz/ask)response_modelreqc                    t           st          | j        dd          S t          | j                  }t                               || j                  }t          | j        |          }t          | j        |t          |                    S )NVector database not loadedr   )r   r    r!   )r   )storer   r   r	   searchr   r
   len)r.   qvecresultsr    s       r   ask_questionr6   0   s     
\/
 
 
 	

 s|$$Dll435l))G%clG<<F\\   r   z/generate_reportc                 N   t           st          ddd          S t          t           | j        | j                  }t          d          }|                    dd           || j        z  }t          |t          |                     t          d	| j        d
| j                   S )Nr0   noneempty)r)   r%   r*   )r1   r$   r   outputs/reportsT)parentsr,   u!   ✅ Report generated successfullyz
/download/)
r1   r(   r   r$   r   r   mkdirr%   r   r   )r.   report_data
output_dirreport_paths       r   generate_reportr@   C   s     
0 
 
 
 	

 *i
%  K
 '((JTD111s|+KS--...30#,00   r   z/upload.filec                 6   t           | j        z  }t          |d          5 }t          j        | j        |           d d d            n# 1 swxY w Y   t          t          t                                t          j	        t          j                  ad| j        dS )Nwbu*   ✅ File uploaded and indexed successfully)r)   r%   )
UPLOAD_DIRr%   openshutilcopyfileobjrA   r   r   r   loadr   	INDEX_DIRr1   )rA   	file_pathbuffers      r   upload_filerL   \   s    T]*I 
i		 .&49f---. . . . . . . . . . . . . . . c*oo... OF,--E @M  s   AAAz/filesc                  P    d t                                           D             } d| iS )Nc                 D    g | ]}|                                 |j        S r   )is_filename).0fs     r   
<listcomp>z'list_uploaded_files.<locals>.<listcomp>s   s'    AAAQYY[[AQVAAAr   files)rD   iterdir)rT   s    r   list_uploaded_filesrV   q   s,    AAZ//11AAAEUr   z/download/{filename}r%   c                 z    t          d          | z  }|                                sddiS t          || d          S )Nr:   errorzFile not foundzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.document)pathr%   
media_type)r   existsr   )r%   rJ   s     r   download_reportr\   w   sU    &''(2I +)**\   r   z/statusc                  T    t           rdt          t           j                  ddS dddS )NReadyzPVector database loaded. You can upload files, ask questions or generate reports.)statuschunksr)   z	Not Readyz.Vector database not loaded. Upload PDFs first.)r_   r)   )r1   r3   metar   r   r   r_   r_      sA     

%*ooi
 
 	
 "G
 
 	
r   /c                  
    ddiS )NwelcomeHellor   r   r   r   homerf      s    wr   )/fastapir   r   r   pydanticr   fastapi.responsesr   pathlibr   osrF   rag.qar	   r
   
rag.reportr   rag.vectorstorer   
rag.renderr   ragr   
rag.ingestr   appr1   rY   r[   rI   rH   r   r   r#   r(   rD   r<   postr6   r@   rL   getrV   r   r\   r_   rf   r   r   r   <module>ru      sU   - - - - - - - - - -       * * * * * *       				  9 8 8 8 8 8 8 8 . . . . . . & & & & & & " " " " " "       0 0 0 0 0 0gii 	7>>&"## .JOF,--E    i       Y       I   
    Y   
 T&\\
 
  $     &00o    10$ 
^<<    =<0 )#'499  j    (   
 	  	c 	 	 	 ! 	 
 
 
          r   