
    T:Bi_                        d dl mZ d dlmZ d dlmZ d dlZd dl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  ed          Z ed           dZej                            ej                  r! e
j        ej                  Z ed           n ed            G d de          Z G d de          Z G d de          Z G d de          Ze                    d          d             Z e                    d          d             Z!e"                    de          defd            Z#e"                    d e          d!efd"            Z$e                    d#          d$e%fd%            Z&dS )&    )FastAPI)FileResponse)	BaseModelN)Path)
FaissStore)embed_queryanswer_question_with_llm)build_report_from_query)render_docx)configzRAG API with Reports)titlezLoading database...u   ✅ Database loaded!u1   ❌ Database not found! Run: python -m rag.ingestc                   (    e Zd ZU eed<   dZeed<   dS )Questionquestion   kN)__name__
__module____qualname__str__annotations__r   int     AC:\Users\Terasoftware\OneDrive\Desktop\Graph Rag\rag_suite\api.pyr   r      s&         MMMAsJJJJJr   r   c                   .    e Zd ZU eed<   eed<   eed<   dS )Answerr   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&   /c                      ddddddddS )	zHomepage - Shows API infou   🚀 RAG API is running!zCheck if readyzAsk a questionzGenerate a reportzDownload report)zGET /statusz	POST /askzPOST /generate-reportzGET /download/{filename}z/docs)r'   	endpointsdocsr   r   r   r   homer-   4   s1     .+)%8(9	
 
 	 	 	r   z/statusc                  T    t           rdt          t           j                  ddS dddS )zCheck if database is loadedu	   ✅ ReadyzYou can ask questions!)statuschunksr'   u   ❌ Not ReadyzRun: python -m rag.ingest)r/   r'   )storelenmetar   r   r   r/   r/   B   sC      

!%*oo/
 
 	
 &2
 
 	
r   z/ask)response_modelqc                    t           s| j        dddS 	 t          | j                  }t                               || j                  }t          | j        |          }t          | j        |t          |                    S # t          $ r1}t          | j        dt          |           d          cY d}~S d}~ww xY w)z
    Ask a question about your documents.
    
    Example:
    {
      "question": "Who are the directors?",
      "k": 5
    }
    z5Error: Database not loaded. Run: python -m rag.ingestr   )r   r   r   r   Error: N)
r1   r   r   searchr   r	   r   r2   	Exceptionr   )r5   qvecresultsr   es        r   ask_questionr>   Q   s      

M
 
 	

1:&&,,tqs,++)!*g>>ZW
 
 
 	

  
 
 
Z%SVV%%
 
 
 	
 	
 	
 	
 	
 	

s   A-B 
B=&B82B=8B=z/generate-reportreqc                    t           st          ddd          S 	 t          d| j                    t	          t           | j        | j                  }t          d          }|                    dd           || j        z  }t          |t          |                    }t          d	| j        d
| j                   S # t          $ r,}t          dt          |           dd          cY d}~S d}~ww xY w)z
    Generate a comprehensive report.
    
    Example:
    {
      "query": "Comprehensive analysis of all companies",
      "filename": "my_report.docx",
      "k": 100
    }
    zError: Database not loaded )r'   r#   r(   zGenerating report: r7   outputs/reportsT)parentsexist_oku"   ✅ Report generated successfully!z
/download/r8   N)r1   r&   printr"   r
   r   r   mkdirr#   r   r   r:   )r?   
report_obj
output_dirreport_path
final_pathr=   s         r   generate_reportrK   u   sB     
0
 
 
 	

/CI//000,UCIGGG
 +,,
555 3</ S-=-=>>
8\4cl44
 
 
 	

  
 
 
&c!ff&&
 
 
 	
 	
 	
 	
 	
 	

s   B#B? ?
C5	!C0*C50C5z/download/{filename}r#   c                     t          d          | z  }|                                sdd|  diS t          t          |          | d          S )zU
    Download a generated report.
    
    Example: GET /download/my_report.docx
    rB   errorzFile 'z' not foundzGapplication/vnd.openxmlformats-officedocument.wordprocessingml.document)pathr#   
media_type)r   existsr   r   )r#   	file_paths     r   download_filerR      sh     &''(2I 97(77788^^\   r   )'fastapir   fastapi.responsesr   pydanticr   ospathlibr   rag.vectorstorer   rag.qar   r	   
rag.reportr
   
rag.renderr   ragr   apprE   r1   rN   rP   	INDEX_DIRloadr   r   r!   r&   getr-   r/   postr>   rK   r   rR   r   r   r   <module>rb      s         * * * * * *       				       ' & & & & & 8 8 8 8 8 8 8 8 . . . . . . " " " " " "      g*+++    7>>&"## ?JOF,--E	E
 !!!!	E
=>>>
    y       Y   
    I   
    Y       
 
 
 &((!
H !
 !
 !
 )(!
F 
^<<(
 (
 (
 (
 =<(
T 	  C    !   r   